From a165129bc6257e8498fd5b2276eb5338b8eaedd4 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 5 Dec 2023 10:12:19 +0800 Subject: [PATCH] work cell takt collect --- .../ISxThirdPartyPlcCollectDataStepService.java | 25 +++++ .../schedulejob/SxThirdPartyPlcCollectDataJob.java | 1 - .../busi/collect/SxCellTaktDispatchSingleton.java | 73 ++++++++++++++ .../busi/collect/SxCellTaktMonitorHandler.java | 66 +++++++++++++ .../SxThirdPartyPlcCollectCellTaktService.java | 28 +++--- .../SxThirdPartyPlcCollectReadPlcStepService.java | 22 +++++ .../busi/jx/JxProdBusiStrategyRepairService.java | 17 ++-- .../busi/jx/JxProdBusiStrategyStandardService.java | 25 ++--- .../busi/step/jx/JxInitOrderStepService.java | 39 +++++--- .../JxSnFinalInspectionInitOrderStepService.java | 107 --------------------- .../busi/step/jx/JxSnLineOnBindMcStepService.java | 5 - .../step/jx/JxSnLineOnCheckMcOrPsStepService.java | 14 ++- .../step/jx/JxSnLineOnInitOrderStepService.java | 107 --------------------- .../pcn/pojo/bean/SxWorkCellTaktCollectPlcCfg.java | 2 +- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 5 + .../ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java | 1 + 16 files changed, 269 insertions(+), 268 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/ISxThirdPartyPlcCollectDataStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktDispatchSingleton.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktMonitorHandler.java rename modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/{job => busi/collect}/SxThirdPartyPlcCollectCellTaktService.java (64%) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectReadPlcStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnInitOrderStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/ISxThirdPartyPlcCollectDataStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/ISxThirdPartyPlcCollectDataStepService.java new file mode 100644 index 0000000..2965798 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/ISxThirdPartyPlcCollectDataStepService.java @@ -0,0 +1,25 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import io.swagger.annotations.ApiOperation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: wangjie + * @CreateDate: 2021/01/18 11:22 上午 + * @Description: + **/ +public interface ISxThirdPartyPlcCollectDataStepService { + + /** + * 第三方PLC数据采集定时任务---步骤执行 + * @param objs 参数 + * @return 结果 + */ + @ApiOperation(value = "第三方PLC数据采集定时任务---步骤执行", notes = "第三方PLC数据采集定时任务---步骤执行") + @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) + StepResult exec(Object... objs); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/SxThirdPartyPlcCollectDataJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/SxThirdPartyPlcCollectDataJob.java index 340dafd..f3ef2d7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/SxThirdPartyPlcCollectDataJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/SxThirdPartyPlcCollectDataJob.java @@ -34,7 +34,6 @@ public class SxThirdPartyPlcCollectDataJob implements Job { Map paramMap = JSONObject.parseObject(param.toString(), Map.class); if (!paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE) || !paramMap.containsKey(MesPcnExtConstWords.STRATEGY_CLASS)) return; - if (!paramMap.containsKey(MesPcnExtConstWords.USER_INFO)) paramMap.put(MesPcnExtConstWords.USER_INFO, MesPcnExtConstWords.JOB); long startTime = System.currentTimeMillis(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktDispatchSingleton.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktDispatchSingleton.java new file mode 100644 index 0000000..70b0fee --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktDispatchSingleton.java @@ -0,0 +1,73 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.collect; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 采集工位节拍调度单例模式 + */ +@Slf4j +public class SxCellTaktDispatchSingleton { + + protected volatile static Boolean isInit = false; + + private static class SxCellTaktDispatchHolder { private final static SxCellTaktDispatchSingleton INSTANCE = new SxCellTaktDispatchSingleton(); } + + public static SxCellTaktDispatchSingleton getInstance() { return SxCellTaktDispatchHolder.INSTANCE; } + + private SxCellTaktDispatchSingleton() { isInit = true; } + + private volatile static Map cellTaktMonitorMap = new ConcurrentHashMap<>(); + + public static Boolean getIsInit() { return isInit; } + + public static synchronized void execMonitor(String org, Map cfgMap) { + if (CollectionUtils.isEmpty(cfgMap)) execMonitorRemove(getCellTaktMonitorMapKeyList(org)); + else execMonitorCompareToCfg(org, cfgMap); + } + + private static void execMonitorRemove(List removeKeyList) { + if (!CollectionUtils.isEmpty(removeKeyList)) removeKeyList.stream().forEach(SxCellTaktDispatchSingleton::execMonitorRemove); + } + + private static void execMonitorCompareToCfg(String org, Map cfgMap) { + List cellTaktMonitorMapKeyList = getCellTaktMonitorMapKeyList(org); + List removeKeyList = CollectionUtils.isEmpty(cellTaktMonitorMapKeyList) ? null : cellTaktMonitorMapKeyList.stream().filter(o -> (!StringUtils.isEmpty(o) && !cfgMap.containsKey(o))).collect(Collectors.toList()); + execMonitorRemove(removeKeyList); + execMonitorCompute(org, cfgMap); + } + + private static List getCellTaktMonitorMapKeyList(String org) { + List cellTaktMonitorMapKeyList = CollectionUtils.isEmpty(cellTaktMonitorMap) ? null : new ArrayList<>(cellTaktMonitorMap.keySet()); + return CollectionUtils.isEmpty(cellTaktMonitorMapKeyList) ? null : cellTaktMonitorMapKeyList.stream().filter(o -> (!StringUtils.isEmpty(o) && o.split(MesPcnExtConstWords.COLON)[0].equals(org))).collect(Collectors.toList()); + } + + private static void execMonitorRemove(String key) { + cellTaktMonitorMap.computeIfPresent(key, (k, v) -> { + v.cancel(); + cellTaktMonitorMap.remove(key); + return null; + }); + } + + private static void execMonitorCompute(String org, Map cfgMap) { + for (String key : cfgMap.keySet()) { + if (StringUtils.isEmpty(key)) continue; + String[] plcCodeArr = cfgMap.get(key).split(MesPcnExtConstWords.COMMA); + if (null == plcCodeArr || plcCodeArr.length != 2) continue; + cellTaktMonitorMap.compute(key, (k, v) -> { + if (null == v) v = new SxCellTaktMonitorHandler(org); + return v.plcCodeArr(plcCodeArr); + }); + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktMonitorHandler.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktMonitorHandler.java new file mode 100644 index 0000000..8563f3c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxCellTaktMonitorHandler.java @@ -0,0 +1,66 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.collect; + +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import org.springframework.util.StringUtils; + +import java.util.concurrent.ExecutorService; + +/** + * 采集工位节拍监控处理器 + */ +public class SxCellTaktMonitorHandler { + + private volatile Boolean isOpen = true; + + private volatile String plcCode2Flag; + + private volatile String plcCode2Data; + + private String org; + + private ExecutorService executorService; + + private ListenableFuture listenFuture; + + public SxCellTaktMonitorHandler(String org) { + this.org = org; + executorService = SpringContextsUtil.getBean(ExecutorService.class); + ListeningExecutorService listenExecutor = MoreExecutors.listeningDecorator(executorService); + listenFuture = listenExecutor.submit(() -> { + execMonitor(); + return null; + }); + } + + public SxCellTaktMonitorHandler plcCodeArr(String[] plcCodeArr) { + this.plcCode2Flag = plcCodeArr[0]; + this.plcCode2Data = plcCodeArr[1]; + return this; + } + + public void cancel() { + if (null == this.listenFuture) return; + isOpen = false; + listenFuture.cancel(true); + } + + private void execMonitor() { + + while (isOpen) { + + if (StringUtils.isEmpty(plcCode2Flag) || StringUtils.isEmpty(plcCode2Data)) continue; + + String plcFlag = plcCode2Flag; + + String plcData = plcCode2Data; + + + + + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/SxThirdPartyPlcCollectCellTaktService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectCellTaktService.java similarity index 64% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/SxThirdPartyPlcCollectCellTaktService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectCellTaktService.java index b35581f..a5b38d6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/SxThirdPartyPlcCollectCellTaktService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectCellTaktService.java @@ -1,4 +1,4 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.collect; import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxThirdPartyPlcCollectDataJobService; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.SxWorkCellTaktCollectPlcCfg; @@ -25,14 +25,25 @@ public class SxThirdPartyPlcCollectCellTaktService implements ISxThirdPartyPlcCo @Override public void doThirdPartyPlcCollectData(Map paramMap) { - if (!checkConfigStatus(paramMap)) return; + String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE); - List workCellTaktCollectPlcCfgList = getWorkCellTaktCollectPlcCfgList(paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE)); + if (checkOrgIsStopMonitor(organizeCode, paramMap.get(MesPcnExtConstWords.STATUS))) return; + Map cfgMap = getWorkCellTaktCollectPlcCfgList(organizeCode); + if (!SxCellTaktDispatchSingleton.getIsInit()) SxCellTaktDispatchSingleton.getInstance(); + + SxCellTaktDispatchSingleton.execMonitor(organizeCode, cfgMap); + + } + + private Boolean checkOrgIsStopMonitor(String organizeCode, String status) { + if (!StringUtils.isEmpty(status) && status.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) return false; + if (SxCellTaktDispatchSingleton.getIsInit()) SxCellTaktDispatchSingleton.execMonitor(organizeCode, null); + return true; } - private List getWorkCellTaktCollectPlcCfgList(String organizeCode) { + private Map getWorkCellTaktCollectPlcCfgList(String organizeCode) { List workCellTaktCollectPlcCfgList = workCellTaktCollectPlcCfgRepository.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.STATUS}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); @@ -42,13 +53,8 @@ public class SxThirdPartyPlcCollectCellTaktService implements ISxThirdPartyPlcCo workCellTaktCollectPlcCfgList = CollectionUtils.isEmpty(workCellTaktCollectPlcCfgList) ? null : workCellTaktCollectPlcCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPlcCode()))).distinct().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SxWorkCellTaktCollectPlcCfg::getPlcCode))), ArrayList::new)); - return workCellTaktCollectPlcCfgList; - } - - private Boolean checkConfigStatus(Map paramMap) { - if (paramMap.containsKey(MesPcnExtConstWords.STATUS) && paramMap.get(MesPcnExtConstWords.STATUS).equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) return true; - - return false; + return CollectionUtils.isEmpty(workCellTaktCollectPlcCfgList) ? null : + workCellTaktCollectPlcCfgList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString(), SxWorkCellTaktCollectPlcCfg::getPlcCode)); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectReadPlcStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectReadPlcStepService.java new file mode 100644 index 0000000..5e33b1e --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectReadPlcStepService.java @@ -0,0 +1,22 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.collect; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxThirdPartyPlcCollectDataStepService; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import lombok.extern.slf4j.Slf4j; + +/** + * 第三方PLC数据采集定时任务---步骤执行---读PLC + */ +@Slf4j +public class SxThirdPartyPlcCollectReadPlcStepService implements ISxThirdPartyPlcCollectDataStepService { + + public SxThirdPartyPlcCollectReadPlcStepService() {} + + @Override + public StepResult exec(Object ... objs) { + return null; + } + + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java index 7571681..ba8cbc3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnRepair; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnRepairRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -43,18 +44,20 @@ public class JxProdBusiStrategyRepairService implements IJxProdBusiStrategyServi private StepResult checkLineOn4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - stepResult.isCompleted(false); - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo()) && + MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue() == params.getProduceSnExtDb().getQcStatus() && MesPcnExtEnumUtil.PRODUCE_SN_STATUS.REPAIR_OFFLINE.getValue() != params.getProduceSnExtDb().getSnStatus()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); + + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.nextTriggerEvent(MesPcnExtConstWords.TMP_ORDER).msg(String.format("%s[%s]对应的产品条码信息已被标记成[返修品],即将切换到临时工单[%s]!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo())); + else + return stepResult.msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java index 3b9ff19..a65616d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java @@ -78,24 +78,27 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer private StepResult checkLineOn4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - stepResult.isCompleted(false); - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); if (null != params.getProduceSnMcRecordDb() && MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnMcRecordDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - if (null != params.getProduceSnMcRecordDb() && !params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); + if (params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo()) && + null != params.getProduceSnMcRecordDb() && !params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo()) && + MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue() == params.getProduceSnExtDb().getQcStatus() && MesPcnExtEnumUtil.PRODUCE_SN_STATUS.REPAIR_OFFLINE.getValue() != params.getProduceSnExtDb().getSnStatus()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); + + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.nextTriggerEvent(MesPcnExtConstWords.TMP_ORDER).msg(String.format("%s[%s]对应的产品条码信息已被标记成[返修品],即将切换到临时工单[%s]!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo())); + else + return stepResult.msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxInitOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxInitOrderStepService.java index c4706c2..81584d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxInitOrderStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxInitOrderStepService.java @@ -24,6 +24,7 @@ import org.springframework.util.StringUtils; import java.lang.reflect.Method; import java.util.List; import java.util.Map; +import java.util.StringJoiner; /** * @Description : 嘉兴初始化工单工步 @@ -51,43 +52,51 @@ public class JxInitOrderStepService extends BaseStepService { StationResultBean resultBean = new StationResultBean(); - String selectWorkOrderNo = (String) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleSelectWorkOrderNo, 1, null); String curExecWorkOrderNo = (String) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleCurExecWorkOrder, 1, null); + String selectWorkOrderNo = (String) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleSelectWorkOrderNo, 1, null); + String curExecWorkOrderNoReal = curExecWorkOrderNo; + String selectWorkOrderNoReal = (StringUtils.isEmpty(selectWorkOrderNo) || !selectWorkOrderNo.contains(MesPcnExtConstWords.COLON)) ? selectWorkOrderNo : selectWorkOrderNo.split(MesPcnExtConstWords.COLON)[1]; - if (!StringUtils.isEmpty(selectWorkOrderNo)) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleSelectWorkOrderNo, 3, null); - if (!StringUtils.isEmpty(selectWorkOrderNo) && !StringUtils.isEmpty(curExecWorkOrderNo)) { - if (selectWorkOrderNo.equals(curExecWorkOrderNo)) selectWorkOrderNo = null; - else curExecWorkOrderNo = null; + if (!StringUtils.isEmpty(selectWorkOrderNoReal)) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleSelectWorkOrderNo, 3, null); + if (!StringUtils.isEmpty(selectWorkOrderNoReal) && !StringUtils.isEmpty(curExecWorkOrderNoReal)) { + if (selectWorkOrderNoReal.equals(curExecWorkOrderNoReal)) selectWorkOrderNoReal = null; + else curExecWorkOrderNoReal = null; } MesWorkOrderExt workOrderExt = null; - if (!StringUtils.isEmpty(selectWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), selectWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("选择的工单号[%s]", selectWorkOrderNo)); - doCacheCurExecWorkOrderNo(reqBean, resultBean, stepResult, selectWorkOrderNo); + if (!StringUtils.isEmpty(selectWorkOrderNoReal)) { + workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), selectWorkOrderNoReal); + String suffix = String.format("%s[%s]", !selectWorkOrderNo.contains(MesPcnExtConstWords.COLON) ? + "选择的工单号" : (selectWorkOrderNo.contains(MesPcnExtConstWords.TMP_ORDER) ? "临时工单号" : "回退工单号"), selectWorkOrderNoReal); + checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, suffix); + doCacheCurExecWorkOrderNo(reqBean, resultBean, stepResult, selectWorkOrderNoReal, suffix); + if (selectWorkOrderNo.contains(MesPcnExtConstWords.TMP_ORDER) && !StringUtils.isEmpty(curExecWorkOrderNo)) + doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleSelectWorkOrderNo, 2, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.BACK_ORDER).add(curExecWorkOrderNo).toString()); } - if (!StringUtils.isEmpty(curExecWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("此前操作的工单号[%s]", curExecWorkOrderNo)); + if (!StringUtils.isEmpty(curExecWorkOrderNoReal)) { + workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNoReal); + checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("此前操作的工单号[%s]", curExecWorkOrderNoReal)); } if (null == workOrderExt || !stepResult.isCompleted()) execSendGuideAndThrowEx(reqBean, resultBean, "请选择启动状态的生产工单!"); cacheOrderModel(reqBean, workOrderExt); + if (!selectWorkOrderNo.contains(MesPcnExtConstWords.TMP_ORDER)) reqBean.setScanInfo(null); + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxInitOrderStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); return stepResult; } - private void doCacheCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, String selectWorkOrderNo) { + private void doCacheCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, String selectWorkOrderNo, String suffix) { Boolean flag = (Boolean) doHandleModuleObjectMethod(reqBean, resultBean, MesPcnExtConstWords.doHandleCurExecWorkOrder, 2, selectWorkOrderNo); - if (!flag) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("选择的工单号[%s]初始化失败!", selectWorkOrderNo)); + if (!flag) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s初始化失败!", suffix)); else { execStateModule(reqBean, resultBean); - if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean, String.format("选择的工单号[%s]初始化成功!", selectWorkOrderNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean, String.format("%s初始化成功!", suffix), 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/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java deleted file mode 100644 index 9905d9f..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; - -import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnFinalInspectionModuleService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WorkOrderExtModel; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; -import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; -import cn.estsh.i3plus.platform.common.tool.MathOperation; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -/** - * @Description : 嘉兴条码终检初始化工单工步 - * @Reference : - * @Author : wangjie - * @CreateDate : 2019-07-11 - * @Modify: - **/ -@Slf4j -@Service("jxSnFinalInspectionInitOrderStepService") -public class JxSnFinalInspectionInitOrderStepService extends BaseStepService { - - @Autowired - private JxSnFinalInspectionModuleService snFinalInspectionModuleService; - - @Autowired - private ISxWorkOrderExtService workOrderExtService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionInitOrderStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - - StepResult stepResult = StepResult.getSuccessComplete(); - - StationResultBean resultBean = new StationResultBean(); - - String selectWorkOrderNo = (String) snFinalInspectionModuleService.doHandleSelectWorkOrderNo(reqBean, 1, null); - String curExecWorkOrderNo = (String) snFinalInspectionModuleService.doHandleCurExecWorkOrder(reqBean, 1, null); - - if (!StringUtils.isEmpty(selectWorkOrderNo)) snFinalInspectionModuleService.doHandleSelectWorkOrderNo(reqBean, 3, null); - if (!StringUtils.isEmpty(selectWorkOrderNo) && !StringUtils.isEmpty(curExecWorkOrderNo)) { - if (selectWorkOrderNo.equals(curExecWorkOrderNo)) selectWorkOrderNo = null; - else curExecWorkOrderNo = null; - } - - MesWorkOrderExt workOrderExt = null; - - if (!StringUtils.isEmpty(selectWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), selectWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("选择的工单号[%s]", selectWorkOrderNo)); - doCacheCurExecWorkOrderNo(reqBean, resultBean, stepResult, selectWorkOrderNo); - } - - if (!StringUtils.isEmpty(curExecWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("此前操作的工单号[%s]", curExecWorkOrderNo)); - } - - if (null == workOrderExt || !stepResult.isCompleted()) execSendGuideAndThrowEx(reqBean, resultBean, "请选择启动状态的生产工单!"); - - cacheOrderModel(reqBean, workOrderExt); - - log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionInitOrderStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - - return stepResult; - } - - private void doCacheCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, String selectWorkOrderNo) { - Boolean flag = (Boolean) snFinalInspectionModuleService.doHandleCurExecWorkOrder(reqBean, 2, selectWorkOrderNo); - if (!flag) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("选择的工单号[%s]初始化失败!", selectWorkOrderNo)); - else { - snFinalInspectionModuleService.execStateModule(reqBean, null, null); - if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean, String.format("选择的工单号[%s]初始化成功!", selectWorkOrderNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - } - } - - private void checkWorkOrderExtIsValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkOrderExt workOrderExt, String suffix) { - - if (null == workOrderExt) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s对应的工单信息不存在!", suffix)); - - if (stepResult.isCompleted() && MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus()) - execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s状态[%s],不支持在此工位操作!", suffix, MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))); - - if (stepResult.isCompleted() && MathOperation.compareTo(workOrderExt.getQty(), new Double(0)) <= 0) - execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s计划数量为[0],不支持在此工位操作!", suffix)); - - if (!stepResult.isCompleted()) return; - - } - - private void cacheOrderModel(StationRequestBean reqBean, MesWorkOrderExt workOrderExt) { - WorkOrderExtModel orderModel = new WorkOrderExtModel(); - BeanUtils.copyProperties(workOrderExt, orderModel, MesPcnExtConstWords.ID); - reqBean.getDataMap().put(MesPcnExtConstWords.WORK_ORDER, orderModel); - } - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java index 6029226..3e93250 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java @@ -41,11 +41,6 @@ public class JxSnLineOnBindMcStepService extends BaseStepService { private ISxWorkOrderExtService workOrderExtService; @Override - public StepResult guide(StationRequestBean reqBean) { - return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描管理编码或产品条码!"); - } - - @Override public StepResult execute(StationRequestBean reqBean) { log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnBindMcStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java index f5a6fde..03de4f1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java @@ -60,16 +60,16 @@ public class JxSnLineOnCheckMcOrPsStepService extends BaseStepService { log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnCheckMcOrPsStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - StepResult stepResult = StepResult.getSuccessComplete(); - StationResultBean resultBean = new StationResultBean(); - if (StringUtils.isEmpty(reqBean.getScanInfo())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "入参缺少管理编码或产品条码!"); + if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描管理编码或产品条码!"); String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean); WorkOrderExtModel orderModel = getWorkOrderExtModel(reqBean, resultBean, curExecWorkOrderNo); + StepResult stepResult = StepResult.getSuccessComplete(); + checkScanInfoIsValid(reqBean, resultBean, stepResult, orderModel); log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnCheckMcOrPsStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); @@ -113,6 +113,14 @@ public class JxSnLineOnCheckMcOrPsStepService extends BaseStepService { stepResult.setCompleted(result.isCompleted()); + if (!StringUtils.isEmpty(result.getNextTriggerEvent()) && (Boolean) snLineOnModuleService.doHandleSelectWorkOrderNo( + reqBean, 2, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.TMP_ORDER).add(params.getProduceSnExtDb().getLastWorkOrderNo()).toString())) + return stepResult.nextTriggerEvent(result.getNextTriggerEvent()).isCompleted(false); + + reqBean.setScanInfo(null); + if (!StringUtils.isEmpty(result.getNextTriggerEvent())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + new StringJoiner(MesPcnExtConstWords.COMMA).add(result.getMsg().split(MesPcnExtConstWords.COMMA)[0]).add(String.format(",缓存临时工单[%s]失败!", params.getProduceSnExtDb().getLastWorkOrderNo())).toString()); + reqBean.setSerialNumber(params.getSerialNumber()); reqBean.setProductSn(params.getProductSn()); reqBean.setTray(null == params.getProduceSnMcRecordDb() ? params.getManageCode() : new StringJoiner(MesPcnExtConstWords.AND).add(params.getProduceSnMcRecordDb().getManageCode()).add(params.getProduceSnMcRecordDb().getId().toString()).toString()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnInitOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnInitOrderStepService.java deleted file mode 100644 index dc5f83c..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnInitOrderStepService.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; - -import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnLineOnModuleService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WorkOrderExtModel; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; -import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; -import cn.estsh.i3plus.platform.common.tool.MathOperation; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -/** - * @Description : 嘉兴条码上线初始化工单工步 - * @Reference : - * @Author : wangjie - * @CreateDate : 2019-07-11 - * @Modify: - **/ -@Slf4j -@Service("jxSnLineOnInitOrderStepService") -public class JxSnLineOnInitOrderStepService extends BaseStepService { - - @Autowired - private JxSnLineOnModuleService snLineOnModuleService; - - @Autowired - private ISxWorkOrderExtService workOrderExtService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - - log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnInitOrderStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - - StepResult stepResult = StepResult.getSuccessComplete(); - - StationResultBean resultBean = new StationResultBean(); - - String selectWorkOrderNo = (String) snLineOnModuleService.doHandleSelectWorkOrderNo(reqBean, 1, null); - String curExecWorkOrderNo = (String) snLineOnModuleService.doHandleCurExecWorkOrder(reqBean, 1, null); - - if (!StringUtils.isEmpty(selectWorkOrderNo)) snLineOnModuleService.doHandleSelectWorkOrderNo(reqBean, 3, null); - if (!StringUtils.isEmpty(selectWorkOrderNo) && !StringUtils.isEmpty(curExecWorkOrderNo)) { - if (selectWorkOrderNo.equals(curExecWorkOrderNo)) selectWorkOrderNo = null; - else curExecWorkOrderNo = null; - } - - MesWorkOrderExt workOrderExt = null; - - if (!StringUtils.isEmpty(selectWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), selectWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("选择的工单号[%s]", selectWorkOrderNo)); - doCacheCurExecWorkOrderNo(reqBean, resultBean, stepResult, selectWorkOrderNo); - } - - if (!StringUtils.isEmpty(curExecWorkOrderNo)) { - workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); - checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("此前操作的工单号[%s]", curExecWorkOrderNo)); - } - - if (null == workOrderExt || !stepResult.isCompleted()) execSendGuideAndThrowEx(reqBean, resultBean, "请选择启动状态的生产工单!"); - - cacheOrderModel(reqBean, workOrderExt); - - log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnInitOrderStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - - return stepResult; - } - - private void doCacheCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, String selectWorkOrderNo) { - Boolean flag = (Boolean) snLineOnModuleService.doHandleCurExecWorkOrder(reqBean, 2, selectWorkOrderNo); - if (!flag) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("选择的工单号[%s]初始化失败!", selectWorkOrderNo)); - else { - snLineOnModuleService.execStateModule(reqBean, null, null); - if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean, String.format("选择的工单号[%s]初始化成功!", selectWorkOrderNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - } - } - - private void checkWorkOrderExtIsValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkOrderExt workOrderExt, String suffix) { - - if (null == workOrderExt) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s对应的工单信息不存在!", suffix)); - - if (stepResult.isCompleted() && MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus()) - execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s状态[%s],不支持在此工位操作!", suffix, MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))); - - if (stepResult.isCompleted() && MathOperation.compareTo(workOrderExt.getQty(), new Double(0)) <= 0) - execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s计划数量为[0],不支持在此工位操作!", suffix)); - - if (!stepResult.isCompleted()) return; - - } - - private void cacheOrderModel(StationRequestBean reqBean, MesWorkOrderExt workOrderExt) { - WorkOrderExtModel orderModel = new WorkOrderExtModel(); - BeanUtils.copyProperties(workOrderExt, orderModel, MesPcnExtConstWords.ID); - reqBean.getDataMap().put(MesPcnExtConstWords.WORK_ORDER, orderModel); - } - -} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellTaktCollectPlcCfg.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellTaktCollectPlcCfg.java index a643e00..ff1f58e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellTaktCollectPlcCfg.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellTaktCollectPlcCfg.java @@ -25,7 +25,7 @@ import java.io.Serializable; @DynamicInsert @DynamicUpdate @EqualsAndHashCode(callSuper = true) -@Table(name = "MES_TIME_SEGMENT_STATISTICS", indexes = { +@Table(name = "SX_WORK_CELL_TAKT_COLLECT_PLC_CFG", indexes = { @Index(columnList = "SYSTEM_SYNC_STATUS"), @Index(columnList = "WORK_CENTER_CODE") }) 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 0c9cff0..beb9cfd 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 @@ -1014,4 +1014,9 @@ public class MesPcnExtConstWords { //策略实现类 public static final String STRATEGY_CLASS = "strategyClass"; + //临时工单 + public static final String TMP_ORDER = "TMP_ORDER"; + //回退工单 + public static final String BACK_ORDER = "BACK_ORDER"; + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java index c593814..27876dc 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java @@ -1350,6 +1350,7 @@ public class MesPcnExtEnumUtil { public enum PRODUCE_SN_STATUS { CREATE(10, "创建"), PROCESS(20, "在制"), + REPAIR_OFFLINE(25, "返修在制"), ERR_OFFLINE(30, "异常下线"), OFFLINE(40, "正常下线"), REPAIR(5, "返工");