Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
LML丶 12 months ago
commit 3d80650895

@ -0,0 +1,61 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesAssemblyExtService {
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblyContext>】")
List<MesProductionAssemblyContext> getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblyContext, List<String> workOrderNoList);
@ApiOperation(value = "【排序线】获取生产工单装配件清单 【List<MesWorkOrderAssembly>】")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortCmontext, List<String> workOrderNoList);
@ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssembly>】")
List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List<Long> sourceIdList);
// @ApiOperation(value = "【排序线】获取装配件清单 【List<MesAssemblyNosortCfg>】")
// List<MesAssemblyNosortCfg> getAssemblyNosortCfgList(MesProductionAssemblyNoSortContext productionAssemblyNosortContext);
// @ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssembly>】")
// List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext);
//
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssembly>】")
// List<MesProductionAssembly> getProductionAssemblyNosortList(MesProductionAssemblyNoSortContext productionAssemblyNosortContext);
// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblySortContext>】")
// List<MesProductionAssemblySortContext> getProductionAssemblyContextSortList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssemblyNoSortContext>】")
// List<MesProductionAssemblyNoSortContext> getProductionAssemblyContextNosortList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
//
// @ApiOperation(value = "获取装配件绑定记录 【List<MesProductionAssemblyContext>】")
// List<MesProductionAssemblyContext> getProductionAssemblyContextList(List<MesWorkOrderAssembly> workOrderAssemblyList, List<MesProductionAssembly> productionAssemblyList);
// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List<MesProductionAssemblySortContext>】")
// List<MesProductionAssemblySortContext> getProductionAssemblyContextSortList(MesProductionAssemblySortContext productionAssemblySortContext);
//
// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List<MesProductionAssemblyNoSortContext>】")
// List<MesProductionAssemblyNoSortContext> getProductionAssemblyContextNosortList(MesProductionAssemblyNoSortContext productionAssemblyNosortContext);
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesProdRuleCfgExtService {
@ApiOperation(value = "【非排序线】获取产品加工规则信息")
List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleNosortCfg prodRuleNosortCfg);
@ApiOperation(value = "【排序线】获取产品加工规则信息")
List<MesProdRuleSortCfg> getProdRuleSortCfgList(MesProdRuleSortCfg prodRuleSortCfg);
}

@ -0,0 +1,157 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderContext;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* BUSI
*/
public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "发送设备质量信息")
void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext);
@ApiOperation(value = "存储展示组件MODULE_CONTENT内容")
Boolean saveModuleContentContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList);
@ApiOperation(value = "获取展示组件MODULE_CONTENT内容")
List<List<StationKvBean>> getModuleContentContext(StationRequestBean reqBean);
@ApiOperation(value = "存储上个扫描/读取信息")
Boolean saveLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList);
@ApiOperation(value = "获取上个扫描/读取信息")
List<StationKvBean> getLastScanContext(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source);
@ApiOperation(value = "发送工步内容")
void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> resultList);
@ApiOperation(value = "获取上下文加工结果")
String getProductResultContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】")
Boolean saveProductResultContext(StationRequestBean reqBean, String productResult);
@ApiOperation(value = "删除上下文加工结果")
void deleteProductResultContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文就绪信号")
String getReadySignalContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文就绪信号", notes = "写1")
Boolean saveReadySignalContext(StationRequestBean reqBean);
@ApiOperation(value = "删除上下文就绪信号")
void deleteReadySignalContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文头道模具号")
MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文头道模具号是否存在")
Boolean checkFirstMouldNoIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文头道模具号", notes = "[JSON]MesEquipVariableCollectContext::equipVariableValue")
Boolean saveFirstMouldNoContext(StationRequestBean reqBean, MesEquipVariableCollectContext firstMouldNo);
@ApiOperation(value = "删除上下文头道模具号")
void deleteFirstMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文一模多腔信息")
List<MesMouldMultiCavity> getMouldMultiCavityContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文一模多腔信息是否存在")
Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文一模多腔信息", notes = "[JSON]List<MesMouldMultiCavity>")
Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList);
@ApiOperation(value = "删除上下文一模多腔信息")
void deleteMouldMultiCavityContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean savePartDataContext(StationRequestBean reqBean, Map<String, MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void deletePartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文模具号")
MesEquipVariableCollectContext getMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文模具号是否存在")
Boolean checkMouldNoIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文模具号", notes = "[JSON]MesEquipVariableCollectContext::equipVariableValue")
Boolean saveMouldNoContext(StationRequestBean reqBean, MesEquipVariableCollectContext mouldNo);
@ApiOperation(value = "删除上下文模具号")
void deleteMouldNoContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产工单数据信息集合")
List<MesWorkOrderContext> getWorkOrderDataContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文生产工单数据信息集合是否存在")
Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文生产工单数据信息集合", notes = "[JSON]List<MesWorkOrderContext>")
Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List<MesWorkOrderContext> workOrderContextList);
@ApiOperation(value = "删除上下文生产工单数据信息集合")
void deleteWorkOrderDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产扫/读信息:主条码")
List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文扫/读信息:主条码是否存在")
Boolean checkScanProductSnIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文扫/读信息:主条码", notes = "[JSON]List<MesEquipVariableCollectContext>")
Boolean saveScanProductSnContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productSnList);
@ApiOperation(value = "删除上下文扫/读信息:装配件条码")
void deleteScanProductSnContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文生产扫/读信息:装配件条码")
List<MesEquipVariableCollectContext> getScanAssemblySnContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文扫/读信息:装配件条码是否存在")
Boolean checkScanAssemblySnIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文扫/读信息:装配件条码", notes = "[JSON]List<MesEquipVariableCollectContext>")
Boolean saveScanAssemblySnContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productSnList);
@ApiOperation(value = "删除上下文扫/读信息:装配件条码")
void deleteScanAssemblySnContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文产出条码数据信息集合")
List<MesProduceSn> getOutProduceSnDataContext(StationRequestBean reqBean);
@ApiOperation(value = "验证上下文产出条码数据信息集合是否存在")
Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文产出条码数据信息集合", notes = "[JSON]List<MesProduceSn>")
Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List<MesProduceSn> outProduceSnDataList);
@ApiOperation(value = "删除上下文产出条码数据信息集合")
void deleteOutProduceSnDataContext(StationRequestBean reqBean);
}

@ -5,7 +5,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiOperation;
@ -14,10 +13,13 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* BASE
*/
public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】")
Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
Boolean saveProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取生产过程上下文对象")
MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean);
@ -83,29 +85,4 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "验证设备数据变量信息是否为空")
MesProductionProcessContext checkIsEmptyEquipmentVariableList(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE production, List<String> categoryLevelTwoList);
@ApiOperation(value = "发送设备质量信息")
void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext);
@ApiOperation(value = "存储展示组件MODULE_CONTENT内容")
Boolean doCacheModuleContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList);
@ApiOperation(value = "获取展示组件MODULE_CONTENT内容")
List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean);
@ApiOperation(value = "存储上个扫描/读取信息")
Boolean doCacheLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList);
@ApiOperation(value = "获取上个扫描/读取信息")
List<StationKvBean> getCachedLastScanContext(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean);
@ApiOperation(value = "发送工步内容")
void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source);
@ApiOperation(value = "发送工步内容")
void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> resultList);
}

