From 0a4e306a069a65873cd69cfa50d79707af5f36a1 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 10 Mar 2025 20:28:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8E=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesWorkOrderQueueAcceptStepService.java | 55 ++++++++++++---------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java index 0fd7f6d..8fd6ce1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java @@ -180,20 +180,26 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { //加工单验证工步 【排序】 stepResult = ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).executeInState(reqBean); + if (!stepResult.isCompleted()) { + stepThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, + getStepParams(reqBean), MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + } + //保存上下文推单信息 - if (stepResult.isCompleted()) productionDispatchContextStepService.dispatchSortQueuePushContext(reqBean, curPushList); + productionDispatchContextStepService.dispatchSortQueuePushContext(reqBean, curPushList); return stepResult; } finally { - //当需要加锁且满足腔数的情况下, 保存排序线工单队列推送锁数据【保存LOCK信息:item=id,value=工位】【保存当前工位锁定的信息:item=工位,value=idList】 - List queuePushIdList = CollectionUtils.isEmpty(curPushList) ? null : - curPushList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getIsNeedLock()))).map(o -> o.getId().toString()).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(queuePushIdList) && curPushList.size() >= cellEquipContext.getCavity()) { - productionCustomContextStepService.dispatchSortQueuePushLockContext(reqBean, queuePushIdList); + //当需要加锁且满足腔数的情况下, 保存排序线工单队列推送锁数据 + Map queuePushMap2Locked = CollectionUtils.isEmpty(curPushList) ? null : + curPushList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getIsNeedLock()))).collect(Collectors.toMap(o -> o.getId().toString(), MesQueueOrderPush::getPushSourceCode)); + if (!CollectionUtils.isEmpty(queuePushMap2Locked) && curPushList.size() >= cellEquipContext.getCavity()) { + //保存排序线工单队列推送锁数据【保存LOCK信息:item=id,value=工位】【保存当前工位锁定的信息:item=工位,value=idList】 + productionCustomContextStepService.dispatchSortQueuePushLockContext(reqBean, new ArrayList<>(queuePushMap2Locked.keySet())); } //解锁 - if (!CollectionUtils.isEmpty(queuePushIdList)) queuePushIdList.forEach(o -> unLock(reqBean, o)); + if (!CollectionUtils.isEmpty(queuePushMap2Locked)) queuePushMap2Locked.values().forEach(o -> unLock(reqBean, o)); } } @@ -204,21 +210,15 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { String key = new StringJoiner(MesPcnExtConstWords.AND).add(reqBean.getWorkCenterCode()).add(pushSourceCode).toString(); ReentrantLock lock = lockMap.computeIfAbsent(key, item -> new ReentrantLock(true)); //500ms内拿不到锁的情况下监控锁是否已经超时 - if (!lock.tryLock(MesPcnExtConstWords.FIVE_HUNDRED, TimeUnit.MILLISECONDS)) { - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] false", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); - if (checkTimeOut(reqBean, pushSourceCode, key, lock)) { - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] timeOut", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); - return false; - } - } - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] true", + if (!lock.tryLock(MesPcnExtConstWords.FIVE_HUNDRED, TimeUnit.MILLISECONDS) && checkTimeOut(reqBean, pushSourceCode, key, lock)) return false; + + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- TRY_LOCK [{}] SUCCESS", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); + lockTimeMap.put(key, TimeTool.getNowTime(true)); return true; } catch (Exception e) { - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] EXCEPTION: {}", + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- TRY_LOCK [{}] EXCEPTION: {}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode, e.toString()); return false; } @@ -229,13 +229,18 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { try { String lockTime = lockTimeMap.get(key); if ((StringUtils.isEmpty(lockTime) || TimeTool.getSecoundsBetweenTime(1, lockTime, TimeTool.getNowTime(true)) >= MesPcnExtConstWords.TEN) && lock.isLocked()) { - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- checkTimeOut [{}] unlock", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); - lock.unlock(); + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] UNLOCK SUCCESS", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); + } else { + lockMap.remove(key); + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] UNLOCK REMOVE", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); + } } } catch (Exception e) { - if (lock.isLocked()) lock.unlock(); - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- checkTimeOut [{}] EXCEPTION: {}", + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] EXCEPTION: {}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode, e.toString()); } return true; @@ -248,12 +253,12 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { lockMap.computeIfPresent(key, (k, v) -> { if (!v.isHeldByCurrentThread() || !v.isLocked()) return v; v.unlock(); - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- unLock [{}] true", + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- UNLOCK [{}] SUCCESS", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); return v; }); } catch (Exception e) { - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- unLock [{}] EXCEPTION: {}", + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- UNLOCK [{}] EXCEPTION: {}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode, e.toString()); } } From 60858c597a4429abb323432384faa123f84c4f07 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 10 Mar 2025 20:52:06 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=8E=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesWorkOrderCheckSortStepService.java | 2 ++ .../step/MesWorkOrderQueueAcceptStepService.java | 19 ++++++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index 24f21c2..ac45bd8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -99,6 +99,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi List productionPsOutContextList = new ArrayList<>(); if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList, productionPsInContextList, productionPsOutContextList).isCompleted()) { + //推单场景下是读取的工单, 验证工单无效需要验证是否是连续的重复信息 + if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) == 0) resultBean.checkRepeat(); return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java index 8fd6ce1..f3a8399 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueAcceptStepService.java @@ -172,10 +172,7 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { //保存上下文扫/读信息:加工单 productionDispatchContextStepService.dispatchScanWorkOrderNoContext(reqBean, equipVariableCollectContextList); - this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("获取到工位工单推送队列%s!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- QUEUE_ORDER_PUSH:{}", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(curPushList)); + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("获取到工位工单推送队列%s!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //加工单验证工步 【排序】 stepResult = ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).executeInState(reqBean); @@ -188,6 +185,9 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { //保存上下文推单信息 productionDispatchContextStepService.dispatchSortQueuePushContext(reqBean, curPushList); + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- QUEUE_ORDER_PUSH:{}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(curPushList)); + return stepResult; } finally { @@ -229,15 +229,8 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService { try { String lockTime = lockTimeMap.get(key); if ((StringUtils.isEmpty(lockTime) || TimeTool.getSecoundsBetweenTime(1, lockTime, TimeTool.getNowTime(true)) >= MesPcnExtConstWords.TEN) && lock.isLocked()) { - if (lock.isHeldByCurrentThread()) { - lock.unlock(); - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] UNLOCK SUCCESS", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); - } else { - lockMap.remove(key); - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] UNLOCK REMOVE", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode); - } + if (lock.isHeldByCurrentThread()) lock.unlock(); + else lockMap.remove(key); } } catch (Exception e) { log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- CHECK_TIME_OUT [{}] EXCEPTION: {}", From e232ab09929a0a7054dc2c2af6848cf967388bde Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 11 Mar 2025 10:04:25 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8E=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesQueueOrderPushService.java | 5 +- .../serviceimpl/busi/MesQueueOrderPushService.java | 58 ++++++++++------------ .../function/MesFunctionQueueOrderPushService.java | 3 ++ 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java index 5acee72..2511971 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -30,8 +31,8 @@ public interface IMesQueueOrderPushService { void insertQueueOrderPush(String organizeCode, String userInfo, List queueOrderPushCellCfgList, MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext); -// @ApiOperation(value = "写入工位工单推送信息") -// void insertQueueOrderPush(String organizeCode, String userInfo, MesWorkOrder workOrder, String... pushSourceCodeArr); + @ApiOperation(value = "写入工位工单推送信息") + void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, Map paramMap); @ApiOperation(value = "根据配置查询创建状态的生产队列工位推送信息") List getQueueOrderPushList(String organizeCode, List queueOrderPushCellCfgList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java index dc42c25..45dbdc0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java @@ -15,6 +15,7 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.repository.MesQueueOrderPushCellCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesQueueOrderPushRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -74,18 +75,18 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { if (null == queueOrderPushCellCfg) continue; MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode()); + queueOrderPush.setProcessSeq(processSeq); queueOrderPush.setWorkOrderNo(productionPsOutContext.getWorkOrderNo()); queueOrderPush.setProductSn(productionPsOutContext.getProductSn()); queueOrderPush.setCustSn(productionPsOutContext.getCustSn()); queueOrderPush.setPartNo(productionPsOutContext.getPartNo()); queueOrderPush.setPartName(productionPsOutContext.getPartName()); - queueOrderPush.setProcessSeq(processSeq); - queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); queueOrderPush.setProductSeq(productionPartContext.getProductSeq()); queueOrderPush.setWorkOrderSeq(productionPartContext.getWorkOrderSeq()); queueOrderPush.setCarModelCode(productionPartContext.getCarModelCode()); queueOrderPush.setCustOrderNo(productionPartContext.getCustOrderNo()); queueOrderPush.setPartProdGroupCode(productionPartContext.getPartProdGroupCode()); + queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); queueOrderPush.setAreaCode(queueOrderPushCellCfg.getAreaCode()); queueOrderPush.setWorkCenterCode(queueOrderPushCellCfg.getWorkCenterCode()); queueOrderPush.setSourceWorkCellCode(queueOrderPushCellCfg.getWorkCellCode()); @@ -95,35 +96,30 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { } } -// //写入工位工单推送信息 -// @Override -// public void insertQueueOrderPush(String organizeCode, String userInfo, MesWorkOrder workOrder, String... pushSourceCodeArr) { -// if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userInfo) || null == productionPsOutContext || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return; -// Integer processSeq = getQueueOrderPushMaxSeq(organizeCode, productionPsOutContext.getWorkOrderNo()); -// for (MesQueueOrderPushCellCfg queueOrderPushCellCfg : queueOrderPushCellCfgList) { -// if (null == queueOrderPushCellCfg) continue; -// MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); -// queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode()); -// queueOrderPush.setWorkOrderNo(productionPsOutContext.getWorkOrderNo()); -// queueOrderPush.setProductSn(productionPsOutContext.getProductSn()); -// queueOrderPush.setCustSn(productionPsOutContext.getCustSn()); -// queueOrderPush.setPartNo(productionPsOutContext.getPartNo()); -// queueOrderPush.setPartName(productionPsOutContext.getPartName()); -// queueOrderPush.setProcessSeq(processSeq); -// queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); -// queueOrderPush.setProductSeq(productionPartContext.getProductSeq()); -// queueOrderPush.setWorkOrderSeq(productionPartContext.getWorkOrderSeq()); -// queueOrderPush.setCarModelCode(productionPartContext.getCarModelCode()); -// queueOrderPush.setCustOrderNo(productionPartContext.getCustOrderNo()); -// queueOrderPush.setPartProdGroupCode(productionPartContext.getPartProdGroupCode()); -// queueOrderPush.setAreaCode(queueOrderPushCellCfg.getAreaCode()); -// queueOrderPush.setWorkCenterCode(queueOrderPushCellCfg.getWorkCenterCode()); -// queueOrderPush.setSourceWorkCellCode(queueOrderPushCellCfg.getWorkCellCode()); -// queueOrderPush.setOrganizeCode(organizeCode); -// ConvertBean.serviceModelInitialize(queueOrderPush, userInfo); -// queueOrderPushRepository.insert(queueOrderPush); -// } -// } + //写入工位工单推送信息 + @Override + public void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, Map paramMap) { + MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); + queueOrderPush.setPushSourceCode(paramMap.get(MesPcnExtConstWords.PUSH_SOURCE_CODE)); + queueOrderPush.setProcessSeq(Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ))); + queueOrderPush.setWorkOrderNo(workOrder.getWorkOrderNo()); + queueOrderPush.setProductSn(workOrder.getWorkOrderNo()); + queueOrderPush.setCustSn(workOrder.getCustSn()); + queueOrderPush.setPartNo(workOrder.getPartNo()); + queueOrderPush.setPartName(workOrder.getPartName()); + queueOrderPush.setProductSeq(workOrder.getProductSeq()); + queueOrderPush.setWorkOrderSeq(workOrder.getWorkOrderSeq()); + queueOrderPush.setCarModelCode(workOrder.getCarModelCode()); + queueOrderPush.setCustOrderNo(workOrder.getCustOrderNo()); + queueOrderPush.setPartProdGroupCode(workOrder.getPartProdGroupCode()); + queueOrderPush.setQueueStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + queueOrderPush.setAreaCode(reqBean.getAreaCode()); + queueOrderPush.setWorkCenterCode(reqBean.getWorkCenterCode()); + queueOrderPush.setSourceWorkCellCode(reqBean.getWorkCellCode()); + queueOrderPush.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(queueOrderPush, reqBean.getUserInfo()); + queueOrderPushRepository.insert(queueOrderPush); + } //根据配置查询创建状态的生产队列工位推送信息 @Override diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java index 1be9c3a..0b48043 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java @@ -142,6 +142,9 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:根据扫描信息[%s]未匹配到有效的加工单!", buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.WORK_ORDER_NO))); } + //写入工位工单推送信息 + queueOrderPushService.insertQueueOrderPush(reqBean, workOrder, paramMap); + return resultMap; } From 25e8681d3f6fd8ec498857f811433405a5902bb0 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 11 Mar 2025 16:10:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8E=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesQueueOrderPushService.java | 6 +++ .../serviceimpl/busi/MesQueueOrderPushService.java | 16 ++++++ .../function/MesFunctionQueueOrderPushService.java | 62 ++++++++++++++++++++-- 3 files changed, 81 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java index 2511971..cbff6aa 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesQueueOrderPushService.java @@ -34,6 +34,9 @@ public interface IMesQueueOrderPushService { @ApiOperation(value = "写入工位工单推送信息") void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, Map paramMap); + @ApiOperation(value = "根据ID查询生产队列工位推送信息") + MesQueueOrderPush getQueueOrderPush(String organizeCode, Long id); + @ApiOperation(value = "根据配置查询创建状态的生产队列工位推送信息") List getQueueOrderPushList(String organizeCode, List queueOrderPushCellCfgList); @@ -46,4 +49,7 @@ public interface IMesQueueOrderPushService { @ApiOperation(value = "根据条件修改生产队列工位推送信息状态") void saveQueueOrderPushStatusByDdlPackBean(DdlPackBean packBean, String userInfo, Integer queueStatus, String targerWorkCellCode); + @ApiOperation(value = "根据条件修改生产队列工位推送信息") + void saveQueueOrderPushByCondition(String[] conditionName, Object[] conditionValue, String[] propertyName, Object[] propertyValue); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java index 45dbdc0..cc0bb3f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesQueueOrderPushService.java @@ -121,6 +121,15 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { queueOrderPushRepository.insert(queueOrderPush); } + ///根据ID查询生产队列工位推送信息 + @Override + public MesQueueOrderPush getQueueOrderPush(String organizeCode, Long id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return null; + return queueOrderPushRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id}); + } + //根据配置查询创建状态的生产队列工位推送信息 @Override public List getQueueOrderPushList(String organizeCode, List queueOrderPushCellCfgList) { @@ -203,4 +212,11 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { packBean); } + //根据条件修改生产队列工位推送信息 + @Override + public void saveQueueOrderPushByCondition(String[] conditionName, Object[] conditionValue, String[] propertyName, Object[] propertyValue) { + queueOrderPushRepository.updateByPropertiesNoSync(conditionName, conditionValue, propertyName, propertyValue); + } + + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java index 0b48043..9a060fa 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionQueueOrderPushService.java @@ -7,10 +7,15 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; @@ -73,8 +78,10 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements //新增 if (BUSI_TYPE.TWO.value.equals(paramMap.get(MesPcnExtConstWords.BUSI_TYPE))) insertQueueOrderPush(reqBean, resultBean, buttonDynamicModel, resultMap, paramMap); - else if (BUSI_TYPE.THREE.value.equals(paramMap.get(MesPcnExtConstWords.BUSI_TYPE))) queryQueueOrderPush(reqBean, resultMap, paramMap); - else queryQueueOrderPush(reqBean, resultMap, paramMap); + //修改【仅支持修改顺序】 + else if (BUSI_TYPE.THREE.value.equals(paramMap.get(MesPcnExtConstWords.BUSI_TYPE))) updateQueueOrderPush(reqBean, resultBean, buttonDynamicModel, resultMap, paramMap); + //关闭 + else deleteQueueOrderPush(reqBean, resultBean, buttonDynamicModel, resultMap, paramMap); if (!resultMap.containsKey(MesPcnExtConstWords.MESSAGE)) { resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); @@ -149,6 +156,55 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements } + //修改【仅支持修改顺序】 + private Map updateQueueOrderPush(StationRequestBean reqBean, StationResultBean resultBean, + ButtonDynamicModel buttonDynamicModel, Map resultMap, Map paramMap) { + if (!paramMap.containsKey(MesPcnExtConstWords.ID)) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:缺少修改数据的ID参数!", buttonDynamicModel.getButtonName())); + } + if (!paramMap.containsKey(MesPcnExtConstWords.PROCESS_SEQ)) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:请输入工艺顺序号!", buttonDynamicModel.getButtonName())); + } + //根据ID查询生产队列工位推送信息 + MesQueueOrderPush queueOrderPush = queueOrderPushService.getQueueOrderPush(reqBean.getOrganizeCode(), Long.valueOf(paramMap.get(MesPcnExtConstWords.ID))); + if (null == queueOrderPush) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:当前修改的队列ID[%s]对应的数据已不存在!", buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.ID))); + } + if (queueOrderPush.getQueueStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) != 0) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:当前修改的队列信息状态为[%s],不支持修改操作!", buttonDynamicModel.getButtonName(), MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrderPush.getQueueStatus()))); + } + //根据条件修改生产队列工位推送信息 + queueOrderPushService.saveQueueOrderPushByCondition( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID}, + new Object[]{reqBean.getOrganizeCode(), Long.valueOf(paramMap.get(MesPcnExtConstWords.ID))}, + new String[]{MesPcnExtConstWords.PROCESS_SEQ, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME}, + new Object[]{Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ)), reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}); + + return resultMap; + } + + //关闭 + private Map deleteQueueOrderPush(StationRequestBean reqBean, StationResultBean resultBean, + ButtonDynamicModel buttonDynamicModel, Map resultMap, Map paramMap) { + if (!paramMap.containsKey(MesPcnExtConstWords.ID)) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]关闭:缺少关闭数据的ID参数!", buttonDynamicModel.getButtonName())); + } + //根据ID查询生产队列工位推送信息 + MesQueueOrderPush queueOrderPush = queueOrderPushService.getQueueOrderPush(reqBean.getOrganizeCode(), Long.valueOf(paramMap.get(MesPcnExtConstWords.ID))); + if (null == queueOrderPush) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:当前关闭的队列ID[%s]对应的数据已不存在!", buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.ID))); + } + if (queueOrderPush.getQueueStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) != 0) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:当前关闭的队列信息状态为[%s],不支持关闭操作!", buttonDynamicModel.getButtonName(), MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrderPush.getQueueStatus()))); + } + //根据条件修改生产队列工位推送信息状态 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(Long.valueOf(paramMap.get(MesPcnExtConstWords.ID)), MesPcnExtConstWords.ID, packBean); + queueOrderPushService.saveQueueOrderPushStatusByDdlPackBean(packBean, reqBean.getUserInfo(), MesExtEnumUtil.QUEUE_ORDER_STATUS.CLOSED.getValue(), reqBean.getWorkCellCode()); + + return resultMap; + } + //返回提示信息 private Map packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); @@ -165,7 +221,7 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements THREE("3", "修改"), - FOUR("4", "取消"); + FOUR("4", "关闭"); private String value;