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 cbff6aa..ba89795 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 @@ -24,15 +24,18 @@ public interface IMesQueueOrderPushService { List getQueueOrderPushCellCfgList(String organizeCode, String workCenterCode); //递增步长10,取整10位; 例如:查询=10 >> 返回=20 ; 查询=29 >> 返回=30 - @ApiOperation(value = "获取当前工单对应的工位推单队列中最大的顺序号") - Integer getQueueOrderPushMaxSeq(String organizeCode, String workOrderNo); + @ApiOperation(value = "获取当前生产线推单代码中最大的顺序号") + Integer getQueueOrderPushMaxSeq(String organizeCode, MesQueueOrderPushCellCfg queueOrderPushCellCfg); + + @ApiOperation(value = "根据条件顺序号查询上一个顺序号,返回加一") + Integer getQueueOrderPushCalcSeq(String organizeCode, MesQueueOrderPushCellCfg queueOrderPushCellCfg, Integer processSeqUp); @ApiOperation(value = "写入工位工单推送信息") void insertQueueOrderPush(String organizeCode, String userInfo, List queueOrderPushCellCfgList, MesProductionPsOutContext productionPsOutContext, MesProductionPartContext productionPartContext); @ApiOperation(value = "写入工位工单推送信息") - void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, Map paramMap); + void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, MesQueueOrderPushCellCfg queueOrderPushCellCfg, String processSeqUp); @ApiOperation(value = "根据ID查询生产队列工位推送信息") MesQueueOrderPush getQueueOrderPush(String organizeCode, Long id); @@ -41,7 +44,7 @@ public interface IMesQueueOrderPushService { List getQueueOrderPushList(String organizeCode, List queueOrderPushCellCfgList); @ApiOperation(value = "根据配置查询生产队列工位推送信息") - List getQueueOrderPushListByStatus(String organizeCode, List queueOrderPushCellCfgList, Integer cdtAscOrDesc, Integer... queueStatusArr); + List getQueueOrderPushListByStatus(String organizeCode, List queueOrderPushCellCfgList, Integer ascOrDesc, Integer... queueStatusArr); @ApiOperation(value = "根据分页条件查询生产队列工位推送信息") ListPager queryQueueOrderPushListPager(Map paramMap, List pushSourceCodeList, Pager pager); 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 cc0bb3f..1eee104 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 @@ -52,12 +52,13 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode}); } - //获取当前工单对应的工位推单队列中最大的顺序号; 递增步长10,取整10位; 例如:查询=10 >> 返回=20 ; 查询=29 >> 返回=30 + //获取当前生产线推单代码中最大的顺序号; 递增步长10,取整10位; 例如:查询=10 >> 返回=20 ; 查询=29 >> 返回=30 @Override - public Integer getQueueOrderPushMaxSeq(String organizeCode, String workOrderNo) { - if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return MesPcnExtConstWords.TEN; + public Integer getQueueOrderPushMaxSeq(String organizeCode, MesQueueOrderPushCellCfg queueOrderPushCellCfg) { + if (StringUtils.isEmpty(organizeCode) || null == queueOrderPushCellCfg) return MesPcnExtConstWords.TEN; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workOrderNo, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringEqualPack(queueOrderPushCellCfg.getPushSourceCode(), MesPcnExtConstWords.PUSH_SOURCE_CODE, packBean); + DdlPreparedPack.getStringEqualPack(queueOrderPushCellCfg.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.PROCESS_SEQ}, packBean); MesQueueOrderPush queueOrderPushDb2MaxSeq = queueOrderPushRepository.getByProperty(packBean); return ((null == queueOrderPushDb2MaxSeq || queueOrderPushDb2MaxSeq.getProcessSeq().compareTo(MesPcnExtConstWords.ZERO) == 0) @@ -65,13 +66,29 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { ) * MesPcnExtConstWords.TEN; } + //根据条件顺序号查询上一个顺序号,返回加一 + @Override + public Integer getQueueOrderPushCalcSeq(String organizeCode, MesQueueOrderPushCellCfg queueOrderPushCellCfg, Integer processSeqUp) { + if (StringUtils.isEmpty(organizeCode) || null == queueOrderPushCellCfg) return MesPcnExtConstWords.TEN; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(queueOrderPushCellCfg.getPushSourceCode(), MesPcnExtConstWords.PUSH_SOURCE_CODE, packBean); + DdlPreparedPack.getStringEqualPack(queueOrderPushCellCfg.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getNumberSmallerPackContainsZero(processSeqUp, MesPcnExtConstWords.PROCESS_SEQ, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.PROCESS_SEQ}, packBean); + MesQueueOrderPush queueOrderPushDb2MaxSeq = queueOrderPushRepository.getByProperty(packBean); + if (null == queueOrderPushDb2MaxSeq) return MesPcnExtConstWords.ONE; + Integer processSeq = queueOrderPushDb2MaxSeq.getProcessSeq() + 1; + if (processSeq.compareTo(processSeqUp) == 0) return queueOrderPushDb2MaxSeq.getProcessSeq(); + return processSeq; + } + //写入工位工单推送信息 @Override 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) { + Integer processSeq = getQueueOrderPushMaxSeq(organizeCode, queueOrderPushCellCfg); if (null == queueOrderPushCellCfg) continue; MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode()); @@ -98,10 +115,17 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { //写入工位工单推送信息 @Override - public void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, Map paramMap) { + public void insertQueueOrderPush(StationRequestBean reqBean, MesWorkOrder workOrder, MesQueueOrderPushCellCfg queueOrderPushCellCfg, String processSeqUp) { + Integer processSeq; + //获取当前生产线推单代码中最大的顺序号 + if (StringUtils.isEmpty(processSeqUp)) processSeq = getQueueOrderPushMaxSeq(reqBean.getOrganizeCode(), queueOrderPushCellCfg); + //根据条件顺序号查询上一个顺序号,返回加一 + else processSeq = getQueueOrderPushCalcSeq(reqBean.getOrganizeCode(), queueOrderPushCellCfg, Integer.valueOf(processSeqUp)); + + //新增队列 MesQueueOrderPush queueOrderPush = new MesQueueOrderPush(); - queueOrderPush.setPushSourceCode(paramMap.get(MesPcnExtConstWords.PUSH_SOURCE_CODE)); - queueOrderPush.setProcessSeq(Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ))); + queueOrderPush.setPushSourceCode(queueOrderPushCellCfg.getPushSourceCode()); + queueOrderPush.setProcessSeq(processSeq); queueOrderPush.setWorkOrderNo(workOrder.getWorkOrderNo()); queueOrderPush.setProductSn(workOrder.getWorkOrderNo()); queueOrderPush.setCustSn(workOrder.getCustSn()); @@ -134,7 +158,7 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { @Override public List getQueueOrderPushList(String organizeCode, List queueOrderPushCellCfgList) { if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return null; - //搜集推送来源代码 去重; 根据生产线代码,推送来源代码集合查询创建状态的生产队列工位推送信息【创建时间正序】 + //搜集推送来源代码 去重; 根据生产线代码,推送来源代码集合查询创建状态的生产队列工位推送信息【工序顺序号正序,创建时间正序】 List queueOrderPushList = getQueueOrderPushListByStatus(organizeCode, queueOrderPushCellCfgList, CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); //条码去重 return CollectionUtils.isEmpty(queueOrderPushList) ? null : @@ -145,7 +169,7 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { //根据配置查询生产队列工位推送信息 @Override - public List getQueueOrderPushListByStatus(String organizeCode, List queueOrderPushCellCfgList, Integer cdtAscOrDesc, Integer... queueStatusArr) { + public List getQueueOrderPushListByStatus(String organizeCode, List queueOrderPushCellCfgList, Integer ascOrDesc, Integer... queueStatusArr) { if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(queueOrderPushCellCfgList)) return null; @@ -155,7 +179,7 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { ).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(pushSourceCodeList)) return null; - //根据生产线代码,推送来源代码集合查询入参状态的生产队列工位推送信息【创建时间正序】 + //根据生产线代码,推送来源代码集合查询入参状态的生产队列工位推送信息【工艺顺序号,创建时间根据条件排序】 DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(queueOrderPushCellCfgList.get(0).getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); @@ -166,7 +190,7 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { if (pushSourceCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(pushSourceCodeList.get(0), MesPcnExtConstWords.PUSH_SOURCE_CODE, packBean); else DdlPreparedPack.getInPackList(pushSourceCodeList, MesPcnExtConstWords.PUSH_SOURCE_CODE, packBean); - if (!StringUtils.isEmpty(cdtAscOrDesc)) DdlPreparedPack.getOrderByPack(new Object[]{cdtAscOrDesc}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + if (!StringUtils.isEmpty(ascOrDesc)) DdlPreparedPack.getOrderByPack(new Object[]{ascOrDesc, ascOrDesc}, new String[]{MesPcnExtConstWords.PROCESS_SEQ, MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); return queueOrderPushRepository.findByHqlWhere(packBean); } @@ -193,7 +217,7 @@ public class MesQueueOrderPushService implements IMesQueueOrderPushService { else DdlPreparedPack.getInPackList(queueStatusList, MesPcnExtConstWords.QUEUE_STATUS, packBean); } - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.PROCESS_SEQ, MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); pager = PagerHelper.getPager(pager, queueOrderPushRepository.findByHqlWhereCount(packBean)); List list = queueOrderPushRepository.findByHqlWherePage(packBean, pager); 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 fe96e5a..91f2f8f 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 @@ -130,13 +130,10 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements //新增 private Map insertQueueOrderPush(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel, Map resultMap, Map paramMap) { - if (!paramMap.containsKey(MesPcnExtConstWords.PUSH_SOURCE_CODE)) { + if (StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PUSH_SOURCE_CODE))) { return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:请选择推送来源代码!", buttonDynamicModel.getButtonName())); } - if (!paramMap.containsKey(MesPcnExtConstWords.PROCESS_SEQ)) { - return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:请输入工艺顺序号!", buttonDynamicModel.getButtonName())); - } - if (!paramMap.containsKey(MesPcnExtConstWords.WORK_ORDER_NO)) { + if (StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.WORK_ORDER_NO))) { return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:请扫描加工单或客户条码!", buttonDynamicModel.getButtonName())); } @@ -154,9 +151,13 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements if (null == workOrder) { return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:根据扫描信息[%s]未匹配到有效的加工单!", buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.WORK_ORDER_NO))); } + if (!MesExtEnumUtil.ORDER_STATUS.checkSortAllowStatus(workOrder.getWorkOrderStatus())) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]新增:加工单[%s]状态[%s],操作失败!", + buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.WORK_ORDER_NO), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); + } //写入工位工单推送信息 - queueOrderPushService.insertQueueOrderPush(reqBean, workOrder, paramMap); + queueOrderPushService.insertQueueOrderPush(reqBean, workOrder, optional.get(), paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_UP)); return resultMap; @@ -165,11 +166,11 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements //修改【仅支持修改顺序】 private Map updateQueueOrderPush(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel, Map resultMap, Map paramMap) { - if (!paramMap.containsKey(MesPcnExtConstWords.ID)) { + if (StringUtils.isEmpty(paramMap.get(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())); + if (StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ)) && StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_UP)) && StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_DOWN))) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:缺少工艺顺序号!", buttonDynamicModel.getButtonName())); } //根据ID查询生产队列工位推送信息 MesQueueOrderPush queueOrderPush = queueOrderPushService.getQueueOrderPush(reqBean.getOrganizeCode(), Long.valueOf(paramMap.get(MesPcnExtConstWords.ID))); @@ -179,12 +180,26 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements 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()))); } + + //处理排序线推单上下文, 返回推送工位类型对应的配置信息 【目标工位】 + List queueOrderPushCellCfg = productionProcessContextStepService.dispatchQueueOrderPushCellCfgContext(reqBean, MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.TARGET.getValue()); + Optional optional = CollectionUtils.isEmpty(queueOrderPushCellCfg) ? null : + queueOrderPushCellCfg.stream().filter(o -> (null != o && o.getPushSourceCode().equals(queueOrderPush.getPushSourceCode()))).findFirst(); + if (null == optional || !optional.isPresent()) { + return packResultMap(reqBean, resultBean, resultMap, String.format("[%s]修改:当前工位未配置推送来源代码[%s]推送工位类型[%s]的配置信息!", + buttonDynamicModel.getButtonName(), paramMap.get(MesPcnExtConstWords.PUSH_SOURCE_CODE), MesExtEnumUtil.QUEUE_ORDER_CELL_PUSH_TYPE.TARGET.getDescription())); + } + + Integer processSeq; + if (!StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ))) processSeq = Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ)); + else if (!StringUtils.isEmpty(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_UP))) processSeq = queueOrderPushService.getQueueOrderPushCalcSeq(reqBean.getOrganizeCode(), optional.get(), Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_UP))); + else processSeq = Integer.valueOf(paramMap.get(MesPcnExtConstWords.PROCESS_SEQ_UP)) + 1; //根据条件修改生产队列工位推送信息 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}); + new Object[]{processSeq, reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}); return resultMap; } 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 727835b..53ce94c 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 @@ -363,6 +363,10 @@ public class MesPcnExtConstWords { public static final String TARGET_WORK_CELL_CODE = "targetWorkCellCode"; //工艺顺序号 public static final String PROCESS_SEQ = "processSeq"; + //工艺顺序号(上面) + public static final String PROCESS_SEQ_UP = "processSeqUp"; + //工艺顺序号(下面) + public static final String PROCESS_SEQ_DOWN = "processSeqDown"; //推送来源代码 public static final String PUSH_SOURCE_CODE = "pushSourceCode"; //业务类型