diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java index a181b60..4e72c69 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java @@ -59,11 +59,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS //校验装车单 MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode()); - //若生成装车单,则一定有装车单明细 DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.organizeCode); DdlPreparedPack.getNumEqualPack(loadingListResult.getId(), "pid", orderDetailPackBean); -// DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, orderDetailPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, orderDetailPackBean); List detailList = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean); //是否逆转 @@ -117,7 +116,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS //查询最近需要扫描的装车单号 DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org); -// DdlPreparedPack.getStringEqualPack(shippingGroupNo, "partShippingGroupCode", orderPackBean); DdlPreparedPack.getInPackList(statusList, "status", orderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, orderPackBean); MesLoadingList loadingList = vehiclesOrderRepository.getByProperty(orderPackBean); @@ -148,6 +146,17 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS if (loadingListDetail.getTempStatus() == MesCommonConstant.TRUE_INTEGER) { throw new ImppBusiException(String.format("【%s】此发运单已经扫描过,请检查数据!", model.getShippingCode())); } + + //判断是否需要排序校验 默认排序则需要校验 + if (loadingList.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 + Long minSeq = model.getDetailList().stream().mapToLong(k -> k.getSeq()).min().getAsLong(); + //若扫描的不是最小顺序 则报错 + if (minSeq != loadingListDetail.getSeq()) { + throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请检查数据!", model.getShippingCode())); + } + } + loadingListDetail.setScanSn(model.getShippingCode()); loadingListDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER); loadingListDetail.setTempStatusVal("扫描完成"); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index 29bb22b..2083c92 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -48,7 +48,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private MesPartShippingGroupRepository partShippingGroupRepository; @Autowired - private MesLoadingListRepository ListRepository; + private MesLoadingListRepository listRepository; @Autowired private MesLoadingListDetailRepository listDetailRepository; @@ -64,7 +64,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //校验发运单是否存在 - DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.organizeCode); + DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(), "shippingCode", orderManagementPackBean); MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(orderManagementPackBean); if (StringUtils.isEmpty(orderManagement)) { @@ -81,17 +81,19 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! if (orderManagement.getIsLoading() == MesCommonConstant.TRUE_INTEGER) { - if (StringUtils.isEmpty(orderManagement.getOrderCode())) { + if (StringUtils.isEmpty(orderManagement.getLoadingListId()) || orderManagement.getLoadingListId() == 0) { throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode())); } - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.organizeCode); + + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getLoadingListId(), "id", orderDetailPackBean); - MesLoadingList loadingList = ListRepository.getByProperty(orderDetailPackBean); + MesLoadingList loadingList = listRepository.getByProperty(orderDetailPackBean); if (StringUtils.isEmpty(loadingList)) { throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode())); } + //判断是否先装车 if (orderManagement.getIsFirstInstall() == MesCommonConstant.TRUE_INTEGER) { @@ -103,6 +105,29 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getDescription())); } } + + //判断是否需要排序校验 默认排序则需要校验 + if (loadingList.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + + //获取此装车单中 状态为创建 已发布 发运中 seq最小的 + List statusList = new ArrayList<>(); + statusList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue()); + statusList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()); + statusList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + DdlPackBean sortOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(loadingList.getId(), "loadingListId", sortOrderPackBean); + DdlPreparedPack.getNumEqualPack(statusList, "status", sortOrderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, sortOrderPackBean); + MesShippingOrderManagement sortTempOrder = shippingOrderManagementRepository.getByProperty(sortOrderPackBean); + + //若没有最小的,则此装车单 没有发运单扫描完成 + if (sortTempOrder.getId() != orderManagement.getId()) { + throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请扫描【%s】发运单!", + shippingOrderManagement.getShippingCode(), sortTempOrder.getOrderCode())); + } + + + } } MesSortShippingCheckModel model = new MesSortShippingCheckModel(); @@ -111,8 +136,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.organizeCode); + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"custInfoSeq"}, orderDetailPackBean); List detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderDetailPackBean); detailList.forEach(k -> { @@ -125,7 +151,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService model.setIsScanCount(count.intValue()); //查询最近扫描完成的装车单号 - DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.organizeCode); + DdlPackBean recentlyOrderPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), "status", recentlyOrderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"modifyDatetime"}, recentlyOrderPackBean); MesShippingOrderManagement recentlyVehiclesOrder = shippingOrderManagementRepository.getByProperty(recentlyOrderPackBean); @@ -149,12 +175,24 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //校验发运单是否存在 MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, org); + //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode())) { scanFlg = true; detail.setBarcode(produceSn.getSerialNumber()); + + //判断是否需要排序校验 默认排序则需要校验 + if (orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 + Long minSeq = model.getDetailList().stream().mapToLong(k -> k.getCustInfoSeq()).min().getAsLong(); + //若扫描的不是最小顺序 则报错 + if (minSeq != detail.getCustInfoSeq()) { + throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); + } + } + if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index bfb8fbe..5e6892a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -132,16 +132,18 @@ public class MesMouldNoReadStepService extends BaseStepService { private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + Boolean firstMouldNoIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); + Boolean workOrderDataIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); + //未采集到数据 - if (!equipLogDispatchContext.getIsCollectValue()) + if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist))) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + else if (!equipLogDispatchContext.getIsCollectValue()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode())); //读取的模具号进行规则匹配 List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); - Boolean firstMouldNoIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); - Boolean workOrderDataIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); - //没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息 if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist))) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode()));