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 3d67de7..ef64c4f 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 @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingDefineService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; @@ -17,6 +18,7 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult; 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.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -230,37 +232,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { List workOrderList = workOrderExtService.getWorkOrderList(reqBean.getOrganizeCode(), workOrderNoList); if (CollectionUtils.isEmpty(workOrderList)) - return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息无效!", cutWorkOrderNo)); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息无效!", cutWorkOrderNo)); for (MesWorkOrder workOrder : workOrderList) { if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus())) - return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) - return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); } - //保存零件数据信息 + //封装 上下文 产出零件信息 + packProductionPartContextList(productionProcessContext, equipVariableCollectContextList, productionPartContextList, cutScheme, mesWorkOrderCutDetailList, workOrderList); + + //保存 上下文 零件数据信息 if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); // 裁片方案成品配置 List mesCutSchemeFgList = workOrderCutService.queryCutSchemeFgList(cutScheme.getCutCode(), reqBean.getOrganizeCode()); - if (CollectionUtils.isEmpty(mesCutSchemeFgList)) - return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutScheme.getCutCode())); - - List fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); - - List worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); - - worKOrderPartNoList.removeAll(fgPartNoList); - - if (!CollectionUtils.isEmpty(worKOrderPartNoList)) - return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutScheme.getCutCode())); + // 校验裁片方案成品配置 + if(!checkMesCutSchemeFgListValid(mesCutSchemeFgList, workOrderList, stepResult, cutWorkOrderNo, cutScheme.getCutCode()).isCompleted()) return stepResult; // 最后一个工位 封装 包装条码打印所需参数 if (workCell.getIsEndWorkCell() != null && workCell.getIsEndWorkCell() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + List workOrderCutDetailModelList = new ArrayList<>(); + Map partDataExtContext = productionDispatchContextStepService.getPartDataExtContext(reqBean); for (MesCutSchemeFg mesCutSchemeFg : mesCutSchemeFgList) { @@ -272,24 +270,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { if (mesPackingDefine == null) return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode())); + MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel(); + BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel); + MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode()); MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo()); - mesPartContext.setCopies(cutScheme.getCopies()); + mesPartContext.setCopies(mesPackingDefine.getPrintCopies()); mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule()); mesPartContext.setPrinter(mesPackingDefine.getPrinter()); mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate()); mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo()); + workOrderCutDetailModel.setCopies(mesPackingDefine.getPrintCopies()); + workOrderCutDetailModel.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule()); + workOrderCutDetailModel.setPrinter(mesPackingDefine.getPrinter()); + workOrderCutDetailModel.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo()); + partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext); + workOrderCutDetailModelList.add(workOrderCutDetailModel); } productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataExtContext); - } + productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, workOrderCutDetailModelList); - Map workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y)); + } List produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), cutWorkOrderNo); @@ -300,8 +307,32 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { productionPsOutContextList.add(new MesProductionPsOutContext().copy(o)); }); - //封装产出零件信息 - workOrderList.stream().filter(o -> null != o).forEach( o -> { + return stepResult; + + } + + private StepResult checkMesCutSchemeFgListValid(List mesCutSchemeFgList, List workOrderList, StepResult stepResult, String cutWorkOrderNo, String cutCode) { + if (CollectionUtils.isEmpty(mesCutSchemeFgList)) + return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutCode)); + + List fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); + + List worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); + + worKOrderPartNoList.removeAll(fgPartNoList); + + if (!CollectionUtils.isEmpty(worKOrderPartNoList)) + return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutCode)); + + stepResult.setCompleted(true); + return stepResult; + + } + + private static void packProductionPartContextList(MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList, List productionPartContextList, MesCutScheme cutScheme, List mesWorkOrderCutDetailList, List workOrderList) { + Map workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y)); + + workOrderList.stream().filter(o -> null != o).forEach(o -> { MesProductionPartContext productionPartContext = new MesProductionPartContext() .copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), equipVariableCollectContextList.get(0).getMessageSource()) .isCheck(productionProcessContext.getWorkCell()); @@ -309,9 +340,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { productionPartContext.setCutCode(cutScheme.getCutCode()); productionPartContextList.add(productionPartContext); }); - - return stepResult; - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java index 89132fd..9d9f1e2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutMatchingProdRuleStepService.java @@ -74,9 +74,6 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService //存储生产过程上下文对象 productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - //从上下文中取出生产线对象 - MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); - //从上下文中取出设备对象 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); @@ -94,8 +91,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService Integer initSize = prodRuleContextList.size(); //封装非排序加工规则 - doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, - prodRuleContextList, productionPartContextList); + if (!doHandleProdRuleData(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, + prodRuleContextList, productionPartContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); //匹配失败需要清除本次扫描/读取信息 //if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList)) @@ -135,15 +132,23 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService //加工规则的数据已与产出零件的数量一致 //if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult; + log.info("doHandleProdRuleDataByProductionPart --- productionPartContextList --- outPartNoList:{}", productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList())); + + log.info("doHandleProdRuleDataByProductionPart --- productionPartContextList:{}", productionPartContextList); + //拿到当前最大的foreignKey Optional maxForeignKeyOptional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPartContext::getForeignKey)); Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO; + log.info("doHandleProdRuleDataByProductionPart --- foreignKey:{}", foreignKey); + //搜集未匹配规则的产出零件 List outPartNoList = productionPartContextList.stream() .filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))) .map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); + log.info("doHandleProdRuleDataByProductionPart --- outPartNoList:{}", foreignKey); + //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错) return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey); @@ -172,6 +177,8 @@ public class MesWorkOrderCutMatchingProdRuleStepService extends BaseStepService for (MesProductionPartContext productionPartContext : productionPartContextList) { + log.info("doHandleProdRuleDataByProductionPartAndEmptyProductSn --- 是否找加工规则:{}", null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())); + //foreignKey有值代表已经匹配过产品加工规则 if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; 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 f16958c..a5fb462 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 @@ -74,6 +74,7 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { // 最后一个工位才生成箱条码 if (workCell.getIsEndWorkCell() != null && workCell.getIsEndWorkCell() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + // 从上下文中取出成品列表 List workOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean); if (CollectionUtils.isEmpty(workOrderCutFgDataContextList)) @@ -137,6 +138,8 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService { BeanUtils.copyProperties(workOrderCutDetailModel, newWorkOrderCutDetailModel); newWorkOrderCutDetailModel.setQty(qty); newWorkOrderCutDetailModel.setCreateDatetime(cutPackage.getCreateDatetime()); + newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter()); + newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies()); workOrderCutPackages.add(cutPackage); newWorkOrderCutFgDataContextList.add(newWorkOrderCutDetailModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java index d72d6cd..0e6056d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutProductSnSaveStepService.java @@ -219,19 +219,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService { } - private void insertWorkOrderCutPackage(StationRequestBean reqBean, StationResultBean resultBean) { - - List workOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean); - - if (CollectionUtils.isEmpty(workOrderCutFgDataContextList)) - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "缺失裁片工单箱条码配置信息!"); - - for (MesWorkOrderCutDetailModel workOrderCutDetailModel : workOrderCutFgDataContextList) { - - } - - } - private void saveProductionAssembly(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProdRuleContext mesProdRuleContext, MesProductionPsOutContext productionPsOutContext) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutDetailModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutDetailModel.java index c55f75d..1e0d52c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutDetailModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderCutDetailModel.java @@ -56,6 +56,12 @@ public class MesWorkOrderCutDetailModel { @ApiParam("打印份数") private Integer copies; + @ApiParam("打印机") + private String printer; + + @ApiParam("标签模板") + private String labelTemplate; + // 包装条码打印所需属性 END }