@ -110,11 +110,14 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
*
*/
MesPartInspection mesPartInspection = getMesPartInspection(res);
/**
*
*/
List<MesPartInspectionDetail> mesPartInspectionDetails = getMesPartInspectionDetail(reworkTaskDetails);
List<MesPartInspectionDetail> mesPartInspectionDetails = null;
if (!CollectionUtils.isEmpty(reworkTaskDetails)) {
/**
*
*/
mesPartInspectionDetails = getMesPartInspectionDetail(reworkTaskDetails);
}
/**
*
*/
@ -186,7 +189,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
try {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean);
DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "productSn", packBean);
MesProduceSn mesProduceSn = mesProduceSnRepository.getByProperty(packBean);
if (mesProduceSn == null) {
MesPcnException.throwFlowException("条码信息不存在");
@ -211,12 +214,12 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesProductionAssembly.setRepeatAssemblySn(requestModel.getSn());
mesProductionAssemblyRepository.update(mesProductionAssembly);
mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
mesProductionAssemblyRepository.save(mesProductionRepeatAssembly);
/**
* NC
*/
for (Long detailId : requestModel.getDetailIds()) {
reworkRecord(detailId);
for (String detailId : requestModel.getDetailIds().split(",")) {
reworkRecord(Long.valueOf(detailId));
}
} catch (Exception e) {
log.error("替换条码异常", e);
@ -230,9 +233,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean);
MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean);
if (mesPartInspection == null) {
throw new ImppBusiException("返工单信息不存在");
}
return mesPartInspection;
}
@ -280,9 +281,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_10.getValue(), "status", packBean);
List<MesReworkTaskDetail> res = mesReworkTaskDetailRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(res)) {
throw new ImppBusiException("返工单详情信息不存在");
}
return res;
}
}

