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 0bdcd58..2a4ee31 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 @@ -120,7 +120,7 @@ public class MesProduceSnPrintController { @ApiOperation(value = "裁片工单查询") public ResultBean findMesWorkOrderCut(MesWorkOrderCut workOrderCut) { try { - ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCode(), "产线代码不能为空"); + ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCodeQuery(), "产线代码不能为空"); ValidatorBean.checkNotNull(workOrderCut.getOrganizeCode(), "工厂代码不能为空"); ValidatorBean.checkNotNull(workOrderCut.getModifyUser(), "操作人不能为空"); 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 e5e2769..69c3070 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 @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateSt import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService; @@ -27,6 +28,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 org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +38,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 条码补打 @@ -98,6 +101,21 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { @Autowired private MesLabelTemplateParamRepository labelTemplateParamRepository; + @Autowired + private MesCutSchemeFgRepository cutSchemeFgRepository; + + @Autowired + private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; + + @Autowired + private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository; + + @Autowired + private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository; + + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + // 仅查询 public static final Integer CUT_QUERY_MODE_BY_QUERY = 1; // 打印 @@ -261,7 +279,7 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { pager.setCurrentPage(1); pager.setPageSize(30); DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCut.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(workOrderCut.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getInPackList(Arrays.asList(workOrderCut.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean); List workOrderCutList = workOrderCutRepository.findByHqlWherePage(packBean, pager); @@ -271,15 +289,27 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { // model 为空时,该情况为异常情况,mode由前端返回,不会为空,该情况下返回数据为空 if (workOrderCut.getMode() != null && workOrderCut.getMode().equals(CUT_QUERY_MODE_BY_QUERY)) { + workOrderCutList.forEach(o -> o.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(o.getWorkOrderStatus()))); + return workOrderCutList; } else if (workOrderCut.getMode() != null) { List cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); - + // 根据 裁片方案代码 获取裁片方案设备 List mesCutSchemeList = workOrderCutService.queryCutSchemeList(cutCodeList, workOrderCut.getOrganizeCode()); - + // 根据 裁片方案代码 获取裁片方案设备 + List cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut, cutCodeList); + // 根据 裁片方案代码 对 裁片方案信息 分组 Map cutSchemeMapByCutCode = mesCutSchemeList.stream().collect(Collectors.toMap(MesCutScheme::getCutCode, Function.identity(), (x, y) -> y)); + // 根据 裁片方案代码 对 裁片方案成品信息 分组 + Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList); + // 根据 裁片方案代码 对 裁片方案原材料信息 分组 + Map> cutSchemeMaterialMapByCutCode = getCutSchemeMaterialMapByCutCode(cutCodeList); + // 根据 裁片方案代码 对 裁片设备信息 分组 + Map> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? new HashMap<>() : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode)); + // 根据pid对 设备参数 分组 + Map> cutSchemeEquipmentDetailMapByPid = getCutSchemeEquipmentDetailMapByPid(workOrderCut.getOrganizeCode(), cutSchemeEquipmentList); for (MesWorkOrderCut workOrderCutDb : workOrderCutList) { @@ -290,8 +320,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { //模板信息丢失抛出异常 if (labelTemplate == null) { workOrderCutDb.setRemark(String.format("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode())); - ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); continue; } @@ -301,20 +331,20 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { //模板信息丢失抛出异常 if (methodCode == null) { workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode())); - ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); workOrderCutDb.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); continue; } MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); - mesProduceSnPrintModel.setSourceData(workOrderCutList); + mesProduceSnPrintModel.setSourceData(Stream.of(packMesWorkOrderCutPrintModel(cutSchemeMapByCutCode, cutSchemeFgMapByCutCode, cutSchemeMaterialMapByCutCode, cutSchemeEquipmentMapByCutCode, cutSchemeEquipmentDetailMapByPid, workOrderCutDb, cutScheme)).collect(Collectors.toList())); mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter()); - MesProduceSnPrintModel printModel = null; + MesProduceSnPrintModel snPrintModel = null; try { IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); - printModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false); + snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false); } catch (BeansException e) { workOrderCutDb.setRemark(String.format("裁片方案[%s]模板代码[%s]方法类[%s]执行异常,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode())); ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); @@ -322,11 +352,19 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { continue; } - workOrderCutDb.setPrintContent(printModel.getPrintContextList()); + workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList()); workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + workOrderCutDb.setPrintTime(TimeTool.getNowTime(true)); ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); workOrderCutRepository.save(workOrderCutDb); + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(workOrderCut.getOrganizeCode()); + printedSnLog.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); + printedSnLog.setBarcode(workOrderCut.getCutWorkOrderNo()); + ConvertBean.serviceModelInitialize(printedSnLog, workOrderCut.getModifyUser()); + printedSnLogRepository.save(printedSnLog); + } return workOrderCutList; @@ -335,6 +373,77 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { return workOrderCutList; } + private List getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List cutCodeList) { + List cutSchemeEquipmentList = getMesCutSchemeEquipments(workOrderCut.getOrganizeCode(), cutCodeList); + // 过滤出只需要打印的裁片方案设备 + cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList()); + return cutSchemeEquipmentList; + } + + private static MesWorkOrderCutPrintModel packMesWorkOrderCutPrintModel(Map cutSchemeMapByCutCode, Map> cutSchemeFgMapByCutCode, Map> cutSchemeMaterialMapByCutCode, Map> cutSchemeEquipmentMapByCutCode, Map> cutSchemeEquipmentDetailMapByPid, MesWorkOrderCut workOrderCutDb, MesCutScheme cutScheme) { + MesWorkOrderCutPrintModel printModel = new MesWorkOrderCutPrintModel(); + BeanUtils.copyProperties(workOrderCutDb, printModel); + printModel.setCutScheme(cutSchemeMapByCutCode.get(cutScheme.getCutCode())); + printModel.setCutSchemeFgList(cutSchemeFgMapByCutCode.get(cutScheme.getCutCode())); + printModel.setCutSchemeMaterialList(cutSchemeMaterialMapByCutCode.get(cutScheme.getCutCode())); + printModel.setCutSchemeEquipmentList(cutSchemeEquipmentMapByCutCode.get(cutScheme.getCutCode())); + printModel.setCutSchemeEquipmentDetailMapByPid(cutSchemeEquipmentDetailMapByPid); + return printModel; + } + + private List getMesCutSchemeEquipmentDetails(String organizeCode, List cutSchemeEquipmentList) { + if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) { + List idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean); + return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean); + } + return null; + } + + private Map> getCutSchemeEquipmentDetailMapByPid(String organizeCode, List cutSchemeEquipmentList) { + List cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(organizeCode, cutSchemeEquipmentList); + + Map> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); + return cutSchemeEquipmentDetailMapByPid; + } + + private List getMesCutSchemeEquipments(String organizeCode, List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean); + List cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean); + return cutSchemeEquipmentList; + } + + private List getMesCutSchemeMaterials(List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean); + List cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean); + return cutSchemeMaterialList; + } + + private Map> getCutSchemeMaterialMapByCutCode(List cutCodeList) { + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); + //根据裁片方案代码对裁片方案原材料分组 + Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); + return cutSchemeMaterialMapByCutCode; + } + + private List getMesCutSchemeFgs(List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(cutCodeList, MesPcnExtConstWords.CUT_CODE, packBean); + List cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean); + return cutSchemeFgList; + } + + private Map> getCutSchemeFgMapByCutCode(List cutCodeList) { + List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList); + + //根据裁片方案代码对裁片方案成品明细分组 + Map> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); + return cutSchemeFgMapByCutCode; + } + private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java index 5675583..d23aee6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -2,10 +2,10 @@ 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.model.MesWorkOrderCutPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; 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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; @@ -53,58 +53,38 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic @Override public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule , StepResult stepResult, StationRequestBean reqBean, Boolean isStep) { - List workOrderCutList = (List)model.getSourceData(); + List workOrderCutPrintModelList = (List)model.getSourceData(); List> printDataMapList = new ArrayList<>(); - // 裁片方案代码集合 - List cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + for (MesWorkOrderCutPrintModel workOrderCutPrintModel : workOrderCutPrintModelList) { + List mesCutSchemeFgList = workOrderCutPrintModel.getCutSchemeFgList(); + List mesCutSchemeMaterialList = workOrderCutPrintModel.getCutSchemeMaterialList(); - Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList); + Map> cutSchemeEquipmentDetailMapByPid = workOrderCutPrintModel.getCutSchemeEquipmentDetailMapByPid(); - List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); - //根据裁片方案代码对裁片方案原材料分组 - Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); - - List cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList); - - cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList()); - - // 根据裁片方案代码对裁片设备信息分组 - Map> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode)); - - List cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList); - - Map> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); - - for (MesWorkOrderCut workOrderCut : workOrderCutList) { - - List mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode()); - - List mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode()); + MesCutSchemeMaterial cutSchemeMaterial = CollectionUtils.isEmpty(mesCutSchemeMaterialList) ? null : mesCutSchemeMaterialList.stream().findFirst().get(); - MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0); - - List cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode()); + List cutSchemeEquipmentListByCutCode = workOrderCutPrintModel.getCutSchemeEquipmentList(); if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq)); Map resultMap = new HashMap<>(); - resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo()); - resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCut.getCutName()); + resultMap.put(MesPcnExtConstWords.CUT_WORK_ORDER_NO, workOrderCutPrintModel.getCutWorkOrderNo()); + resultMap.put(MesPcnExtConstWords.CUT_NAME, workOrderCutPrintModel.getCutName()); // 原材料零件号 - resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo()); + resultMap.put(MesPcnExtConstWords.RAW_PART_NO, cutSchemeMaterial == null ? "" : cutSchemeMaterial.getPartNo()); // 拉料信息 START - resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, getValByDouble(cutSchemeMaterial.getPullingMaterialLength())); - resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber())); - resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPerLayerNumber())); - resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, getValByDouble(cutSchemeMaterial.getMaterialDosage())); - resultMap.put(MesPcnExtConstWords.USING_LENGTH, getValByDouble(cutSchemeMaterial.getUsingLength())); - resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getLayerNumber())); - resultMap.put(MesPcnExtConstWords.TENSION_PARAM, getValByDouble(cutSchemeMaterial.getTensionParam())); + resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLength())); + resultMap.put(MesPcnExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber())); + resultMap.put(MesPcnExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getPerLayerNumber())); + resultMap.put(MesPcnExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getMaterialDosage())); + resultMap.put(MesPcnExtConstWords.USING_LENGTH, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getUsingLength())); + resultMap.put(MesPcnExtConstWords.LAYER_NUMBER, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getLayerNumber())); + resultMap.put(MesPcnExtConstWords.TENSION_PARAM, cutSchemeMaterial == null ? "" : getValByDouble(cutSchemeMaterial.getTensionParam())); resultMap.put(MesPcnExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss")); // 拉料信息 END @@ -150,6 +130,24 @@ public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyServic return model; } + private boolean checkCutSchemeMaterialIsNull(MesCutSchemeMaterial cutSchemeMaterial) { + return cutSchemeMaterial == null ? true : false; + } + + private Map> getCutSchemeEquipmentDetailMapByPid(MesProduceSnPrintModel model, List cutSchemeEquipmentList) { + List cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList); + + Map> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); + return cutSchemeEquipmentDetailMapByPid; + } + + private Map> getCutSchemeMaterialMapByCutCode(List cutCodeList) { + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList); + //根据裁片方案代码对裁片方案原材料分组 + Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); + return cutSchemeMaterialMapByCutCode; + } + private String getValByDouble(Double val) { return val == null ? "" : val.toString(); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index 1aa0b8a..11ab0c0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -280,10 +280,10 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { if (mesPackingDefine == null) return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode())); - if (StringUtils.isEmpty(mesPackingDefine.getPrinter())) + if (StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) && StringUtils.isEmpty(mesPackingDefine.getPrinter())) return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印机!", mesPackingDefine.getPackCode())); - if (StringUtils.isEmpty(mesPackingDefine.getPrintTemplate())) + if (StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) && StringUtils.isEmpty(mesPackingDefine.getPrintTemplate())) return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印模板!", mesPackingDefine.getPackCode())); if (StringUtils.isEmpty(mesPackingDefine.getPackageBarcodeRule())) @@ -303,8 +303,8 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo()); mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies()); mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule()); - mesPartContext.setPrinter(mesPackingDefine.getPrinter()); - mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate()); + mesPartContext.setPrinter(StringUtils.isEmpty(cutScheme.getPackageSnPrinter()) ? mesPackingDefine.getPrinter() : cutScheme.getPackageSnPrinter()); + mesPartContext.setLabelTemplate(StringUtils.isEmpty(cutScheme.getPackageLabelTemplateCode()) ? mesPackingDefine.getPakcageTemplate() : cutScheme.getPackageLabelTemplateCode()); mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo()); partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java index 379f8c3..753eb10 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutPackagePrintStepService.java @@ -17,16 +17,16 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.IMesPrintedSnLogRepository; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -60,6 +60,9 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService { @Autowired private MesWorkOrderCutRepository workOrderCutRepository; + @Autowired + private IMesPrintedSnLogRepository snLogRepository; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -71,10 +74,6 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService { * 重构,返回给前端弹框数据数据 */ - //Map.Entry entry = partDataExtContext.entrySet().stream().findFirst().get(); - // - //String labelTemplateCode = entry.getValue().getLabelTemplate(); - List> resultMap = new ArrayList<>(); Map> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString())); @@ -94,15 +93,14 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService { List partNoList = workOrderCutDetailModelList.stream().map(MesWorkOrderCutDetailModel::getPartNo).distinct().collect(Collectors.toList()); //模板信息丢失抛出异常 - if (labelTemplate == null) { + if (labelTemplate == null) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查包装定义信息,零件号%s对应模板代码[%s]无效!", partNoList, model.getLabelTemplate())); - } //根据反射获取策略类--封装打印数据 String methodCode = labelTemplate.getMethodCode(); //模板信息丢失抛出异常 if (StringUtils.isEmpty(methodCode)) - stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode())); + stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的方法类为空,请配置!", partNoList, labelTemplate.getTemplateCode())); MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); @@ -124,6 +122,22 @@ public class MesWorkOrderCutPackagePrintStepService extends BaseStepService { new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS}, new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.CUT_ORDER_STATUS.PRINTED.getValue()}); + List snLogList = new ArrayList<>(); + workOrderCutFgDataContext.stream().forEach(o -> { + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setWorkOrderNo(o.getWorkOrderNo()); + printedSnLog.setBarcode(o.getPackageNo()); + printedSnLog.setPartNo(o.getPartNo()); + printedSnLog.setPartName(o.getPartName()); + printedSnLog.setCustPartNo(o.getCustPartNo()); + printedSnLog.setProductDate(o.getLotNo()); + printedSnLog.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(printedSnLog, reqBean.getUserInfo()); + snLogList.add(printedSnLog); + }); + + snLogRepository.saveAll(snLogList); + // 裁片方案代码 // 根据裁片方案代码查询裁片方案成品配置 //返回打印标识 给前端 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 a30c029..094c10b 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 @@ -160,7 +160,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies()); newWorkOrderCutDetailModel.setPackageSnRule(mesPartContext.getPackageSnRule()); newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter()); - newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo()); + newWorkOrderCutDetailModel.setCustPartNo(mesPartContext.getCustPartNo()); newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate()); newWorkOrderCutDetailModel.setOrganizeCode(mesPartContext.getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutPrintModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutPrintModel.java new file mode 100644 index 0000000..fc68ffb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutPrintModel.java @@ -0,0 +1,74 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.hibernate.annotations.ColumnDefault; + +import javax.persistence.Column; +import javax.persistence.Transient; +import java.util.List; +import java.util.Map; + +/** + * @Description : 裁片工单标签打印Model + * @Reference : + * @Author : xinwang.yi + * @CreateDate 2024/6/13 15:48 + * @Modify: + **/ +@Data +public class MesWorkOrderCutPrintModel { + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("裁片工单号") + private String cutWorkOrderNo; + + @ApiParam("产线代码") + private String workCenterCode; + + @ApiParam("裁片方案代码") + private String cutCode; + + @ApiParam("裁片方案名称") + private String cutName; + + @ApiParam("工单状态") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CUT_ORDER_STATUS.class, refForeignKey = "value", value = "description") + private Integer workOrderStatus; + + @ApiParam("打印状态") + @ColumnDefault("10") + @AnnoOutputColumn(refClass = MesExtEnumUtil.PRINT_STATUS.class, refForeignKey = "value", value = "description") + private Integer printStatus; + + @Column(name = "PRINT_TIME") + @ApiParam("打印时间") + private String printTime; + + @ApiParam("打印内容") + private List> printContent; + + @ApiParam("裁片方案") + private MesCutScheme cutScheme; + + @ApiParam("裁片方案成品") + private List cutSchemeFgList; + + @ApiParam("裁片方案原材料") + private List cutSchemeMaterialList; + + @ApiParam("裁片方案设备") + private List cutSchemeEquipmentList; + + @ApiParam("裁片方案设备参数") + private Map> cutSchemeEquipmentDetailMapByPid; + + @Transient + @ApiParam("查询模式:1-仅仅查询;2-查询并带打印模板修改打印状态") + private Integer mode; +}