From 12402b188cad68b5be956b783b8a76e93599fe10 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 15 Mar 2025 15:31:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BE=99=E5=85=B4=E5=8F=91=E8=BF=90=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesConfigService.java | 13 ++ .../base/MesLabelTemplateExtController.java | 57 +++++++ .../serviceimpl/base/MesConfigService.java | 44 +++++- .../base/MesShippingOrderManagementService.java | 166 ++++----------------- .../print/IPrintTemplateStrategyService.java | 12 +- .../ISortShippingDispatchStrategyService.java | 19 +++ .../CqCxSortShippingPrintStrategyService.java | 153 +++++++++++++++++++ .../CqLjSortShippingPrintStrategyService.java | 160 ++++++++++++++++++++ .../SortShippingDispatchStrategyService.java | 48 ++++++ .../WuhuSortShippingPrintStrategyService.java | 137 +++++++++++++++++ .../model/MesSortShippingPrintForCqLxModel.java | 125 ++++++++++++++++ .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 15 ++ 12 files changed, 807 insertions(+), 142 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateExtController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesSortShippingPrintForCqLxModel.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java index 7550fe6..ba1c214 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -43,4 +44,16 @@ public interface IMesConfigService { @ApiOperation(value = "数据校验") Boolean checkCfgValue(String organizeCode, String configCode, String value); + @ApiOperation(value = "获取系统参数") + MesConfig getMesConfigNoError(String organizeCode, String cfgKey); + + @ApiOperation(value = "根据cfgCode查询") + MesConfig getMesConfigByCfgCode(String cfgCode, String organizeCode); + + @ApiOperation(value = "根据cfgCode获取配置MAP") + Map getConfigMapByCfgCode(String cfgCode, String organizeCode); + + @ApiOperation(value = "根据cfgCode查询") + List findMesConfigByCfgCode(String cfgCode, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateExtController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateExtController.java new file mode 100644 index 0000000..ded11da --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateExtController.java @@ -0,0 +1,57 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesLabelTemplateService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@Api("获取系统配置的模版信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN) +public class MesLabelTemplateExtController { + + @Autowired + private IMesConfigService configService; + + @Autowired + private IMesLabelTemplateService labelTemplateService; + + @GetMapping("/label-template/by-module-or-template/get") + @ApiOperation(value = "获取系统配置的模版信息") + public ResultBean queryMesLabelTemplate(String organizeCode, String moduleCode, String templateCode) { + try { + ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空"); + if (StringUtils.isEmpty(moduleCode) && StringUtils.isEmpty(templateCode)) { + ValidatorBean.checkNotNull(moduleCode, "模版配置代码不能为空"); + } + if (!StringUtils.isEmpty(moduleCode)) { + Map configMap = configService.getConfigMapByCfgCode(moduleCode, organizeCode); + String templateCustomHtml = configMap.get(MesExtConstWords.TEMPLATE_CUSTOM_HTML); + if (!StringUtils.isEmpty(templateCustomHtml)) return ResultBean.success("查询成功").setResultObject(templateCustomHtml); + String templateCfg = configMap.get(moduleCode); + if (!StringUtils.isEmpty(templateCfg)) templateCode = templateCfg; + } + ValidatorBean.checkNotNull(templateCode, "模版代码不能为空"); + return ResultBean.success("查询成功").setResultObject(labelTemplateService.getLabelTemplate(templateCode, organizeCode)); + + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java index 66a0499..62ba50c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -16,9 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -114,4 +113,43 @@ public class MesConfigService implements IMesConfigService { return !Objects.isNull(config) && !StringUtil.isEmpty(config.getCfgValue()) && !StringUtil.isEmpty(value) && config.getCfgValue().equals(value); } + @Override + public MesConfig getMesConfigNoError(String organizeCode, String cfgKey) { + return configRepository.getByProperty( + new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, + new Object[]{cfgKey, organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + } + + @Override + public MesConfig getMesConfigByCfgCode(String cfgCode, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cfgCode, "cfgCode", packBean); + return configRepository.getByProperty(packBean); + } + + @Override + public Map getConfigMapByCfgCode(String cfgCode, String organizeCode) { + Map configMap = null; + List configList = findMesConfigByCfgCode(cfgCode, organizeCode); + if (!CollectionUtils.isEmpty(configList)) { + for (MesConfig config : configList) { + if (null == cfgCode || StringUtils.isEmpty(config.getCfgValue())) { + continue; + } + if (CollectionUtils.isEmpty(configMap)) { + configMap = new HashMap<>(); + } + configMap.put(config.getCfgKey(), config.getCfgValue()); + } + } + return configMap; + } + + @Override + public List findMesConfigByCfgCode(String cfgCode, String organizeCode) { + return configRepository.findByProperty( + new String[]{MesPcnConstWords.ORGANIZE_CODE, MesPcnConstWords.IS_DELETED, MesPcnConstWords.IS_VALID, "cfgCode"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode}); + } + } 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 cf6c2fe..7d494ae 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 @@ -2,30 +2,28 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; 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.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -36,7 +34,6 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.IntStream; @Service @Slf4j @@ -87,6 +84,9 @@ public class MesShippingOrderManagementService extends BaseMesService shippingOrderManagementList, String organizeCode, String userName) { + + MesConfig config = configService.getMesConfigByCfgCode(MesExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE, organizeCode); + if (null == config || StringUtils.isEmpty(config.getCfgValue())) MesException.throwBusiException("未配置排序发运全局打印配置[%s]", MesExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE); + + MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(config.getCfgValue(), organizeCode); + if (StringUtils.isEmpty(labelTemplate.getMethodCode())) MesException.throwBusiException("排序发运打印模版[%s]未配置策略方法", config.getCfgValue()); + + List idList = shippingOrderManagementList.stream().filter(o -> null != o).map(MesShippingOrderManagement::getId).collect(Collectors.toList()); 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); - } + if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesExtConstWords.ID, packBean); + else DdlPreparedPack.getInPackList(idList, MesExtConstWords.ID, packBean); + List baseBeanList = mesShippingOrderManagementRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(baseBeanList)) MesException.throwBusiException("选择的打印数据ID:%s对应的发运单信息不存在!", idList.toString()); + + log.info("工厂{}排序发运补打印 --- 获取到打印数据:{}条 --- idList:{} --- {}", organizeCode, baseBeanList.size(), idList.toString(), Thread.currentThread().getName()); + + IPrintTemplateStrategyService printStrategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); + ResultBean resultBean = printStrategyService.execute(organizeCode, userName, baseBeanList); + + log.info("工厂{}排序发运打印 --- 封装打印数据完成 --- {}", organizeCode, Thread.currentThread().getName()); + + return resultBean; + } private MesShippingOrderManagement getMesShippingOrderManagement(String organizeCode,long id) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java index 18bfb71..2bac49c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java @@ -2,7 +2,12 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print; import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 根据不同的条码,封装不同的数据来源 content 是打印模板,dataList @@ -20,6 +25,11 @@ public interface IPrintTemplateStrategyService { * @param mesProduceSnPrintModel * @return */ - MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule); + default MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule) {return mesProduceSnPrintModel; } + + @ApiOperation(value = "发运单") + default ResultBean execute(String organizeCode, String userName, List shippingOrderManagementList) { + return null; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java new file mode 100644 index 0000000..7ed8e60 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping; + +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; + +import java.util.List; + +/** + * @Description : 排序发运处理接口 + **/ +public interface ISortShippingDispatchStrategyService { + + default List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + return null; + } + + default void saveShippingOrderManagementList(List pullingOrderInfos) {} + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java new file mode 100644 index 0000000..04f5cc3 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java @@ -0,0 +1,153 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesSortShippingPrintForCqLxModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +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.seres.MesCimSeresSrmRunSheetJis; +import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresSrmRunSheetJisDetail; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisRepository; +import cn.estsh.impp.framework.boot.util.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +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 : 重庆龙兴发运单 + **/ +@Service +@Slf4j +public class CqCxSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService { + + @Autowired + private IMesCimSeresSrmRunSheetJisRepository cimSeresSrmRunSheetJisRepository; + + @Autowired + private IMesCimSeresSrmRunSheetJisDetailRepository cimSeresSrmRunSheetJisDetailRepository; + + @Override + public List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str); + } + + @Override + public void saveShippingOrderManagementList(List shippingOrderManagementList) { + super.saveShippingOrderManagementList(shippingOrderManagementList); + } + + @Override + public ResultBean execute(String organizeCode, String userName, List shippingOrderManagementList) { + + List resultList = new ArrayList<>(); + + List shippingCodeList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList()); + List cimSeresSrmRunSheetJisList = getCimSeresSrmRunSheetJisList(organizeCode, shippingCodeList); + Map> jisByScMap = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? null : + cimSeresSrmRunSheetJisList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDocNo()))).collect(Collectors.groupingBy(MesCimSeresSrmRunSheetJis::getDocNo)); + log.info("工厂{}排序发运打印 --- 查询JIS单信息:{}条 --- {}", organizeCode, + CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? MesExtConstWords.ZERO : cimSeresSrmRunSheetJisList.size(), Thread.currentThread().getName()); + + List jisIdList = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? null : + cimSeresSrmRunSheetJisList.stream().map(MesCimSeresSrmRunSheetJis::getId).collect(Collectors.toList()); + List cimSeresSrmRunSheetJisDetailList = getCimSeresSrmRunSheetJisDetailList(organizeCode, jisIdList); + Map> jisDetailByPidMap = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisDetailList) ? null : + cimSeresSrmRunSheetJisDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).collect(Collectors.groupingBy(MesCimSeresSrmRunSheetJisDetail::getPid)); + log.info("工厂{}排序发运打印 --- 查询JIS单详情信息:{}条 --- {}", organizeCode, + CollectionUtils.isEmpty(cimSeresSrmRunSheetJisDetailList) ? MesExtConstWords.ZERO : cimSeresSrmRunSheetJisDetailList.size(), Thread.currentThread().getName()); + + //遍历处理每个发运单主表 + for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) { + if (null == shippingOrderManagement) continue; + + List sheetJis = CollectionUtils.isEmpty(jisByScMap) ? null : jisByScMap.get(shippingOrderManagement.getShippingCode()); + if (CollectionUtils.isEmpty(sheetJis)) continue; + + MesSortShippingPrintForCqLxModel result = new MesSortShippingPrintForCqLxModel(); + BeanUtils.copyProperties(sheetJis.get(0), result); + result.setRePrintDatetime(TimeTool.getNowTime(MesExtConstWords.DATETIME_FORMAT_SINGLE_SLASH)); + result.setRePrintUser(userName); + result.setIsRePrint("重打印"); + result.setShippingCode(shippingOrderManagement.getShippingCode()); + if (shippingOrderManagement.getShippingCode().length() >= 4) { + result.setCarsNo(shippingOrderManagement.getShippingCode().substring(shippingOrderManagement.getShippingCode().length() - 4)); + result.setDocNoOther(shippingOrderManagement.getShippingCode().substring(0, shippingOrderManagement.getShippingCode().length() - 4)); + } + List sheetJisDetailList = CollectionUtils.isEmpty(jisDetailByPidMap) ? new ArrayList<>() : jisDetailByPidMap.get(sheetJis.get(0).getId()); + if (!CollectionUtils.isEmpty(sheetJisDetailList)) sheetJisDetailList = sheetJisDetailList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCimSeresSrmRunSheetJisDetail::getMaterielCode)).collect(Collectors.toList()); + + Integer index = MesExtConstWords.ONE; + for (MesCimSeresSrmRunSheetJisDetail cimSeresSrmRunSheetJisDetail : sheetJisDetailList) { + if (null == cimSeresSrmRunSheetJisDetail) continue; + MesSortShippingPrintForCqLxModel jisDetail = new MesSortShippingPrintForCqLxModel(); + BeanUtils.copyProperties(cimSeresSrmRunSheetJisDetail, jisDetail); + //跟cc确认过可以直接写死 + jisDetail.setFactoryCode("000003263"); + jisDetail.setXh(index); + index ++; + result.addJisDetail(jisDetail); + } + + Map> sheetJisDetailMap = CollectionUtils.isEmpty(result.getJisDetailList()) ? new HashMap<>() : + result.getJisDetailList().stream().filter(o -> null != o).collect(Collectors.groupingBy(MesSortShippingPrintForCqLxModel::getMaterielCode)); + + for (Map.Entry> entry : sheetJisDetailMap.entrySet()) { + if (null == entry) continue; + + List amountList = entry.getValue(); + if (CollectionUtils.isEmpty(amountList)) continue; + + MesSortShippingPrintForCqLxModel amount = new MesSortShippingPrintForCqLxModel(); + amount.setPartNo(amountList.get(0).getMaterielCode()); + amount.setAmountQty(amountList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getUseQty()))).mapToDouble(MesSortShippingPrintForCqLxModel::getUseQty).sum()); + StringJoiner appendRows = new StringJoiner(MesExtConstWords.COMMA); + amountList.forEach(o -> appendRows.add(o.getXh().toString())); + amount.setAppendRows(appendRows.toString()); + amount.setMaterielNames(amountList.get(0).getMaterielNames()); + result.addAmount(amount); + } + + resultList.add(result); + + shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount()) ? MesExtConstWords.ONE : shippingOrderManagement.getPrintCount() + MesExtConstWords.ONE); + shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true)); + shippingOrderManagement.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(shippingOrderManagement, userName); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(resultList); + + } + + private List getCimSeresSrmRunSheetJisList(String organizeCode, List shippingCodeList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(shippingCodeList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (shippingCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(shippingCodeList.get(0), "docNo", packBean); + else DdlPreparedPack.getInPackList(shippingCodeList, "docNo", packBean); + return cimSeresSrmRunSheetJisRepository.findByHqlWhere(packBean); + } + + private List getCimSeresSrmRunSheetJisDetailList(String organizeCode, List jisIdList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(jisIdList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (jisIdList.size() == 1) DdlPreparedPack.getNumEqualPack(jisIdList.get(0), MesExtConstWords.PID, packBean); + else DdlPreparedPack.getInPackList(jisIdList, MesExtConstWords.PID, packBean); + return cimSeresSrmRunSheetJisDetailRepository.findByHqlWhere(packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java new file mode 100644 index 0000000..87653d9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java @@ -0,0 +1,160 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +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.MesShippingOrderManagementDetailModelForLiJia; +import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModelForLiJia; +import cn.estsh.i3plus.pojo.mes.repository.MesCimCheryOrderRepository; +import cn.estsh.impp.framework.boot.util.ResultBean; +import com.alibaba.fastjson.JSONObject; +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; +import java.util.stream.IntStream; + +/** + * @Description : 重庆礼嘉发运单 + **/ +@Service +@Slf4j +public class CqLjSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService { + + @Autowired + private IMesConfigService configService; + + @Autowired + private MesCimCheryOrderRepository cimCheryOrderRepository; + + @Override + public List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str); + } + + @Override + public void saveShippingOrderManagementList(List shippingOrderManagementList) { + super.saveShippingOrderManagementList(shippingOrderManagementList); + } + + @Override + public ResultBean execute(String organizeCode, String userName, List shippingOrderManagementList) { + + //维护了该参数,则执行礼嘉的新逻辑 + List mainDataList = new ArrayList<>(); + + List pidList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()); + List shippingOrderManagementDetailList = getShippingOrderManagementDetailList(organizeCode, pidList, null, null); + + log.info("工厂{}排序发运打印 --- 查询发运单明细信息:{}条 --- {}", organizeCode, + CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? MesExtConstWords.ZERO : shippingOrderManagementDetailList.size(), Thread.currentThread().getName()); + + Map> detailByPidMap = CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? null : + shippingOrderManagementDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid)); + + //遍历处理每个发运单主表 + for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) { + //一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据) + //取出当前发运单的明细信息 + List details = null == detailByPidMap ? null : detailByPidMap.get(shippingOrderManagement.getId()); + if (!CollectionUtils.isEmpty(details)) { + //将发运单明细按照 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) { + //生成一张实体发运单 + log.info("工厂{}排序发运打印 --- 生成一张实体发运单:{} --- {}", organizeCode, list.toString(), Thread.currentThread().getName()); + mainDataList.add(createPhysicalOrder(shippingOrderManagement, list, detailByAssyCodeMap, details)); + } + } + shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount())? 1 : shippingOrderManagement.getPrintCount()+1); + shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true)); + shippingOrderManagement.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(shippingOrderManagement, userName); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mainDataList); + + } + + private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement shippingOrderManagement, + List assyCodeList, + Map> detailByAssyCodeMap, + List details) { + MesShippingOrderManagementModelForLiJia model = new MesShippingOrderManagementModelForLiJia(); + //顶部的通用数据赋值 + model.setShippingGroupName(shippingOrderManagement.getShippingGroupName()); + model.setPrintDateTime(TimeTool.getNowTime(true)); + model.setShippingCode(shippingOrderManagement.getShippingCode()); + model.setDocumentNumber("YFVCQ-MS06-02-01"); + //中部表结构赋值 + model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, shippingOrderManagement.getRackNo())); + //底部表结构赋值 + model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, shippingOrderManagement.getRackNo())); + log.info("工厂{}排序发运打印 --- MesShippingOrderManagementModelForLiJia:{} --- {}", shippingOrderManagement.getOrganizeCode(), JSONObject.toJSONString(model), Thread.currentThread().getName()); + 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; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java new file mode 100644 index 0000000..148bd44 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.ISortShippingDispatchStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @Description : 发运单查询 + **/ +@Service +@Slf4j +public abstract class SortShippingDispatchStrategyService implements ISortShippingDispatchStrategyService { + + @Autowired + public MesShippingOrderManagementRepository shippingOrderManagementRepository; + + @Autowired + public MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + + @Override + public List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(idList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesExtConstWords.PID, packBean); + else DdlPreparedPack.getInPackList(idList, MesExtConstWords.PID, packBean); + if (null != obj && null != str) DdlPreparedPack.getOrderByPack(obj, str, packBean); + return shippingOrderManagementDetailRepository.findByHqlWhere(packBean); + } + + @Override + public void saveShippingOrderManagementList(List shippingOrderManagementList) { + if (CollectionUtils.isEmpty(shippingOrderManagementList)) return; + shippingOrderManagementRepository.saveAll(shippingOrderManagementList); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java new file mode 100644 index 0000000..1f567ce --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java @@ -0,0 +1,137 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +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.MesConfig; +import cn.estsh.i3plus.pojo.mes.bean.edi.wuhu.MesCimCheryOrder; +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.MesShippingOrderManagementModel; +import cn.estsh.i3plus.pojo.mes.repository.MesCimCheryOrderRepository; +import cn.estsh.impp.framework.boot.util.ResultBean; +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; +import java.util.stream.Stream; + +/** + * @Description : 芜湖发运单 + **/ +@Service +@Slf4j +public class WuhuSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService { + + @Autowired + private IMesConfigService configService; + + @Autowired + private MesCimCheryOrderRepository cimCheryOrderRepository; + + @Override + public List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str); + } + + @Override + public void saveShippingOrderManagementList(List shippingOrderManagementList) { + super.saveShippingOrderManagementList(shippingOrderManagementList); + } + + @Override + public ResultBean execute(String organizeCode, String userName, List shippingOrderManagementList) { + + MesConfig config = configService.getMesConfigNoError(organizeCode, "WU_HU_SUPPLIER"); + String supplierNo = (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesExtConstWords.EMPTY : config.getCfgValue(); + + List modelList = new ArrayList<>(); + //把查出来的发运单打印并修改打印状态为已打印- + for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) { + MesShippingOrderManagementModel model = new MesShippingOrderManagementModel(); + String shippingCodePrefix = shippingOrderManagement.getShippingCode().substring(0, shippingOrderManagement.getShippingCode().length() - 3); + String shippingCodeSuffix = shippingOrderManagement.getShippingCode().substring(shippingOrderManagement.getShippingCode().length() - 3); + model.setShippingCode(shippingCodePrefix); + model.setShippingCodeAfter3(shippingCodeSuffix); + model.setShippingCodeWhole(shippingOrderManagement.getShippingCode()); + + //查询原始报文 + List cheryOrderList = getCheryOrder(shippingOrderManagement.getOrganizeCode(), shippingOrderManagement.getShippingCode()); + Map> cheryOrderMap = new HashMap<>(); + if (cheryOrderList != null && !cheryOrderList.isEmpty()) { + MesCimCheryOrder cheryOrder = cheryOrderList.get(0); + 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)); + } + + //查询发运单明细 + List shipOrderPartInfos = getShippingOrderManagementDetailList( + organizeCode, Stream.of(shippingOrderManagement.getId()).collect(Collectors.toList()), + new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"boxNum"}); + if (!CollectionUtils.isEmpty(shipOrderPartInfos)) { + List detailList = new ArrayList<>(); + shipOrderPartInfos = shipOrderPartInfos.stream().sorted(Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList()); + for (MesShippingOrderManagementDetail shipOrderPartInfo : shipOrderPartInfos) { + 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()); + } + detailList.add(detailModel); + } + model.setShipOrderPartInfos(detailList); + } + + //查询原有报文 根据shippingCode; + shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount())?1:shippingOrderManagement.getPrintCount()+1); + shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true)); + shippingOrderManagement.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(shippingOrderManagement, userName); + modelList.add(model); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList); + } + + private List getCheryOrder(String organizeCode, String sheetNo) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sheetNo)) return null; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(sheetNo, "sheetNo", ddlPackBean); + return cimCheryOrderRepository.findByHqlWhere(ddlPackBean); + } + + private String getWorkshopName(String organizeCode, String workshopNo) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workshopNo)) return null; + MesConfig config = configService.getMesConfigNoError(organizeCode, workshopNo); + return (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesExtConstWords.EMPTY : config.getCfgValue(); + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesSortShippingPrintForCqLxModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesSortShippingPrintForCqLxModel.java new file mode 100644 index 0000000..aa374f4 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesSortShippingPrintForCqLxModel.java @@ -0,0 +1,125 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.util.CollectionUtils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 重庆龙兴发运单MODEL + **/ +@Data +public class MesSortShippingPrintForCqLxModel implements Serializable { + + private static final long serialVersionUID = 8268700875815941870L; + + @ApiParam("是否重打印") + private String isRePrint = MesExtConstWords.EMPTY; + + @ApiParam("重打印操作人") + private String rePrintUser = MesExtConstWords.EMPTY; + + @ApiParam("重打印时间") + private String rePrintDatetime = MesExtConstWords.EMPTY; + + @ApiParam("发运单号") + private String shippingCode; + + @ApiParam("流水线") + private String flowLine; + + @ApiParam("二维码") + private String docNo; + + @ApiParam("拉动单号后四位") + private String carsNo; + + @ApiParam("拉动单号除后四位") + private String docNoOther; + + @ApiParam("零件类") + private String partClassCode; + + @ApiParam("零件类名称") + private String partClassName; + + @ApiParam("供应商代码") + private String jisProviderCode; + + @ApiParam("线边库位") + private String lineLocation; + + @ApiParam("DOCK") + private String dock; + + @ApiParam("开始车号") + private String beginNumber; + + @ApiParam("结束车号") + private String endNumber; + + @ApiParam("单据生成时间") + private String jisCreationtime; + + @ApiParam("挑选完成时间") + private String pickingOverTime; + + @ApiParam("预计出发时间") + private String goOutTime; + + @ApiParam("预计到达时间") + private String goToTime; + + @ApiParam("第一个表格") + private List jisDetailList; + + @ApiParam("序号") + private Integer xh; + + @ApiParam("物料编码") + private String materielCode; + + @ApiParam("车型颜色") + private String modelColor; + + @ApiParam("用量") + private Double useQty; + + @ApiParam("流水号") + private String serialNumber; + + @ApiParam("VIN码") + private String vin; + + @ApiParam("厂家代码") + private String factoryCode; + + @ApiParam("第二个表格") + private List amountList; + + @ApiParam("零件号") + private String partNo; + + @ApiParam("数量") + private Double amountQty; + + @ApiParam("单元格") + private String appendRows; + + @ApiParam("物料名称") + private String materielNames; + + public void addJisDetail(MesSortShippingPrintForCqLxModel jisDetail) { + if (CollectionUtils.isEmpty(jisDetailList)) jisDetailList = new ArrayList<>(); + jisDetailList.add(jisDetail); + } + + public void addAmount(MesSortShippingPrintForCqLxModel amount) { + if (CollectionUtils.isEmpty(amountList)) amountList = new ArrayList<>(); + amountList.add(amount); + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index df9c490..37547e1 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -250,6 +250,12 @@ public class MesExtConstWords { public static final String PUSH_TYPE = "pushType"; //零件类型名称 public static final String PART_TYPE_NAME = "partTypeName"; + //发运组代码 + public static final String SHIPPING_GROUP_CODE = "shippingGroupCode"; + //发运单代码 + public static final String SHIPPING_CODE = "shippingCode"; + //最后打印时间 + public static final String LAST_PRINT_TIME = "lastPrintTime"; //时间[开始/结束]条件 public static final String START_TIME_START = "startTimeStart"; @@ -320,6 +326,8 @@ public class MesExtConstWords { //时间类型 public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; //时间类型 + public static final String DATETIME_FORMAT_SINGLE_SLASH = "yyyy/MM/dd HH:mm:ss"; + //时间类型 public static final String DATETIME_TRUNCATE_MINUTE_FORMAT = "yyyy-MM-dd HH"; //时间类型 public static final String TIME_TRUNCATE_SECOND_FORMAT = "HH:mm"; @@ -466,4 +474,11 @@ public class MesExtConstWords { // 默认客户条码编码规则配置代码 public static final String DEFAULT_CUST_MATCH_RULE = "DEFAULT_CUST_MATCH_RULE"; + //SPS拉动单打印模版全局配置 + public static final String PART_PULL_PRINT_TEMPLATE = "PART_PULL_PRINT_TEMPLATE"; + //排序发运全局打印配置 + public static final String SORT_SHIPPING_PRINT_TEMPLATE = "SORT_SHIPPING_PRINT_TEMPLATE"; + //由前端直接渲染模版的标志 + public static final String TEMPLATE_CUSTOM_HTML = "TEMPLATE_CUSTOM_HTML"; + }