From 7767805389d2b97511fc606c92c12dfce9d76b14 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 21 Oct 2024 16:53:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/busi/MesAssemblyExtService.java | 19 +- .../MesNumberRuleMatchAndUniqueService.java | 11 + .../MesNumberRuleMatchCompareRangeService.java | 1 - .../rulematch/MesNumberRuleMatchSnService.java | 4 + .../MesNumberRuleMatchSortSnGmService.java | 5 + .../station/MesProductionNoSortModuleService.java | 28 +- .../station/MesProductionSortModuleService.java | 11 +- .../step/MesAssemblyMatchSortStepService.java | 10 +- .../step/MesAssemblyReadStepService.java | 5 +- .../step/MesAssemblySaveSortStepService.java | 1 + .../MesAssemblyShowSortPreCraftStepService.java | 3 +- .../step/MesAssemblyShowSortStepService.java | 12 +- .../step/MesEquipByPassReadStepService.java | 5 +- .../step/MesFirstMouldNoReadStepService.java | 3 + .../step/MesMembraneSignalReadStepService.java | 3 + .../step/MesMouldNoReadStepService.java | 7 +- .../MesProcessMethodSourceBoxInOutStepService.java | 6 +- .../step/MesProductResultReadStepService.java | 7 +- .../step/MesProductSnCheckStepService.java | 6 +- .../step/MesProductSnReadStepService.java | 5 +- .../step/MesProductionPartNoReadStepService.java | 2 +- .../step/MesReadySignalReadStepService.java | 3 + .../step/MesRecyclablePackageReadStepService.java | 5 +- .../MesSendCavityGroupParamsCmdStepService.java | 316 +++++++++---------- .../step/MesSendEquipParamsCmdStepService.java | 13 +- .../step/MesSendEquipParamsCmdStepService2.java | 13 +- .../step/MesSendInitializationCmdStepService.java | 7 +- .../step/MesSendProcessCmdStepService.java | 7 +- .../MesVariableWhenFinishedReadStepService.java | 7 +- .../step/MesWorkOrderCheckSortStepService.java | 4 +- .../step/MesWorkOrderCutCheckStepService.java | 2 +- .../step/MesWorkOrderReadStepService.java | 5 +- .../step/MesWriteMainBarcodeCmdStepService.java | 344 ++++++++++----------- .../MesProductionProcessContextStepService.java | 7 + .../MesProductionProcessMonitorService.java | 6 +- .../mes/pcn/pojo/context/MesProdRuleContext.java | 10 + .../pojo/context/MesProductionAssemblyContext.java | 4 + .../context/MesProductionAssemblySortContext.java | 12 +- .../pcn/pojo/context/MesProductionPartContext.java | 17 +- .../pcn/pojo/context/MesProductionPsInContext.java | 36 ++- 40 files changed, 556 insertions(+), 416 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java index 14eb0b7..c5a783b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java @@ -67,12 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null; - //获取排序FILE文件URL 【显示前道所有工序装配件工步不需要获取文件】 - Map fileMap = getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)); + //获取排序FILE文件URL 【离线生产不需要获取文件】 + Map fileMap = !prodRuleContext.getIsClosedCheck() ? getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)) : null; List productionAssemblySortContextList = new ArrayList<>(); - workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()))); + workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck()))); return productionAssemblySortContextList; } @@ -99,11 +99,22 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { List productionAssemblySortContextList = new ArrayList<>(); - workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getWorkCell(workCellMap, o.getWorkCellCode())).foreignKey(prodRuleContext.getForeignKey()))); + workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add( + new MesProductionAssemblySortContext() + .copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode()), prodRuleContext.getIsClosedCheck())) + .foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck()) + ) + ); return productionAssemblySortContextList; } + //判断是否按序扫描【离线默认有序】 + private Integer getIsCheckBindSeq(MesWorkCell workCell, Boolean isClosedCheck) { + if (isClosedCheck) return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + } + //【排序线】获取生产工单装配件清单 @Override public List getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, Boolean isShowAll) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchAndUniqueService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchAndUniqueService.java index 85c5d63..0c138c7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchAndUniqueService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchAndUniqueService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -32,6 +33,16 @@ public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDi if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result; + if (!MesProductionAssemblyContext.class.isAssignableFrom(params[0].getClass())) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "参数匹配规则信息不是装配件匹配规则!"); + return result; + } + + //验证是否离线 + MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; + if (context.getIsClosedCheck()) return result; + List productionAssemblyUniqueList = assemblyExtService.getProductionAssemblyUniqueList(organizeCode, sn); Optional optional = CollectionUtils.isEmpty(productionAssemblyUniqueList) ? null : diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java index f8c7216..77fcda0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java @@ -29,7 +29,6 @@ public class MesNumberRuleMatchCompareRangeService implements IMesNumberRuleMatc } MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; - if (StringUtils.isEmpty(context.getMaxValue()) || StringUtils.isEmpty(context.getMinValue())) { result.put(MesPcnExtConstWords.MESSAGE, "请检查匹配规则信息的[最大值/最小值]是否均维护!"); return result; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java index 172eebe..11ce868 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java @@ -44,6 +44,10 @@ public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchS return result; } + //验证是否离线 + MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; + if (context.getIsClosedCheck()) return result; + List produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn); if (CollectionUtils.isEmpty(produceSnList)) { result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息不存在!", sn)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSortSnGmService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSortSnGmService.java index 60ab637..17e989a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSortSnGmService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSortSnGmService.java @@ -44,6 +44,10 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis return result; } + //验证是否离线 + MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; + if (context.getIsClosedCheck()) return result; + String productSn = customerSnTransformService.transformBarCodeGm(sn); if (productSn.length() == sn.length()) { result.put(MesPcnExtConstWords.MESSAGE, String.format("通用自制件条码固定长度为58位,零件条码[%s]长度[%s]位!", sn, sn.length())); @@ -54,6 +58,7 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getStrategyClass())).matchNumberRule(organizeCode, sn, params); if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) result.put(MesPcnExtConstWords.MESSAGE, String.format("通用%s", result.get(MesPcnExtConstWords.MESSAGE))); + else result.put(MesPcnExtConstWords.ASSEMBLY_SN, productSn);//落表需要使用转换后的条码 return result; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index d669b57..7942700 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -18,14 +18,11 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; -import cn.estsh.i3plus.pojo.mes.model.AttrBean; 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.repository.MesFileRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; -import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import com.google.common.base.Objects; @@ -39,7 +36,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.StringJoiner; -import java.util.function.BinaryOperator; /** * @Description : 展示组件:非排序生产 @@ -73,29 +69,35 @@ public class MesProductionNoSortModuleService extends BaseModuleService { List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); - MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false); + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + MesPcnException.throwBusiException(productionProcessContext.getMessage()); + } //获取班次信息,先查询缓存,缓存没有在查询数据库 List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); - - MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (CollectionUtils.isEmpty(prodShiftDataContext)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - MesPcnException.throwBusiException("请先开班"); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + MesPcnException.throwBusiException("请先开班!"); } + // 发送班次班组和工单 StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); + //获取生产线的当前班组班次信息 + MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); // 整合班次加工数量 List productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean); if (CollectionUtils.isEmpty(productionStatisticsContext)) { - productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", MesPcnExtConstWords.ZERO_STR), + productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", MesPcnExtConstWords.ZERO_STR), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); } - StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell, mesProdShiftKvBean); + + StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext, productionProcessContext.getWorkCell(), mesProdShiftKvBean); this.sendMessage(reqBean, shiftCountBean); //验证工位是否锁定 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java index d77bccc..6b61c88 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java @@ -74,12 +74,9 @@ public class MesProductionSortModuleService extends BaseModuleService { //获取班次信息,先查询缓存,缓存没有在查询数据库 List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); - - //MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (CollectionUtils.isEmpty(prodShiftDataContext)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - MesPcnException.throwBusiException("请先开班"); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + MesPcnException.throwBusiException("请先开班!"); } // 发送班次班组和工单 StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); @@ -93,9 +90,6 @@ public class MesProductionSortModuleService extends BaseModuleService { reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); ((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).executeInState(reqBean); - //设备BYPASS监控 - //((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean); - } private StationResultBean getStationResultBean(List mesQueueOrderModelList) { @@ -132,7 +126,6 @@ public class MesProductionSortModuleService extends BaseModuleService { packBean.setOrderByStr(" order by productSeq desc "); List queueOrderList = queueOrderRepository.findByHqlWherePage(packBean, pager); - //List queueOrderModels = new ArrayList<>(); if (!CollectionUtils.isEmpty(queueOrderList)) { boolean isComplete = false; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java index fb1edb2..425b789 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java @@ -246,7 +246,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService { MesProductionAssemblySortContext filter = (MesProductionAssemblySortContext) result.get(MesPcnExtConstWords.DATA); //前道防错 - if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) { + if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) { if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) { stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))); @@ -255,7 +255,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService { } //时效性验证 - if (!StringUtils.isEmpty(filter.getProductSnId())) { + if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId())) { result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue()); if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) { @@ -269,8 +269,8 @@ public class MesAssemblyMatchSortStepService extends BaseStepService { flag = true; - //装配件清单该数据标记已装配 (如果是自制件赋值productSnId) - productionAssemblySortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId()); + //装配件清单该数据标记已装配(验证返回result里面是否存在assemblySn,存在特殊的规则会转换成新的条码) (如果是自制件赋值productSnId) + productionAssemblySortContext.assemblyStatus(!result.containsKey(MesPcnExtConstWords.ASSEMBLY_SN) ? equipVariableCollectContext.getEquipVariableValue() : (String) result.get(MesPcnExtConstWords.ASSEMBLY_SN)).productSnId(filter.getProductSnId()); break; @@ -294,7 +294,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService { private Boolean isCheckBindSeq(MesProdRuleContext prodRuleContext, MesProductionAssemblySortContext productionAssemblySortContext) { if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; - if (!StringUtils.isEmpty(productionAssemblySortContext.getIsSeqScan()) && productionAssemblySortContext.getIsSeqScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; + if (!StringUtils.isEmpty(productionAssemblySortContext.getIsCheckBindSeq()) && productionAssemblySortContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; return false; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java index 1cbe688..80c3d62 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -63,12 +63,15 @@ public class MesAssemblyReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + StepResult stepResult = StepResult.getSuccessComplete(); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { - stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java index e070008..411b9dc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java @@ -153,6 +153,7 @@ public class MesAssemblySaveSortStepService extends BaseStepService { private void saveProductionAssemblyUnique(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) { if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) != 0 || StringUtils.isEmpty(productionAssemblySortContext.getAssemblySn())) return; + if (productionAssemblySortContext.getIsClosedCheck()) return;//离线生产不写[装配件规则唯一绑定记录表] MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID); productionAssemblyUnique.setPid(productionAssemblySortContext.getId()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java index 35cc9cb..18957d3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java @@ -31,7 +31,8 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { Map workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean); MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) - .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); + .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()) + .isClosedCheck(mesOffLineOpen); return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index cefbc42..c8625a8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -119,11 +120,18 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //获取装配件信息(子类进行重写) public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { MesProdRuleContext prodRuleContext = new MesProdRuleContext( - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(productionProcessContext.getWorkCell().getIsSeqScan()) - .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(getIsCheckBindSeq(productionProcessContext.getWorkCell())) + .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()) + .isClosedCheck(mesOffLineOpen); return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext); } + //判断是否按序扫描【离线默认有序】 + private Integer getIsCheckBindSeq(MesWorkCell workCell) { + if (mesOffLineOpen) return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + } + //装配件清单列表标题 private List dataAttrList(List prodRuleContextList, Boolean isNeedShowCell, Boolean isNeedShowMatchRule) { List attrBeanList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java index 6c9bc8a..5be72ee 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java @@ -53,12 +53,13 @@ public class MesEquipByPassReadStepService extends BaseStepService { //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); - if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false); + //离线生产 + if (mesOffLineOpen) return stepResult.isCompleted(false); + //当前工位使用的设备 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - if (null == cellEquipContext) return stepResult.isCompleted(false); //获取生产过程上下文对象有异常信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 0ee6ebc..65b5635 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -68,6 +68,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + //发送工步内容 productionCustomContextStepService.sendStepContextMessage(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java index e5712e4..27b7623 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMembraneSignalReadStepService.java @@ -55,6 +55,9 @@ public class MesMembraneSignalReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + //发送工步内容 productionCustomContextStepService.sendStepContextMessage(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index 8643f1e..64f3b28 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -71,10 +71,13 @@ public class MesMouldNoReadStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + //离线生产不读模具号 + if (mesOffLineOpen) return stepResult; + + StationResultBean resultBean = new StationResultBean(); + //获取工步参数 Optional> stepParamMap = getStepParams(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java index 106e8b1..1b35878 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java @@ -186,7 +186,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService { //正常条码 if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); + productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource())); return stepResult; } @@ -194,7 +194,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService { //未知条码【工序为空 代表新做的工序没有加工完成】 if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + productionPsInContextList.add(new MesProductionPsInContext(produceSnList.get(1)).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); return stepResult; } @@ -208,7 +208,7 @@ public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService { } //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); return stepResult; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index 1869bba..37c4717 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -69,10 +69,13 @@ public class MesProductResultReadStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + //离线生产不读加工结果 + if (mesOffLineOpen) return stepResult; + + StationResultBean resultBean = new StationResultBean(); + //获取工步参数 Optional> stepParamMap = getStepParams(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java index 9093993..28f3e67 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java @@ -151,7 +151,7 @@ public class MesProductSnCheckStepService extends BaseStepService { //正常条码 if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); + productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource())); return stepResult; } @@ -159,7 +159,7 @@ public class MesProductSnCheckStepService extends BaseStepService { //未知条码【工序为空 代表新做的工序没有加工完成】 if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + productionPsInContextList.add(new MesProductionPsInContext(produceSnList.get(1)).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); return stepResult; } @@ -173,7 +173,7 @@ public class MesProductSnCheckStepService extends BaseStepService { } //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 - productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(workCell).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); return stepResult; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java index 9bb0f76..7be2c93 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java @@ -65,12 +65,15 @@ public class MesProductSnReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + StepResult stepResult = StepResult.getSuccessComplete(); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { - stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前读取到设备的装配件条码匹配失败超过[%s]次!", endlessLoopReadTimes)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java index 26b9062..7b2e48d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java @@ -73,7 +73,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService { String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { - stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前读取到设备的零件号匹配失败超过[%s]次!", endlessLoopReadTimes)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java index b71fe25..7e85f94 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java @@ -55,6 +55,9 @@ public class MesReadySignalReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + //发送工步内容 productionCustomContextStepService.sendStepContextMessage(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java index 29cd281..912a5e1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java @@ -66,13 +66,16 @@ public class MesRecyclablePackageReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + StepResult stepResult = StepResult.getSuccessComplete(); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { - stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前读取到设备的可回用包装条码匹配失败超过[%s]次!", endlessLoopReadTimes)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java index 92ca612..2a40052 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java @@ -1,158 +1,158 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; -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.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; -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.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; -import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; -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.repository.MesCavityGroupDetailCfgRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; -import cn.estsh.impp.framework.boot.util.SpringContextsUtil; -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.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * @Description : 腔组发送加工参数 - * @Author : zxw - **/ -@Slf4j -@Service("mesSendCavityGroupParamsCmdStepService") -public class MesSendCavityGroupParamsCmdStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - - @Autowired - private IMesEquipVariableRwExtService equipVariableRwExtService; - @Autowired - private MesEquipmentVariableRepository mesEquipmentVariableRepository; - - @Autowired - private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; - - - @Autowired - private MesCavityGroupDetailCfgRepository mesCavityGroupDetailCfgRepository; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取工步参数 - Optional> stepParamMap = getStepParams(reqBean); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); - - //当前工位使用的设备 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - //获取腔组数据信息集合 - List mesCavityGroupDetailCfgs = productionProcessContext.getCavityGroupDetailList(); - - mesCavityGroupDetailCfgs = mesCavityGroupDetailCfgs.stream().sorted(Comparator.comparingInt(MesCavityGroupDetailCfg::getSeq)).collect(Collectors.toList()); - - if (CollectionUtils.isEmpty(mesCavityGroupDetailCfgs)) { - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到腔组信息!"); - } - sendEquipParamsCmd(reqBean, resultBean, stepResult, stepParamMap, cellEquipContext, mesCavityGroupDetailCfgs); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送腔组加工参数成功!"); - } - - /** - * 发送加工参数 - * @param reqBean - * @param resultBean - * @param stepResult - * @param stepParamMap - * @param cellEquipContext - * @param mesCavityGroupDetailCfgs - */ - private void sendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Optional> stepParamMap, MesCellEquipContext cellEquipContext, List mesCavityGroupDetailCfgs) { - int index = 0; - - for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) { - index ++; - // 获取加工参数 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean); - List mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); - for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// - String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); - AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); - - DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean); - MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean); - if (mesEquipmentVariable == null) { - continue; - } - execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null, index); - } - } - } - - - private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, - String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index) { - - equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, index); - - - } - - //最大重试次数[工步参数] - private Integer getMaxRetryTimes(Optional> stepParamMap) { - Integer maxRetryTimes = null; - try { - maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; - } catch (NumberFormatException e) { - } - return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; - } - - private String getStrateClass(String value) { - - String strategyClass = "commonWriteVariableService"; - - if (value.contains("orderNo")) { - strategyClass = "OrderWriteVariableService"; - } else if (value.contains("partNo")) { - strategyClass = "PartWriteVariableService"; - } else if (value.contains("sn")) { - strategyClass = "SnWriteVariableService"; - } - return strategyClass; - } -} +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +//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.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +//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.bean.DdlPackBean; +//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +//import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +//import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg; +//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; +//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +//import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +//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.repository.MesCavityGroupDetailCfgRepository; +//import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository; +//import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; +//import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +//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.Comparator; +//import java.util.List; +//import java.util.Map; +//import java.util.Optional; +//import java.util.stream.Collectors; +// +///** +// * @Description : 腔组发送加工参数 +// * @Author : zxw +// **/ +//@Slf4j +//@Service("mesSendCavityGroupParamsCmdStepService") +//public class MesSendCavityGroupParamsCmdStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// +// @Autowired +// private IMesEquipVariableRwExtService equipVariableRwExtService; +// @Autowired +// private MesEquipmentVariableRepository mesEquipmentVariableRepository; +// +// @Autowired +// private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; +// +// +// @Autowired +// private MesCavityGroupDetailCfgRepository mesCavityGroupDetailCfgRepository; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// //获取工步参数 +// Optional> stepParamMap = getStepParams(reqBean); +// +// //获取上下文信息 +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); +// +// //当前工位使用的设备 +// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); +// +// //获取腔组数据信息集合 +// List mesCavityGroupDetailCfgs = productionProcessContext.getCavityGroupDetailList(); +// +// mesCavityGroupDetailCfgs = mesCavityGroupDetailCfgs.stream().sorted(Comparator.comparingInt(MesCavityGroupDetailCfg::getSeq)).collect(Collectors.toList()); +// +// if (CollectionUtils.isEmpty(mesCavityGroupDetailCfgs)) { +// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到腔组信息!"); +// } +// sendEquipParamsCmd(reqBean, resultBean, stepResult, stepParamMap, cellEquipContext, mesCavityGroupDetailCfgs); +// +// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送腔组加工参数成功!"); +// } +// +// /** +// * 发送加工参数 +// * @param reqBean +// * @param resultBean +// * @param stepResult +// * @param stepParamMap +// * @param cellEquipContext +// * @param mesCavityGroupDetailCfgs +// */ +// private void sendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Optional> stepParamMap, MesCellEquipContext cellEquipContext, List mesCavityGroupDetailCfgs) { +// int index = 0; +// +// for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) { +// index ++; +// // 获取加工参数 +// DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); +// DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean); +// List mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); +// for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// +// String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); +// AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); +// +// DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); +// DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean); +// MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean); +// if (mesEquipmentVariable == null) { +// continue; +// } +// execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null, index); +// } +// } +// } +// +// +// private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, +// String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index) { +// +// equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, index); +// +// +// } +// +// //最大重试次数[工步参数] +// private Integer getMaxRetryTimes(Optional> stepParamMap) { +// Integer maxRetryTimes = null; +// try { +// maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; +// } catch (NumberFormatException e) { +// } +// return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; +// } +// +// private String getStrateClass(String value) { +// +// String strategyClass = "commonWriteVariableService"; +// +// if (value.contains("orderNo")) { +// strategyClass = "OrderWriteVariableService"; +// } else if (value.contains("partNo")) { +// strategyClass = "PartWriteVariableService"; +// } else if (value.contains("sn")) { +// strategyClass = "SnWriteVariableService"; +// } +// return strategyClass; +// } +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java index af55c2f..4119a95 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java @@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); + + //离线生产不发送设备加工参数 + if (mesOffLineOpen) return stepResult; + StationResultBean resultBean = new StationResultBean(); //获取上下文加工规则数据信息集合 List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前没有加工规则数据,跳过发送!"); + if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前没有加工规则数据,跳过发送!"); //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); @@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { //根据来源ID查询设备加工参数信息 List equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList); - if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); + if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); //设备加工参数信息集合根据来源ID分组 Map> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId)); @@ -95,7 +100,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { //设备加工参数信息集合根据数据变量ID分组 Map evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o)); - if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); + if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); //当前工位使用的设备 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); @@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { }); - return StepResult.getSuccessComplete(); + return stepResult; } //搜集加工参数关联ID集合 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java index df3d1d2..2d618fe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService2.java @@ -60,11 +60,16 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); + + //离线生产不发送设备加工参数 + if (mesOffLineOpen) return stepResult; + StationResultBean resultBean = new StationResultBean(); //获取上下文加工规则数据信息集合 List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前没有加工规则数据,跳过发送!"); + if (CollectionUtils.isEmpty(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前没有加工规则数据,跳过发送!"); //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); @@ -81,7 +86,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService { //根据来源ID查询设备加工参数信息 List equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList); - if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); + if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备加工参数相关配置,跳过发送!"); //设备加工参数信息集合根据来源ID分组 Map> eppcMap2SourceId = equipmentProdParamCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getSourceId)); @@ -95,7 +100,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService { //设备加工参数信息集合根据数据变量ID分组 Map evMap = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentVariable::getId, o -> o)); - if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); + if (CollectionUtils.isEmpty(evMap)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送设备加工参数:当前加工规则未匹配到设备变量数据信息,跳过发送!"); //当前工位使用的设备 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); @@ -124,7 +129,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService { }); - return StepResult.getSuccessComplete(); + return stepResult; } //搜集加工参数关联ID集合 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java index 0f63ff6..18a1283 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java @@ -47,10 +47,13 @@ public class MesSendInitializationCmdStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + //离线生产不发送初始化指令 + if (mesOffLineOpen) return stepResult; + + StationResultBean resultBean = new StationResultBean(); + //获取工步参数 Optional> stepParamMap = getStepParams(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java index c0b6c6e..fe85b36 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java @@ -47,10 +47,13 @@ public class MesSendProcessCmdStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + //离线生产不发送允许加工指令 + if (mesOffLineOpen) return stepResult; + + StationResultBean resultBean = new StationResultBean(); + //获取工步参数 Optional> stepParamMap = getStepParams(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java index ca98e35..6e5378a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java @@ -57,10 +57,13 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + //离线生产不保存工艺参数 + if (mesOffLineOpen) return stepResult; + + StationResultBean resultBean = new StationResultBean(); + // 获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index d5464e7..34f3526 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -219,11 +219,11 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi return stepResult.isCompleted(false).msg(String.format("请检查工单工位队列信息,加工单[%s]工位队列状态[%s]", workOrderNo, MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrder.getStatus()))); //封装产成零件 - MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isCheck(productionProcessContext.getWorkCell()); + MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell()); productionPartContextList.add(productionPartContext); //封装产品条码 - productionPsInContextList.add(new MesProductionPsInContext(productionProcessContext.getWorkCell(), produceSn).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); + productionPsInContextList.add(new MesProductionPsInContext(produceSn).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell()).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); //封装产出条码 productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index 107dad7..72008d6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -329,7 +329,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { // 获取上道工艺生产的条码并封装到进料上下文中 if (!CollectionUtils.isEmpty(produceSnList)) produceSnList.stream().filter(o -> null != o).forEach(o -> { - productionPsInContextList.add(new MesProductionPsInContext(workCell, o).cutCode(cutScheme.getCutCode())); + productionPsInContextList.add(new MesProductionPsInContext(o).isCheck(workCell).cutCode(cutScheme.getCutCode())); productionPsOutContextList.add(new MesProductionPsOutContext().copy(o)); }); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java index e6aa818..0923986 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java @@ -62,12 +62,15 @@ public class MesWorkOrderReadStepService extends BaseStepService { @Override public StepResult init(StationRequestBean reqBean) { + //离线生产 + if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!"); + StepResult stepResult = StepResult.getSuccessComplete(); String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES); if (StringUtils.isEmpty(endlessLoopReadTimes)) endlessLoopReadTimes = MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES_DEFAULT; if (productionDispatchContextStepService.dispatchOverEndlessLoopReadTimes(reqBean, endlessLoopReadTimes)) { - stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).restoreDbLog().checkRepeat(), + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, new StationResultBean().isWs(false).writeDbLog().checkRepeat(), stepResult.isCompleted(false).msg(String.format("当前读取到设备的加工单匹配失败超过[%s]次!", endlessLoopReadTimes)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWriteMainBarcodeCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWriteMainBarcodeCmdStepService.java index d12fad6..77ec1a8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWriteMainBarcodeCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWriteMainBarcodeCmdStepService.java @@ -1,172 +1,172 @@ -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.api.busi.IWriteVariableService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; -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.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; -import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; -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.repository.MesEquipmentProdParamCfgRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; -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.*; -import java.util.stream.Collectors; - -/** - * @Description : 发送客户端主条码 - * @Author : zxw - **/ -@Slf4j -@Service("mesWriteMainBarcodeCmdStepService") -public class MesWriteMainBarcodeCmdStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IWriteVariableService writeVariableService; - - @Autowired - private MesEquipmentVariableRepository mesEquipmentVariableRepository; - - @Autowired - private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; - - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取工步参数 - Optional> stepParamMap = getStepParams(reqBean); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); - - //当前工位使用的设备 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - //获取上下文加工规则数据信息集合 - List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - - if (CollectionUtils.isEmpty(prodRuleContextList)) { - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数!"); - } - List mesEquipmentVariableList = new ArrayList<>(); - List mesEquipmentProdParamCfgList = new ArrayList<>(); - Map> mesEquipmentVariableMap = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList); - // 过滤掉非条码的 - mesEquipmentVariableMap = filterMsg(mesEquipmentVariableMap); - - mesEquipmentVariableMap.forEach((k, v) -> { - v.stream().forEach(mesEquipmentProdParamCfg -> { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); - MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); - if (mesEquipmentVariable == null) { - return; - } - mesEquipmentVariableList.add(mesEquipmentVariable); - mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); - execSendEquipParamsCmd(reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), k, stepParamMap); - }); - }); - - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送加工参数成功!"); - } - - /** - * 根据排序和非排序 获取对应的加工参数 - * @param reqBean - * @param prodRuleContextList - * @param mesEquipmentProdParamCfgList - * @return - */ - private Map> getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List prodRuleContextList, List mesEquipmentProdParamCfgList) { - - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); - - Map> map = new HashMap<>(); - for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) { - List mesEquipmentProdParamCfgs= new ArrayList<>(); - //从上下文中取出生产线对象 - MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); - // 获取加工参数 - if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()){ - - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getNumEqualPack(mesProdRuleContext.getPid(), "sourceId", ddlPackBean); - mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); - } else { - MesWorkCenter mesWorkCenter = new MesWorkCenter(); - mesWorkCenter.setWorkCenterCode(reqBean.getWorkCenterCode()); - List assemblyDataContext = mesProdRuleContext.getAssemblyDataContext(mesWorkCenter); - List sourceIds = assemblyDataContext.stream().map(MesProductionAssemblyContext::getSourceId).collect(Collectors.toList()); - - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getInPackList(sourceIds, "sourceId", ddlPackBean); - mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); - } - if (!CollectionUtils.isEmpty(mesEquipmentProdParamCfgs)) { - mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgs.stream().distinct().collect(Collectors.toList()); - } - map.put(mesProdRuleContext.getForeignKey(), mesEquipmentProdParamCfgs); - } - return map; - } - - private void execSendEquipParamsCmd(StationRequestBean reqBean, - String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Optional> stepParamMap) { - //最大重试次数[工步参数] - Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); - - writeVariableService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null, maxRetryTimes); - } - - //最大重试次数[工步参数] - private Integer getMaxRetryTimes(Optional> stepParamMap) { - Integer maxRetryTimes = null; - try { - maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; - } catch (NumberFormatException e) { - } - return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : 3; - } - - private Map> filterMsg(Map> map){ - - if (CollectionUtils.isEmpty(map)) { - return null; - } - map.forEach((k,v) -> { - v = v.stream().filter(cfg -> StringUtils.isEmpty(cfg.getMatchRule()) && cfg.getMatchRule() - .toUpperCase().startsWith("BARCODE")).collect(Collectors.toList()); }); - return map; - } -} +//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.api.busi.IWriteVariableService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; +//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.bean.DdlPackBean; +//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +//import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; +//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +//import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +//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.repository.MesEquipmentProdParamCfgRepository; +//import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; +//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.*; +//import java.util.stream.Collectors; +// +///** +// * @Description : 发送客户端主条码 +// * @Author : zxw +// **/ +//@Slf4j +//@Service("mesWriteMainBarcodeCmdStepService") +//public class MesWriteMainBarcodeCmdStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// @Autowired +// private IWriteVariableService writeVariableService; +// +// @Autowired +// private MesEquipmentVariableRepository mesEquipmentVariableRepository; +// +// @Autowired +// private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository; +// +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// //获取工步参数 +// Optional> stepParamMap = getStepParams(reqBean); +// +// //获取上下文信息 +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap); +// +// //当前工位使用的设备 +// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); +// +// //获取上下文加工规则数据信息集合 +// List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); +// +// if (CollectionUtils.isEmpty(prodRuleContextList)) { +// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数!"); +// } +// List mesEquipmentVariableList = new ArrayList<>(); +// List mesEquipmentProdParamCfgList = new ArrayList<>(); +// Map> mesEquipmentVariableMap = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList); +// // 过滤掉非条码的 +// mesEquipmentVariableMap = filterMsg(mesEquipmentVariableMap); +// +// mesEquipmentVariableMap.forEach((k, v) -> { +// v.stream().forEach(mesEquipmentProdParamCfg -> { +// DdlPackBean packBean = DdlPackBean.getDdlPackBean(); +// DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); +// MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); +// if (mesEquipmentVariable == null) { +// return; +// } +// mesEquipmentVariableList.add(mesEquipmentVariable); +// mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); +// execSendEquipParamsCmd(reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), k, stepParamMap); +// }); +// }); +// +// +// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "发送加工参数成功!"); +// } +// +// /** +// * 根据排序和非排序 获取对应的加工参数 +// * @param reqBean +// * @param prodRuleContextList +// * @param mesEquipmentProdParamCfgList +// * @return +// */ +// private Map> getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List prodRuleContextList, List mesEquipmentProdParamCfgList) { +// +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); +// +// Map> map = new HashMap<>(); +// for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) { +// List mesEquipmentProdParamCfgs= new ArrayList<>(); +// //从上下文中取出生产线对象 +// MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); +// // 获取加工参数 +// if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()){ +// +// DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); +// DdlPreparedPack.getNumEqualPack(mesProdRuleContext.getPid(), "sourceId", ddlPackBean); +// mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); +// } else { +// MesWorkCenter mesWorkCenter = new MesWorkCenter(); +// mesWorkCenter.setWorkCenterCode(reqBean.getWorkCenterCode()); +// List assemblyDataContext = mesProdRuleContext.getAssemblyDataContext(mesWorkCenter); +// List sourceIds = assemblyDataContext.stream().map(MesProductionAssemblyContext::getSourceId).collect(Collectors.toList()); +// +// DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); +// DdlPreparedPack.getInPackList(sourceIds, "sourceId", ddlPackBean); +// mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); +// } +// if (!CollectionUtils.isEmpty(mesEquipmentProdParamCfgs)) { +// mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgs.stream().distinct().collect(Collectors.toList()); +// } +// map.put(mesProdRuleContext.getForeignKey(), mesEquipmentProdParamCfgs); +// } +// return map; +// } +// +// private void execSendEquipParamsCmd(StationRequestBean reqBean, +// String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Optional> stepParamMap) { +// //最大重试次数[工步参数] +// Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); +// +// writeVariableService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null, maxRetryTimes); +// } +// +// //最大重试次数[工步参数] +// private Integer getMaxRetryTimes(Optional> stepParamMap) { +// Integer maxRetryTimes = null; +// try { +// maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; +// } catch (NumberFormatException e) { +// } +// return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : 3; +// } +// +// private Map> filterMsg(Map> map){ +// +// if (CollectionUtils.isEmpty(map)) { +// return null; +// } +// map.forEach((k,v) -> { +// v = v.stream().filter(cfg -> StringUtils.isEmpty(cfg.getMatchRule()) && cfg.getMatchRule() +// .toUpperCase().startsWith("BARCODE")).collect(Collectors.toList()); }); +// return map; +// } +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index 7535c6d..ae1a527 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +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; @@ -170,6 +171,12 @@ public class MesProductionProcessContextStepService extends BaseStepService impl if (isCheckProcess && StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode())); + if (mesOffLineOpen) { + //离线生产发送设备质量信息[BAD=Red] + this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(MesExtEnumUtil.COLOR.RED.getValue())); + if (productionProcessContext.getWorkCenter().getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) return productionProcessContext.message("离线生产仅支持排序生产线!"); + } + return productionProcessContext; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java index 7aa8f1d..6338fe6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java @@ -48,8 +48,10 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic @Override public Boolean doProcessComplete(StationRequestBean requestBean) { //补DB日志 [获取开模ID赋值scanInfo] [获取上下文产出条码数据信息集合赋值resultList] - writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean().restoreDbLog(). - scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean))); + if (!mesOffLineOpen) { + writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean() + .restoreDbLog().scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean))); + } //清除上下文中的所有业务数据 productionDispatchContextStepService.flushProductionDispatchContext(requestBean); //发送工序完成音 diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java index fc4ba40..912f767 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -60,6 +60,10 @@ public class MesProdRuleContext implements Serializable { @ApiParam(name = "是否验证装配件扫描顺序") private Integer isCheckBindSeq; + //默认开启防错, true代表关闭防错 + @ApiParam(name = "是否关闭防错") + private Boolean isClosedCheck = false; + //-------以下非排序属性------------- @ApiParam("非排序产品加工规则ID") @@ -130,6 +134,12 @@ public class MesProdRuleContext implements Serializable { return this; } + //赋值系统配置【离线开关】 + public MesProdRuleContext isClosedCheck(Boolean isClosedCheck) { + this.isClosedCheck = isClosedCheck; + return this; + } + //非排序无须使用工位的字段,直接使用非排序产品加工规则的字段; //排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描 public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java index 5f28651..f56732b 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java @@ -122,4 +122,8 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam("匹配时间") public String matchDatetime; + //默认开启防错, true代表关闭防错 + @ApiParam(name = "是否关闭防错") + public Boolean isClosedCheck = false; + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java index b7b7732..7ff9499 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java @@ -128,7 +128,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte public String createUser; @ApiParam(name = "是否顺序扫描") - private Integer isSeqScan; + private Integer isCheckBindSeq; @ApiParam(name = "是否保存到DB") private Integer isSaveDb = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); @@ -158,7 +158,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte } //末道工位 - public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, MesWorkCell workCell) { + public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, Integer isCheckBindSeq) { if (null != workOrderAssembly) { BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS); @@ -175,7 +175,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte this.paRemark = productionAssembly.getRemark(); } - if (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) this.isSeqScan = workCell.getIsSeqScan(); + this.isCheckBindSeq = isCheckBindSeq; if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO; @@ -247,4 +247,10 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte private void matchDatetime() { this.matchDatetime = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); } + //赋值系统配置【离线开关】 + public MesProductionAssemblySortContext isClosedCheck(Boolean isClosedCheck) { + this.isClosedCheck = isClosedCheck; + return this; + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java index 4b4d600..fddec94 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -2,7 +2,9 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -104,6 +106,10 @@ public class MesProductionPartContext implements Serializable { @ApiParam("工艺强过码") private String craftJumpCode; + //默认开启防错, true代表关闭防错 + @ApiParam(name = "是否关闭防错") + private Boolean isClosedCheck = false; + //默认否 @ApiParam("是否顺序防错") private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); @@ -152,7 +158,7 @@ public class MesProductionPartContext implements Serializable { } //根据工单信息、裁片工单明细赋值 - public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double cutQty, String cutWorkOrderNo, Integer messageSource) { + public MesProductionPartContext copyPartNo(MesWorkOrder workOrder, Double cutQty, String cutWorkOrderNo, Integer messageSource) { if (null != workOrder) { BeanUtils.copyProperties(workOrder, this); if (StringUtils.isEmpty(this.completeQty)) this.completeQty = new Double(0); @@ -182,7 +188,14 @@ public class MesProductionPartContext implements Serializable { return this; } + //赋值系统配置【离线开关】 + public MesProductionPartContext isClosedCheck(Boolean isClosedCheck) { + this.isClosedCheck = isClosedCheck; + return this; + } + public MesProductionPartContext isCheck(MesWorkCell workCell) { + if (isClosedCheck) return this; if(!StringUtils.isEmpty(workCell.getIsCheckSeq()) && workCell.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckSeq = workCell.getIsCheckSeq(); return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java index 7772033..816c65d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -64,6 +64,12 @@ public class MesProductionPsInContext implements Serializable { @ApiParam(value ="工艺代码") private String craftCode; + @ApiParam("生产线代码") + private String workCenterCode; + + @ApiParam("工位代码") + private String workCellCode; + @ApiParam("工艺强过码") private String craftJumpCode; @@ -74,6 +80,10 @@ public class MesProductionPsInContext implements Serializable { @ApiParam("是否空腔") private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + //默认开启防错, true代表关闭防错 + @ApiParam(name = "是否关闭防错") + private Boolean isClosedCheck = false; + //默认否 @ApiParam(name = "是否前道工艺防错") private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); @@ -91,12 +101,28 @@ public class MesProductionPsInContext implements Serializable { public MesProductionPsInContext() {} + public MesProductionPsInContext(String organizeCode, String productSn) { + this.organizeCode = organizeCode; + this.productSn = productSn; + } + + public MesProductionPsInContext(MesProduceSn produceSn) { + BeanUtils.copyProperties(produceSn, this); + } + public MesProductionPsInContext foreignKey(Integer foreignKey) { this.foreignKey = foreignKey; return this; } + //赋值系统配置【离线开关】 + public MesProductionPsInContext isClosedCheck(Boolean isClosedCheck) { + this.isClosedCheck = isClosedCheck; + return this; + } + public MesProductionPsInContext isCheck(MesWorkCell workCell) { + if (isClosedCheck) return this; if(!StringUtils.isEmpty(workCell.getIsCheckCraft()) && workCell.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckCraft = workCell.getIsCheckCraft(); return this; } @@ -121,16 +147,6 @@ public class MesProductionPsInContext implements Serializable { return this; } - public MesProductionPsInContext(String organizeCode, String productSn) { - this.organizeCode = organizeCode; - this.productSn = productSn; - } - - public MesProductionPsInContext(MesWorkCell workCell, MesProduceSn produceSn) { - BeanUtils.copyProperties(produceSn, this); - this.isCheck(workCell); - } - public MesProductionPsInContext busiCheckToDelete() { this.busiCheckToDelete = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); return this; From cddd64250b310c097a369f89ff43acd16107bc06 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 21 Oct 2024 18:21:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A3=85=E9=85=8D=E4=BB=B6=20=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=90=8E=20=E5=89=8D=E7=AB=AF=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=9D=A1=E8=87=AA=E5=8A=A8=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesAssemblyShowNosortStepService.java | 21 +++++++++-------- .../step/MesAssemblyShowSortStepService.java | 27 +++++++++++----------- .../pcn/pojo/context/MesAssemblyShowContext.java | 3 +++ 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index 441fd16..8c155d7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -450,8 +450,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } - //获取前端置顶ID - Long sourceId = getTopSourceId(allAssemblyList); + //获取前端置顶信息 【sourceId&MatchDatetime】 + String topRowInfo = getTopRowInfo(allAssemblyList); Boolean isNeedShowMatchRule = checkIsNeedShowMatchRule(reqBean); @@ -460,7 +460,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; //封装匹配当前设备的装配件信息 - List assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, sourceId); + List assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, topRowInfo); if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; //装配件清单列表标题 @@ -480,11 +480,11 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } - //获取前端置顶ID - private Long getTopSourceId(List allAssemblyList) { + //获取前端置顶信息 【sourceId&MatchDatetime】 + private String getTopRowInfo(List allAssemblyList) { if (CollectionUtils.isEmpty(allAssemblyList)) return null; allAssemblyList = allAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getMatchDatetime()))).sorted(Comparator.comparing(MesProductionAssemblyNosortContext::getMatchDatetime).reversed()).collect(Collectors.toList()); - return CollectionUtils.isEmpty(allAssemblyList) ? null : allAssemblyList.get(0).getSourceId(); + return CollectionUtils.isEmpty(allAssemblyList) ? null : new StringJoiner(MesPcnExtConstWords.AND).add(allAssemblyList.get(0).getSourceId().toString()).add(allAssemblyList.get(0).getMatchDatetime()).toString(); } //未知腔数配置【工位参数】 @@ -498,13 +498,13 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //封装匹配当前设备的装配件信息 - private List getAssemblyShowContextList(List productionAssemblyContextList, Boolean isNeedShowMatchRule, Long sourceId) { + private List getAssemblyShowContextList(List productionAssemblyContextList, Boolean isNeedShowMatchRule, String topRowInfo) { if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; List assemblyShowContextList = new ArrayList<>(); for (MesProductionAssemblyContext item : productionAssemblyContextList) { //不显示且不扫描/仅目视的不显示出来 if (null == item || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNoShow(item.getMatchType())) continue; - assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, sourceId)); + assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, topRowInfo)); } assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); @@ -516,14 +516,15 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //封装装配件信息 - private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, Long sourceId) { + private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); BeanUtils.copyProperties(productionAssemblyContext, assemblyShowContext); if (isNeedShowMatchRule) assemblyShowContext.setMatchTypeName(showMatchRule(assemblyShowContext)); assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus())); if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus()) assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor()); - if (!StringUtils.isEmpty(sourceId) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && sourceId.compareTo(productionAssemblyContext.getSourceId()) == 0) assemblyShowContext.isTop(); + if (!StringUtils.isEmpty(topRowInfo) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && !StringUtils.isEmpty(productionAssemblyContext.getMatchDatetime()) && + topRowInfo.equals(new StringJoiner(MesPcnExtConstWords.AND).add(productionAssemblyContext.getSourceId().toString()).add(productionAssemblyContext.getMatchDatetime()).toString())) assemblyShowContext.isTop(); return assemblyShowContext; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index c8625a8..262a2bd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -26,10 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -212,8 +209,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { } - //获取前端置顶ID - Long sourceId = getTopSourceId(allAssemblyList); + //获取前端置顶信息 【sourceId&MatchDatetime】 + String topRowInfo = getTopRowInfo(allAssemblyList); //装配件显示规则配置 Boolean isNeedShowMatchRule = checkIsNeedShowMatchRule(reqBean); @@ -226,7 +223,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; //封装匹配当前设备的装配件信息 - List assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, sourceId); + List assemblyShowContextList = getAssemblyShowContextList(prodRuleContext.getAssemblyDataContext(workCenter), isNeedShowMatchRule, topRowInfo); if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; //装配件清单列表标题 @@ -246,11 +243,11 @@ public class MesAssemblyShowSortStepService extends BaseStepService { } - //获取前端置顶ID - private Long getTopSourceId(List allAssemblyList) { + //获取前端置顶信息 【sourceId&MatchDatetime】 + private String getTopRowInfo(List allAssemblyList) { if (CollectionUtils.isEmpty(allAssemblyList)) return null; allAssemblyList = allAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getMatchDatetime()))).sorted(Comparator.comparing(MesProductionAssemblySortContext::getMatchDatetime).reversed()).collect(Collectors.toList()); - return CollectionUtils.isEmpty(allAssemblyList) ? null : allAssemblyList.get(0).getSourceId(); + return CollectionUtils.isEmpty(allAssemblyList) ? null : new StringJoiner(MesPcnExtConstWords.AND).add(allAssemblyList.get(0).getSourceId().toString()).add(allAssemblyList.get(0).getMatchDatetime()).toString(); } //装配件显示规则配置【工位参数】 @@ -260,13 +257,13 @@ public class MesAssemblyShowSortStepService extends BaseStepService { } //封装匹配当前设备的装配件信息 - private List getAssemblyShowContextList(List productionAssemblyContextList, Boolean isNeedShowMatchRule, Long sourceId) { + private List getAssemblyShowContextList(List productionAssemblyContextList, Boolean isNeedShowMatchRule, String topRowInfo) { if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; List assemblyShowContextList = new ArrayList<>(); for (MesProductionAssemblyContext item : productionAssemblyContextList) { //不显示且不扫描/仅目视的不显示出来 if (null == item || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNoShow(item.getMatchType())) continue; - assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, sourceId)); + assemblyShowContextList.add(assemblyShowContext(item, isNeedShowMatchRule, topRowInfo)); } assemblyShowContextList = sortAssemblyShowContextList(assemblyShowContextList); @@ -278,14 +275,16 @@ public class MesAssemblyShowSortStepService extends BaseStepService { } //封装装配件信息 - private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, Long sourceId) { + private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); BeanUtils.copyProperties(productionAssemblyContext, assemblyShowContext); if (isNeedShowMatchRule) assemblyShowContext.setMatchTypeName(showMatchRule(assemblyShowContext)); assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus())); if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus()) assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor()); - if (!StringUtils.isEmpty(sourceId) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && sourceId.compareTo(productionAssemblyContext.getSourceId()) == 0) assemblyShowContext.isTop(); + if (!StringUtils.isEmpty(topRowInfo) && !StringUtils.isEmpty(productionAssemblyContext.getSourceId()) && !StringUtils.isEmpty(productionAssemblyContext.getMatchDatetime()) && + topRowInfo.equals(new StringJoiner(MesPcnExtConstWords.AND).add(productionAssemblyContext.getSourceId().toString()).add(productionAssemblyContext.getMatchDatetime()).toString())) assemblyShowContext.isTop(); + return assemblyShowContext; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java index dec156a..0187f30 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java @@ -62,6 +62,9 @@ public class MesAssemblyShowContext implements Serializable { @ApiParam("序号") private Integer index; + @ApiParam("匹配时间") + public String matchDatetime; + @ApiParam(value = "是否置顶") private Integer isTop = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();