@ -0,0 +1,108 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesAssemblyExtService implements IMesAssemblyExtService {
@Autowired
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
@Override
public List<MesProductionAssemblyContext> getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblySortContext, List<String> workOrderNoList) {
if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) ||
StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null;
//【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(productionAssemblySortContext, workOrderNoList);
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取装配件绑定记录
Map<Long, MesProductionAssembly> productionAssemblyMap = groupProductionAssembly(filterProductionAssemblyList(getProductionAssemblyList(
productionAssemblySortContext.dataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.SORT.getValue()), workOrderAssemblyList.stream().filter(o -> null != o).map(MesWorkOrderAssembly::getId).collect(Collectors.toList()))));
List<MesProductionAssemblyContext> productionAssemblyContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblyContextList.add(new MesProductionAssemblySortContext(o, getProductionAssembly(productionAssemblyMap, o.getId()))));
return productionAssemblyContextList;
}
@Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortContext, List<String> workOrderNoList) {
if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null;
if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) ||
StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblySortContext.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getProcessCode(), MesPcnExtConstWords.PROCESS_CODE, packBean);
if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
return workOrderAssemblyRepository.findByHqlWhere(packBean);
}
@Override
public List<MesProductionAssembly> getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List<Long> sourceIdList) {
if (null == productionAssemblyContext || CollectionUtils.isEmpty(sourceIdList)) return null;
if (StringUtils.isEmpty(productionAssemblyContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblyContext.getDataSource())) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblyContext.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.ASSEMBLY_STATUS, packBean);
DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.DATD_SOURCE, packBean);
if (sourceIdList.size() == 1) DdlPreparedPack.getNumEqualPack(sourceIdList.get(0), MesPcnExtConstWords.SOURCE_ID, packBean);
else DdlPreparedPack.getInPackList(sourceIdList, MesPcnExtConstWords.SOURCE_ID, packBean);
return productionAssemblyRepository.findByHqlWhere(packBean);
}
private List<MesProductionAssembly> filterProductionAssemblyList(List<MesProductionAssembly> productionAssemblyList) {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_PART_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList());
}
private Map<Long, MesProductionAssembly> groupProductionAssembly(List<MesProductionAssembly> productionAssemblyList) {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionAssembly::getSourceId, o -> o));
}
private MesProductionAssembly getProductionAssembly(Map<Long, MesProductionAssembly> productionAssemblyMap, Long id) {
return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id);
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
@ -23,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
@ -42,6 +42,9 @@ public class MesAssemblyReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -54,7 +57,7 @@ public class MesAssemblyReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -74,7 +77,7 @@ public class MesAssemblyReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在读取待验证的装配件条码
if (!StringUtils.isEmpty(productionProcessContext.getAssemblySnJson())) return stepResult;
if (productionDispatchContextStepService.checkScanAssemblySnIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -107,7 +110,7 @@ public class MesAssemblyReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -116,7 +119,7 @@ public class MesAssemblyReadStepService extends BaseStepService {
if (stepResult.isCompleted()) matchAssemblySnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -138,10 +141,10 @@ public class MesAssemblyReadStepService extends BaseStepService {
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//保存设备当前一轮工序待验证的装配件条码信息
productionProcessContext.assemblySnJson(equipVariableCollectContextList);
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList);
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean,
productionDispatchContextStepService.doSendStepContextMessage(reqBean,
equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
return stepResult;

@ -1,42 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesAssemblyRuleMatchStepService")
public class MesAssemblyRuleMatchStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
return stepResult;
}
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
@ -28,10 +29,13 @@ public class MesAssemblyScanStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StepResult guide(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描装配件条码!");
@ -52,9 +56,12 @@ public class MesAssemblyScanStepService extends BaseStepService {
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//保存设备当前一轮工序待验证的装配件条码信息
productionProcessContext.assemblySnJson(getAssemblySnJson(reqBean));
productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, getAssemblySnJson(reqBean));
productionDispatchContextStepService.doSendStepContextMessage(reqBean, reqBean.getScanInfo(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
productionProcessContextStepService.doSendStepContextMessage(reqBean, reqBean.getScanInfo(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
//扫描信息置空
reqBean.setScanInfo(null);
return stepResult;

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
@ -45,6 +46,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -60,7 +64,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -79,11 +83,8 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在读取待验证的装配件条码
if (!StringUtils.isEmpty(productionProcessContext.getAssemblySnJson())) return stepResult;
//当前工序已存在头道模具号跟一模多腔信息
if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && !StringUtils.isEmpty(productionProcessContext.getMouldCavityJson())) return stepResult;
if (productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean) && productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -116,7 +117,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -125,7 +126,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
if (stepResult.isCompleted()) checkFirstMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -150,7 +151,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
productionDispatchContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//验证一模多腔信息
List<MesMouldMultiCavity> mouldMultiCavityList = getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true);
@ -159,7 +160,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
Map<String, MesPart> partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
//保存设备当前一轮工序的头道模具号,一模多腔信息,零件信息
productionProcessContext.firstMouldNo(equipVariableCollectContextList.get(0)).mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap);
productionDispatchContextStepService.saveFirstMouldNoContext(reqBean, equipVariableCollectContextList.get(0));
productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList);
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
//更新展示组件MODULE_CONTENT内容
doCacheMoudleContext(reqBean, mouldMultiCavityList, true);
@ -171,7 +174,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
public List<MesMouldMultiCavity> getMouldMultiCavityList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, String equipmentCode, String mouldNo, Boolean isFirstMouldNo) {
//从上下文中取出一模多腔信息集合
List<MesMouldMultiCavity> mouldMultiCavityList = productionProcessContext.getMouldCavityList();
List<MesMouldMultiCavity> mouldMultiCavityList = productionDispatchContextStepService.getMouldMultiCavityContext(reqBean);
//验证一模多腔信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息
if (!checkCachedMouldMultiCavityValid(mouldMultiCavityList, equipmentCode, mouldNo)) mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), equipmentCode, mouldNo);
@ -190,7 +193,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
public Map<String, MesPart> getPartDataMap(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesMouldMultiCavity> mouldMultiCavityList) {
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionProcessContext.getPartDataMap();
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (mouldMultiCavityList.stream().filter(o -> (null != o)).map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
@ -213,7 +216,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
public void doCacheMoudleContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList, Boolean isFirstMouldNo) {
//存储展示组件MODULE_CONTENT内容
productionProcessContextStepService.doCacheModuleContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo));
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo));
}
//封装展示组件MODULE_CONTENT内容

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
@ -21,7 +22,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
@ -39,6 +39,9 @@ public class MesMouldNoReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -54,7 +57,7 @@ public class MesMouldNoReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -73,8 +76,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在模具号跟一模多腔信息
if (!StringUtils.isEmpty(productionProcessContext.getMouldNo()) && !StringUtils.isEmpty(productionProcessContext.getMouldCavityJson())) return stepResult;
//当前工序已存在模具号 并且 存在一模多腔信息或者生产工单数据信息
if (productionDispatchContextStepService.checkMouldNoIsExistContext(reqBean) && (productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean) || productionDispatchContextStepService.checkWorkOrderDataIsExistContext(reqBean))) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -107,7 +110,7 @@ public class MesMouldNoReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -116,10 +119,10 @@ public class MesMouldNoReadStepService extends BaseStepService {
if (stepResult.isCompleted()) checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//保存设备当前一轮工序的模具号
if (null != stepResult.getObj()) productionProcessContext.mouldNo((MesEquipVariableCollectContext) stepResult.getObj());
if (null != stepResult.getObj()) productionDispatchContextStepService.saveMouldNoContext(reqBean, (MesEquipVariableCollectContext) stepResult.getObj());
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -136,8 +139,11 @@ public class MesMouldNoReadStepService extends BaseStepService {
//读取的模具号进行规则匹配
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
Boolean firstMouldNoIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean);
Boolean workOrderDataIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean);
//没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && StringUtils.isEmpty(productionProcessContext.getWorkOrderDataJson()))))
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist)))
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
else if (CollectionUtils.isEmpty(equipVariableCollectContextList)) //非常变值 没有有效的数据 也无需再读
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode()));
@ -146,13 +152,13 @@ public class MesMouldNoReadStepService extends BaseStepService {
String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean, mouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
productionDispatchContextStepService.doSendStepContextMessage(reqBean, mouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//将模具信息放到工步结果对象的中, 工步主方法体会从里面取出
stepResult.obj(equipVariableCollectContextList.get(0));
//判断是否存在头道模具号或生产工单信息
if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) || !StringUtils.isEmpty(productionProcessContext.getWorkOrderDataJson())) return stepResult;
if (firstMouldNoIsExist || workOrderDataIsExist) return stepResult;
//磨具号当头道模具号的使用
List<MesMouldMultiCavity> mouldMultiCavityList = firstMouldNoReadStepService.getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false);
@ -161,7 +167,8 @@ public class MesMouldNoReadStepService extends BaseStepService {
Map<String, MesPart> partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList);
//保存设备当前一轮工序的一模多腔信息,零件信息
productionProcessContext.mouldCavityJson(mouldMultiCavityList).partDataJson(partDataMap);
productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList);
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
//更新展示组件MODULE_CONTENT内容
firstMouldNoReadStepService.doCacheMoudleContext(reqBean, mouldMultiCavityList, false);

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
@ -21,7 +22,6 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
@ -41,6 +41,9 @@ public class MesProductResultReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -50,7 +53,7 @@ public class MesProductResultReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -70,7 +73,7 @@ public class MesProductResultReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在加工结果
if (!StringUtils.isEmpty(productionProcessContext.getProductResult())) return stepResult;
if (!StringUtils.isEmpty(productionDispatchContextStepService.getProductResultContext(reqBean))) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -105,7 +108,7 @@ public class MesProductResultReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -114,7 +117,7 @@ public class MesProductResultReadStepService extends BaseStepService {
matchProductResult(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -136,7 +139,7 @@ public class MesProductResultReadStepService extends BaseStepService {
matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionProcessContext.productResult((String) stepResult.getObj());
if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, (String) stepResult.getObj());
return stepResult;
@ -152,7 +155,7 @@ public class MesProductResultReadStepService extends BaseStepService {
if (!(Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue;
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
productionDispatchContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//设备加工失败
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey()))

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
@ -23,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
@ -42,6 +42,9 @@ public class MesProductSnReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -54,7 +57,7 @@ public class MesProductSnReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -74,7 +77,7 @@ public class MesProductSnReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在读取待验证的主条码信息
if (!StringUtils.isEmpty(productionProcessContext.getProductSnJson())) return stepResult;
if (productionDispatchContextStepService.checkScanProductSnIsExistContext(reqBean)) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -107,7 +110,7 @@ public class MesProductSnReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -116,7 +119,7 @@ public class MesProductSnReadStepService extends BaseStepService {
if (stepResult.isCompleted()) matchProductSnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -138,10 +141,10 @@ public class MesProductSnReadStepService extends BaseStepService {
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode()));
//保存设备当前一轮工序的待验证的主条码信息
productionProcessContext.productSnJson(equipVariableCollectContextList);
productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList);
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean,
productionDispatchContextStepService.doSendStepContextMessage(reqBean,
equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
return stepResult;

@ -2,13 +2,13 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
@ -39,6 +39,9 @@ public class MesReadySignalReadStepService extends BaseStepService {
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
@ -48,7 +51,7 @@ public class MesReadySignalReadStepService extends BaseStepService {
public StepResult init(StationRequestBean reqBean) {
//发送工步内容
productionProcessContextStepService.doSendStepContextMessage(reqBean);
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
@ -68,7 +71,7 @@ public class MesReadySignalReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在就绪信号
if (!StringUtils.isEmpty(productionProcessContext.getReadySignal())) return stepResult;
if (!StringUtils.isEmpty(productionDispatchContextStepService.getReadySignalContext(reqBean))) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -101,7 +104,7 @@ public class MesReadySignalReadStepService extends BaseStepService {
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//验证设备通信质量
productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
@ -109,11 +112,11 @@ public class MesReadySignalReadStepService extends BaseStepService {
//匹配就绪信号有效性
matchReadySignal(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionProcessContext.readySignal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
//保存设备当前一轮工序的就绪信号, 写1
if (stepResult.isCompleted()) productionDispatchContextStepService.saveReadySignalContext(reqBean);
//存储生产过程上下文对象
productionProcessContextStepService.doCacheProductionProcessContext(reqBean, productionProcessContext);
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
@ -131,7 +134,7 @@ public class MesReadySignalReadStepService extends BaseStepService {
Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
//匹配成功发送工步内容
if (result) productionProcessContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
if (result) productionDispatchContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
//匹配成功
if (result) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("已读取到设备[%s]的就绪信号!", cellEquipContext.getEquipmentCode()));

@ -1,119 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("MesSendInitializationCmdStepSeryice")
public class MesSendInitializationCmdStepSeryice extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesMouldMultiCavityService mouldMultiCavityService;
@Autowired
private IPartService partService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在头道模具号跟一模多腔信息
if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && !StringUtils.isEmpty(productionProcessContext.getMouldCavityJson())) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.SEND_INIT.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]头道模具号相关变量类别的数据变量接口逻辑信息!", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息!", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//发送 todo
MesEquipmentVariableCfg mesEquipmentVariableCfg = equipmentVariableCfgList.get(0);
StringBuilder jsonSb = new StringBuilder();
for (MesEquipmentVariable mesEquipmentVariable : equipmentVariableList) {
jsonSb.append("{\n");
jsonSb.append("\"tem:ReadVariable\":{\n");
jsonSb.append("\"tem:equipmentId\":\""+mesEquipmentVariable.getEquipId()+"\",\n");
jsonSb.append("\"tem:channel\":\""+mesEquipmentVariable.getChannel()+"\",\n");
jsonSb.append("\"tem:clientHandle\":\""+mesEquipmentVariable.getClientHandle()+"\",\n");
jsonSb.append("\"tem:v\":\""+mesEquipmentVariableCfg.getValue()+"\"\n");
jsonSb.append("}\n");
String json = jsonSb.append("}\n").toString();
//发送
}
return stepResult;
}
}

@ -1,126 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import javassist.tools.web.Webserver;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("MesSendProcessCmdStepService")
public class MesSendProcessCmdStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesMouldMultiCavityService mouldMultiCavityService;
@Autowired
private IPartService partService;
@Override
public StepResult init(StationRequestBean reqBean) {
productionProcessContextStepService.doSendStepContextMessage(reqBean);
return super.init(reqBean);
}
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
//当前工序已存在头道模具号跟一模多腔信息
if (!StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && !StringUtils.isEmpty(productionProcessContext.getMouldCavityJson())) return stepResult;
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.SEND_PROCESS.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]允许加工指令工步 相关变量类别的数据变量接口逻辑信息!", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息!", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//发送 todo
MesEquipmentVariableCfg mesEquipmentVariableCfg = equipmentVariableCfgList.get(0);
StringBuilder jsonSb = new StringBuilder();
for (MesEquipmentVariable mesEquipmentVariable : equipmentVariableList) {
jsonSb.append("{\n");
jsonSb.append("\"tem:ReadVariable\":{\n");
jsonSb.append("\"tem:equipmentId\":\""+mesEquipmentVariable.getEquipId()+"\",\n");
jsonSb.append("\"tem:channel\":\""+mesEquipmentVariable.getChannel()+"\",\n");
jsonSb.append("\"tem:clientHandle\":\""+mesEquipmentVariable.getClientHandle()+"\",\n");
jsonSb.append("\"tem:v\":\""+mesEquipmentVariableCfg.getValue()+"\"\n");
jsonSb.append("}\n");
String json = jsonSb.append("}\n").toString();
//发送
}
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
return stepResult;
}
}

@ -0,0 +1,354 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description : BUSI
* @Author : wangjie
**/
@Slf4j
@Service("mesProductionDispatchContextStepService")
public class MesProductionDispatchContextStepService extends BaseStepService implements IMesProductionDispatchContextStepService {
private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); }
//发送设备质量信息
@Override
public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality()));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue());
this.sendMessage(reqBean, resultBean);
}
//存储展示组件MODULE_CONTENT内容
@Override
public Boolean saveModuleContentContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MODULE_CONTENT_CONTEXT, JSONObject.toJSONString(dataList));
}
@Override
public List<List<StationKvBean>> getModuleContentContext(StationRequestBean reqBean) {
String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MODULE_CONTENT_CONTEXT);
return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference<List<List<StationKvBean>>>() {});
}
//存储上个扫描/读取信息
@Override
public Boolean saveLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO_CONTEXT, JSONObject.toJSONString(dataList));
}
//获取上个扫描/读取信息
@Override
public List<StationKvBean> getLastScanContext(StationRequestBean reqBean) {
String lastScanContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO_CONTEXT);
return StringUtils.isEmpty(lastScanContent) ? new ArrayList<>() : JSONObject.parseArray(lastScanContent, StationKvBean.class);
}
//发送工步内容
@Override
public void doSendStepContextMessage(StationRequestBean reqBean) {
sendStepContextMessage(reqBean, getLastScanContext(reqBean));
}
//发送工步内容
@Override
public void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source) {
List<StationKvBean> lastScanContext = getLastScanContext(reqBean);
lastScanContext = StationKvBeanUtil.addStationKvBeanLimix100ThenHalf(lastScanContext, new StationKvBean().name(source.getDescription()).value(scanInfo));
saveLastScanContext(reqBean, lastScanContext);
sendStepContextMessage(reqBean, lastScanContext);
}
//发送工步内容
@Override
public void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> lastScanContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null,
lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue());
this.sendMessage(reqBean, resultBean);
}
//获取上下文加工结果
@Override
public String getProductResultContext(StationRequestBean reqBean) {
return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT);
}
//保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】
@Override
public Boolean saveProductResultContext(StationRequestBean reqBean, String productResult) {
if (StringUtils.isEmpty(productResult)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT, productResult);
}
//删除上下文加工结果
@Override
public void deleteProductResultContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT);
}
//获取上下文就绪信号
@Override
public String getReadySignalContext(StationRequestBean reqBean) {
return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.READY_SIGNAL_CONTEXT);
}
//保存上下文就绪信号 写1
@Override
public Boolean saveReadySignalContext(StationRequestBean reqBean) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.READY_SIGNAL_CONTEXT, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
//删除上下文就绪信号
@Override
public void deleteReadySignalContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.READY_SIGNAL_CONTEXT);
}
//获取上下文头道模具号
@Override
public MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? JSONObject.parseObject(firstMouldNo, MesEquipVariableCollectContext.class) : null;
}
//验证上下文头道模具号是否存在
@Override
public Boolean checkFirstMouldNoIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文头道模具号 [JSON]MesEquipVariableCollectContext::equipVariableValue
@Override
public Boolean saveFirstMouldNoContext(StationRequestBean reqBean, MesEquipVariableCollectContext firstMouldNo) {
if (null == firstMouldNo) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT, JSONObject.toJSONString(firstMouldNo));
}
//删除上下文头道模具号
@Override
public void deleteFirstMouldNoContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT);
}
//获取上下文一模多腔信息
@Override
public List<MesMouldMultiCavity> getMouldMultiCavityContext(StationRequestBean reqBean) {
String mouldCavityJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
return !StringUtils.isEmpty(mouldCavityJson) ? JSONObject.parseArray(mouldCavityJson, MesMouldMultiCavity.class) : null;
}
//验证上下文一模多腔信息是否存在
@Override
public Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文一模多腔信息 [JSON]List<MesMouldMultiCavity>
@Override
public Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List<MesMouldMultiCavity> mouldMultiCavityList) {
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT, JSONObject.toJSONString(mouldMultiCavityList));
}
//删除上下文一模多腔信息
@Override
public void deleteMouldMultiCavityContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT);
}
//获取上下文零件数据信息
@Override
public Map<String, MesPart> getPartDataContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean savePartDataContext(StationRequestBean reqBean, Map<String, MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}
//删除上下文零件数据信息
@Override
public void deletePartDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
}
//获取上下文模具号
@Override
public MesEquipVariableCollectContext getMouldNoContext(StationRequestBean reqBean) {
String mouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(mouldNo) ? JSONObject.parseObject(mouldNo, MesEquipVariableCollectContext.class) : null;
}
//验证上下文模具号是否存在
@Override
public Boolean checkMouldNoIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文模具号 [JSON]MesEquipVariableCollectContext::equipVariableValue
@Override
public Boolean saveMouldNoContext(StationRequestBean reqBean, MesEquipVariableCollectContext mouldNo) {
if (null == mouldNo) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT, JSONObject.toJSONString(mouldNo));
}
//删除上下文模具号
@Override
public void deleteMouldNoContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT);
}
//获取上下文生产工单数据信息集合
@Override
public List<MesWorkOrderContext> getWorkOrderDataContext(StationRequestBean reqBean) {
String workOrderDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
return !StringUtils.isEmpty(workOrderDataJson) ? JSONObject.parseArray(workOrderDataJson, MesWorkOrderContext.class) : null;
}
//验证上下文生产工单数据信息集合是否存在
@Override
public Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文生产工单数据信息集合 [JSON]List<MesWorkOrderContext>
@Override
public Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List<MesWorkOrderContext> workOrderContextList) {
if (CollectionUtils.isEmpty(workOrderContextList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT, JSONObject.toJSONString(workOrderContextList));
}
//删除上下文生产工单数据信息集合
@Override
public void deleteWorkOrderDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT);
}
//获取上下文扫/读信息:主条码
@Override
public List<MesEquipVariableCollectContext> getScanProductSnContext(StationRequestBean reqBean) {
String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_PRODUCT_SN_CONTEXT);
return !StringUtils.isEmpty(productSnJson) ? JSONObject.parseArray(productSnJson, MesEquipVariableCollectContext.class) : null;
}
//验证上下文扫/读信息:主条码是否存在
@Override
public Boolean checkScanProductSnIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_PRODUCT_SN_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文扫/读信息:主条码 [JSON]List<MesEquipVariableCollectContext>
@Override
public Boolean saveScanProductSnContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> productSnList) {
if (CollectionUtils.isEmpty(productSnList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_PRODUCT_SN_CONTEXT, JSONObject.toJSONString(productSnList));
}
//删除上下文扫/读信息:主条码
@Override
public void deleteScanProductSnContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_PRODUCT_SN_CONTEXT);
}
//获取上下文扫/读信息:装配件条码
@Override
public List<MesEquipVariableCollectContext> getScanAssemblySnContext(StationRequestBean reqBean) {
String assemblySnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_ASSEMBLY_SN_CONTEXT);
return !StringUtils.isEmpty(assemblySnJson) ? JSONObject.parseArray(assemblySnJson, MesEquipVariableCollectContext.class) : null;
}
//验证上下文扫/读信息:装配件条码是否存在
@Override
public Boolean checkScanAssemblySnIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_ASSEMBLY_SN_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文扫/读信息:装配件条码 [JSON]List<MesEquipVariableCollectContext>
@Override
public Boolean saveScanAssemblySnContext(StationRequestBean reqBean, List<MesEquipVariableCollectContext> assemblySnList) {
if (CollectionUtils.isEmpty(assemblySnList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_ASSEMBLY_SN_CONTEXT, JSONObject.toJSONString(assemblySnList));
}
//删除上下文扫/读信息:装配件条码
@Override
public void deleteScanAssemblySnContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_ASSEMBLY_SN_CONTEXT);
}
//获取上下文产出条码数据信息集合
@Override
public List<MesProduceSn> getOutProduceSnDataContext(StationRequestBean reqBean) {
String outProduceSnDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT);
return !StringUtils.isEmpty(outProduceSnDataJson) ? JSONObject.parseArray(outProduceSnDataJson, MesProduceSn.class) : null;
}
//验证上下文产出条码数据信息集合是否存在
@Override
public Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean) {
String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT);
return !StringUtils.isEmpty(firstMouldNo) ? true : false;
}
//保存上下文产出条码数据信息集合 [JSON]List<MesProduceSn>
@Override
public Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List<MesProduceSn> outProduceSnDataList) {
if (CollectionUtils.isEmpty(outProduceSnDataList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT, JSONObject.toJSONString(outProduceSnDataList));
}
//删除上下文产出条码数据信息集合
@Override
public void deleteOutProduceSnDataContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT);
}
}

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
@ -8,26 +8,24 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description :
* @Description : BASE
* @Author : wangjie
**/
@Slf4j
@ -47,8 +45,8 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
//存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】
@Override
public Boolean doCacheProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesProductionProcessContext.class.getSimpleName(), JSONObject.toJSONString(productionProcessContext));
public Boolean saveProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.BASE_DATA_CONTEXT, JSONObject.toJSONString(productionProcessContext));
}
//获取生产过程上下文对象
@ -56,7 +54,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) {
//获取缓存的生产过程上下文对象
MesProductionProcessContext productionProcessContext = (MesProductionProcessContext) getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesProductionProcessContext.class.getSimpleName(), MesProductionProcessContext.class);
MesProductionProcessContext productionProcessContext = (MesProductionProcessContext) getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.BASE_DATA_CONTEXT, MesProductionProcessContext.class);
if (null == productionProcessContext) productionProcessContext = new MesProductionProcessContext(reqBean.getOrganizeCode());
@ -108,6 +106,8 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) return productionProcessContext.message(String.format("请检查组织模型生产线[%s]信息的有效性!", reqBean.getWorkCenterCode()));
if (StringUtils.isEmpty(MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(productionProcessContext.getWorkCenter().getCenterType()))) return productionProcessContext.message(String.format("请检查组织模型生产线,生产线[%s]信息未设置产线类型!", reqBean.getWorkCenterCode()));
if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) return productionProcessContext.message(String.format("请检查组织模型生产线[%s]工位[%s]信息的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
if (StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()));
@ -300,71 +300,6 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return productionProcessContext.message(String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息!", cellEquipContext.getEquipmentCode(), variableType.getDescription(), categoryLevelTwoList.toString()));
}
//发送设备质量信息
@Override
public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality()));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue());
this.sendMessage(reqBean, resultBean);
}
//存储展示组件MODULE_CONTENT内容
@Override
public Boolean doCacheModuleContext(StationRequestBean reqBean, List<List<StationKvBean>> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue(), JSONObject.toJSONString(dataList));
}
@Override
public List<List<StationKvBean>> getCachedModuleContext(StationRequestBean reqBean) {
String moduleContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue());
return StringUtils.isEmpty(moduleContent) ? null : JSONObject.parseObject(moduleContent, new TypeReference<List<List<StationKvBean>>>() {});
}
//存储上个扫描/读取信息
@Override
public Boolean doCacheLastScanContext(StationRequestBean reqBean, List<StationKvBean> dataList) {
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO, JSONObject.toJSONString(dataList));
}
//获取上个扫描/读取信息
@Override
public List<StationKvBean> getCachedLastScanContext(StationRequestBean reqBean) {
String lastScanContent = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.LAST_SCAN_INFO);
return StringUtils.isEmpty(lastScanContent) ? new ArrayList<>() : JSONObject.parseArray(lastScanContent, StationKvBean.class);
}
//发送工步内容
@Override
public void doSendStepContextMessage(StationRequestBean reqBean) {
sendStepContextMessage(reqBean, getCachedLastScanContext(reqBean));
}
//发送工步内容
@Override
public void doSendStepContextMessage(StationRequestBean reqBean, String scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE source) {
List<StationKvBean> lastScanContext = getCachedLastScanContext(reqBean);
lastScanContext = StationKvBeanUtil.addStationKvBeanLimix100ThenHalf(lastScanContext, new StationKvBean().name(source.getDescription()).value(scanInfo));
doCacheLastScanContext(reqBean, lastScanContext);
sendStepContextMessage(reqBean, lastScanContext);
}
//发送工步内容
@Override
public void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> lastScanContext) {
StationResultBean resultBean = new StationResultBean();
resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null,
lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null));
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue());
this.sendMessage(reqBean, resultBean);
}
}

