From 697b20035e3edbb847d5db7b4c1452ed467e1d8c Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 24 Nov 2024 14:31:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0=E7=9B=AE=E8=A7=86=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesProduceSnPrintController.java | 49 +++--- .../serviceimpl/busi/MesProduceSnPrintService.java | 10 +- ...WorkOrderAssemblyPrintQueueStrategyService.java | 179 ++++++++++++--------- .../strategy/AssemblyVisualListPrintStrategy.java | 47 +++--- 4 files changed, 152 insertions(+), 133 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java index fd7ed9a..ff04762 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java @@ -3,9 +3,9 @@ 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.IMesProduceSnPrintService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; @@ -18,10 +18,16 @@ 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.CollectionUtils; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Objects; +import java.util.StringJoiner; /** * @Description : 条码补打 @@ -36,8 +42,6 @@ import java.util.Objects; public class MesProduceSnPrintController { @Autowired - private MesRedisLockUtil mesRedisLockUtil; - @Autowired private IMesProduceSnPrintService mesProduceSnPrintService; @Autowired @@ -139,35 +143,36 @@ public class MesProduceSnPrintController { @PostMapping("/mes-print-queue/find") @ApiOperation(value = "打印队列查询") public ResultBean findMesWorkOrderPrintQueue(MesPrintQueue printQueue) { - boolean lockFlag = false; - String moduleKey=""; + try { ValidatorBean.checkNotNull(printQueue.getPrintQueueType(), "打印类型不能为空"); - String workCenterCodeQuery = printQueue.getWorkCenterCodeQuery(); - String partProdGroupCodeQuery = printQueue.getPartProdGroupCodeQuery(); - if (printQueue.getPrintQueueType() == MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()) { - ValidatorBean.checkNotNull(workCenterCodeQuery, "产线代码不能为空"); - ValidatorBean.checkNotNull(partProdGroupCodeQuery, "零件生产组代码不能为空"); - } - moduleKey = workCenterCodeQuery+":"+partProdGroupCodeQuery; - lockFlag = mesRedisLockUtil.redisLock(moduleKey); - ValidatorBean.checkNotNull(printQueue.getPrintQueueType(), "打印队列类型不能为空"); ValidatorBean.checkNotNull(printQueue.getOrganizeCode(), "工厂代码不能为空"); ValidatorBean.checkNotNull(printQueue.getModifyUser(), "操作人不能为空"); + if (printQueue.getPrintQueueType() == MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()) { + ValidatorBean.checkNotNull(printQueue.getWorkCenterCodeQuery(), "产线代码不能为空"); + ValidatorBean.checkNotNull(printQueue.getPartProdGroupCodeQuery(), "零件生产组代码不能为空"); + } + + String moduleKey = new StringJoiner(MesPcnExtConstWords.COLON) + .add(printQueue.getOrganizeCode()) + .add(MesExtEnumUtil.PRINT_QUEUE_TYPE.class.getSimpleName()) + .add(printQueue.getPrintQueueType().toString()) + .add(printQueue.getWorkCenterCodeQuery()).add(printQueue.getPartProdGroupCodeQuery()).toString(); + + synchronized (moduleKey.intern()) { + + List printQueueList = mesProduceSnPrintService.findMesPrintQueueList(printQueue); + + return ResultBean.success(CollectionUtils.isEmpty(printQueueList) ? "查询暂无可打印数据!!!" : "打印队列查询成功!!!").setResultList(printQueueList); + + } - return ResultBean.success("查询成功") - .setMsg("打印队列查询成功!!!") - .setResultList(mesProduceSnPrintService.findMesPrintQueueList(printQueue)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); - }finally { - if (lockFlag){ - mesRedisLockUtil.redisUnLock(lockFlag,moduleKey); - } } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java index 133fb9a..3b77d8b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java @@ -2,7 +2,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnPrintService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.printqueue.IPrintQueueStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; @@ -20,7 +23,6 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -399,8 +401,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { try { IPrintQueueStrategyService strategyService = (IPrintQueueStrategyService) SpringContextsUtil.getBean(clazz); printQueueList = strategyService.execute(printQueue); - } catch (BeansException e) { - log.info("findMesPrintQueueList --- clazz:{}执行异常", clazz); + } catch (Exception e) { + log.info("打印队列查询 --- {} --- 执行异常 --- {}", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(printQueue.getPrintQueueType()), e.toString()); } return printQueueList; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java index ef50ea1..8ec323a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java @@ -9,7 +9,6 @@ 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.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; @@ -17,14 +16,12 @@ import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeansException; 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.stream.Collectors; /** @@ -67,43 +64,49 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt // 获取需要打印的打印队列 List printQueueList = getMesPrintQueues(model); + List workOrderNoList = CollectionUtils.isEmpty(printQueueList) ? null : + (printQueueList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesPrintQueue::getWorkOrderNo).collect(Collectors.toList())) + .stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + + log.info("打印队列查询 --- {} --- 查询到打印数据: {} ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), CollectionUtils.isEmpty(workOrderNoList) ? "[]" : workOrderNoList.toString()); + // 无打印直接返回 - if (CollectionUtils.isEmpty(printQueueList)){ - log.info("无待打印的数据"); - return null; - } + if (CollectionUtils.isEmpty(workOrderNoList)) return null; // 获取工单信息 - List workOrderList = getMesWorkOrders(model, printQueueList); - if(CollectionUtils.isEmpty(workOrderList)) { - log.info("工单信息不存在"); - return null; - } + List workOrderList = getMesWorkOrders(model, workOrderNoList); + // 根据工单号对工单分组 + Map> workOrderMap = CollectionUtils.isEmpty(workOrderList) ? null : workOrderList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); + if (CollectionUtils.isEmpty(workOrderMap)) log.info("打印队列查询 --- {} --- 工单信息不存在 --- {} ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), + CollectionUtils.isEmpty(workOrderList) ? "[]" : workOrderList.toString()); // 产线代码集合 - List workCenterCodeList = workOrderList.stream().map(MesWorkOrder::getWorkCenterCode).distinct().collect(Collectors.toList()); + List workCenterCodeList = CollectionUtils.isEmpty(workOrderMap) ? null : + (workOrderList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkCenterCode()))).map(MesWorkOrder::getWorkCenterCode).collect(Collectors.toList())) + .stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); // 根据产线代码节后获取产线信息集合 - List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, model.getOrganizeCode()); + List workCenterList = CollectionUtils.isEmpty(workCenterCodeList) ? null : workCenterService.queryMesWorkCenterList(workCenterCodeList, model.getOrganizeCode()); // 产线名称集合 - Map workCenterNameMap = CollectionUtils.isEmpty(mesWorkCenters) ? null : mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); - - // 根据工单号对工单分组 - Map workOrderMapByWorkOrderNo = workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + Map> workCenterNameMap = CollectionUtils.isEmpty(workCenterList) ? null : workCenterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); // 根据零件生产组代码分组 - Map partProdGroupMap = getMesPartProdGroupMap(model, printQueueList); - if(Objects.isNull(partProdGroupMap)){ - log.info("零件生产组信息不存在"); - return null; - } + List partProdGroupCodeList = (printQueueList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartProdGroupCode()))).map(MesPrintQueue::getPartProdGroupCode).collect(Collectors.toList())) + .stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + Map partProdGroupMap = CollectionUtils.isEmpty(partProdGroupCodeList) ? null : getMesPartProdGroupMap(model, partProdGroupCodeList); + if (CollectionUtils.isEmpty(partProdGroupMap)) log.info("打印队列查询 --- {} --- 零件生产组信息不存在 --- {} ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), + CollectionUtils.isEmpty(partProdGroupCodeList) ? "[]" : partProdGroupCodeList.toString()); // 客户车型配置名称MAP - Map carModelMapByCode = getMesCustomerCarModelMap(model, workOrderList); + List carModelCodeList = (workOrderList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCarModelCode()))).map(MesWorkOrder::getCarModelCode).collect(Collectors.toList())) + .stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + Map carModelMapByCode = CollectionUtils.isEmpty(workOrderList) ? null : getMesCustomerCarModelMap(model, carModelCodeList); + if(CollectionUtils.isEmpty(carModelMapByCode)) log.info("打印队列查询 --- {} --- 客户车型信息 --- {} ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), + CollectionUtils.isEmpty(carModelCodeList) ? "[]" : carModelCodeList.toString()); // 工单装配件 - Map> workOrderAssemblyMapByWorkOrderNo = getWorkOrderAssemblyMapByWorkOrderNo(model, workOrderMapByWorkOrderNo); + Map> workOrderAssemblyMapByWorkOrderNo = CollectionUtils.isEmpty(workOrderNoList) ? null : getWorkOrderAssemblyMapByWorkOrderNo(model, workOrderNoList); // 展示打印队列列表 List showPrintQueueList = new ArrayList<>(); @@ -113,80 +116,80 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt for (MesPrintQueue printQueue : printQueueList) { - MesWorkOrder mesWorkOrder = workOrderMapByWorkOrderNo.getOrDefault(printQueue.getWorkOrderNo(), null); + MesWorkOrder mesWorkOrder = (StringUtils.isEmpty(printQueue.getWorkOrderNo()) || CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(printQueue.getWorkOrderNo())) ? null : workOrderMap.get(printQueue.getWorkOrderNo()).get(0); if (mesWorkOrder == null) { - log.info("WorkOrderAssemblyPrintQueueStrategyService --- 工单{}为空 暂不输出打印", printQueue.getWorkOrderNo()); - continue; - } - - mesWorkOrder.setWorkCenterName(Objects.isNull(workCenterNameMap) || !workCenterNameMap.containsKey(printQueue.getWorkCenterCode()) ? "" : workCenterNameMap.get(printQueue.getWorkCenterCode())); - - printQueue.setWorkOrderTypeName(MesExtEnumUtil.ORDER_TYPE.valueOfDescription(mesWorkOrder.getWorkOrderType())); - - MesPartProdGroup mesPartProdGroup = partProdGroupMap.getOrDefault(printQueue.getPartProdGroupCode(), null); - if(Objects.isNull(mesPartProdGroup)){ - printQueue.setRemark("生产组信息不存在"); + printQueue.setRemark("生产工单不存在"); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.FAILURE.getValue()); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); - log.info("WorkOrderAssemblyPrintQueueStrategyService --- 生产组{}为空 暂不输出打印", printQueue.getPartProdGroupCode()); + log.info("打印队列查询 --- {} --- 工单[{}]不存在 暂不输出打印 ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), printQueue.getWorkOrderNo()); continue; } - String printTemplate = mesPartProdGroup.getPrintTemplate(); - - if (StringUtils.isEmpty(printTemplate)) { - printQueue.setRemark("打印模板为空"); + MesPartProdGroup mesPartProdGroup = (StringUtils.isEmpty(printQueue.getPartProdGroupCode()) || CollectionUtils.isEmpty(partProdGroupMap) || !partProdGroupMap.containsKey(printQueue.getPartProdGroupCode())) ? null : partProdGroupMap.get(printQueue.getPartProdGroupCode()); + if (mesPartProdGroup == null || StringUtils.isEmpty(mesPartProdGroup.getPrintTemplate())) { + printQueue.setRemark("零件生产组信息不存在或模版代码未维护"); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.FAILURE.getValue()); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + log.info("打印队列查询 --- {} --- 零件生产组[{}]不存在或模版代码未维护 暂不输出打印 ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), printQueue.getPartProdGroupCode()); continue; } - MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(printTemplate, model.getOrganizeCode()); - - //模板信息丢失抛出异常 - if (StringUtils.isEmpty(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) { - printQueue.setRemark(String.format("模板代码[%s]方法类为空,请配置!", printTemplate)); + MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(mesPartProdGroup.getPrintTemplate(), model.getOrganizeCode()); + if (null == labelTemplate || StringUtils.isEmpty(labelTemplate.getMethodCode())) { + printQueue.setRemark(String.format("模板代码[%s]信息未维护或方法类为空,请配置!", mesPartProdGroup.getPrintTemplate())); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.FAILURE.getValue()); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + log.info("打印队列查询 --- {} --- 模板代码[{}]信息未维护或方法类为空,请配置! ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), mesPartProdGroup.getPrintTemplate()); continue; } + mesWorkOrder.setWorkCenterName((!CollectionUtils.isEmpty(workCenterNameMap) && workCenterNameMap.containsKey(printQueue.getWorkCenterCode())) ? workCenterNameMap.get(printQueue.getWorkCenterCode()).get(0).getWorkCenterName() : ""); + + printQueue.setWorkOrderTypeName(MesExtEnumUtil.ORDER_TYPE.valueOfDescription(mesWorkOrder.getWorkOrderType())); + Map modelMap = new HashMap<>(); modelMap.put("mesWorkOrder", mesWorkOrder); modelMap.put("mesPartProdGroup", mesPartProdGroup); - MesCustomerCarModel customerCarModel = Objects.isNull(carModelMapByCode) || !carModelMapByCode.containsKey(mesWorkOrder.getCarModelCode()) ? null : carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + MesCustomerCarModel customerCarModel = (CollectionUtils.isEmpty(carModelMapByCode) || !carModelMapByCode.containsKey(mesWorkOrder.getCarModelCode())) ? null : carModelMapByCode.get(mesWorkOrder.getCarModelCode()); if (customerCarModel != null) { modelMap.put("mesCustomerCarModel", customerCarModel); } - List workOrderAssemblyListByWorkOrderNo = Objects.isNull(workOrderAssemblyMapByWorkOrderNo) || !workOrderAssemblyMapByWorkOrderNo.containsKey(printQueue.getWorkOrderNo()) ? null : workOrderAssemblyMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); - if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { - modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); - } + if (CollectionUtils.isEmpty(workOrderAssemblyMapByWorkOrderNo) || !workOrderAssemblyMapByWorkOrderNo.containsKey(printQueue.getWorkOrderNo())) { + printQueue.setRemark("工单装配件清单信息不存在"); + log.info("打印队列查询 --- {} --- 工单[{}]装配件清单信息不存在 ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), printQueue.getWorkOrderNo()); + } else { + modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyMapByWorkOrderNo.get(printQueue.getWorkOrderNo())); + } MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); mesProduceSnPrintModel.setSourceData(modelMap); mesProduceSnPrintModel.setPrinter(mesPartProdGroup.getPrinter()); - MesProduceSnPrintModel snPrintModel = null; + MesProduceSnPrintModel snPrintModel; try { IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false); - } catch (BeansException e) { - printQueue.setRemark(String.format("模板代码[%s]方法类[%s]执行异常,请配置!", labelTemplate.getTemplateCode(), labelTemplate.getMethodCode())); - ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + } catch (Exception e) { + log.info("打印队列查询 --- {} --- {} 执行异常! --- {} ---", MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfDescription(model.getPrintQueueType()), labelTemplate.getMethodCode(), e.toString()); + printQueue.setRemark(String.format("模板代码[%s]方法类[%s]执行异常!", labelTemplate.getTemplateCode(), labelTemplate.getMethodCode())); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.FAILURE.getValue()); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); continue; } - printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); printQueue.setPrintTime(TimeTool.getNowTime(true)); - ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); printQueue.setPrintContent(snPrintModel.getPrintContextList()); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); showPrintQueueList.add(printQueue); @@ -194,7 +197,7 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt printedSnLog.setOrganizeCode(printQueue.getOrganizeCode()); printedSnLog.setWorkOrderNo(printQueue.getWorkOrderNo()); printedSnLog.setCustPartNo(printQueue.getCustPartNo()); - ConvertBean.serviceModelInitialize(printedSnLog, "JOB"); + ConvertBean.serviceModelInitialize(printedSnLog, model.getModifyUser()); printedSnLogList.add(printedSnLog); } @@ -206,48 +209,66 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt return showPrintQueueList; } - private Map> getWorkOrderAssemblyMapByWorkOrderNo(MesPrintQueue model, Map workOrderMapByWorkOrderNo) { - List workOrderNoList = workOrderMapByWorkOrderNo.keySet().stream().collect(Collectors.toList()); + private Map> getWorkOrderAssemblyMapByWorkOrderNo(MesPrintQueue model, List workOrderNoList) { + if (CollectionUtils.isEmpty(workOrderNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean); + else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); - return CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); + return CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); } - private Map getMesCustomerCarModelMap(MesPrintQueue model, List workOrderList) { - List carModelCodeList = workOrderList.stream().map(MesWorkOrder::getCarModelCode).distinct().collect(Collectors.toList()); + private Map getMesCustomerCarModelMap(MesPrintQueue model, List carModelCodeList) { + if (CollectionUtils.isEmpty(carModelCodeList)) return null; // 客户车型配置 DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getInPackList(carModelCodeList, MesPcnExtConstWords.CAR_MODEL_CODE, packBean); + if (carModelCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(carModelCodeList.get(0), MesPcnExtConstWords.CAR_MODEL_CODE, packBean); + else DdlPreparedPack.getInPackList(carModelCodeList, MesPcnExtConstWords.CAR_MODEL_CODE, packBean); List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); - return CollectionUtils.isEmpty(customerCarModelList) ? null : customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + if (CollectionUtils.isEmpty(customerCarModelList)) return null; + customerCarModelList = customerCarModelList.stream().filter(o -> null != o).collect( + Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesCustomerCarModel::getCarModelCode))), ArrayList::new)); + return customerCarModelList.stream().filter(o -> null != o).collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, o -> o)); } - private Map getMesPartProdGroupMap(MesPrintQueue model, List printQueueList) { - // 生产零件号 - List partProdGroupCodeList = printQueueList.stream().map(MesPrintQueue::getPartProdGroupCode).distinct().collect(Collectors.toList()); + private Map getMesPartProdGroupMap(MesPrintQueue model, List partProdGroupCodeList) { + if (CollectionUtils.isEmpty(partProdGroupCodeList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - //DdlPreparedPack.getInPackList(workCenterCodeList, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); - DdlPreparedPack.getInPackList(partProdGroupCodeList, MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); + if (partProdGroupCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(partProdGroupCodeList.get(0), MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); + else DdlPreparedPack.getInPackList(partProdGroupCodeList, MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); List partProdGroupList = partProdGroupRepository.findByHqlWhere(packBean); - return CollectionUtils.isEmpty(partProdGroupList) ? null : partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); + if (CollectionUtils.isEmpty(partProdGroupList)) return null; + partProdGroupList = partProdGroupList.stream().filter(o -> null != o).collect( + Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesPartProdGroup::getPartProdGroupCode))), ArrayList::new)); + return partProdGroupList.stream().filter(o -> null != o).collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, o -> o)); } - private List getMesWorkOrders(MesPrintQueue model, List printQueueList) { - List workOrderNoList = printQueueList.stream().map(MesPrintQueue::getWorkOrderNo).distinct().collect(Collectors.toList()); + private List getMesWorkOrders(MesPrintQueue model, List workOrderNoList) { + if (CollectionUtils.isEmpty(workOrderNoList)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean); + else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); return workOrderRepository.findByHqlWhere(packBean); } private List getMesPrintQueues(MesPrintQueue model) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getInPackList(Arrays.asList(model.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); - DdlPreparedPack.getInPackList(Arrays.asList(model.getPartProdGroupCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); - DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean); + + List workCenterCodeList = Arrays.asList(model.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)); + List partProdGroupCodeCodeList = Arrays.asList(model.getPartProdGroupCodeQuery().split(MesPcnExtConstWords.COMMA)); + + if (workCenterCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(workCenterCodeList.get(0), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + else DdlPreparedPack.getInPackList(workCenterCodeList, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + + if (workCenterCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(partProdGroupCodeCodeList.get(0), MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); + else DdlPreparedPack.getInPackList(partProdGroupCodeCodeList, MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue(), MesPcnExtConstWords.PRINT_QUEUE_TYPE, packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); return printQueueRepository.findByHqlTopWhere(packBean, MesPcnExtConstWords.FOUR); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index e553d34..1913869 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -14,7 +14,10 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -28,18 +31,6 @@ import java.util.stream.Collectors; @Slf4j public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategyService { - //@Autowired - //private MesCutSchemeFgRepository cutSchemeFgRepository; - // - //@Autowired - //private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; - // - //@Autowired - //private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository; - // - //@Autowired - //private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository; - @Override public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule , StepResult stepResult, StationRequestBean reqBean, Boolean isStep) { @@ -53,8 +44,10 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; // 工单装配件信息 List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : null; - workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getDisplaySeq)); + + workOrderAssemblyList = CollectionUtils.isEmpty(workOrderAssemblyList) ? null : + workOrderAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDisplaySeq()) && o.getDisplaySeq().compareTo(MesPcnExtConstWords.ZERO) != 0)).collect(Collectors.toList()); + // 返回的结果集合 List> printDataMapList = new ArrayList<>(); // 单个标签参数值 @@ -87,23 +80,21 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe resultMap.put(MesPcnExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss")); //替换总成SN resultMap.put(MesPcnExtConstWords.REPLACE_CSN,MesPcnExtConstWords.REPLACE_CSN_CP+workOrder.getCustPartNo().substring(workOrder.getCustPartNo().length() -4)); - // 总个数 - Integer totalCount = partProdGroup.getTotalCount(); - Map> collect = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getDisplaySeq)); + Map> collect = CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssembly::getDisplaySeq)); // 为空时显示内容 String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); - for (int index = 0; index < collect.size(); index++) { - List orderAssemblyList = collect.get(index+1); - List disPlayValues = orderAssemblyList.stream().map(MesWorkOrderAssembly::getDisplayValue).distinct().collect(Collectors.toList()); - String displayValue =isNullViewContent; - if(!disPlayValues.isEmpty()){ - displayValue = String.join("\r\n", disPlayValues); + if (!CollectionUtils.isEmpty(collect)) { + for (Integer displaySeq : collect.keySet()) { + List orderAssemblyList = collect.get(displaySeq); + List disPlayValues = (orderAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDisplayValue()))).map(MesWorkOrderAssembly::getDisplayValue).collect(Collectors.toList())) + .stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + String displayValue =isNullViewContent; + if(!CollectionUtils.isEmpty(disPlayValues)){ + displayValue = String.join("\r\n", disPlayValues); + } + resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + displaySeq, displayValue); } - // String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); - -// resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : isNullViewContent : displayValue); - resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + (index+1), displayValue); } printDataMapList.add(resultMap);