diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesLabelTemplateExtController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesLabelTemplateExtController.java new file mode 100644 index 0000000..de2a9d2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesLabelTemplateExtController.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +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.List; + +@Api("获取系统配置的模版信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN) +public class MesLabelTemplateExtController { + + @Autowired + private IConfigService configService; + + @Autowired + private IMesTemplateService mesTemplateService; + + @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)) { + MesConfig config = configService.getMesConfigByCfgCode(moduleCode, organizeCode); + if (null == config || StringUtils.isEmpty(config.getCfgValue())) templateCode = config.getCfgValue(); + } + ValidatorBean.checkNotNull(templateCode, "模版代码不能为空"); + return ResultBean.success("查询成功").setResultObject(mesTemplateService.getMesLabelTemplate(templateCode, organizeCode)); + + } 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/serviceimpl/busi/MesPartShippingGroupService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java index e435dc9..4a66698 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java @@ -1,60 +1,52 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartShippingGroupService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.ISortShippingDispatchStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; 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.mes.pcn.api.iservice.base.IConfigService; 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.MesCustomerPart; +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail; -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.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.repository.MesConfigRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository; import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +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.function.Function; -import java.util.logging.Handler; -import java.util.stream.Collectors; -import java.util.stream.IntStream; +import java.util.List; @Service @Slf4j public class MesPartShippingGroupService implements IMesPartShippingGroupService { - @Autowired - private MesPartShippingGroupRepository shippingGroupRepository; + private IConfigService configService; @Autowired - private MesShippingOrderManagementRepository shippingOrderManagementRepository; + private IMesTemplateService templateService; @Autowired - private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + private MesPartShippingGroupRepository shippingGroupRepository; @Autowired private MesPartShippingGroupDetailRepository mesPartShippingGroupDetailRepository; @Autowired - private MesCimCheryOrderRepository cheryOrderRao; - - @Autowired private MesConfigRepository mesConfigRao; public List findAll(MesPartShippingGroup partShippingGroup) { @@ -74,177 +66,30 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService @Override public ResultBean doMesMesShippingOrderManagementPrint(MesShippingOrderManagement bean) { - DdlPackBean configPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack("WU_HU_SUPPLIER","cfgKey", configPackBean); - List configList = mesConfigRao.findByHqlWhere(configPackBean); - String supplierNo = ""; - if (configList != null && !configList.isEmpty()) { - supplierNo = configList.get(0).getCfgValue(); - } - DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - //多选 - if (!StringUtil.isEmpty(bean.getShippingGroupCode())) { - DdlPreparedPack.getInPackList(Arrays.asList(bean.getShippingGroupCode().split(",")), "shippingGroupCode", packBean); - } - DdlPreparedPack.getStringEqualPack(bean.getShippingCode(), "shippingCode", packBean); - DdlPreparedPack.getIsNull("lastPrintTime", packBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean); - List pullingOrderInfos = shippingOrderManagementRepository.findByHqlTopWhere(packBean,10); - log.info("doMesMesShippingOrderManagementPrint-pullingOrderInfos" + pullingOrderInfos.size()); - if (!CollectionUtils.isEmpty(pullingOrderInfos)) { - //45527 礼嘉福特发运单打印(通过系统参数信息判断是否采用新的查询取值逻辑-礼嘉福特) - DdlPackBean configPackBeanTwo = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack("SORT_SHIPMENT_PRINTS_FLAG_FOR_LI_JIA","cfgKey", configPackBeanTwo); - MesConfig liJiaConfig = mesConfigRao.getByProperty(configPackBeanTwo); - log.info("doMesMesShippingOrderManagementPrint-liJiaConfig" + liJiaConfig); - if (Objects.isNull(liJiaConfig)) { - log.info("doMesMesShippingOrderManagementPrint-老逻辑"); - //未维护该参数,则继续执行原有逻辑 - List modelList = new ArrayList<>(); - //把查出来的发运单打印并修改打印状态为已打印- - for (MesShippingOrderManagement shippingOrder : pullingOrderInfos) { - 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()); - //查询原始报文 - List cheryOrderList = getCheryOrder(shippingOrder.getOrganizeCode(), shippingOrder.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)); - } + MesConfig config = configService.getMesConfigByCfgCode(MesPcnExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE, bean.getOrganizeCode()); + if (null == config || StringUtils.isEmpty(config.getCfgValue())) MesPcnException.throwBusiException("未配置排序发运全局打印配置[%s]", MesPcnExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE); - //查询发运单明细 - DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(shippingOrder.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(shippingOrder.getId(), "pid", partPackBean); - DdlPreparedPack.getOrderBy("boxNum",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), partPackBean); - List shipOrderPartInfos = shippingOrderManagementDetailRepository.findByHqlWhere(partPackBean); - 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); - } + MesLabelTemplate labelTemplate = templateService.getMesLabelTemplate(config.getCfgValue(), bean.getOrganizeCode()); + if (StringUtils.isEmpty(labelTemplate.getMethodCode())) MesPcnException.throwBusiException("排序发运打印模版[%s]未配置策略方法", config.getCfgValue()); - //查询原有报文 根据shippingCode; - shippingOrder.setPrintCount(StringUtil.isEmpty(shippingOrder.getPrintCount())?1:shippingOrder.getPrintCount()+1); - shippingOrder.setLastPrintTime(TimeTool.getNowTime(true)); - shippingOrder.setLastPrintUser(bean.getUserInfo()); - ConvertBean.serviceModelUpdate(shippingOrder, bean.getUserInfo()); - modelList.add(model); - } - shippingOrderManagementRepository.saveAll(pullingOrderInfos); - return ResultBean.success("发运单打印成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(modelList); - }else { - log.info("doMesMesShippingOrderManagementPrint-新逻辑"); - //维护了该参数,则执行礼嘉的新逻辑 - List mainDataList = new ArrayList<>(); - /** - * 查询发运单明细信息 - */ - List pidList = pullingOrderInfos.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()); - DdlPackBean liJIaPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getInPackList(pidList, "pid", liJIaPackBean); - List shippingOrderManagementDetailList = - shippingOrderManagementDetailRepository.findByHqlWhere(liJIaPackBean); - log.info("doMesMesShippingOrderManagementPrint-查询发运单明细信息" + shippingOrderManagementDetailList.size()); - Map> detailByPidMap = shippingOrderManagementDetailList - .stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid)); - log.info("doMesMesShippingOrderManagementPrint-查询发运单明细信息-detailByPidMap-" + detailByPidMap.size()); - //遍历处理每个发运单主表 - for (MesShippingOrderManagement pullingOrderInfo : pullingOrderInfos) { - //一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据) - //取出当前发运单的明细信息 - List details = detailByPidMap.get(pullingOrderInfo.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("doMesMesShippingOrderManagementPrint-生成一张实体发运单-list-" + list); - mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, detailByAssyCodeMap, details)); - } - } - pullingOrderInfo.setPrintCount(StringUtil.isEmpty(pullingOrderInfo.getPrintCount())? 1 : pullingOrderInfo.getPrintCount()+1); - pullingOrderInfo.setLastPrintTime(TimeTool.getNowTime(true)); - pullingOrderInfo.setLastPrintUser(bean.getUserInfo()); - ConvertBean.serviceModelUpdate(pullingOrderInfo, bean.getUserInfo()); - log.info("doMesMesShippingOrderManagementPrint-pullingOrderInfo更新"); - } - shippingOrderManagementRepository.saveAll(pullingOrderInfos); - log.info("doMesMesShippingOrderManagementPrint-结束"); - return ResultBean.success("发运单打印成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(mainDataList); - } - } - return ResultBean.success("不存在需要打印的发运单") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } + ISortShippingDispatchStrategyService dispatchStrategyService = (ISortShippingDispatchStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); + List shippingOrderManagementList = dispatchStrategyService.getShippingOrderManagementList(bean); - private String getWorkshopName(String organizeCode, String workshopNo) { + if (CollectionUtils.isEmpty(shippingOrderManagementList)) + return ResultBean.success("不存在需要打印的发运单").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workshopNo, "cfgKey", ddlPackBean); - List configList = mesConfigRao.findByHqlWhere(ddlPackBean); - return configList.isEmpty() ? "" : configList.get(0).getCfgValue(); + log.info("工厂{}排序发运打印 --- 获取到打印数据:{}条 --- bean:{} --- shippingOrderManagementList:{} --- {}", + bean.getOrganizeCode(), shippingOrderManagementList.size(), JSONObject.toJSONString(bean), JSONObject.toJSONString(shippingOrderManagementList), Thread.currentThread().getName()); + IPrintTemplateStrategyService printStrategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); + ResultBean resultBean = printStrategyService.execute(bean, shippingOrderManagementList); + + log.info("工厂{}排序发运打印 --- 封装打印数据完成 --- {}", bean.getOrganizeCode(), Thread.currentThread().getName()); + + return resultBean; } - private List getCheryOrder(String organizeCode, String sheetNo) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(sheetNo, "sheetNo", ddlPackBean); - return cheryOrderRao.findByHqlWhere(ddlPackBean); - } + @Override public MesPartShippingGroupDetail getMesPartShippingGroupDetail(String organizeCode, String shippingGroupCode, String partNo, String custPartNo) { if(StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(shippingGroupCode) || StringUtil.isEmpty(partNo) || StringUtil.isEmpty(custPartNo)) return null; @@ -264,57 +109,4 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService return mesPartShippingGroupDetailRepository.getByProperty(packBean); } - 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"); - log.info("doMesMesShippingOrderManagementPrint-顶部的通用数据赋值" + model); - //中部表结构赋值 - model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); - log.info("doMesMesShippingOrderManagementPrint-中部表结构赋值" + model); - //底部表结构赋值 - model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); - log.info("doMesMesShippingOrderManagementPrint-底部表结构赋值" + model); - return model; - } - - private List createDetailList( - String assyCode, Map> detailByAssyCodeMap, - List details, String rackNo) { - List dataList = new ArrayList<>(); - //取出符合条件的发运单明细数据 - List nowDetailList = detailByAssyCodeMap.get(assyCode); - log.info("doMesMesShippingOrderManagementPrint-createDetailList-nowDetailList" + nowDetailList.size()); - 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 ++; - } - } - log.info("doMesMesShippingOrderManagementPrint-createDetailList-dataList" + dataList.size()); - return dataList; - } - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java index 8b04448..dec1d85 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java @@ -2,9 +2,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print; import cn.estsh.i3plus.ext.mes.pcn.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.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 根据不同的条码,封装不同的数据来源 content 是打印模板,dataList @@ -14,20 +19,16 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult; * @Modify: **/ public interface IPrintTemplateStrategyService { - /** - * dataList - * 需要打印的数据,封装数据 - * @param sn - * @return - */ -// MesProduceSnPrintDataModel execute(StepResult stepResult, StationRequestBean reqBean, MesProductionPsOutContext sn , String organizeCode); - /** - * GenSerialNoModel 生成条码的规则 - * mesProduceSnPrintModel 需要的数据 - * @param model - * @param mesProduceSnPrintModel - * @return - */ - MesProduceSnPrintModel execute(GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep); + @ApiOperation(value = "单件条码") + default MesProduceSnPrintModel execute(GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, + MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep) { + return mesProduceSnPrintModel; + } + + @ApiOperation(value = "发运单") + default ResultBean execute(MesShippingOrderManagement bean, List pullingOrderInfos) { + return null; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java new file mode 100644 index 0000000..428291b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/ISortShippingDispatchStrategyService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.pcn.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 getShippingOrderManagementList(MesShippingOrderManagement bean) { + return null; + } + + 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-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java new file mode 100644 index 0000000..50f1551 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqCxSortShippingPrintStrategyService.java @@ -0,0 +1,85 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +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.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.repository.seres.IMesCimSeresSrmRunSheetJisRepository; +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.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : 重庆龙兴发运单 + **/ +@Service +@Slf4j +public class CqCxSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService { + + @Autowired + private IMesCimSeresSrmRunSheetJisRepository cimSeresSrmRunSheetJisRepository; + + @Override + public List getShippingOrderManagementList(MesShippingOrderManagement bean) { + return super.getShippingOrderManagementList(bean); + } + + @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(MesShippingOrderManagement bean, List shippingOrderManagementList) { + + List pidList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()); + List shippingCodeList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList()); + List shippingOrderManagementDetailList = getShippingOrderManagementDetailList(bean.getOrganizeCode(), pidList, null, null); + + log.info("工厂{}排序发运打印 --- 查询发运单明细信息:{}条 --- {}", bean.getOrganizeCode(), + CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? MesPcnExtConstWords.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)); + + +// List cimSeresSrmRunSheetJisList = getCimSeresSrmRunSheetJisList(bean.getOrganizeCode(), shippingCodeList); + + + //遍历处理每个发运单主表 + for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) { + //一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据) + //取出当前发运单的明细信息 + List details = null == detailByPidMap ? null : detailByPidMap.get(shippingOrderManagement.getId()); + + + + shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount())? 1 : shippingOrderManagement.getPrintCount()+1); + shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true)); + shippingOrderManagement.setLastPrintUser(bean.getUserInfo()); + ConvertBean.serviceModelUpdate(shippingOrderManagement, bean.getUserInfo()); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(null); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java new file mode 100644 index 0000000..4a5b036 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/CqLjSortShippingPrintStrategyService.java @@ -0,0 +1,171 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +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; +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.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 getShippingOrderManagementList(MesShippingOrderManagement bean) { + return super.getShippingOrderManagementList(bean); + } + + @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(MesShippingOrderManagement bean, List shippingOrderManagementList) { + + MesConfig config = configService.getMesConfigNoError(bean.getOrganizeCode(), "SORT_SHIPMENT_PRINTS_FLAG_FOR_LI_JIA"); + String cfgValue = (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesPcnExtConstWords.EMPTY : config.getCfgValue(); + + //维护了该参数,则执行礼嘉的新逻辑 + List mainDataList = new ArrayList<>(); + + List pidList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()); + List shippingOrderManagementDetailList = getShippingOrderManagementDetailList(bean.getOrganizeCode(), pidList, null, null); + + log.info("工厂{}排序发运打印 --- 查询发运单明细信息:{}条 --- {}", bean.getOrganizeCode(), + CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? MesPcnExtConstWords.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("工厂{}排序发运打印 --- 生成一张实体发运单:{} --- {}", bean.getOrganizeCode(), 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(bean.getUserInfo()); + ConvertBean.serviceModelUpdate(shippingOrderManagement, bean.getUserInfo()); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mainDataList).setResultObject(cfgValue); + + } + + 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-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java new file mode 100644 index 0000000..4d11d5a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/SortShippingDispatchStrategyService.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.ISortShippingDispatchStrategyService; +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; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +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.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 java.util.Arrays; +import java.util.List; + +/** + * @Description : 发运单查询 + **/ +@Service +@Slf4j +public abstract class SortShippingDispatchStrategyService implements ISortShippingDispatchStrategyService { + + @Autowired + public MesShippingOrderManagementRepository shippingOrderManagementRepository; + + @Autowired + public MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + + @Override + public List getShippingOrderManagementList(MesShippingOrderManagement bean) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + List shippingGroupCodeList = !StringUtil.isEmpty(bean.getShippingGroupCode()) ? Arrays.asList(bean.getShippingGroupCode().split(MesPcnExtConstWords.COMMA)) : null; + if (!CollectionUtils.isEmpty(shippingGroupCodeList)) { + if (shippingGroupCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(shippingGroupCodeList.get(0), MesPcnExtConstWords.SHIPPING_GROUP_CODE, packBean); + else DdlPreparedPack.getInPackList(shippingGroupCodeList, MesPcnExtConstWords.SHIPPING_GROUP_CODE, packBean); + } + DdlPreparedPack.getStringEqualPack(bean.getShippingCode(), MesPcnExtConstWords.SHIPPING_CODE, packBean); + DdlPreparedPack.getIsNull(MesPcnExtConstWords.LAST_PRINT_TIME, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + return shippingOrderManagementRepository.findByHqlTopWhere(packBean,10); + } + + @Override + public List getShippingOrderManagementDetailList(String organizeCode, List idList, Object[] obj, String[] str) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesPcnExtConstWords.PID, packBean); + else DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean); + if (null != obj && null != str) DdlPreparedPack.getOrderByPack(obj, str, packBean); + return shippingOrderManagementDetailRepository.findByHqlWhere(packBean); + } + + @Override + public void saveShippingOrderManagementList(List shippingOrderManagementList) { + shippingOrderManagementRepository.saveAll(shippingOrderManagementList); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java new file mode 100644 index 0000000..8f64276 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/sortshipping/strategy/WuhuSortShippingPrintStrategyService.java @@ -0,0 +1,140 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.sortshipping.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +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; +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 getShippingOrderManagementList(MesShippingOrderManagement bean) { + return super.getShippingOrderManagementList(bean); + } + + @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(MesShippingOrderManagement bean, List shippingOrderManagementList) { + + MesConfig config = configService.getMesConfigNoError(bean.getOrganizeCode(), "WU_HU_SUPPLIER"); + String supplierNo = (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesPcnExtConstWords.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( + bean.getOrganizeCode(), 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(bean.getUserInfo()); + ConvertBean.serviceModelUpdate(shippingOrderManagement, bean.getUserInfo()); + modelList.add(model); + } + + saveShippingOrderManagementList(shippingOrderManagementList); + + return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList); + } + + private List getCheryOrder(String organizeCode, String sheetNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(sheetNo, "sheetNo", ddlPackBean); + return cimCheryOrderRepository.findByHqlWhere(ddlPackBean); + } + + private String getWorkshopName(String organizeCode, String workshopNo) { + MesConfig config = configService.getMesConfigNoError(organizeCode, workshopNo); + return (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesPcnExtConstWords.EMPTY : config.getCfgValue(); + } +} 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 53ce94c..496506a 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 @@ -355,6 +355,10 @@ public class MesPcnExtConstWords { public static final String SPOT_CHECK_USER = "spotCheckUser"; //发运组代码 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 SHIPPING_GROUP_NAME = "shippingGroupName"; //队列状态 @@ -896,4 +900,9 @@ public class MesPcnExtConstWords { //发运组配置后写入mes_shipping_queue public static final String MES_SHIPPING_QUEUE_SAVE_CFG = "MES_SHIPPING_QUEUE_SAVE_CFG"; + + //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"; }