@ -0,0 +1,28 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
/**
* -()
*/
@Data
public class MesProdRuleNoSortContext extends MesProductionAssemblyContext implements Serializable {
private static final long serialVersionUID = 2240955722926511959L;
@ApiParam(value = "BOM明细ID")
private String bomDetailId;
@ApiParam(value = "是否可复用条码")
private Integer isRepeat;
@ApiParam(value = "是否忽略回车")
private Integer isIgnoreEntry;
@ApiParam(value = "工序用量")
private Integer qty;
}

@ -14,105 +14,117 @@ public class MesProductionAssemblyContext implements Serializable {
private static final long serialVersionUID = 2382117884422723639L;
@ApiParam("加工记录ID")
private Long productionRecordId;
public Long productionRecordId;
@ApiParam("装配件零件号")
private String assemblyPartNo;
public String assemblyPartNo;
@ApiParam("装配件零件名称")
private String assemblyPartName;
public String assemblyPartName;
@ApiParam("装配件条码")
private String assemblySn;
public String assemblySn;
//非排序可能无值
@ApiParam(value = "生产工单号")
private String workOrderNo;
public String workOrderNo;
@ApiParam("过程条码")
private String serialNumber;
public String serialNumber;
@ApiParam("零件条码")
private String productSn;
public String productSn;
@ApiParam("客户条码")
private String custSn;
public String custSn;
@ApiParam("生产工单零件号")
private String partNo;
public String partNo;
@ApiParam("生产工单零件名称")
private String partName;
public String partName;
@ApiParam("装配零件类型")
private Integer assemblyPartType;
public Integer assemblyPartType;
//10=已绑定, 20=解绑, 30=待绑定, 40=跳过(待绑定)
@ApiParam("装配零件状态")
private Integer assemblyStatus;
public Integer assemblyStatus;
@ApiParam("是否跳过")
private Integer isSkip;
public Integer isSkip;
@ApiParam("开模记录ID")
private String mouldRecordId;
public String mouldRecordId;
@ApiParam("模具号")
private String mouldNo;
public String mouldNo;
@ApiParam("装配件条码确认方式")
private Integer matchType;
public Integer matchType;
@ApiParam("扫描规则")
private String matchRule;
public String matchRule;
//10=非排序装配件维护表ID, 20=排序线排产装配目视项ID
@ApiParam("数据来源")
private Integer dataSource;
public Integer dataSource;
@ApiParam("来源ID")
private Long sourceId;
public Long sourceId;
@ApiParam(value = "生产线类型 10=排序 20=非排序")
private Integer centerType;
public Integer centerType;
@ApiParam(value = "排序/非排序产品加工规则ID")
private Long pid;
public Long pid;
@ApiParam("最小值")
private Double minValue;
public Double minValue;
@ApiParam("最大值")
private Double maxValue;
public Double maxValue;
@ApiParam(value = "装备序号")
private Integer routeSeq;
public Integer routeSeq;
@ApiParam("组织代码")
private String organizeCode;
public String organizeCode;
@ApiParam("区域代码")
private String areaCode;
public String areaCode;
@ApiParam("生产线代码")
private String workCenterCode;
public String workCenterCode;
@ApiParam("工位代码")
private String workCellCode;
public String workCellCode;
@ApiParam("设备代码")
private String equipmentCode;
public String equipmentCode;
@ApiParam("工序代码")
private String processCode;
public String processCode;
@ApiParam("工序名称")
private String processName;
public String processName;
@ApiParam("工艺代码")
private String craftCode;
public String craftCode;
@ApiParam("工艺名称")
private String craftName;
public String craftName;
public MesProductionAssemblyContext() {}
public MesProductionAssemblyContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
this.organizeCode = organizeCode;
this.workCenterCode = workCenterCode;
this.workCellCode = workCellCode;
this.processCode = processCode;
}
public MesProductionAssemblyContext dataSource(Integer dataSource) {
this.dataSource = dataSource;
return this;
}
}

