From a6cac78e8da6dd144b05e93ad7552c7b8acb8f1e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 29 Jun 2024 22:18:06 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E5=89=8D=E9=81=93=E9=98=B2=E9=94=99?= =?UTF-8?q?=E5=B7=A5=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesProductionRecordService.java | 3 + .../busi/MesProductionRecordService.java | 15 ++- .../step/MesProdCraftRouteCheckStepService.java | 110 ++++++++++++++++++--- 3 files changed, 112 insertions(+), 16 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java index 8b13ad0..d68a324 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java @@ -29,6 +29,9 @@ public interface IMesProductionRecordService { */ Map checkSnTimeliness(String organizeCode, String serialNo, Long sourceId, Integer dataSource, Boolean isAssembly); + @ApiOperation(value = "根据零件条码查询加工记录信息") + List findProductionRecordList(String organizeCode, String productSn); + @ApiOperation(value = "根据零件条码,物料编码,工序代码,工艺代码查询加工记录信息") List findProductionRecordList(String organizeCode, String productSn, String partNo, String processCode, String craftCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java index af90bc1..dacaa71 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java @@ -12,9 +12,9 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesTimeEfficientCfgRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -134,11 +134,11 @@ public class MesProductionRecordService implements IMesProductionRecordService { for (MesTimeEfficientCfg timeliness : timelinessList) { List records = new ArrayList<>(); //时效性规则 零件号不为空 - if (StringUtils.isNoneBlank(timeliness.getPartNo())){ + if (!StringUtils.isEmpty(timeliness.getPartNo())){ records = recordList.stream().filter(item -> item.getPartNo().equals(timeliness.getPartNo())).sorted(Comparator.comparing(MesProductionRecord::getCompleteDateTime)).collect(Collectors.toList()); } //时效性规则 工艺不为空时 - if (StringUtils.isNoneBlank(timeliness.getCraftCode())){ + if (!StringUtils.isEmpty(timeliness.getCraftCode())){ records = recordList.stream().filter(item -> item.getCraftCode().equals(timeliness.getCraftCode())).sorted(Comparator.comparing(MesProductionRecord::getCompleteDateTime)).collect(Collectors.toList()); } @@ -192,7 +192,16 @@ public class MesProductionRecordService implements IMesProductionRecordService { } @Override + public List findProductionRecordList(String organizeCode, String productSn) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null; + return productionRecordRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn}); + } + + @Override public List findProductionRecordList(String organizeCode, String productSn, String partNo, String processCode, String craftCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(processCode) || StringUtils.isEmpty(craftCode)) return null; return productionRecordRepository.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PROCESS_CODE, MesPcnExtConstWords.CRAFT_CODE}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn, partNo, processCode, craftCode}); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java index 2fa786e..a00ecdc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java @@ -12,9 +12,11 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +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.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -79,24 +81,27 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(partNoList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "主条码均已通过前道工艺防错验证!"); + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + //查询工艺路线数据 Map> craftRouteDataMap = new HashMap<>(); - partNoList.forEach(o -> doHandleProdCraftData(reqBean, o, craftRouteDataMap)); + partNoList.forEach(o -> doHandleProdCraftData(reqBean, workCenter, o, craftRouteDataMap)); if (CollectionUtils.isEmpty(craftRouteDataMap) || craftRouteDataMap.size() != partNoList.size()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("零件编码%s未匹配到产品工艺路线!", CollectionUtils.isEmpty(craftRouteDataMap) ? partNoList.toString() : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !craftRouteDataMap.containsKey(o))).collect(Collectors.toList()).toString())); //前道工艺防错验证处理 - doHandleProdCraftRouteCheck(reqBean, resultBean, stepResult, productionProcessContext, productionPsInContextList, craftRouteDataMap); + doHandleProdCraftRouteCheck(reqBean, resultBean, stepResult, productionProcessContext, workCenter, productionPsInContextList, craftRouteDataMap); return stepResult; } //查询工艺路线数据 - private void doHandleProdCraftData(StationRequestBean reqBean, String o, Map> craftRouteDataMap) { - List craftRouteDetailList = fsmRouteDataService.doHandleProdCraftData(reqBean, o); + private void doHandleProdCraftData(StationRequestBean reqBean, MesWorkCenter workCenter, String o, Map> craftRouteDataMap) { + List craftRouteDetailList = fsmRouteDataService.doHandleProdCraftData(reqBean, workCenter.getCenterType(), o); if (!CollectionUtils.isEmpty(craftRouteDetailList)) craftRouteDataMap.put(o, craftRouteDetailList); } @@ -126,14 +131,14 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { //前道工艺防错验证处理 private void doHandleProdCraftRouteCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, - List productionPsInContextList, Map> craftRouteDataMap) { + MesWorkCenter workCenter, List productionPsInContextList, Map> craftRouteDataMap) { for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { if (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getPartNo()) || productionPsInContext.getIsCheckCraft().compareTo(MesPcnExtConstWords.ZERO) != 0) continue; //前道工艺防错验证 - Boolean result = doProdCraftRouteCheck(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo())); + Boolean result = doProdCraftRouteCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo())); if (!result) productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); else productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); @@ -149,7 +154,18 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { } //前道工艺防错验证 - private Boolean doProdCraftRouteCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + private Boolean doProdCraftRouteCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + + //排序 + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProdCraftRouteCheckSort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDetailList); + + //非排序 + return doProdCraftRouteCheckNosort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDetailList); + + } + + //前道工艺防错验证【排序】 + private Boolean doProdCraftRouteCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; @@ -193,10 +209,10 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { if (CollectionUtils.isEmpty(beforeCellCraftList) && !StringUtils.isEmpty(productionPsInContext.getCraftCode()) && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]已经过首道工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); - //执行首道工艺 【非工位扫描直接生成的自制件条码】 当前主条码验证通过 + //执行首道工艺 当前主条码验证通过 if (CollectionUtils.isEmpty(beforeCellCraftList)) return true; - //当前主条码的工艺字段为空【非工位扫描直接生成的自制件条码】 + //当前主条码的工艺字段为空 if (StringUtils.isEmpty(productionPsInContext.getCraftCode()) && craftRouteDetailList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过首道工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftCode())).isCompleted(); @@ -213,15 +229,83 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { //如果没有未完成的工艺, 则代表当前工位可操作 if (CollectionUtils.isEmpty(unCompleteCraftList)) return true; - //未完成工艺重新正序 - unCompleteCraftList = unCompleteCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq)).collect(Collectors.toList()); + //未完成工艺倒序 + unCompleteCraftList = unCompleteCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq).reversed()).collect(Collectors.toList()); Optional optional = unCompleteCraftList.stream().filter(o -> (null != o && o.getIsChoose() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue())).findFirst(); - if (null != optional && optional.isPresent()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), optional.get().getCraftCode())).isCompleted(); + if (unCompleteCraftList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), unCompleteCraftList.get(0).getCraftCode())).isCompleted(); return true; } + //前道工艺防错验证 【非排序】 + private Boolean doProdCraftRouteCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + + String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; + + //判断主条码的当前工艺是否包含在产品工艺路线中 + Optional optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst(); + if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent())) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]", + message, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted(); + + //验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同 + if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]", + message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted(); + + List productionRecordList = null; + //验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数 + if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) { + //根据零件条码查询加工记录信息 + productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn()); + //条码+物料+工序+工艺搜集加工记录 + List filterList = CollectionUtils.isEmpty(productionRecordList) ? null : + productionRecordList.stream().filter(o -> (null != o && o.getPartNo().equals(productionPsInContext.getPartNo()) && o.getProcessCode().equals(reqBean.getProcessCode()) && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(filterList) && filterList.size() >= optionalPs.get().getRepeatTimes()) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]", + message, productionPsInContext.getProductSn(), reqBean.getProcessCode(), craftRouteDetailList.get(0).getCraftRouteCode(), optionalPs.get().getRepeatTimes())).isCompleted(); + } + + //判断当前工位的工序对应的工艺是否包含在产品工艺路线中 + Optional optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst(); + //根据当前工位对应的工艺 获取 所有前道工艺, 如果当前工位的工序对应工艺不在工艺路线明细内, 则默认所有明细均为所有前道工艺, 否则搜集当前工位工序对应工艺前面的所有前道工艺 + List beforeCellCraftList; + if (null == optionalCell || !optionalCell.isPresent()) beforeCellCraftList = craftRouteDetailList; + else beforeCellCraftList = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalCell.get().getSeq()) < 0)).collect(Collectors.toList()); + + //前道工艺不存在即当前为首道工艺 + if (CollectionUtils.isEmpty(beforeCellCraftList)) return true; + + //前道工艺正序 + beforeCellCraftList = beforeCellCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq)).collect(Collectors.toList()); + + //判断上面是否已经查询过数据 + if (!(null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))) + productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn()); + + Map> prMapByCraft = CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionRecord::getCraftCode)); + + //遍历前道工艺, 根据工艺查询加工记录是否存在, 并验证是否存在捆绑工艺 + for (int i = 0; i < beforeCellCraftList.size(); i ++) { + if (null == beforeCellCraftList.get(i)) continue; + Boolean isExist = isExistProductionRecord(prMapByCraft, beforeCellCraftList.get(i).getCraftCode()); + if (beforeCellCraftList.get(i).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && !isExist) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), beforeCellCraftList.get(i).getCraftCode())).isCompleted(); + + if (i != 0 && beforeCellCraftList.get(i - 1).getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && isExistProductionRecord(prMapByCraft, beforeCellCraftList.get(i - 1).getCraftCode()) && !isExist) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]工艺[%s]捆绑后道工艺", + message, productionPsInContext.getProductSn(), beforeCellCraftList.get(i).getCraftRouteCode(), beforeCellCraftList.get(i - 1).getCraftCode())).isCompleted(); + } + + return true; + + } + + private Boolean isExistProductionRecord(Map> prMapByCraft, String craftCode) { + return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(craftCode)) ? false : true; + } + } From 863917dfb71cb1cdbc24afd889a3236efd82a9e2 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 29 Jun 2024 23:01:56 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87key=20?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionCustomContextStepService.java | 9 --- .../IMesProductionDispatchContextStepService.java | 1 - .../IMesProductionProcessContextStepService.java | 10 ++++ .../MesFunctionChooseCavityOrderService.java | 6 +- .../step/MesWorkOrderCheckNosortStepService.java | 6 +- .../step/MesWorkOrderScanStepService.java | 4 +- .../MesProductionCustomContextStepService.java | 67 ++++++---------------- .../MesProductionDispatchContextStepService.java | 12 ++-- .../MesProductionProcessContextStepService.java | 21 +++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 4 +- 10 files changed, 63 insertions(+), 77 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java index b1e2df1..e742de4 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java @@ -42,15 +42,6 @@ public interface IMesProductionCustomContextStepService { @ApiOperation(value = "发送工步内容") void sendStepContextMessage(StationRequestBean reqBean, List resultList); - @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") - List getFunctionChooseCavityOrderContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存选择/扫描/读取的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)]") - Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList); - - @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") - void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); - @ApiOperation(value = "验证上下文班次班组信息是否存在") Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index e1c6b0f..ae3c820 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -180,7 +180,6 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产品加工规则信息集合") void deleteProdRuleDataContext(StationRequestBean reqBean); - @ApiOperation(value = "获取料桶原材料数据集合") List getMesRawPartChargingDataContext(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 407ed15..3c1744f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiOperation; @@ -101,5 +102,14 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "存储设备的装配件清单") Boolean saveAssemblyNosortCfgContext(StationRequestBean reqBean, List assemblyNosortCfgList); + @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") + List getFunctionChooseCavityOrderContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存选择/扫描/读取的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)]") + Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList); + + @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") + void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java index 73570cb..6261a15 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; @@ -37,9 +36,6 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired private IShippingDispatchService shippingDispatchService; @Override @@ -66,7 +62,7 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen } //保存手动选择的腔数及工单信息上下文 - productionCustomContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList); + productionProcessContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList); this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java index 60671f8..67ec597 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; 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.IMesWorkOrderExtService; @@ -42,9 +41,6 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired private IMesWorkOrderExtService workOrderExtService; @Autowired @@ -113,7 +109,7 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中的加工单信息全部为空腔,已清除当前的空腔数据!"); //保存选择/扫描/读取的腔数及工单信息上下文 - productionCustomContextStepService.saveFunctionChooseCavityOrderContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + productionProcessContextStepService.saveFunctionChooseCavityOrderContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", String.valueOf(productionPartContextList.size())), new StationKvBean(MesPcnExtConstWords.CELL_MESSAGE_SOURCE, "工位信息来源", MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValueStr()), new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "加工单", equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))))); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java index 3cd491f..4a72e6e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java @@ -105,10 +105,10 @@ public class MesWorkOrderScanStepService extends BaseStepService { private List doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult) { //获取手动选择的腔数及工单信息上下文, 扫描的加工单也会存入其中 - List chooseCavityOrder = productionCustomContextStepService.getFunctionChooseCavityOrderContext(reqBean); + List chooseCavityOrder = productionProcessContextStepService.getFunctionChooseCavityOrderContext(reqBean); //删除手动选择的腔数及工单信息上下文 - if (!CollectionUtils.isEmpty(chooseCavityOrder)) productionCustomContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); + if (!CollectionUtils.isEmpty(chooseCavityOrder)) productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); if (CollectionUtils.isEmpty(chooseCavityOrder)) return null; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 821c690..7c12f2d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -108,36 +108,6 @@ public class MesProductionCustomContextStepService extends BaseStepService imple this.sendMessage(reqBean, resultBean); } - - //手选腔数及工单信息KEY - private String getChooseCavityOrderContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER).toString()); } - - //获取手动选择的腔数及工单信息上下文 - @Override - public List getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { - String chooseCavityOrderJson = getFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean)); - return !StringUtils.isEmpty(chooseCavityOrderJson) ? JSONObject.parseArray(chooseCavityOrderJson, StationKvBean.class) : null; - } - - //保存选择/扫描/读取的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)] - @Override - public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList) { - if (CollectionUtils.isEmpty(resultList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean), JSONObject.toJSONString(resultList)); - } - - //删除手动选择的腔数及工单信息上下文 - @Override - public void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean)); - } - - //开班信息KEY 【PS:生产线级别】 - private String getProdShiftContextKey(String orgainzeCode, String workCenterCode) { return new StringJoiner(MesPcnExtConstWords.COLON).add(orgainzeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT).add(workCenterCode).toString(); } - - - - //获取生产线的当前班组班次信息 @Override public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { @@ -155,21 +125,20 @@ public class MesProductionCustomContextStepService extends BaseStepService imple return mesProdShiftContext; } - //加工次数key - private String getProductionStatisticsContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PRODUCTION_COUNT_CONTEXT).toString()); } - + //开班信息KEY 【PS:生产线级别】 + private String getProdShiftContextKey(String orgainzeCode, String workCenterCode) { return new StringJoiner(MesPcnExtConstWords.COLON).add(orgainzeCode).add(MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT).add(workCenterCode).toString(); } //获取上下文班次班组信息 @Override public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { - String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null; } //验证上下文班次班组信息是否存在 @Override public Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode) { - String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); return !StringUtils.isEmpty(prodShiftJson) ? true : false; } @@ -177,19 +146,22 @@ public class MesProductionCustomContextStepService extends BaseStepService imple @Override public Boolean saveProdShiftDataContext(String organizeCode, String workCenterCode, List prodShiftDataList) { if (CollectionUtils.isEmpty(prodShiftDataList)) return false; - return saveFsmBusiData(organizeCode, getProdShiftContextKey(organizeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); + return saveFsmBusiData(organizeCode, getProdShiftContextKey(organizeCode, workCenterCode), JSONObject.toJSONString(prodShiftDataList)); } //删除上下文班次班组信息 @Override public void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode) { - deleteFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + deleteFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); } + //加工次数key + private String getProductionStatisticsContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT).toString()); } + //获取上下文工位加工数统计信息 @Override public List getProductionStatisticsContext(StationRequestBean reqBean) { - String productionStatisticsJson = getFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT); + String productionStatisticsJson = getFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean)); return !StringUtils.isEmpty(productionStatisticsJson) ? JSONObject.parseArray(productionStatisticsJson, StationKvBean.class) : null; } @@ -197,7 +169,13 @@ public class MesProductionCustomContextStepService extends BaseStepService imple @Override public Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List productionStatisticsList) { if (CollectionUtils.isEmpty(productionStatisticsList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT, JSONObject.toJSONString(productionStatisticsList)); + return saveFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), JSONObject.toJSONString(productionStatisticsList)); + } + + //删除上下文工位加工数统计信息 + @Override + public void deleteProductionStatisticsContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean)); } @Override @@ -224,16 +202,9 @@ public class MesProductionCustomContextStepService extends BaseStepService imple return true; } - //删除上下文工位加工数统计信息 - @Override - public void deleteProductionStatisticsContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT); - } - - - //工位加工锁KEY + //可复用条码KEY private String getRepeatAssemblySnContextKey(String organizeCode, String workCenterCode, String workCellCode) { - return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.REPEAT_ASSEMBLY_SN_CONTEXT).add(workCenterCode).add(workCellCode).toString(); + return new StringJoiner(":").add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.REPEAT_ASSEMBLY_SN_CONTEXT).toString(); } //根据装配件规则ID获取可复用条码 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 747adee..43d08cb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -30,8 +30,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BUSI_DATA_CONTEXT).toString()); } - private String getContextKey(String organizeCode, String busiCode) { return new StringJoiner(":").add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } - //清除上下文中的所有业务数据 @Override public void doFlushProductionDispatchContext(StationRequestBean reqBean) { @@ -397,21 +395,25 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp public void deleteProdRuleDataContext(StationRequestBean reqBean) { deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); } + + //获取料桶原材料数据集合 @Override public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { - String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT); return !StringUtils.isEmpty(mesRawPartChargingDataJson) ? JSONObject.parseArray(mesRawPartChargingDataJson, MesRawPartCharging.class) : null; } + //保存料桶原材料数据集合 @Override public Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList) { if (CollectionUtils.isEmpty(mesRawPartChargingList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT", JSONObject.toJSONString(mesRawPartChargingList)); + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT, JSONObject.toJSONString(mesRawPartChargingList)); } + //删除料桶原材料数据集合 @Override public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT); } } 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 bfd8232..467deea 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 @@ -11,6 +11,7 @@ import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; @@ -342,4 +343,24 @@ public class MesProductionProcessContextStepService extends BaseStepService impl return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_NOSORT_CFG_CONTEXT, JSONObject.toJSONString(assemblyNosortCfgList)); } + //获取手动选择的腔数及工单信息上下文 + @Override + public List getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + String chooseCavityOrderJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + return !StringUtils.isEmpty(chooseCavityOrderJson) ? JSONObject.parseArray(chooseCavityOrderJson, StationKvBean.class) : null; + } + + //保存选择/扫描/读取的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)] + @Override + public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList) { + if (CollectionUtils.isEmpty(resultList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, JSONObject.toJSONString(resultList)); + } + + //删除手动选择的腔数及工单信息上下文 + @Override + public void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index ae3ab48..1be6c1a 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -265,8 +265,6 @@ public class MesPcnExtConstWords { public static final String ASSEMBLY_NOSORT_CFG_CONTEXT = "ASSEMBLY_NOSORT_CFG_CONTEXT"; // 生产过程控制工位加工锁 public static final String PRODUCTION_LOCK_CONTEXT = "PRODUCTION_LOCK_CONTEXT"; - // 生产过程控制工位加工锁 - public static final String PRODUCTION_COUNT_CONTEXT = "PRODUCTION_COUNT_CONTEXT"; // 历史扫描信息 public static final String LAST_SCAN_INFO_CONTEXT = "LAST_SCAN_INFO_CONTEXT"; // 上下文: 班次班组信息 @@ -304,6 +302,8 @@ public class MesPcnExtConstWords { public static final String PRODUCTION_PS_IN_CONTEXT = "PRODUCTION_PS_IN_CONTEXT"; // 上下文: 产出条码数据信息 public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT"; + // 上下文: 料桶原材料数据 + public static final String RAW_PART_CHARGING_DATA_CONTEXT = "RAW_PART_CHARGING_DATA_CONTEXT"; //OPC_API_PARAM From 3e3d3543d338cd8449ac7c7a0285136dee6c76ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 13:36:35 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E5=88=86=E5=B1=8F=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java | 4 ++-- .../ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 1 + .../pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java | 3 ++- .../apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java | 2 +- .../serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java index 4b2677c..8a3e6eb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java @@ -36,7 +36,7 @@ public class MesWorkCellExtendCfgServiceImpl implements IMesWorkCellExtendCfgSer DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); - DdlPreparedPack.getStringEqualPack(bean.getExtendType(), "extendType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getExtendType(), "extendType", packBean); if(!StringUtil.isEmpty(bean.orderBy())){ packBean.setOrderByStr(bean.orderBy()); @@ -57,7 +57,7 @@ public class MesWorkCellExtendCfgServiceImpl implements IMesWorkCellExtendCfgSer DdlPreparedPack.getStringEqualPack(bean.getAreaCode(), "areaCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); - DdlPreparedPack.getStringEqualPack(StringUtil.isEmpty(bean.getExtendType())?"20":bean.getExtendType(), "extendType", packBean); + DdlPreparedPack.getNumEqualPack(StringUtil.isEmpty(bean.getExtendType())?20:bean.getExtendType(), "extendType", packBean); if(!StringUtil.isEmpty(bean.orderBy())){ packBean.setOrderByStr(bean.orderBy()); }else { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 38faf05..f88317e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -475,6 +475,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { List oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null); if (CollectionUtils.isEmpty(oldMesWorkOrders)) { updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + return; } report(productionRecord, organizeCode, userName, oldMesWorkOrders.get(0)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java index f083512..a97d38a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java @@ -82,7 +82,9 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle().toString()); params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId().toString()); + LOGGER.info("设备数据变量写值开始-> 地址:{}, params={}", equipVariableRwModel.getWriteRequestUrl(), params); String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null); + LOGGER.info("设备数据变量写值返回-> data:{} ", data); if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class).obj(JSONObject.toJSONString(equipVariableRwModel)); else return result.noSuccessed().message(String.format("设备数据变量写值失败! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s]", equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue())).obj(JSONObject.toJSONString(equipVariableRwModel)); @@ -122,7 +124,6 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { else return result.noSuccessed().message(String.format("设备数据变量读值失败! 数据信息:[%s]!", JSONObject.toJSONString(equipVariableRwModel))); } - @Override public MesEquipVariableRwResult writeVariable(MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag) { MesEquipVariableRwModel equipVariableRwModel = new MesEquipVariableRwModel(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java index 77e50c8..6d95bec 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java @@ -51,7 +51,7 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue; //验证下个工位是否在线 - String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode()); + String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCodeBak()); if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue; //调用多工位场景触发定位分屏工步, CLIENT_INFO是必要传参 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java index 65f1785..d7f1b6b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java @@ -35,7 +35,7 @@ public class MesManyCellTriggerTabSwitchStepService extends BaseStepService { StationRequestBean stationRequestBean = new StationRequestBean(); BeanUtils.copyProperties(reqBean, stationRequestBean); - stationRequestBean.setScanInfo(clientInfo); + stationRequestBean.setClientInfo(clientInfo); return clientInfo.equals(reqBean.getClientInfo()) ? execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("客户端[%s]监听自动切换页面成功!", reqBean.getClientInfo())) : From 34d54037dd06b253d5401951023640929d84357a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 13:42:13 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java index 6d95bec..16ac838 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java @@ -51,7 +51,7 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue; //验证下个工位是否在线 - String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCodeBak()); + String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCodeBak(), workCellExtendCfg.getWorkCellCodeBak()); if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue; //调用多工位场景触发定位分屏工步, CLIENT_INFO是必要传参 From 6bfd3075987a68ab5c00008d14160a702da1d42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 14:31:33 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/step/MesProductResultErrorHandleStepService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java index 13078f9..61e5cca 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -73,7 +73,7 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { // 获取加工结果 String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 - if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getCode(), result)) { + if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getCode() + "", result)) { return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工结果合格,无需记录异常"); } // 获取条码列表 @@ -132,6 +132,8 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { mesPartInspectionDetail.setDefectTypeCode(mesDefectType.getDefectTypeCode()); mesPartInspectionDetail.setDefectTypeName(mesDefectType.getDefectTypeName()); model.setPartInspection(partInspection); + model.setType(partInspection.getSourceType()); + model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail)); ncProcessingService.saveNc(model, reqBean.getOrganizeCode()); }); From 180ce708a2fef20eea8f2005c4e5fe1786acf28c Mon Sep 17 00:00:00 2001 From: gsz Date: Sun, 30 Jun 2024 14:51:27 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E6=8A=A5=E5=B7=A5=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=95=B0=E6=8F=92=E5=85=A5=E5=B7=A5=E5=8D=95=E5=B9=B6=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5job-=E7=8A=B6=E6=80=81=E6=94=B9=E4=B8=BA=E6=9C=AA?= =?UTF-8?q?=E6=B1=87=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 38faf05..7b553f1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -741,11 +741,14 @@ public class MesWorkOrderService implements IMesWorkOrderService { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); - DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_50.getValue(),"reportStatus",ddlPackBean); + DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); + List collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("1")).collect(Collectors.toList()); + MesShift mesShift= collect.get(0); + String startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime()+":00"; //获取前一天的早班到当天早班的区间的所有加工记录,统计个数 DdlPreparedPack.timeBuilder( - new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1))+" 08:00:00", - TimeTool.getToday()+" 08:00:00", + new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1)) + startTime, + TimeTool.getToday() + startTime, "completeDateTime", ddlPackBean, false); return productionRecordRao.findByHqlWhere(ddlPackBean); From d94ceabc818e75dcacc483b2b679d6571479257c Mon Sep 17 00:00:00 2001 From: gsz Date: Sun, 30 Jun 2024 14:54:28 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E6=8A=A5=E5=B7=A5=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=95=B0=E6=8F=92=E5=85=A5=E5=B7=A5=E5=8D=95=E5=B9=B6=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5job-=E5=8F=96=E5=89=8D=E4=B8=80=E5=A4=A9=E6=97=A9?= =?UTF-8?q?=E7=8F=AD=E6=AC=A1=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 431a705..647452d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -744,8 +744,11 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); List collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("1")).collect(Collectors.toList()); - MesShift mesShift= collect.get(0); - String startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime()+":00"; + String startTime=" 08:00:00"; + if(!CollectionUtils.isEmpty(collect)){ + MesShift mesShift= collect.get(0); + startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime()+":00"; + } //获取前一天的早班到当天早班的区间的所有加工记录,统计个数 DdlPreparedPack.timeBuilder( new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1)) + startTime, From 121109290bed6f374b382b8f6d2ab1a711d52c8b Mon Sep 17 00:00:00 2001 From: administrator Date: Sun, 30 Jun 2024 15:23:22 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E4=B8=80=E6=A8=A1=E5=A4=9A=E8=85=94--?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E8=A3=85=E9=85=8D=E4=BB=B6=E6=97=B6=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=8F=96=E5=80=BC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 359cbe3..ac2817b 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 @@ -207,7 +207,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //【非排序线】获取产品加工规则对应的装配件信息 prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) - .copy(prodRuleNosortCfgList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()))); + .copy(filterList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()))); } From c664aabb3cedb70bd42e7a53d51cb9f115f66790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 15:32:39 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java | 1 - .../ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 089b191..2314eb7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -171,7 +171,6 @@ public class MesNcProcessingService implements IMesNcProcessingService { Integer type = model.getType(); MesDefectType person = StringUtil.isEmpty(model.getPerson())?new MesDefectType():model.getPerson(); - //保存数据 saveDate(model, model.getPart(), type, person, org,model.getInventoryLocationCode()); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index f88317e..ddcd3b6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -460,7 +460,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //根据物料获取已发布的工单 MesWorkOrder oldMesWorkOrder = getMesWorkOrder(productionRecord, organizeCode); if (oldMesWorkOrder == null) { - updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + //updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); return; } @@ -474,7 +474,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //根据物料获取已发布的工单 List oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null); if (CollectionUtils.isEmpty(oldMesWorkOrders)) { - updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + //updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); return; } report(productionRecord, organizeCode, userName, oldMesWorkOrders.get(0)); From f595d986294672c581f287a7cb148f3b8d32ec41 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 30 Jun 2024 15:49:19 +0800 Subject: [PATCH 10/14] =?UTF-8?q?pcn=20=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E4=B8=8B=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busi/IMesEquipVariableRwExtService.java | 1 - .../equiplog/MesEquipmentRwExtService.java | 9 +++++--- .../station/MesProductionNoSortModuleService.java | 3 +-- .../MesFunctionChooseCavityOrderService.java | 2 +- .../function/MesFunctionJumpProcessService.java | 2 +- .../function/MesFunctionJumpStateService.java | 2 +- .../MesFunctionProductionUnlockService.java | 2 +- .../step/MesCountDownShowStepService.java | 5 ++--- .../step/MesProductSnScanNosortStepService.java | 2 +- .../step/MesSendInitializationCmdStepService.java | 6 +++++- .../step/MesSendProcessCmdStepService.java | 6 +++++- .../MesProductionProcessMonitorService.java | 25 ++++++++++++++-------- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 +- 13 files changed, 41 insertions(+), 26 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java index de2e5a9..57be918 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java @@ -20,7 +20,6 @@ public interface IMesEquipVariableRwExtService { @ApiOperation(value = "写值") MesEquipVariableRwResult writeVariable(MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag); - @ApiOperation(value = "写值") MesEquipVariableRwResult writeVariable(String value, MesEquipmentVariable equipmentVariable, String kepwareFlag); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java index a97d38a..3d3141b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java @@ -82,12 +82,15 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle().toString()); params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId().toString()); + LOGGER.info("设备数据变量写值开始-> 地址:{}, params={}", equipVariableRwModel.getWriteRequestUrl(), params); String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null); LOGGER.info("设备数据变量写值返回-> data:{} ", data); - if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class).obj(JSONObject.toJSONString(equipVariableRwModel)); - else return result.noSuccessed().message(String.format("设备数据变量写值失败! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s]", - equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue())).obj(JSONObject.toJSONString(equipVariableRwModel)); + + result = !StringUtils.isEmpty(data) ? JsonUtilTool.decode(data, MesEquipVariableRwResult.class).obj(JSONObject.toJSONString(equipVariableRwModel)) : result.noSuccessed(); + return result.obj(JSONObject.toJSONString(equipVariableRwModel)).message(String.format("%s设备数据变量写值%s! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s]", + !StringUtils.isEmpty(result.getMessage()) ? String.format("%s!", result.getMessage()) : MesPcnExtConstWords.EMPTY, + result.getIsSuccessed() ? "成功" : "失败", equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue())); } 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 31b819a..b826e76 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 @@ -9,7 +9,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; -import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -90,7 +89,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { this.sendMessage(reqBean, shiftCountBean); //验证工位是否锁定 - reqBean.getDataMap().put(MesPcnConstWords.WS_CMD_INIT_MODULE, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); + reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); ((IStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).execute(reqBean); //设备BYPASS监控 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java index 6261a15..ec2a1bd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java @@ -69,7 +69,7 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); - reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); reqBean.setTriggerAutoFsm(true); shippingDispatchService.doSendScanQueueIfNoQueue(reqBean, false); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java index c7f5ddf..e937c76 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java @@ -41,7 +41,7 @@ public class MesFunctionJumpProcessService extends BaseSwsService implements IFs reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); - reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); reqBean.setForceJumpProcess(true); shippingDispatchService.doSendScanQueueNextExec(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java index 376a0cf..c07390b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java @@ -41,7 +41,7 @@ public class MesFunctionJumpStateService extends BaseSwsService implements IFsmM reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); - reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); reqBean.setScanInfo(jumpState); shippingDispatchService.doSendScanQueueNextExec(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java index 0c346bf..d14f237 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java @@ -39,7 +39,7 @@ public class MesFunctionProductionUnlockService extends BaseSwsService implement reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); - reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setBusiType(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_DO_SCAN.getCode()); reqBean.setTriggerAutoFsm(true); shippingDispatchService.doSendScanQueueIfNoQueue(reqBean, false); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java index 856b979..a2d0629 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -7,7 +7,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; -import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; @@ -49,8 +48,8 @@ public class MesCountDownShowStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); //展示组件会调用, 执行到 判断isInit结束, - Boolean isInit = reqBean.getDataMap().containsKey(MesPcnConstWords.WS_CMD_INIT_MODULE) ? true : false; - if (reqBean.getDataMap().containsKey(MesPcnConstWords.WS_CMD_INIT_MODULE)) reqBean.getDataMap().remove(MesPcnConstWords.WS_CMD_INIT_MODULE); + Boolean isInit = reqBean.getDataMap().containsKey(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode()) ? true : false; + if (reqBean.getDataMap().containsKey(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode())) reqBean.getDataMap().remove(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode()); //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanNosortStepService.java index 683e43b..a7fd07d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanNosortStepService.java @@ -256,7 +256,7 @@ public class MesProductSnScanNosortStepService extends BaseStepService { } - ////比对产出零件的空腔数量与主条码的空腔数量, 产出零件的空腔数必须小于等于 剩余待扫描主条码数量加上已扫描的空腔数量 + //比对产出零件的空腔数量与主条码的空腔数量, 产出零件的空腔数必须小于等于 剩余待扫描主条码数量加上已扫描的空腔数量 private StepResult checkFinishCodeSize(StepResult stepResult, List productionPartContextList, List productionPsInContextList, Boolean scanInfoIsFinishCode) { //没有产出零件 不需要对比空腔数量 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 5a95504..3eadfcf 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 @@ -112,7 +112,11 @@ public class MesSendInitializationCmdStepService extends BaseStepService { if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); - if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode())); + if (equipVariableRwResult.getIsSuccessed()) { + String message = String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode()); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("%s%s", message, equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, message); + } execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentCode(), i, equipVariableRwResult.getMessage())); 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 45cf45d..b20cda1 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 @@ -114,7 +114,11 @@ public class MesSendProcessCmdStepService extends BaseStepService { if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:允许加工指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); - if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送成功!", cellEquipContext.getEquipmentCode())); + if (equipVariableRwResult.getIsSuccessed()) { + String message = String.format("设备[%s]:允许加工指令发送成功!", cellEquipContext.getEquipmentCode()); + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("%s%s", message, equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, message); + } execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentCode(), i, equipVariableRwResult.getMessage())); 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 fbf2956..289ae70 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 @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.process.BaseProcessMonitorService; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -27,18 +28,15 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired private SnowflakeIdMaker snowflakeIdMaker; @Override public Boolean doProcessStart(StationRequestBean requestBean) { - Long mouldId = snowflakeIdMaker.nextId(); - - - - - - +// Long mouldId = snowflakeIdMaker.nextId(); return true; @@ -46,6 +44,7 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic @Override public Boolean doProcessComplete(StationRequestBean requestBean) { + //执行跳过工序二开实现逻辑 doJumpProcess(requestBean); //发送工序完成音 this.sendMessage(requestBean, new StationResultBean().resultObj(MesPcnExtConstWords.PROCESS_COMPLETE).busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue())); @@ -58,10 +57,18 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); //清除工步客制化区域数据【装配件清单】 this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue())); + return true; + } - //清除上下文中的所有基础数据 //TODO 临时增加 后面删掉 + @Override + public Boolean doOffLine(StationRequestBean requestBean) { + //删除当前状态点 + fsmCommonService.doFlushCache(requestBean); + //执行跳过工序二开实现逻辑 + doJumpProcess(requestBean); + //清除上下文中的所有基础数据 productionProcessContextStepService.doFlushProductionProcessContext(requestBean); - return true; } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 1be6c1a..a74262c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -161,7 +161,7 @@ public class MesPcnExtConstWords { // 读取失败睡眠毫秒数[工步参数] public static final String READ_FAILURE_SLEEP = "READ_FAILURE_SLEEP"; // 读取失败睡眠默认毫秒数 - public static final Long READ_FAILURE_SLEEP_DEFAULT_TIME = 1000L; + public static final Long READ_FAILURE_SLEEP_DEFAULT_TIME = 2000L; // 最大重试次数[工步参数] public static final String MAX_RETRY_TIMES = "MAX_RETRY_TIMES"; // 最大重试次数[工步参数] From 5f0812dcfceb52b0d9acd9a2d8efa8a42f5419ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 18:56:59 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E6=8A=A5=E5=B7=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java index 760bdbd..700069f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java @@ -22,6 +22,7 @@ import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.HashMap; @@ -49,6 +50,7 @@ public class MesReportNoSortJob extends BaseMesScheduleJob { super(MesReportNoSortJob.class, "非排序报工JOB"); } @Override + @Transactional public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { JSONObject jsonObject= new JSONObject(); From 75d76803b933ac1d2a2acd2f3a209b1502569ecc Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 30 Jun 2024 20:28:37 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E8=BD=AC=E9=85=8D?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/step/MesAssemblyShowNosortStepService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 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 ac2817b..07c4061 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 @@ -162,7 +162,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //【非排序线】获取产品加工规则对应的装配件信息 prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()). - copy(prodRuleNosortCfgList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()))); + copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()))); } return stepResult; @@ -392,8 +392,11 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { private Boolean doBusiCheckToDelete(StationRequestBean reqBean, List productionPartContextList, List productionPsInContextList) { if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); - else if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, - productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); + else if (!CollectionUtils.isEmpty(productionPartContextList)) { + productionDispatchContextStepService.saveProductionPartContext(reqBean, + productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); + productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); + } return true; } From 3fb0bff61d086e229367fa84054d7feea8a096a5 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 30 Jun 2024 20:35:03 +0800 Subject: [PATCH 13/14] show assembly --- .../step/MesAssemblyShowNosortStepService.java | 2 +- .../step/MesAssemblyShowNosortStepService2.java | 399 --------------------- 2 files changed, 1 insertion(+), 400 deletions(-) delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService2.java 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 07c4061..3c5401e 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 @@ -87,7 +87,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); //匹配失败需要清除本次扫描/读取信息 - if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return stepResult; if (prodRuleContextList.size() != initSize) { //保存上下文产品加工规则信息集合 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService2.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService2.java deleted file mode 100644 index fa787d4..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService2.java +++ /dev/null @@ -1,399 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.mes.pcn.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.MesProdRuleNosortCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; -import cn.estsh.i3plus.pojo.mes.model.AttrBean; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -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.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; - -/** - * @Description : 显示装配件扫描项工步【非排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesAssemblyShowNosortStepService2") -public class MesAssemblyShowNosortStepService2 extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IMesProdRuleCfgExtService prodRuleCfgExtService; - - @Autowired - private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService; - - @Autowired - private IMesProductionRecordService productionRecordService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); - - //配置错误 抛出异常 - if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - - //从上下文中取出生产线对象 - MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); - - //从上下文中取出生产线对象 - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - - //获取上下文加工规则数据信息集合 - List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - - //获取上下文产出零件数据信息集合 - List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); - - //获取上下文进料零件条码信息集合 - List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); - - //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 - if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); - Integer initSize = prodRuleContextList.size(); - - //封装非排序加工规则 - doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); - - if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); - - if (prodRuleContextList.size() != initSize) { - //保存上下文产品加工规则信息集合 - productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); - //保存上下文产出零件信息 - if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); - //保存进料主条码数据 - if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); - } - - //显示装配件信息 - showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList); - - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "装配件扫描项已查询完毕,请查看!"); - } - - private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, - List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { - //没有【产出零件数据】【进料零件条码信息】,则直接跳过 【当前是生成零件号场景】 - if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(productionPsInContextList)) return stepResult; - - //根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错) - if (CollectionUtils.isEmpty(productionPartContextList)) return doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPsInContextList); - //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错) - else return doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); - - } - - //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错) - private StepResult doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { - - //加工规则的数据已与产出零件的数量一致 - if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult; - - //拿到当前最大的foreignKey - Optional maxForeignKeyOptional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPartContext::getForeignKey)); - Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO; - - //搜集未匹配规则的产出零件 - List outPartNoList = productionPartContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); - - //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) - if (CollectionUtils.isEmpty(productionPsInContextList)) return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey); - //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错) - else return doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey); - - } - - //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) - private StepResult doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList, List outPartNoList, Integer foreignKey) { - - //【非排序线】获取产品加工规则 ; 条件进料[NULL] - List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList).inPartIsEmpty(true).inPartRuleIsEmpty(true)); - //根据产出零件分组数据 - Map> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList); - - for (MesProductionPartContext productionPartContext : productionPartContextList) { - - //foreignKey有值代表已经匹配过产品加工规则 - if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; - - List filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null; - - if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) { - productionPartContext.busiCheckToDelete(); - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( - "请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]进料零件[空]进料零件规则[空]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size())); - } - - //【非排序线】获取产品加工规则对应的装配件信息 - prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()). - copy(prodRuleNosortCfgList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()))); - - } - return stepResult; - } - - //没有【产出零件数据】信息 , 根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错) - private StepResult doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPsInContextList) { - - //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回 - List prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, null); - - //拿到当前最大的foreignKey - Optional maxForeignKeyOptional = productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPsInContext::getForeignKey)); - Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO; - - for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { - - //foreignKey有值代表已经匹配过产品加工规则 - if (null == productionPsInContext || productionPsInContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue; - - List filterList; - //搜集进料零件号匹配的产品加工规则 - if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) filterList = filterProdRuleNosortCfgList(prodRuleNosortCfgList, productionPsInContext.getPartNo()); - //进料零件条码匹配进料零件规则 - else filterList = (List) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(prodRuleNosortCfgList)); - - if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) { - productionPsInContext.busiCheckToDelete(); - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( - "请检查非排序产品加工规则信息,根据设备[%s]进料零件条码[%s]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPsInContext.getProductSn(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size())); - - } - - if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !(Boolean) productionRecordService.checkSnTimeliness( - reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterList.get(0).getId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE20.getValue(), false).get(MesPcnExtConstWords.RESULT)) { - productionPsInContext.busiCheckToDelete(); - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("请检查进料主条码信息,进料主条码[%s]时效性验证不通过!", productionPsInContext.getProductSn())); - } - - //【非排序线】获取产品加工规则对应的装配件信息 - prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) - .copy(prodRuleNosortCfgList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()))); - - } - - return stepResult; - - } - - private List getProdRuleNosortCfgList(StationRequestBean reqBean, MesCellEquipContext cellEquipContext, List productionPsInContextList, List outPartNoList) { - //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件可能携带产出零件 - List inPartNoList = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList()); - Optional optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && StringUtils.isEmpty(o.getPartNo()))).findFirst(); - List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList( - !CollectionUtils.isEmpty(inPartNoList) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartNos(inPartNoList).outPartNos(outPartNoList) : null, - (null != optional && optional.isPresent()) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartIsEmpty(true).inPartRuleIsEmpty(false).outPartNos(outPartNoList) : null); - return prodRuleNosortCfgList; - } - - //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错) - private StepResult doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, - List prodRuleContextList, List productionPartContextList, List productionPsInContextList, List outPartNoList, Integer foreignKey) { - - //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件携带产出零件 - List prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, outPartNoList); - //根据产出零件分组数据 - Map> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList); - - for (MesProductionPartContext productionPartContext : productionPartContextList) { - - //foreignKey有值代表已经匹配过产品加工规则 - if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; - - //获取匹配产出零件的所有加工规则 - List outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null; - - String productSn = null; - - //判断是否还存在待匹配的主条码信息, 内部循环匹配成功会标记 foreignKey - Optional optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); - if (null == optional || !optional.isPresent()) break; - - List innerfilterList = null; - for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { - - //foreignKey有值代表已经匹配过产品加工规则 - if (null == productionPsInContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue; - - //搜集进料零件号匹配的产品加工规则 - if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) innerfilterList = filterProdRuleNosortCfgList(outPartNoProdRuleList, productionPsInContext.getPartNo()); - //进料零件条码匹配进料零件规则 - else innerfilterList = (List) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(outPartNoProdRuleList)); - - if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue; - - if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !(Boolean) productionRecordService.checkSnTimeliness( - reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), innerfilterList.get(0).getId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE20.getValue(), false).get(MesPcnExtConstWords.RESULT)) { - productionPsInContext.busiCheckToDelete(); - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("请检查进料主条码信息,进料主条码[%s]时效性验证不通过!", productionPsInContext.getProductSn())); - } - - productionPartContext.foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()); - - productSn = productionPsInContext.getProductSn(); - - break; - - } - - if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) { - - productionPsInContextList.forEach(o -> { - if (StringUtils.isEmpty(o.getForeignKey()) || o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) o.busiCheckToDelete(); - }); - - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( - "请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]匹配任意一个主条码%s查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(), - productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).map(MesProductionPsInContext::getProductSn).collect(Collectors.toList()).toString(), - CollectionUtils.isEmpty(innerfilterList) ? MesPcnExtConstWords.ZERO : innerfilterList.size())); - - } - - //【非排序线】获取产品加工规则对应的装配件信息 - prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()). - copy(innerfilterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).productSn(productSn)).foreignKey(productionPartContext.getForeignKey())); - - } - - return stepResult; - - } - - //搜集进料零件号匹配的产品加工规则 - private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList, String partNo) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList()); - } - - //搜集进料零件规则有值的产品加工规则 - private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getInPartNo()) && !StringUtils.isEmpty(o.getInPartNoRule()))).collect(Collectors.toList()); - } - - //根据产出零件分组数据 - private Map> groupProdRuleNosortCfgList(List prodRuleNosortCfgList) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo)); - } - - //显示装配件信息 - public Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList) { - - Map productionPartMap = productionPartContextList == null ? null : productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); - - for (MesProdRuleContext prodRuleContext : prodRuleContextList) { - - if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; - - String workOrderNo = getWorkOrderNo(productionPartMap, prodRuleContext.getForeignKey()); - - //封装匹配当前设备的装配件信息 - List assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter), prodRuleContext, workOrderNo); - if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; - - //装配件清单列表标题 - List attrBeanList = dataAttrList(workOrderNo); - - //封装多表格 - resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList)); - - } - - if (CollectionUtils.isEmpty(resultBean.getStationResultBeans())) return false; - - resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()); - this.sendMessage(reqBean, resultBean); - - return true; - - } - - private String getWorkOrderNo(Map productionPartMap, Integer foreignKey) { - return (!CollectionUtils.isEmpty(productionPartMap) && productionPartMap.containsKey(foreignKey)) ? productionPartMap.get(foreignKey).getWorkOrderNo() : null; - } - - //封装匹配当前设备的装配件信息 - private List getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList, MesProdRuleContext prodRuleContext, String workOrderNo) { - if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; - List assemblyShowContextList = new ArrayList<>(); - for (MesProductionAssemblyContext item : productionAssemblyContextList) { - if (null == item) continue; - assemblyShowContextList.add(assemblyShowContext(item, prodRuleContext, workOrderNo)); - } - - assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); - - AtomicReference index = new AtomicReference<>(0); - assemblyShowContextList.forEach(o -> o.index(index.updateAndGet(v -> v + 1))); - - return assemblyShowContextList; - } - - //封装装配件信息 - private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o, MesProdRuleContext prodRuleContext, String workOrderNo) { - MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); - BeanUtils.copyProperties(o, 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()); - return assemblyShowContext; - } - - //装配件清单列表标题 - private List dataAttrList(String workOrderNo) { - List attrBeanList = new ArrayList<>(); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号"); - if (!StringUtils.isEmpty(workOrderNo)) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态"); - return attrBeanList; - } - - private Boolean doBusiCheckToDelete(StationRequestBean reqBean, List productionPartContextList, List productionPsInContextList) { - if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, - productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); - else if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, - productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); - return true; - } - -} From 1e0e4a94d17f6d763a7673e4d9d2749054c5df72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 21:37:20 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E6=8A=A5=E5=B7=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/schedulejob/MesReportNoSortJob.java | 4 +-- .../serviceimpl/busi/MesWorkOrderService.java | 37 ++++++---------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java index 700069f..5691a7a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java @@ -85,7 +85,7 @@ public class MesReportNoSortJob extends BaseMesScheduleJob { } catch (ImppBusiException e) { LOGGER.error("条码:{}报工失败", unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); - updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); + //updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); } } @@ -101,7 +101,7 @@ public class MesReportNoSortJob extends BaseMesScheduleJob { } catch (ImppBusiException e) { LOGGER.error("条码:{}报工失败", unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); - updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); + //updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 2a8a86b..9323e37 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -274,32 +274,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); - //报工类型 - if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrderDb.getReportType()) { - mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrderDb.getNum(), mesWorkOrderDb.getReportedQty())); - //更新工单状态 - double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty()); - mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); - if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) { - MesPcnException.throwMesBusiException("工单报工数量【%s】大于工单数量【%s】,不允许报工", - mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty()); - } else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) { - mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - } else { - mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); - } - } else { - //报工调整数量加- - mesWorkOrderDb.setAdjustQty((MathOperation.add(mesWorkOrderDb.getNum(), mesWorkOrderDb.getAdjustQty()))); - //冲销数量大于工单完成数量报错 - if (mesWorkOrderDb.getAdjustQty() > mesWorkOrderDb.getReportedQty()) { - MesPcnException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", - mesWorkOrderDb.getAdjustQty(), mesWorkOrderDb.getReportedQty()); - } - } + LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo()); //更新工单 - updateMesWorkOrder(mesWorkOrderDb, userName ); + // updateMesWorkOrder(mesWorkOrderDb, userName ); //生成条码 todo 有条码 不生成 @@ -650,8 +628,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCenterCode(), "workCenterCode", ddlPackBean); - if (!StringUtils.isEmpty(workOrderNo)) { - DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); + if (!StringUtils.isEmpty(productionRecord.getWorkOrderNo())) { + DdlPreparedPack.getStringEqualPack(productionRecord.getWorkOrderNo(), "workOrderNo", ddlPackBean); } DdlPreparedPack.getInPackList(list, "workOrderStatus", ddlPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); @@ -762,6 +740,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()), "productSn",snPackBean); + DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean); return mesProduceSnRao.findByHqlWhere(snPackBean); } @@ -879,6 +858,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { item.setProduceTime(TimeTool.getToday()); item.setUnCompleteQty(0d); item.setQty(value.stream().mapToDouble(MesProduceSn::getQty).sum()); + item.setReportedQty(item.getQty()); + item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + + //校验标识 //若工单类型为排序 List saveMesWorkOrderToWms = new ArrayList<>(); @@ -894,7 +877,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + //item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); //发送工单信息给WMS saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); }