From 5132ae0f108ad1f5fde10920899e63c8a25e9c00 Mon Sep 17 00:00:00 2001 From: "logic.fang" Date: Thu, 13 Mar 2025 15:40:36 +0800 Subject: [PATCH] =?UTF-8?q?45610=20=E5=8F=91=E8=BF=90=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=91=E8=BF=90=E5=8D=95=E8=A1=A5=E6=89=93?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/IMesShippingOrderManagementService.java | 6 + .../base/MesShippingOrderManagementController.java | 26 ++- .../base/MesShippingOrderManagementService.java | 216 +++++++++++++++++++++ 3 files changed, 244 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementService.java index f7e578e..5468d5f 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementService.java @@ -1,8 +1,11 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -15,8 +18,11 @@ public interface IMesShippingOrderManagementService extends IBaseMesService shippingOrderManagementList, String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java index bd30121..8cb0edc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java @@ -15,10 +15,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @@ -102,4 +99,25 @@ public class MesShippingOrderManagementController extends BaseMesController shippingOrderManagementList) { + try{ + if (CollectionUtils.isEmpty(shippingOrderManagementList)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("未选择补打的发运单,请重新选择!") + .build(); + } + String organizeCode = AuthUtilExt.getOrganizeCode(); + String userName = AuthUtilExt.getUserName(); + return shippingOrderManagementService.doShippingReprint(shippingOrderManagementList, organizeCode, userName); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 82dce4b..cf6c2fe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -9,15 +9,23 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wuhu.MesCimCheryOrder; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementDetailModelForLiJia; +import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModel; +import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModelForLiJia; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -28,6 +36,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; @Service @Slf4j @@ -50,6 +59,7 @@ public class MesShippingOrderManagementService extends BaseMesService shippingOrderManagementList, + String organizeCode, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack("WU_HU_SUPPLIER","cfgKey", packBean); + List configList = mesConfigRepository.findByHqlWhere(packBean); + String supplierNo = ""; + if (configList != null && !configList.isEmpty()) { + supplierNo = configList.get(0).getCfgValue(); + } + //查询发运单明细 + Map shippingOrderManagementMap = shippingOrderManagementList.stream().collect( + Collectors.toMap(MesShippingOrderManagement::getId, shippingOrderManagement -> shippingOrderManagement)); + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(new ArrayList<>(shippingOrderManagementMap.keySet()), "pid", packBean); + DdlPreparedPack.getOrderBy("boxNum",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List shippingOrderManagementDetailList = + mesShippingOrderManagementDetailRepository.findByHqlWhere(packBean); + Map> shippingOrderManagementDetaiMap = + shippingOrderManagementDetailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid)); + //查询原始报文 + List shippingCodeList = shippingOrderManagementList.stream() + .map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList()); + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(shippingCodeList, "sheetNo", packBean); + List cheryOrderList = mesCimCheryOrderRepository.findByHqlWhere(packBean); + Map cimCheryOrderMap = cheryOrderList.stream() + .collect(Collectors.toMap(MesCimCheryOrder::getSheetNo, cimCheryOrder -> cimCheryOrder)); + //45527 礼嘉福特发运单打印(通过系统参数信息判断是否采用新的查询取值逻辑-礼嘉福特) + DdlPackBean configPackBeanTwo = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack("SORT_SHIPMENT_PRINTS_FLAG_FOR_LI_JIA","cfgKey", configPackBeanTwo); + MesConfig liJiaConfig = mesConfigRepository.getByProperty(configPackBeanTwo); + if (Objects.isNull(liJiaConfig)) { + //未维护该参数,则继续执行原有逻辑 + List modelList = new ArrayList<>(); + for (MesShippingOrderManagement shippingOrder : shippingOrderManagementList) { + MesShippingOrderManagementModel model = new MesShippingOrderManagementModel(); + String shippingCodePrefix = shippingOrder.getShippingCode().substring(0, shippingOrder.getShippingCode().length() - 3); + String shippingCodeSuffix = shippingOrder.getShippingCode().substring(shippingOrder.getShippingCode().length() - 3); + model.setShippingCode(shippingCodePrefix); + model.setShippingCodeAfter3(shippingCodeSuffix); + model.setShippingCodeWhole(shippingOrder.getShippingCode()); + Map> cheryOrderMap = new HashMap<>(); + //填充原始报文信息 + if (!CollectionUtils.isEmpty(cimCheryOrderMap) && + cimCheryOrderMap.containsKey(shippingOrder.getShippingCode())) { + MesCimCheryOrder cheryOrder = cimCheryOrderMap.get(shippingOrder.getShippingCode()); + model.setPlantName(cheryOrder.getPlantName()); + model.setPartkitName(cheryOrder.getPartkitName()); + model.setDeliverySendSequence(cheryOrder.getDeliverySendSequence()); + model.setReceiveDockName(cheryOrder.getReceiveDockNo()+"--"+cheryOrder.getReceiveDockName()); + model.setLastRecRequireTime(cheryOrder.getLastRecRequireTime()); + //根据cheryOrder的workshopNo获取对应的车间名称 + String workshopName = getWorkshopName(cheryOrder.getOrganizeCode(), cheryOrder.getWorkshopNo()); + model.setWorkShop(workshopName); + model.setCreateDateTime(cheryOrder.getCreateDatetime()); + model.setPrintDateTime(TimeTool.getNowTime(true)); + cheryOrderMap = cheryOrderList.stream().collect(Collectors.groupingBy(MesCimCheryOrder::getVin)); + } + //填充发运明细信息 + if (!CollectionUtils.isEmpty(shippingOrderManagementDetaiMap) && + shippingOrderManagementDetaiMap.containsKey(shippingOrder.getId())) { + List detailModelList = new ArrayList<>(); + List detailList = shippingOrderManagementDetaiMap.get(shippingOrder.getId()); + detailList = detailList.stream().sorted(Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList()); + for (MesShippingOrderManagementDetail shipOrderPartInfo : detailList) { + MesShippingOrderManagementDetailModel detailModel = new MesShippingOrderManagementDetailModel(); + detailModel.setPartNo(shipOrderPartInfo.getPartNo()); + detailModel.setPartName(shipOrderPartInfo.getPartName()); + detailModel.setQty(shipOrderPartInfo.getPlanQty()); + detailModel.setBoxNo(shipOrderPartInfo.getCustInfoSeq()); + detailModel.setSupplierNo(supplierNo); + detailModel.setVin(shipOrderPartInfo.getVin().substring(shipOrderPartInfo.getVin().length()-8)); + MesCimCheryOrder order = cheryOrderMap.get(shipOrderPartInfo.getVin()).get(0); + if (order != null) { + detailModel.setWholePartNo(order.getMaterialNo()); + } + detailModelList.add(detailModel); + } + model.setShipOrderPartInfos(detailModelList); + } + shippingOrder.setPrintCount(StringUtil.isEmpty(shippingOrder.getPrintCount()) ? 1 : shippingOrder.getPrintCount() + 1); + shippingOrder.setLastPrintTime(TimeTool.getNowTime(true)); + shippingOrder.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(shippingOrder, userName); + modelList.add(model); + } + mesShippingOrderManagementRepository.saveAll(shippingOrderManagementList); + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList); + }else { + //维护了该参数,则执行礼嘉的新逻辑 + List mainDataList = new ArrayList<>(); + //遍历处理每个发运单主表 + for (MesShippingOrderManagement pullingOrderInfo : shippingOrderManagementList) { + //一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据) + //取出当前发运单的明细信息 + if (!CollectionUtils.isEmpty(shippingOrderManagementDetaiMap) && + shippingOrderManagementDetaiMap.containsKey(pullingOrderInfo.getId()) && + !CollectionUtils.isEmpty(shippingOrderManagementDetaiMap.get(pullingOrderInfo.getId()))) { + List details = shippingOrderManagementDetaiMap.get(pullingOrderInfo.getId()); + //将发运单明细按照 assyCode 分组 + //assyCode 的个数 / 2 代表会生成实体发运单的份数(一个 assyCode 就是一个表格,一份实体表单上可以放两个表格) + Map> detailByAssyCodeMap = + details.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getAssyCode)); + //将assyCode按照logic_Seq进行排序(选取每个assyCode对应的那组数据中的logic_seq最小值,根据该值对assyCode进行排序) + List assyCodeList = new ArrayList<>(detailByAssyCodeMap.keySet()); + Map logicSeqAndAssyCodeMap = new HashMap<>(); + for (String assyCode : assyCodeList) { + List detailList = detailByAssyCodeMap.get(assyCode); + Optional min = + detailList.stream().min(Comparator.comparing(MesShippingOrderManagementDetail::getLogicSeq)); + min.ifPresent(mesShippingOrderManagementDetail -> logicSeqAndAssyCodeMap.put(mesShippingOrderManagementDetail.getLogicSeq(), assyCode)); + } + List collect = logicSeqAndAssyCodeMap.keySet().stream().sorted().collect(Collectors.toList()); + List newAssyCodeList = new ArrayList<>(); + for (Long logicSeq : collect) { + newAssyCodeList.add(logicSeqAndAssyCodeMap.get(logicSeq)); + } + //将 assyCode 两两分组 + List> physicalOrderList = IntStream.range(0, newAssyCodeList.size()) + .filter(i -> i % 2 == 0) + .mapToObj(i -> newAssyCodeList.subList(i, Math.min(i + 2, newAssyCodeList.size()))) + .collect(Collectors.toList()); + for (List list : physicalOrderList) { + //生成一张实体发运单 + mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, detailByAssyCodeMap, details)); + } + } + pullingOrderInfo.setPrintCount(StringUtil.isEmpty(pullingOrderInfo.getPrintCount()) ? 1 : pullingOrderInfo.getPrintCount() + 1); + pullingOrderInfo.setLastPrintTime(TimeTool.getNowTime(true)); + pullingOrderInfo.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); + } + mesShippingOrderManagementRepository.saveAll(shippingOrderManagementList); + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mainDataList); + } + } + private MesShippingOrderManagement getMesShippingOrderManagement(String organizeCode,long id) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(id,"id",packBean); @@ -412,4 +572,60 @@ public class MesShippingOrderManagementService extends BaseMesService configList = mesConfigRepository.findByHqlWhere(ddlPackBean); + return configList.isEmpty() ? "" : configList.get(0).getCfgValue(); + } + + private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement pullingOrderInfo, + List assyCodeList, + Map> detailByAssyCodeMap, + List details) { + MesShippingOrderManagementModelForLiJia model = new MesShippingOrderManagementModelForLiJia(); + //顶部的通用数据赋值 + model.setShippingGroupName(pullingOrderInfo.getShippingGroupName()); + model.setPrintDateTime(TimeTool.getNowTime(true)); + model.setShippingCode(pullingOrderInfo.getShippingCode()); + model.setDocumentNumber("YFVCQ-MS06-02-01"); + //中部表结构赋值 + model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); + //底部表结构赋值 + model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); + return model; + } + + private List createDetailList( + String assyCode, Map> detailByAssyCodeMap, + List details, String rackNo) { + List dataList = new ArrayList<>(); + //取出符合条件的发运单明细数据 + List nowDetailList = detailByAssyCodeMap.get(assyCode); + if (!CollectionUtils.isEmpty(nowDetailList)) { + //并按照 logic_seq 升序排列 + List collect = nowDetailList.stream().sorted( + Comparator.comparing(MesShippingOrderManagementDetail::getLogicSeq)).collect(Collectors.toList()); + Integer number = 1; + for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : collect) { + MesShippingOrderManagementDetailModelForLiJia detailModel = new MesShippingOrderManagementDetailModelForLiJia(); + detailModel.setNumber(number); + detailModel.setCustInfoSeq(mesShippingOrderManagementDetail.getCustInfoSeq()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetail.getVin())) { + detailModel.setVin(mesShippingOrderManagementDetail.getVin().substring( + mesShippingOrderManagementDetail.getVin().length() - 6)); + } + detailModel.setCarSerialCode(mesShippingOrderManagementDetail.getCarSerialCode()); + detailModel.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + detailModel.setCustPartNo(mesShippingOrderManagementDetail.getCustPartNo()); + detailModel.setCustPartName(mesShippingOrderManagementDetail.getPartName()); + detailModel.setRackNo(rackNo); + dataList.add(detailModel); + number ++; + } + } + return dataList; + } + }