@ -1,7 +1,10 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
@ -59,7 +62,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
private String destErpLocation;
@ApiParam(value = "装配爆炸图FID")
private Long imageFileId ;
private Long imageFileId;
@ApiParam(value = "条码打印方式")
private Integer printType;
@ -97,4 +100,15 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
@ApiParam(value = "生产组代码")
private String productGroupCode;
public MesProductionAssemblySortContext() {}
public MesProductionAssemblySortContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
super(organizeCode, workCenterCode, workCellCode, processCode);
}
public MesProductionAssemblySortContext(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) {
if (null != workOrderAssembly) BeanUtils.copyProperties(workOrderAssembly, this);
if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this);
}
}

@ -1,15 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.Serializable;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
@ -66,54 +71,7 @@ public class MesProductionProcessContext implements Serializable {
private String cavityGroupProdParamJson;
//-----------------根据业务执行情况必要时清理-----------------
@ApiParam("加工结果:成功/报废/可疑 【报废/可疑: 在保存逻辑条码时有特殊业务处理】")
private String productResult;
@ApiParam("就绪信号")
private String readySignal;
@ApiParam("头道模具号")
private String firstMouldNo;
@ApiParam("模具号")
private String mouldNo;
@ApiParam("一模多腔信息JSON LIST")
private String mouldCavityJson;
@ApiParam("零件信息")
private String partDataJson;
@ApiParam("扫描信息:生产工单号")
private String workOrderNoJson;
@ApiParam("扫描信息:主条码")
private String productSnJson;
@ApiParam("扫描信息:装配件条码")
private String assemblySnJson;
@ApiParam("零件条码信息")
private String produceSnDataJson;
@ApiParam("生产工单信息")
private String workOrderDataJson;
@ApiParam("装配件信息(非排序/排序线排产装配目视项)")
private String assemblyDataJson;
@ApiParam("非排序加工规则信息")
private String unSortRuleJson;
@ApiParam("设备加工参数信息")
private String equipProdParamJson;
@ApiParam("时效性信息")
private String timeEfficientJson;
//--------------------------------------------------------
//---------------------- 构造方法 ---------------------------------------
public MesProductionProcessContext() {}
@ -121,6 +79,8 @@ public class MesProductionProcessContext implements Serializable {
this.organizeCode = organizeCode;
}
//---------------------- 信息初始化/赋值 ---------------------------------------
//上下文信息结果初始化
public MesProductionProcessContext success() {
this.success = true;
@ -141,9 +101,11 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 生产线对象 ---------------------------------------
//从上下文中取出生产线对象
public MesWorkCenter getWorkCenter() {
return StringUtils.isEmpty(this.workCenterJson) ? null : JSONObject.parseObject(this.workCenterJson, MesWorkCenter.class);
return !StringUtils.isEmpty(this.workCenterJson) ? JSONObject.parseObject(this.workCenterJson, MesWorkCenter.class) : null;
}
//上下文赋值生产线对象
@ -152,9 +114,11 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 工位对象 ---------------------------------------
//从上下文中取出工位对象
public MesWorkCell getWorkCell() {
return StringUtils.isEmpty(this.workCellJson) ? null : JSONObject.parseObject(this.workCellJson, MesWorkCell.class);
return !StringUtils.isEmpty(this.workCellJson) ? JSONObject.parseObject(this.workCellJson, MesWorkCell.class) : null;
}
//上下文赋值工位对象
@ -163,6 +127,8 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 工序/工艺信息 ---------------------------------------
//上下文赋值工序信息
public MesProductionProcessContext processCode(String processCode, String processName) {
this.processCode = processCode;
@ -177,9 +143,11 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 工位设备对象集合 ---------------------------------------
//从上下文中取出工位设备对象集合
private List<MesCellEquipContext> getCellEquipList() {
return StringUtils.isEmpty(this.cellEquipListJson) ? null : JSONObject.parseArray(this.cellEquipListJson, MesCellEquipContext.class);
return !StringUtils.isEmpty(this.cellEquipListJson) ? JSONObject.parseArray(this.cellEquipListJson, MesCellEquipContext.class) : null;
}
//上下文赋值工位设备对象集合
@ -188,6 +156,8 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 工位当前设备 ---------------------------------------
//从上下文中的工位设备对象集合中取出当前要使用的设备
public MesCellEquipContext filterCurCellEquip() {
List<MesCellEquipContext> cellEquipList = getCellEquipList();
@ -204,12 +174,12 @@ public class MesProductionProcessContext implements Serializable {
//从上下文中的工位设备对象集合中取出第一个设备
private MesCellEquipContext filterCurCellEquip(List<MesCellEquipContext> cellEquipContextList) {
return CollectionUtils.isEmpty(cellEquipContextList) ? null : cellEquipContextList.get(0);
return !CollectionUtils.isEmpty(cellEquipContextList) ? cellEquipContextList.get(0) : null;
}
//从上下文中取出工位当前要使用的设备
public MesCellEquipContext getCurCellEquip() {
return StringUtils.isEmpty(this.curCellEquipJson) ? null : JSONObject.parseObject(this.curCellEquipJson, MesCellEquipContext.class);
return !StringUtils.isEmpty(this.curCellEquipJson) ? JSONObject.parseObject(this.curCellEquipJson, MesCellEquipContext.class) : null;
}
//上下文赋值工位当前要使用的设备
@ -218,15 +188,17 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 数据变量接口逻辑集合 ---------------------------------------
//从上下文中取出设备数据变量接口逻辑集合
private List<MesEquipmentVariableCfg> getEquipVariableCfgList() {
return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class);
return !StringUtils.isEmpty(this.equipVariableCfgJson) ? JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class) : null;
}
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
public List<MesEquipmentVariableCfg> getEquipVariableCfgListByVct() {
MesCellEquipContext cellEquipContext = getCurCellEquip();
return null == cellEquipContext ? null : getEquipVariableCfgListByVct(cellEquipContext.getVariableCfgType());
return null != cellEquipContext ? getEquipVariableCfgListByVct(cellEquipContext.getVariableCfgType()) : null;
}
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
@ -246,15 +218,17 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//---------------------- 数据变量对象集合 ---------------------------------------
//从上下文中取出设备数据变量对象集合
private List<MesEquipmentVariable> getEquipVariableList() {
return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class);
return !StringUtils.isEmpty(this.equipVariableJson) ? JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class) : null;
}
//从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合
public List<MesEquipmentVariable> getEquipVariableListByEquVt(Integer variableType) {
MesCellEquipContext cellEquipContext = getCurCellEquip();
return (null == cellEquipContext || StringUtils.isEmpty(variableType)) ? null : getEquipVariableListByEquVt(cellEquipContext.getEquipmentCode(), variableType);
return (null != cellEquipContext && !StringUtils.isEmpty(variableType)) ? getEquipVariableListByEquVt(cellEquipContext.getEquipmentCode(), variableType) : null;
}
//从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合
@ -275,147 +249,4 @@ public class MesProductionProcessContext implements Serializable {
return this;
}
//上下文赋值加工结果
public MesProductionProcessContext productResult(String productResult) {
this.productResult = productResult;
return this;
}
//上下文清除加工结果
public MesProductionProcessContext productResultClear() {
this.productResult = null;
return this;
}
//上下文赋值就绪信号
public MesProductionProcessContext readySignal(String readySignal) {
this.readySignal = readySignal;
return this;
}
//上下文清除就绪信号
public MesProductionProcessContext readySignalClear() {
this.readySignal = null;
return this;
}
//从上下文中取出头道模具号
public MesEquipVariableCollectContext getFirstMouldNo() {
return StringUtils.isEmpty(this.firstMouldNo) ? null : JSONObject.parseObject(this.firstMouldNo, MesEquipVariableCollectContext.class);
}
//上下文赋值头道模具号
public MesProductionProcessContext firstMouldNo(MesEquipVariableCollectContext firstMouldNo) {
this.firstMouldNo = null != firstMouldNo ? JSONObject.toJSONString(firstMouldNo) : null;
return this;
}
//上下文清除头道模具号
public MesProductionProcessContext firstMouldNoClear() {
this.firstMouldNo = null;
return this;
}
//从上下文中取出模具号
public MesEquipVariableCollectContext getMouldNo() {
return StringUtils.isEmpty(this.mouldNo) ? null : JSONObject.parseObject(this.mouldNo, MesEquipVariableCollectContext.class);
}
//上下文赋值模具号
public MesProductionProcessContext mouldNo(MesEquipVariableCollectContext mouldNo) {
this.mouldNo = null != mouldNo ? JSONObject.toJSONString(mouldNo) : null;
return this;
}
//上下文清除模具号
public MesProductionProcessContext mouldNoClear() {
this.mouldNo = null;
return this;
}
//从上下文中取出一模多腔信息集合
public List<MesMouldMultiCavity> getMouldCavityList() {
return StringUtils.isEmpty(this.mouldCavityJson) ? null : JSONObject.parseArray(this.mouldCavityJson, MesMouldMultiCavity.class);
}
//上下文赋值一模多腔信息
public MesProductionProcessContext mouldCavityJson(List<MesMouldMultiCavity> mouldMultiCavityList) {
this.mouldCavityJson = !CollectionUtils.isEmpty(mouldMultiCavityList) ? JSONObject.toJSONString(mouldMultiCavityList) : null;
return this;
}
//上下文清除一模多腔信息
public MesProductionProcessContext mouldCavityJsonClear() {
this.mouldCavityJson = null;
return this;
}
//从上下文中取出零件信息集合
public Map<String, MesPart> getPartDataMap() {
return StringUtils.isEmpty(this.partDataJson) ? null : JSONObject.parseObject(this.partDataJson, new TypeReference<Map<String, MesPart>>() {});
}
//上下文赋值零件信息集合
public MesProductionProcessContext partDataJson(Map<String, MesPart> partDataMap) {
this.partDataJson = !CollectionUtils.isEmpty(partDataMap) ? JSONObject.toJSONString(partDataMap) : null;
return this;
}
//上下文清除零件信息
public MesProductionProcessContext partDataJsonClear() {
this.partDataJson = null;
return this;
}
//从上下文中取出主条码信息
public List<MesEquipVariableCollectContext> getProductSnList() {
return StringUtils.isEmpty(this.productSnJson) ? null : JSONObject.parseArray(this.productSnJson, MesEquipVariableCollectContext.class);
}
//上下文赋值主条码信息
public MesProductionProcessContext productSnJson(List<MesEquipVariableCollectContext> productSnList) {
this.productSnJson = !CollectionUtils.isEmpty(productSnList) ? JSONObject.toJSONString(productSnList) : null;
return this;
}
//上下文清除主条码信息
public MesProductionProcessContext productSnJsonClear() {
this.productSnJson = null;
return this;
}
//从上下文中取出装配件条码集合
public List<MesEquipVariableCollectContext> getAssemblySnList() {
return StringUtils.isEmpty(this.assemblySnJson) ? null : JSONObject.parseArray(this.assemblySnJson, MesEquipVariableCollectContext.class);
}
//上下文赋值装配件条码集合
public MesProductionProcessContext assemblySnJson(List<MesEquipVariableCollectContext> assemblySnList) {
this.assemblySnJson = !CollectionUtils.isEmpty(assemblySnList) ? JSONObject.toJSONString(assemblySnList) : null;
return this;
}
//上下文清除装配件条码集合
public MesProductionProcessContext assemblySnJsonClear() {
this.assemblySnJson = null;
return this;
}
//从上下文中取出零件条码信息集合
public List<MesProduceSn> getProduceSnDataList() {
return StringUtils.isEmpty(this.produceSnDataJson) ? null : JSONObject.parseArray(this.produceSnDataJson, MesProduceSn.class);
}
//上下文赋值零件条码信息集合
public MesProductionProcessContext produceSnDataJson(List<MesProduceSn> produceSnDataList) {
this.produceSnDataJson = !CollectionUtils.isEmpty(produceSnDataList) ? JSONObject.toJSONString(produceSnDataList) : null;
return this;
}
//上下文清除零件条码信息
public MesProductionProcessContext produceSnDataJsonClear() {
this.produceSnDataJson = null;
return this;
}
}

