diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java index 9575274..21f9710 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java @@ -36,4 +36,7 @@ public interface IMesConfigService { @ApiOperation(value = "查询分表配置") List findShardingTablesObjectCfg(String organizeCode, String cfgKey, List itemList); + @ApiOperation(value = "获取配置信息") + List findMesConfigList(String organizeCode, String cfgCode); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesShippingLoadingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesShippingLoadingCheckService.java index 1524f5c..17c635c 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesShippingLoadingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesShippingLoadingCheckService.java @@ -18,7 +18,7 @@ import java.util.List; public interface IMesShippingLoadingCheckService { @ApiOperation(value = "查询装车单") - MesShippingLoadingCheckModel queryLoadingOrderNo(MesLoadingList loadingVehiclesOrder); + MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingVehiclesOrder); @ApiOperation(value = "查询装车单-自动推单") MesLoadingList queryLoadingOrderNoByAutoPushOrder(String shippingGroupNo, String org); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java index d33ccdb..1626c33 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java @@ -16,7 +16,7 @@ import io.swagger.annotations.ApiOperation; public interface IMesSortShippingCheckService { @ApiOperation(value = "扫描发运单") - MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement); + MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement); @ApiOperation(value = "保存条码") MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java index dd51915..b764fd0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java @@ -1,9 +1,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -37,6 +39,9 @@ public class MesBusiController { @Autowired private IMesProductionRecordService mesProductionRecordService; + @Autowired + private IMesConfigService mesConfigService; + @GetMapping("/mesProduceSn/query") @ApiOperation(value = "查询条码信息") public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) { @@ -62,4 +67,18 @@ public class MesBusiController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/mesConfig/query") + @ApiOperation(value = "查询系统配置") + public ResultBean queryMesConfig(MesConfig mesConfig) { + try { + ValidatorBean.checkNotNull(mesConfig.getOrganizeCode(), "工厂代码不能为空"); + ValidatorBean.checkNotNull(mesConfig.getCfgCode(), "配置代码不能为空"); + return ResultBean.success("查询成功").setResultList(mesConfigService.findMesConfigList(mesConfig.getOrganizeCode(), mesConfig.getCfgCode())); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesShippingLoadingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesShippingLoadingCheckController.java index 2d09707..6498f72 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesShippingLoadingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesShippingLoadingCheckController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -61,8 +62,8 @@ public class MesShippingLoadingCheckController { // 数据校验 ValidatorBean.checkNotNull(loadingVehiclesOrder.getOrderCode(), "装车单不能为空"); loadingVehiclesOrder.setOrganizeCode(organizeCode); - - MesShippingLoadingCheckModel model = shippingLoadingCheckService.queryLoadingOrderNo(loadingVehiclesOrder); + ConvertBean.serviceModelUpdate(loadingVehiclesOrder,!StringUtils.isEmpty(loadingVehiclesOrder.getModifyUser()) ? loadingVehiclesOrder.getModifyUser() : AuthUtil.getSessionUser().getUserName()); + MesShippingLoadingCheckModel model = shippingLoadingCheckService.doLoadingOrderNoQuery(loadingVehiclesOrder); return ResultBean.success("查询成功").setResultObject(model); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index ebe612b..cb15499 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -61,8 +62,8 @@ public class MesSortShippingCheckController { // 数据校验 ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空"); shippingOrderManagement.setOrganizeCode(organizeCode); - - MesSortShippingCheckModel model = sortShippingCheckService.queryShippingOrderNo(shippingOrderManagement); + ConvertBean.serviceModelUpdate(shippingOrderManagement,!StringUtils.isEmpty(shippingOrderManagement.getModifyUser()) ? shippingOrderManagement.getModifyUser() : AuthUtil.getSessionUser().getUserName()); + MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement); return ResultBean.success("查询成功").setResultObject(model); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java index eb4caa5..f872afd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -108,5 +109,14 @@ public class MesConfigService implements IMesConfigService { return findCfgValueContainItem(organizeCode, MesPcnExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES_PCN.name(), MesPcnExtConstWords.COMMA, itemList); } + @Override + public List findMesConfigList(String organizeCode, String cfgCode) { + List configList = getConfigList(organizeCode, cfgCode, null, null); + if(CollectionUtils.isEmpty(configList)){ + MesPcnException.throwMesBusiException("配置表数据不存在,请维护key【%s】", cfgCode); + } + return configList; + } + } 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 3aaaeb4..2664963 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 @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -20,9 +21,11 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException; 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.*; +import java.util.stream.Collectors; /** * @Description : @@ -55,10 +58,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS private MesPartShippingGroupService mesPartShippingGroupService; @Override - public MesShippingLoadingCheckModel queryLoadingOrderNo(MesLoadingList loadingList) { + public MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingList) { //校验装车单 - MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode()); + MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode(),loadingList.getIsPass(),loadingList.getModifyUser()); //若生成装车单,则一定有装车单明细 DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); @@ -67,7 +70,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS List detailList = vehiclesOrderDetailRepository.findByHqlWhere(orderDetailPackBean); //是否逆转 - if (loadingListResult.getIsReverse() == MesCommonConstant.TRUE_INTEGER) { + if (Objects.equals(loadingListResult.getIsReverse(), MesCommonConstant.TRUE_INTEGER)) { // 逆转 for (int i = 0; i < detailList.size(); i += loadingListResult.getReverseQuantity()) { if (i + loadingListResult.getReverseQuantity() - 1 < detailList.size()) { @@ -128,87 +131,68 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS public MesShippingLoadingCheckModel saveVehiclesOrderAndDetail(MesShippingLoadingCheckModel model, String organizeCode, String userInfo) { //校验装车单 - MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode); - - //校验发运单是否存在 - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean); - DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderDetailPackBean); - MesLoadingListDetail vehiclesOrderDetail = vehiclesOrderDetailRepository.getByProperty(orderDetailPackBean); - if (StringUtils.isEmpty(vehiclesOrderDetail)) { - throw new ImppBusiException(String.format("【%s】此发运单不存在或还未生成装车单明细,请检查数据!", model.getShippingCode())); - } - //查询零件发运组 - MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, loadingList.getPartShippingGroupCode()); + MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo); //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 - Boolean scanflg = false; - for (MesLoadingListDetail loadingListDetail : model.getDetailList()) { - if (loadingListDetail.getShippingCode().equals(model.getShippingCode())) { - - if (Objects.equals(loadingListDetail.getTempStatus(), MesCommonConstant.TRUE_INTEGER)) { - throw new ImppBusiException(String.format("【%s】此发运单已经扫描过,请检查数据!", model.getShippingCode())); - } - //校验发运单明细顺序 - if(CommonEnumUtil.VALID == shippingGroup.getIsEnableLoadingFailSafe()){ - Optional detail = model.getDetailList().stream().filter(k -> k.getShippingCode().compareTo(loadingListDetail.getShippingCode()) < 0 && !Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst(); - if(detail.isPresent()){ - throw new ImppBusiException(String.format("装车单【%s】启用明细顺序防错,发运单【%s】前还有未扫描的发运单,请检查数据!", loadingList.getOrderCode(), model.getShippingCode())); + if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ + Optional loadingListDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if(loadingListDetailOptional.isPresent()){ + MesLoadingListDetail loadingListDetail = loadingListDetailOptional.get(); + updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,MesPcnExtConstWords.SHIP_PASS,MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()); + }else{ + throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", loadingList.getOrderCode())); + } + }else{ + //校验发运单是否存在 + checkLoadingList(model, organizeCode, loadingList); + //查询零件发运组 + MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, loadingList.getPartShippingGroupCode()); + boolean scanflg = false; + for (MesLoadingListDetail loadingListDetail : model.getDetailList()) { + if (loadingListDetail.getShippingCode().equals(model.getShippingCode())) { + + if (Objects.equals(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().filter(k -> StringUtils.isEmpty(k.getScanSn())).mapToLong(k -> k.getSeq()).min().getAsLong(); - //若扫描的不是最小顺序 则报错 - if (minSeq.longValue() != loadingListDetail.getSeq().longValue()) { - throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请检查数据!", model.getShippingCode())); + //校验发运单明细顺序 + if(!StringUtils.isEmpty(shippingGroup.getIsEnableLoadingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableLoadingFailSafe()){ + Optional detail = model.getDetailList().stream().filter(k -> k.getShippingCode().compareTo(loadingListDetail.getShippingCode()) < 0 && !Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if(detail.isPresent()){ + throw new ImppBusiException(String.format("装车单【%s】启用明细顺序防错,发运单【%s】前还有未扫描的发运单,请检查数据!", loadingList.getOrderCode(), model.getShippingCode())); + } } - } - loadingListDetail.setScanSn(model.getShippingCode()); - loadingListDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER); - loadingListDetail.setTempStatusVal("扫描完成"); + //判断是否需要排序校验 默认排序则需要校验 + if (!StringUtils.isEmpty(loadingList.getScanSeqWay()) && loadingList.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 - //根据是否启动记忆判断 若启用记忆,则根据保存数据库 - if (loadingList.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) { - - //若装车单状态为创建或发布已生成ASN 则写入开始扫描时间 - if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() || - loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() || - loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()) { - loadingList.setStartScanTime(TimeTool.getNowTime(true)); + long minSeq = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getScanSn())).mapToLong(MesLoadingListDetail::getSeq).min().getAsLong(); + //若扫描的不是最小顺序 则报错 + if (minSeq != loadingListDetail.getSeq()) { + throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请检查数据!", model.getShippingCode())); + } } - - loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); - ConvertBean.serviceModelUpdate(loadingList, userInfo); - update(loadingList); - - loadingListDetail.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); - ConvertBean.serviceModelUpdate(loadingListDetail, userInfo); - update(loadingListDetail); - } - - //根据扫描的装车单找到是否先装车配置 - //若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。 - if (loadingList.getIsFirstInstall() == MesCommonConstant.FALSE_INTEGER) { - MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getById(loadingListDetail.getShippingId()); - if (!StringUtils.isEmpty(orderManagement)) { - throw new ImppBusiException(String.format("【%s】此装车单中发运单为【%s】,还未做完【排序发运校验】,请检查数据", model.getShippingCode(), loadingListDetail.getShippingCode())); + //更新页面状态 + updateLoadingListDetail(model, userInfo, loadingList, loadingListDetail,"扫描完成",MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + + //根据扫描的装车单找到是否先装车配置 + //若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。 + if (Objects.equals(loadingList.getIsFirstInstall(), MesCommonConstant.FALSE_INTEGER)) { + MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getById(loadingListDetail.getShippingId()); + if (!StringUtils.isEmpty(orderManagement)) { + throw new ImppBusiException(String.format("【%s】此装车单中发运单为【%s】,还未做完【排序发运校验】,请检查数据", model.getShippingCode(), loadingListDetail.getShippingCode())); + } } + scanflg = true; + break; } - scanflg = true; - break; + } + if (!scanflg) { + throw new ImppBusiException(String.format("【%s】扫描的发运单号不在【%s】此装车单中,请检查数据!", model.getShippingCode(), model.getOrderCode())); } } - if (!scanflg) { - throw new ImppBusiException(String.format("【%s】扫描的发运单号不在【%s】此装车单中,请检查数据!", model.getShippingCode(), model.getOrderCode())); - } - - Long count = model.getDetailList().stream().filter(k -> k.getTempStatus() == MesCommonConstant.TRUE_INTEGER).count(); + Long count = model.getDetailList().stream().filter(k -> Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).count(); model.setIsScanCount(count.intValue()); //全部扫描完成 @@ -240,6 +224,41 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS return model; } + private void checkLoadingList(MesShippingLoadingCheckModel model, String organizeCode, MesLoadingList loadingList) { + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", orderDetailPackBean); + DdlPreparedPack.getStringEqualPack(model.getShippingCode(), "shippingCode", orderDetailPackBean); + MesLoadingListDetail vehiclesOrderDetail = vehiclesOrderDetailRepository.getByProperty(orderDetailPackBean); + if (StringUtils.isEmpty(vehiclesOrderDetail)) { + throw new ImppBusiException(String.format("【%s】此发运单不存在或还未生成装车单明细,请检查数据!", model.getShippingCode())); + } + } + + private void updateLoadingListDetail(MesShippingLoadingCheckModel model, String userInfo, MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String tempStatusVal, Integer status) { + loadingListDetail.setScanSn(model.getShippingCode()); + loadingListDetail.setTempStatus(MesCommonConstant.TRUE_INTEGER); + loadingListDetail.setTempStatusVal(tempStatusVal); + + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (Objects.equals(loadingList.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + + //若装车单状态为创建或发布已生成ASN 则写入开始扫描时间 + if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() || + loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() || + loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()) { + loadingList.setStartScanTime(TimeTool.getNowTime(true)); + } + + loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); + ConvertBean.serviceModelUpdate(loadingList, userInfo); + update(loadingList); + + loadingListDetail.setStatus(status); + ConvertBean.serviceModelUpdate(loadingListDetail, userInfo); + update(loadingListDetail); + } + } + private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); if(Objects.isNull(shippingGroup)){ @@ -254,7 +273,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS * @param orderCode * @param org */ - public MesLoadingList checkLoadingList(String orderCode, String org) { + public MesLoadingList checkLoadingList(String orderCode, String org,Integer isPass,String userName) { //校验装车单是否存在 DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org); @@ -263,7 +282,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS if (StringUtils.isEmpty(loadingList)) { throw new ImppBusiException(String.format("【%s】此装车单不存在,请检查数据!", orderCode)); } - //校验装车单状态 必须是未装车条码 if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() && loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() && @@ -284,11 +302,17 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); orderPackBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", orderPackBean); + DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",orderPackBean); DdlPreparedPack.getInPackList(loadingListStatusList, "status", orderPackBean); int count = vehiclesOrderRepository.findByHqlWhereCount(orderPackBean); if (count != 0) { - throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单,请检查数据!", - orderCode, loadingList.getSeq())); + //强过 + if(!Objects.isNull(isPass) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isPass){ + updateLoadingListClose(loadingListStatusList,loadingList,userName); + }else { + throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单,请检查数据!", + orderCode, loadingList.getSeq())); + } } return loadingList; } @@ -310,4 +334,64 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS vehiclesOrderDetailRepository.update(item); } + + private void updateLoadingListClose(List loadingListStatusList,MesLoadingList loadingList,String userName){ + List mesLoadingList = getMesLoadingListList(loadingListStatusList, loadingList); + if(CollectionUtils.isEmpty(mesLoadingList)) return; + List idList = mesLoadingList.stream().map(MesLoadingList::getId).distinct().collect(Collectors.toList()); + //关闭装发运单明细 + List mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), idList); + if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){ + closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); + } + //关闭发运单 + closeShippingOrder(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); + //关闭装车单明细 + closeLoadingDetails(loadingList.getOrganizeCode(), userName, idList); + //关闭装车单 + closeLoadingOrder(loadingList.getOrganizeCode(), userName, idList); + } + + private void closeShippingOrderDetails(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "pid",packBean); + shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private List getMesShippingOrderManagementList(String organizeCode, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList,"loadingListId",packBean); + return shippingOrderManagementRepository.findByHqlWhere(packBean); + } + + private void closeShippingOrder(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "id",packBean); + shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private void closeLoadingDetails(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "pid",packBean); + vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private void closeLoadingOrder(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "id",packBean); + vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.MES_LOADING_STATUS.CLOSED.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private List getMesLoadingListList(List loadingListStatusList, MesLoadingList loadingList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); + DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", packBean); + DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",packBean); + DdlPreparedPack.getInPackList(loadingListStatusList, "status", packBean); + return vehiclesOrderRepository.findByHqlWhere(packBean); + } + } 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 66c1b60..56c3411 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 @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -81,9 +82,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private MesPartShippingGroupService mesPartShippingGroupService; @Override - public MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement) { - - + public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) { //校验发运单是否存在 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(shippingOrderManagement.getShippingCode(), "shippingCode", orderManagementPackBean); @@ -107,16 +106,21 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()); orderManagementPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", orderManagementPackBean); + DdlPreparedPack.getStringEqualPackOr(orderManagement.getShippingGroupCode(),"shippingGroupCode",orderManagementPackBean); DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean); int queryCount = shippingOrderManagementRepository.findByHqlWhereCount(orderManagementPackBean); if (queryCount != 0) { - throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单,请检查数据!", - orderManagement.getShippingCode(), orderManagement.getSeq())); + if(!Objects.isNull(shippingOrderManagement.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == shippingOrderManagement.getIsPass()){ + updateLoadingListClose(statusForCheckList,shippingOrderManagement,shippingOrderManagement.getModifyUser()); + }else{ + throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单,请检查数据!", + orderManagement.getShippingCode(), orderManagement.getSeq())); + } } //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! - if (orderManagement.getIsLoading() == MesCommonConstant.TRUE_INTEGER) { + if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) { if (StringUtils.isEmpty(orderManagement.getOrderCode()) ) { throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode())); @@ -132,7 +136,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //判断是否先装车 - if (orderManagement.getIsFirstInstall() == MesCommonConstant.TRUE_INTEGER) { + if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) { //若没进行装车校验,则提示【%s】此发运单对应的【%s】此装车单状态为【%s】,请选择状态为【%s】的数据 if (loadingList.getStatus() != MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()) { @@ -205,75 +209,57 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Override public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String organizeCode, String userInfo) { - - //校验条码 - MesProduceSn produceSn = checkSn(model, organizeCode); - //校验发运单是否存在 MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, organizeCode); //零件发运组 MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode()); //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. - boolean scanFlg = false; - for (MesShippingOrderManagementDetail detail : model.getDetailList()) { - if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode())) { - //校验发运单明细顺序 - if(!StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()){ - Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); - if(first.isPresent()){ - throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); - } - } - - //判断是否需要排序校验 默认排序则需要校验 - if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { - //获取明细中最小的 - Optional minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) - .min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo()); - //若扫描的不是最小顺序 则报错 - if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) { - throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); - } - } - - scanFlg = true; - detail.setBarcode(produceSn.getProductSn()); - - if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { - detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - - //根据是否启动记忆判断 若启用记忆,则根据保存数据库 - if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && orderManagement.getIsEnableMemory() == MesCommonConstant.TRUE_INTEGER) { - - //若发运单状态为创建或发布 则写入开始扫描时间 - if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || - orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { - orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 + if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ + Optional shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if(shippingOrderManagementDetailOptional.isPresent()){ + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get(); + MesProduceSn produceSn = new MesProduceSn(); + produceSn.setProductSn(model.getSn()); + updateOrderManagementDetails(userInfo, produceSn, orderManagement, mesShippingOrderManagementDetail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(),MesPcnExtConstWords.SHIP_PASS); + }else{ + throw new ImppBusiException(String.format("【%s】明细已全部扫描完成,请检查数据!", orderManagement.getShippingCode())); + } + }else{ + //校验条码 + MesProduceSn produceSn = checkSn(model, organizeCode); + boolean scanFlg = false; + for (MesShippingOrderManagementDetail detail : model.getDetailList()) { + if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode())) { + //校验发运单明细顺序 + if(!StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()){ + Optional first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); + if(first.isPresent()){ + throw new ImppBusiException(String.format("发运单【%s】启用明细顺序防错,序号【%s】前还有未扫描的发运单明细,请检查数据!", orderManagement.getShippingCode(), detail.getCustInfoSeq())); } + } - orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); - ConvertBean.serviceModelUpdate(orderManagement, userInfo); - update(orderManagement); - - detail.setActualQty(1); - detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); - ConvertBean.serviceModelUpdate(detail, userInfo); - updateDetail(detail); - //内部条码更新条码状态 - if (!Objects.isNull(produceSn.getId())) { - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); - ConvertBean.serviceModelUpdate(detail, userInfo); - produceSnExtService.update(produceSn); + //判断是否需要排序校验 默认排序则需要校验 + if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { + //获取明细中最小的 + Optional minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) + .min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo()); + //若扫描的不是最小顺序 则报错 + if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) { + throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); } } + + scanFlg = true; + updateOrderManagementDetails(userInfo, produceSn, orderManagement, detail,MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),"扫描完成"); + break; } - break; + } + if (!scanFlg) { + throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); } } - if (!scanFlg) { - throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), produceSn.getPartNo())); - } Long count = model.getDetailList().stream().filter(k -> k.getIsScanFlg() == MesCommonConstant.TRUE_INTEGER).count(); model.setIsScanCount(count.intValue()); @@ -288,6 +274,40 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService return model; } + private void updateOrderManagementDetails(String userInfo, MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail,Integer status,String remark) { + detail.setBarcode(produceSn.getProductSn()); + + if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + } + + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); + + detail.setActualQty(1); + detail.setStatus(status); + detail.setRemark(remark); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn.getId())) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + ConvertBean.serviceModelUpdate(detail, userInfo); + produceSnExtService.update(produceSn); + } + } + } + } + @Override public MesSortShippingCheckModel saveSnAndLocationCode(MesSortShippingCheckModel model, String organizeCode, String userInfo) { @@ -548,4 +568,45 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService public void updateDetail(MesShippingOrderManagementDetail item) { shippingOrderManagementDetailRepository.update(item); } + + private void updateLoadingListClose(List loadingListStatusList,MesShippingOrderManagement orderManagement,String userName){ + List mesShippingOrderManagementList = getMesLoadingListList(loadingListStatusList, orderManagement); + if(CollectionUtils.isEmpty(mesShippingOrderManagementList)) return; + List idList = mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).distinct().collect(Collectors.toList()); + //关闭发运单明细 + closeShippingOrderDetails(orderManagement.getOrganizeCode(), userName, idList); + //关闭发运单 + closeShippingOrder(orderManagement.getOrganizeCode(), userName, idList); + //更新装车单明细 + updateLoadingDetails(orderManagement.getOrganizeCode(), userName, idList); + } + + private List getMesLoadingListList(List statusForCheckList, MesShippingOrderManagement orderManagement) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); + DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", packBean); + DdlPreparedPack.getStringEqualPackOr(orderManagement.getShippingGroupCode(),"shippingGroupCode",packBean); + DdlPreparedPack.getInPackList(statusForCheckList, "status", packBean); + return shippingOrderManagementRepository.findByHqlWhere(packBean); + } + + private void closeShippingOrderDetails(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "pid",packBean); + shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private void closeShippingOrder(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "id",packBean); + shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } + + private void updateLoadingDetails(String organizeCode, String userName, List idList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, "shippingId",packBean); + vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesShippingLoadingCheckModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesShippingLoadingCheckModel.java index 7231022..9440dfb 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesShippingLoadingCheckModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesShippingLoadingCheckModel.java @@ -34,6 +34,9 @@ public class MesShippingLoadingCheckModel { @ApiParam("已扫描数量") private Integer isScanCount = 0; + @ApiParam("跳过") + private Integer isPass; + @ApiParam("装车单明细") private List detailList; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java index f072ee4..14db736 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesSortShippingCheckModel.java @@ -30,6 +30,8 @@ public class MesSortShippingCheckModel { private String sn; @ApiParam("位置码") private String locationCode; + @ApiParam("跳过") + private Integer isPass; @ApiParam("已扫描数量") private Integer isScanCount = 0; 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 b48ce22..8dc05e6 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 @@ -396,5 +396,8 @@ public class MesPcnExtConstWords { //条码打印产线 public static final String PRINT_WORK_CENTER_COED = "PRINT_WORK_CENTER_COED"; + //强过 + public static final String SHIP_PASS = "跳过"; + public static final String STRONGER_PASS = "强过"; }