From a9cb79ff8b7db7c7ec36e08616b2cb206e1c61df Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Fri, 28 Feb 2025 17:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E5=BA=8F=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 | 23 +++++++---- .../station/MesProductionSortModuleService.java | 45 +++++++++++++++++----- .../step/MesWorkOrderQueuePushStepService.java | 13 +++++-- 4 files changed, 66 insertions(+), 20 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 976561c..e9bf408 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 @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPushCellCfg; @@ -20,7 +22,8 @@ public interface IMesQueueOrderPushService { Integer getQueueOrderPushMaxSeq(String organizeCode, String workOrderNo); @ApiOperation(value = "写入工位工单推送信息") - void insertQueueOrderPush(String organizeCode, String userInfo, MesProduceSn produceSn, List queueOrderPushCellCfgList); + void insertQueueOrderPush(String organizeCode, String userInfo, List queueOrderPushCellCfgList, + MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext); @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 f24e7c9..6f5194e 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 @@ -1,12 +1,13 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -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.repository.MesQueueOrderPushCellCfgRepository; @@ -63,18 +64,26 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { //写入工位工单推送信息 @Override - public void insertQueueOrderPush(String organizeCode, String userInfo, MesProduceSn produceSn, List queueOrderPushCellCfgList) { - if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userInfo) || null == produceSn || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return; - Integer processSeq = getQueueOrderPushMaxSeq(organizeCode, produceSn.getWorkOrderNo()); + public void insertQueueOrderPush(String organizeCode, String userInfo, List queueOrderPushCellCfgList, + MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext) { + 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(produceSn.getWorkOrderNo()); - queueOrderPush.setProductSn(produceSn.getProductSn()); - queueOrderPush.setCustSn(produceSn.getCustSn()); + 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()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java index f15a9c9..5a4e34c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; 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.IMesQueueOrderPushService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; @@ -17,8 +18,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; 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.MesQueueOrder; -import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -59,6 +59,9 @@ public class MesProductionSortModuleService extends BaseModuleService { @Autowired private MesQueueOrderRepository queueOrderRepository; + @Autowired + private IMesQueueOrderPushService queueOrderPushService; + @Override public void init(StationRequestBean reqBean) { @@ -93,16 +96,22 @@ public class MesProductionSortModuleService extends BaseModuleService { // 获取工单信息 List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); - // 获取产成零件信息 - List productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean); - // 排除掉空腔的产成零件 - productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toList()); // 发送班次班组和工单 StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); - //封装工位展示的客制化信息 (获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条) - StationResultBean resultBeanCustom = getStationResultBean(queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, moduleContentContext, productionPartContext))); + //生产线是否推单 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + Boolean isPushQueue = (StringUtils.isEmpty(workCenter.getIsPushQueue()) || workCenter.getIsPushQueue().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) ? false : true; + + //获取队列信息 + //非推单【获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条】 + List queueOrderModelList = !isPushQueue + ? queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, moduleContentContext)) + : queryQueueOrderPush(reqBean); + + //封装工位展示的客制化信息 + StationResultBean resultBeanCustom = getStationResultBean(queueOrderModelList); if (null == resultBeanCustom) this.sendMessage(reqBean, resultBean); else this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue()).addStationResultBeans(resultBean).addStationResultBeans(resultBeanCustom)); @@ -113,6 +122,8 @@ public class MesProductionSortModuleService extends BaseModuleService { } + + private StationResultBean getStationResultBean(List mesQueueOrderModelList) { if (CollectionUtils.isEmpty(mesQueueOrderModelList)) return null; return new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()) @@ -130,6 +141,7 @@ public class MesProductionSortModuleService extends BaseModuleService { return attrBeanList; } + //获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条 private List queryQueueOrderTopFiftyProductSeq(StationRequestBean reqBean, List partProdGroupCodeList) { if (CollectionUtils.isEmpty(partProdGroupCodeList)) return null; @@ -170,7 +182,13 @@ public class MesProductionSortModuleService extends BaseModuleService { return queueOrderModelList; } - private List getNewPartProdGroupCode(StationRequestBean reqBean, List> moduleContentContext, List productionPartContext) { + //获取零件生产组代码 + private List getNewPartProdGroupCode(StationRequestBean reqBean, List> moduleContentContext) { + + // 获取产成零件信息 + List productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean); + // 排除掉空腔的产成零件 + productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toList()); // 扫描验证完加工单才能拿到产成零件信息 if (!CollectionUtils.isEmpty(productionPartContext)) { @@ -190,6 +208,15 @@ public class MesProductionSortModuleService extends BaseModuleService { return queueOrder == null ? null : Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList()); } + //查询推单队列 + private List queryQueueOrderPush(StationRequestBean reqBean) { + //处理排序线推单上下文, 返回推送工位类型对应的配置信息 【来源工位】 + List queueOrderPushCellCfgList = productionProcessContextStepService.dispatchQueueOrderPushCellCfgContext(reqBean, MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.TARGET.getValue()); + List queueOrderPushList = + + + } + private boolean checkJumpNumber(String nextWorkOrderSeq, String currentWorkOrderSeq) { if (StringUtils.isEmpty(nextWorkOrderSeq) || StringUtils.isEmpty(currentWorkOrderSeq) || !CheckTool.isNumber(nextWorkOrderSeq) || !CheckTool.isNumber(currentWorkOrderSeq)) return false; return Integer.parseInt(currentWorkOrderSeq) != Integer.parseInt(nextWorkOrderSeq) + MesPcnExtConstWords.ONE; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueuePushStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueuePushStepService.java index f81c911..629cb24 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueuePushStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueuePushStepService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; @@ -17,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.List; import java.util.stream.Collectors; @@ -62,12 +64,17 @@ public class MesWorkOrderQueuePushStepService extends BaseStepService { String.format("生产线[%s]工位[%s]未配置[%s]类型的生产队列推送工位配置信息,当前跳过工位工单推送!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.SOURCE.getDescription())); } - //获取上下文产出条码数据信息集合 + //获取上下文产出条码信息 List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); - if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + //获取上下文产出零件信息 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + if (CollectionUtils.isEmpty(productionPsOutContextList) || CollectionUtils.isEmpty(productionPartContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); //写入工位工单推送信息 - productionPsOutContextList.stream().forEach(o -> queueOrderPushService.insertQueueOrderPush(reqBean.getOrganizeCode(), reqBean.getUserInfo(), o, queueOrderPushCellCfgList)); + productionPsOutContextList.stream().forEach(o -> + queueOrderPushService.insertQueueOrderPush(reqBean.getOrganizeCode(), reqBean.getUserInfo(), queueOrderPushCellCfgList, o, + productionPartContextList.stream().filter(i -> (null != o && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst().get()) + ); log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- PUSH_SOURCE_CODE:{}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()),