From 91f6148ac70adf9e86fa208f6bd61fe808e5893f Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 10:55:10 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E6=89=93=E5=8D=B0=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesProduceSnPrintService.java | 4 +++ .../printqueue/IPrintQueueStrategyService.java | 21 +++++++++++ .../strategy/PrintQueueDispatchService.java | 42 ++++++++++++++++++++++ .../MesWorkOrderCutPackageSnSaveStepService.java | 2 -- .../step/MesWorkOrderCutSaveStepService.java | 3 ++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 13 +++++++ 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/IPrintQueueStrategyService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/PrintQueueDispatchService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java index 16caf68..8368a66 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; @@ -24,4 +25,7 @@ public interface IMesProduceSnPrintService { @ApiOperation(value = "裁片工单查询") List findMesWorkOrderCut(MesWorkOrderCut workOrderCut); + + @ApiOperation(value = "打印队列查询") + List findMesPrintQueueList(MesPrintQueue printQueue); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/IPrintQueueStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/IPrintQueueStrategyService.java new file mode 100644 index 0000000..afb7a77 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/IPrintQueueStrategyService.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.printqueue; + +import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; + +import java.util.List; + +/** + * @Description : 根据不同的打印队列类型数据,封装不同的数据来源 content 是打印模板,dataList + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/6 16:39 + * @Modify: + **/ +public interface IPrintQueueStrategyService { + + /** + * @param model + * @return List + */ + List execute(MesPrintQueue model); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/PrintQueueDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/PrintQueueDispatchService.java new file mode 100644 index 0000000..46b8b86 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/PrintQueueDispatchService.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.printqueue.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @PROJECT_NAME: i3plus-mes-yfai + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2024-09-23 11:08 + */ +@Service +public class PrintQueueDispatchService { + + @Autowired + private MesLabelTemplateRepository labelTemplateRepository; + + @Autowired + private MesLabelTemplateParamRepository labelTemplateParamRepository; + + public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = labelTemplateRepository.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = labelTemplateParamRepository.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java index 094c10b..d6b0a0b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackageSnSaveStepService.java @@ -25,14 +25,12 @@ 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.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * @Description : 保存裁片工单包装条码工步 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java index d446f1a..c24f229 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java @@ -36,6 +36,9 @@ public class MesWorkOrderCutSaveStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { + //保存开模记录工步 + ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); + //保存裁片工单条码工步 ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCutProductSnSaveStepService")).executeInState(reqBean); 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 ac49f18..344ff80 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 @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.util; +import io.swagger.annotations.ApiParam; + /** * @Description : * @Reference : @@ -551,4 +553,15 @@ public class MesPcnExtConstWords { // 打印队列类型 public static final String PRINT_QUEUE_TYPE = "printQueueType"; + + // 车型名称 + public static final String CAR_MODEL_NAME = "carModelName"; + // VIN_CODE + public static final String VIN_CODE = "vinCode"; + // VIN_CODE 后四位 + public static final String VIN_CODE_AFTER_FOUR = "vinCodeAfterFour"; + // 工单标识 + public static final String ORDER_FLAG = "orderFlag"; + // 重打印 + public static final String REPRINT = "reprint"; } From ae996c361c39d60dafb3834d74d661d422d44e50 Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 11:11:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?PCN=E6=A0=B9=E6=8D=AE=E4=BA=A7=E7=BA=BF?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=9B=B6=E4=BB=B6=E7=94=9F=E4=BA=A7=E7=BB=84?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesPartProdGroupService.java | 19 ++++++++++ .../base/MesPartProdGroupController.java | 42 ++++++++++++++++++++++ .../serviceimpl/base/MesPartProdGroupService.java | 30 ++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPartProdGroupService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartProdGroupService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPartProdGroupService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPartProdGroupService.java new file mode 100644 index 0000000..9512e87 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPartProdGroupService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 零件生产组 + * @Reference : + * @Author : xinwang.yi + * @CreateDate 2024/6/13 15:18 + * @Modify: + **/ +public interface IMesPartProdGroupService { + + @ApiOperation(value = "查询零件生产组集合") + List queryMesPartProdGroup(MesPartProdGroup partProdGroup); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java new file mode 100644 index 0000000..6ffc6ab --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartProdGroupService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 长度修改类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/13 15:13 + * @Modify: + **/ +@RestController +@Api(tags = "零件生产组") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mes-part-prod-group") +public class MesPartProdGroupController { + + @Autowired + private IMesPartProdGroupService partProdGroupService; + + @GetMapping("/query") + @ApiOperation(value = "查询零件生产组信息") + public ResultBean queryMesCutLengthModifyType(MesPartProdGroup partProdGroup) { + try { + return ResultBean.success("查询成功").setResultList(partProdGroupService.queryMesPartProdGroup(partProdGroup)); + } 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/base/MesPartProdGroupService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartProdGroupService.java new file mode 100644 index 0000000..0ba64e8 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartProdGroupService.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartProdGroupService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * @PROJECT_NAME: i3plus-mes-yfai + * @DESCRIPTION: 零件生产组 + * @USER: xinwang.yi + * @DATE: 2024-09-24 11:06 + */ +@Service +public class MesPartProdGroupService implements IMesPartProdGroupService { + + @Autowired + private MesPartProdGroupRepository partProdGroupRepository; + @Override + public List queryMesPartProdGroup(MesPartProdGroup partProdGroup) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(partProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE,ddlPackBean); + return partProdGroupRepository.findByHqlWhere(ddlPackBean); + } +} From aad6e2dd48a146e52b29956996407c5f36716db6 Mon Sep 17 00:00:00 2001 From: yxw Date: Tue, 24 Sep 2024 11:54:08 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesPartProdGroupController.java | 4 + .../busi/MesProduceSnPrintController.java | 28 +++ .../serviceimpl/busi/MesProduceSnPrintService.java | 21 ++- ...WorkOrderAssemblyPrintQueueStrategyService.java | 210 +++++++++++++++++++++ .../strategy/AssemblyVisualListPrintStrategy.java | 107 +++++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 6 + 6 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java index 6ffc6ab..16631c7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/MesPartProdGroupController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; 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; @@ -32,6 +33,9 @@ public class MesPartProdGroupController { @ApiOperation(value = "查询零件生产组信息") public ResultBean queryMesCutLengthModifyType(MesPartProdGroup partProdGroup) { try { + + ValidatorBean.checkNotNull(partProdGroup.getOrganizeCode(), "工厂代码为空"); + return ResultBean.success("查询成功").setResultList(partProdGroupService.queryMesPartProdGroup(partProdGroup)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java index 320a34b..49d60c5 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 @@ -5,8 +5,10 @@ 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.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -134,4 +136,30 @@ public class MesProduceSnPrintController { } } + @PostMapping("/mes-print-queue/find") + @ApiOperation(value = "打印队列查询") + public ResultBean findMesWorkOrderPrintQueue(MesPrintQueue printQueue) { + try { + + ValidatorBean.checkNotNull(printQueue.getPrintQueueType(), "打印类型不能为空"); + + if (printQueue.getPrintQueueType() == MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER.getValue()) { + ValidatorBean.checkNotNull(printQueue.getWorkCenterCodeQuery(), "产线代码不能为空"); + ValidatorBean.checkNotNull(printQueue.getPartProdGroupCodeQuery(), "零件生产组代码不能为空"); + } + + ValidatorBean.checkNotNull(printQueue.getPrintQueueType(), "打印队列类型不能为空"); + ValidatorBean.checkNotNull(printQueue.getOrganizeCode(), "工厂代码不能为空"); + ValidatorBean.checkNotNull(printQueue.getModifyUser(), "操作人不能为空"); + + return ResultBean.success("查询成功") + .setMsg("裁片工单查询成功!!!") + .setResultList(mesProduceSnPrintService.findMesPrintQueueList(printQueue)); + } 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/MesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java index dcf6be7..b29215f 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 @@ -4,6 +4,7 @@ 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.IMesProduceSnPrintService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService; +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; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel; @@ -28,6 +29,7 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.hutool.core.bean.BeanUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +49,7 @@ import java.util.stream.Stream; * @CreateDate 2024/6/13 15:52 * @Modify: **/ +@Slf4j @Service public class MesProduceSnPrintService implements IMesProduceSnPrintService { @@ -331,7 +334,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { String methodCode = labelTemplate.getMethodCode(); //模板信息丢失抛出异常 - if (methodCode == null) { + if (StringUtils.isEmpty(methodCode)) { workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode())); workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE); ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); @@ -377,6 +380,22 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { return new ArrayList<>(); } + @Override + public List findMesPrintQueueList(MesPrintQueue printQueue) { + + String clazz = MesExtEnumUtil.PRINT_QUEUE_TYPE.valueOfClazz(printQueue.getPrintQueueType()); + + List printQueueList = null; + try { + IPrintQueueStrategyService strategyService = (IPrintQueueStrategyService) SpringContextsUtil.getBean(clazz); + printQueueList = strategyService.execute(printQueue); + } catch (BeansException e) { + log.info("findMesPrintQueueList --- clazz:{}执行异常", clazz); + } + + return printQueueList; + } + private List getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List cutCodeList) { List cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut.getOrganizeCode(), cutCodeList); // 过滤出只需要打印的裁片方案设备 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 new file mode 100644 index 0000000..b684f69 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java @@ -0,0 +1,210 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.printqueue.strategy; + +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.pojo.model.MesProduceSnPrintModel; +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.*; +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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @PROJECT_NAME: i3plus-mes-yfai + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2024-09-23 11:08 + */ +@Slf4j +@Service +public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueStrategyService { + + @Autowired + private MesPrintQueueRepository printQueueRepository; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Autowired + private MesPartProdGroupRepository partProdGroupRepository; + + @Autowired + private PrintQueueDispatchService printQueueDispatchService; + + @Autowired + private MesCustomerCarModelRepository customerCarModelRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Override + public List execute(MesPrintQueue model) { + + // 获取需要打印的打印队列 + List printQueueList = getMesPrintQueues(model); + + // 无打印直接返回 + if (CollectionUtils.isEmpty(printQueueList)) return null; + + // 获取工单信息 + List workOrderList = getMesWorkOrders(model, printQueueList); + + // 根据工单号对工单分组 + Map workOrderMapByWorkOrderNo = workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + + // 根据零件生产组代码分组 + Map partProdGroupMap = getMesPartProdGroupMap(model, printQueueList); + + // 客户车型配置名称MAP + Map carModelMapByCode = getMesCustomerCarModelMap(model, workOrderList); + + // 工单装配件 + Map> workOrderAssemblyMapByWorkOrderNo = getWorkOrderAssemblyMapByWorkOrderNo(model, workOrderMapByWorkOrderNo); + + // 展示打印队列列表 + List showPrintQueueList = new ArrayList<>(); + + for (MesPrintQueue printQueue : printQueueList) { + + MesWorkOrder mesWorkOrder = workOrderMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); + + if (mesWorkOrder == null) { + log.info("WorkOrderAssemblyPrintQueueStrategyService --- 工单{}为空 暂不输出打印", printQueue.getWorkOrderNo()); + continue; + } + + MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(printQueue.getPartProdGroupCode()); + + String printTemplate = mesPartProdGroup.getPrintTemplate(); + + if (StringUtils.isEmpty(printTemplate)) { + printQueue.setRemark("打印模板为空"); + printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + continue; + } + + MesLabelTemplate labelTemplate = printQueueDispatchService.getLabelTemplate(printTemplate, model.getOrganizeCode()); + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + + //模板信息丢失抛出异常 + if (StringUtils.isEmpty(methodCode)) { + printQueue.setRemark(String.format("模板代码[%s]方法类为空,请配置!", labelTemplate.getTemplateCode())); + printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + continue; + } + + Map modelMap = new HashMap<>(); + modelMap.put("mesWorkOrder", mesWorkOrder); + modelMap.put("mesPartProdGroup", mesPartProdGroup); + + MesCustomerCarModel customerCarModel = carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + if (customerCarModel != null) { + modelMap.put("mesCustomerCarModel", customerCarModel); + } + List workOrderAssemblyListByWorkOrderNo = workOrderAssemblyMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); + if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { + modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); + } + + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(modelMap); + mesProduceSnPrintModel.setPrinter(mesPartProdGroup.getPrinter()); + + MesProduceSnPrintModel snPrintModel = null; + try { + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + 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()); + printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + continue; + } + + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + printQueue.setPrintTime(TimeTool.getNowTime(true)); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + printQueueRepository.save(printQueue); + printQueue.setPrintContent(snPrintModel.getPrintContextList()); + showPrintQueueList.add(printQueue); + + } + + return showPrintQueueList; + } + + private Map> getWorkOrderAssemblyMapByWorkOrderNo(MesPrintQueue model, Map workOrderMapByWorkOrderNo) { + List workOrderNoList = workOrderMapByWorkOrderNo.keySet().stream().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); + Map> workOrderAssemblyMapByWorkOrderNo = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); + return workOrderAssemblyMapByWorkOrderNo; + } + + private Map getMesCustomerCarModelMap(MesPrintQueue model, List workOrderList) { + List carModelCodeList = workOrderList.stream().map(MesWorkOrder::getCarModelCode).distinct().collect(Collectors.toList()); + // 客户车型配置 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(carModelCodeList, MesPcnExtConstWords.CAR_MODEL_CODE, packBean); + List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); + + Map carModelMapByCode = customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + return carModelMapByCode; + } + + private Map getMesPartProdGroupMap(MesPrintQueue model, List printQueueList) { + // 生产零件号 + List partProdGroupCodeList = printQueueList.stream().map(MesPrintQueue::getPartProdGroupCode).distinct().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + //DdlPreparedPack.getInPackList(workCenterCodeList, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getInPackList(partProdGroupCodeList, MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); + List partProdGroupList = partProdGroupRepository.findByHqlWhere(packBean); + return partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x,y) -> y)); + } + + private List getMesWorkOrders(MesPrintQueue model, List printQueueList) { + List workOrderNoList = printQueueList.stream().map(MesPrintQueue::getWorkOrderNo).distinct().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + return workOrderRepository.findByHqlWhere(packBean); + } + + private List getMesPrintQueues(MesPrintQueue model) { + Pager pager = new Pager(); + pager.setStartRow(1); + pager.setCurrentPage(1); + pager.setPageSize(30); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue(), MesPcnExtConstWords.PRINT_QUEUE_TYPE, packBean); + return printQueueRepository.findByHqlWherePage(packBean, pager); + } + +} 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 new file mode 100644 index 0000000..0a3cb07 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -0,0 +1,107 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +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.*; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; + +/** + * @Description : 装配目视单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@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) { + + Map modelMap = (Map) model.getSourceData(); + + // 工单信息 + MesWorkOrder workOrder = (MesWorkOrder) modelMap.get("mesWorkOrder"); + // 零件生产组信息 + MesPartProdGroup partProdGroup = (MesPartProdGroup) modelMap.get("mesPartProdGroup"); + // 客户车型配置信息 + MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; + // 工单装配件信息 + List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : null; + if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getRouteSeq)); + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + // 单个标签参数值 + Map resultMap = new HashMap<>(); + // 车型名称 + resultMap.put(MesPcnExtConstWords.CAR_MODEL_NAME, customerCarModel == null ? "" : customerCarModel.getCarModelName()); + // vinCode + resultMap.put(MesPcnExtConstWords.VIN_CODE, workOrder.getVinCode()); + // vinCode 后四位 + resultMap.put(MesPcnExtConstWords.VIN_CODE_AFTER_FOUR, workOrder.getVinCode()); + // 总成零件号 + resultMap.put(MesPcnExtConstWords.PART_NO, workOrder.getPartNo()); + // 工单标识 + resultMap.put(MesPcnExtConstWords.ORDER_FLAG, workOrder.getOrderFlag()); + // 客户订单号 + resultMap.put(MesPcnExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo()); + // 客户零件号 + resultMap.put(MesPcnExtConstWords.CUST_PART_NO, workOrder.getPartNo()); + // 客户条码 + resultMap.put(MesPcnExtConstWords.SN, workOrder.getSn()); + // 车型名称 + resultMap.put(MesPcnExtConstWords.REMARK, customerCarModel == null ? "" : customerCarModel.getRemark()); + // 重打印 + resultMap.put(MesPcnExtConstWords.REPRINT, ""); + // EDI接口时间 取工单plan_start_time + resultMap.put(MesPcnExtConstWords.EDI_REC_TIME, workOrder.getPlanStartTime()); + + // 总个数 + Integer totalCount = partProdGroup.getTotalCount(); + // 为空时显示内容 + String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); + for (Integer index = 0; index < totalCount; index++) { + resultMap.put(MesPcnExtConstWords.ASSEMBLY_PARAM + (index+1), workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0)); + } + + printDataMapList.add(resultMap); + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} 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 344ff80..e1d21cf 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 @@ -564,4 +564,10 @@ public class MesPcnExtConstWords { public static final String ORDER_FLAG = "orderFlag"; // 重打印 public static final String REPRINT = "reprint"; + + // EDI接收时间 + public static final String EDI_REC_TIME = "ediRecTime"; + + // 装配件参数 + public static final String ASSEMBLY_PARAM = "assemblyParam"; }