@ -0,0 +1,16 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import lombok.Data;
import java.io.Serializable;
/**
* -()
*/
@Data
public class MesWorkOrderContext extends MesWorkOrder implements Serializable {
private static final long serialVersionUID = 5562937531822977296L;
}

@ -39,6 +39,6 @@ public class MesReworkTaskRequestModel {
private Integer assemblyPartStatus;
private List<Long> detailIds;
private String detailIds;
}

@ -62,7 +62,16 @@ public class MesPcnExtConstWords {
public static final String EQUIP_VARIABLE_STATUS = "equipVariableStatus";
// 模具号
public static final String MOULD_NO = "mouldNo";
// 工序代码
public static final String PROCESS_CODE = "processCode";
// 生产工单号
public static final String WORK_ORDER_NO = "workOrderNo";
// 数据来源
public static final String DATD_SOURCE = "dataSource";
// 数据来源ID
public static final String SOURCE_ID = "sourceId";
// 装配件绑定状态
public static final String ASSEMBLY_STATUS = "assemblyStatus";
@ -86,15 +95,50 @@ public class MesPcnExtConstWords {
// ;
public static final String SEMICOLON = ";";
// 生产过程控制上下文
public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT";
// 定制页面名称(默认)
public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT";
// 上个扫描信息
public static final String LAST_SCAN_INFO = "lastScanInfo";
// 当前扫描信息
public static final String SCAN_INFO = "scanInfo";
// 生产过程控制上下文目录名
public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT";
// 上下文: 基础数据
public static final String BASE_DATA_CONTEXT = "BASE_DATA_CONTEXT";
// 上下文: 展示组件数据
public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT";
// 历史扫描信息
public static final String LAST_SCAN_INFO_CONTEXT = "LAST_SCAN_INFO_CONTEXT";
// 上下文: 加工结果
public static final String PRODUCT_RESULT_CONTEXT = "PRODUCT_RESULT_CONTEXT";
// 上下文: 就绪信号
public static final String READY_SIGNAL_CONTEXT = "READY_SIGNAL_CONTEXT";
// 上下文: 头道模具号
public static final String FIRST_MOULD_NO_CONTEXT = "FIRST_MOULD_NO_CONTEXT";
// 上下文: 模具号
public static final String MOULD_NO_CONTEXT = "MOULD_NO_CONTEXT";
// 上下文: 一模多腔信息
public static final String MOULD_MULTI_CAVITY_CONTEXT = "MOULD_MULTI_CAVITY_CONTEXT";
// 上下文: 零件数据信息
public static final String PART_DATA_CONTEXT = "PART_DATA_CONTEXT";
// 上下文: 扫/读信息:生产工单号
public static final String SCAN_WORK_ORDER_NO_CONTEXT = "SCAN_WORK_ORDER_NO_CONTEXT";
// 上下文: 扫/读信息:主条码
public static final String SCAN_PRODUCT_SN_CONTEXT = "SCAN_PRODUCT_SN_CONTEXT";
// 上下文: 扫/读信息:装配件条码
public static final String SCAN_ASSEMBLY_SN_CONTEXT = "SCAN_ASSEMBLY_SN_CONTEXT";
// 上下文: 生产工单数据信息
public static final String WORK_ORDER_DATA_CONTEXT = "WORK_ORDER_DATA_CONTEXT";
// 上下文: 产品加工规则数据信息
public static final String PROD_RULE_DATA_CONTEXT = "PROD_RULE_DATA_CONTEXT";
// 上下文: 进料条码数据信息
public static final String IN_PRODUCE_SN_DATA_CONTEXT = "IN_PRODUCE_SN_DATA_CONTEXT";
// 上下文: 产出条码数据信息
public static final String OUT_PRODUCE_SN_DATA_CONTEXT = "OUT_PRODUCE_SN_DATA_CONTEXT";
}

Loading…
Cancel
Save