diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java index ddc13cb..2bd6ea7 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java @@ -18,6 +18,9 @@ public interface IMesProdOrgExtService { @ApiOperation(value = "根据生产线代码,工位代码查询工位信息") MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode); + @ApiOperation(value = "根据生产线代码查询工位信息") + List getWorkCellList(String organizeCode, String workCenterCode); + @ApiOperation(value = "根据子生产线代码,子工位代码,关系类型查询主子工位关系信息") MesWorkCellExtendCfg getWorkCellExtendCfg(String organizeCode, String workCenterCodeBak, String workCellCodeBak, Integer extendType); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java index efb06ea..cc664eb 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java @@ -3,13 +3,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; -import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import cn.estsh.i3plus.pojo.mes.bean.*; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; public interface IMesAssemblyExtService { @@ -17,7 +15,7 @@ public interface IMesAssemblyExtService { List getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext); @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件]") - List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext); + List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap); @ApiOperation(value = "【排序线】获取生产工单装配件清单") List getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java index 9f242a4..578f292 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java @@ -2,9 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; public interface IMesProdRuleCfgExtService { @@ -24,7 +26,7 @@ public interface IMesProdRuleCfgExtService { MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext); @ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件]") - MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext); + MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap); @ApiOperation(value = "【非排序线】获取产品加工规则 【根据PID获取】") MesProdRuleNosortCfg getProdRuleNosortCfg(String organizeCode, Long id); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 47782e0..0b9035d 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -133,4 +134,7 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取生产线类型") Integer getCenterType(StationRequestBean reqBean); + @ApiOperation(value = "获取生产线下的工位集合") + Map dispatchWorkCellMap(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesCutRawErrorProofingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesCutRawErrorProofingController.java index 8e06df8..3a221fa 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesCutRawErrorProofingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesCutRawErrorProofingController.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; 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.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; @@ -59,6 +60,10 @@ public class MesCutRawErrorProofingController { @ApiOperation(value = "查询条码长度") public ResultBean queryLengthByScanSn(MesCutRawErrorProofingModel model) { try { + + ValidatorBean.checkNotNull(model.getSn(), "查询条码不能为空"); + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂代码不能为空"); + return ResultBean.success("查询成功").setResultObject(cutRawErrorProofingService.queryLengthBySn(model)); } 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 0bdcd58..320a34b 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 @@ -117,10 +117,10 @@ public class MesProduceSnPrintController { } @PostMapping("/mes-work-order-cut/find") - @ApiOperation(value = "裁片工单查询") + @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/controller/busi/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java index cb8eac5..3a68523 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java @@ -121,7 +121,7 @@ public class MesPullingOrderInfoController { throw new ImppBusiException("拉动单明细状态不为未送料状态!"); } MesPullingOrderPartInfo pullingOrderInfo = mesPullingOrderInfoService.doMesPullingOrderInfoJisScan(info, AuthUtil.getSessionUser().getUserName()); - return ResultBean.success("拉动单打印成功") + return ResultBean.success("JIS物料拉动校验条码成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultObject(pullingOrderInfo); } catch (ImppBusiException e) { @@ -134,9 +134,16 @@ public class MesPullingOrderInfoController { @ApiOperation(value = "JIS物料拉动-送料按钮") public ResultBean doMesPullingOrderInfoSend(@RequestBody List infoList) { try { - + for (MesPullingOrderPartInfo partInfo : infoList) { + if (MesExtEnumUtil.PULL_ORDER_PART_STATUS.SENTED.getValue()==partInfo.getStatus()) { + throw new ImppBusiException("JIS物料拉动状态不为未送料状态!"); + } + if (MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()==partInfo.getColor()) { + throw new ImppBusiException("JIS物料拉动需要扫描条码校验!"); + } + } List pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoSend(infoList, AuthUtil.getSessionUser().getUserName()); - return ResultBean.success("拉动单打印成功") + return ResultBean.success("拉动单送料成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultList(pullingOrderInfos); } catch (ImppBusiException e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java index b822744..ab9605d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellExtendCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; @@ -13,11 +14,13 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.TreeSet; import java.util.stream.Collectors; @Slf4j @@ -56,6 +59,17 @@ public class MesProdOrgExtService implements IMesProdOrgExtService { } @Override + public List getWorkCellList(String organizeCode, String workCenterCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null; + List workCellList = workCellRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode}); + if (!CollectionUtils.isEmpty(workCellList)) + workCellList = workCellList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkCell::getWorkCellCode))), ArrayList::new)); + return workCellList; + } + + @Override public MesWorkCellExtendCfg getWorkCellExtendCfg(String organizeCode, String workCenterCodeBak, String workCellCodeBak, Integer extendType) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCodeBak) || StringUtils.isEmpty(workCellCodeBak) || StringUtils.isEmpty(extendType)) return null; return workCellExtendCfgRepository.getByProperty( diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java index 61536ea..3cef6a4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; @@ -43,6 +44,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired private MesFileRepository fileRepository; //【排序线】获取生产工单装配件绑定记录 @@ -64,14 +68,14 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { List productionAssemblySortContextList = new ArrayList<>(); - workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap))); + workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()))); return productionAssemblySortContextList; } - //【排序线】获取生产工单装配件绑定记录 [前道所有装配件] + //【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑] @Override - public List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext) { + public List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap) { if (null == prodRuleContext) return null; @@ -92,7 +96,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { List productionAssemblySortContextList = new ArrayList<>(); - workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId())))); + workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getWorkCell(workCellMap, o.getWorkCellCode())).foreignKey(prodRuleContext.getForeignKey()))); return productionAssemblySortContextList; } @@ -167,7 +171,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { //遍历装配件规则, 实例化装配件清单对象, 判断是否配置可复用 assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add( - new MesProductionAssemblyNosortContext().copy(prodRuleContext, o, getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), o)).fileUrl(fileMap)) + new MesProductionAssemblyNosortContext().copy(prodRuleContext, o, getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), o)).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey())) ); return productionAssemblyNosortContextList; @@ -280,4 +284,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id).get(0); } + //获取工位 + private MesWorkCell getWorkCell(Map workCellMap, String workCellCode) { + return CollectionUtils.isEmpty(workCellMap) ? null : workCellMap.get(workCellCode); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java index 898451a..2037832 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java @@ -216,7 +216,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer if (materialSnDb == null) MesPcnException.throwMesBusiException("条码【%s】不存在", model.getSn()); - if (model.getSubLength() == null) MesPcnException.throwMesBusiException("条码【%s】为填减去长度", model.getSn()); + if (model.getSubLength() == null) MesPcnException.throwMesBusiException("条码【%s】未输入减去长度", model.getSn()); if (materialSnDb.getSurplusLength() < model.getSubLength()) MesPcnException.throwMesBusiException("条码【%s】减去长度【%s】大于剩余长度【%s】", model.getSn(), materialSnDb.getSurplusLength(), model.getSubLength()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java index c14ab79..3d7ec7e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java @@ -8,6 +8,7 @@ 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.MesProdRuleNosortCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -18,6 +19,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Slf4j @Service @@ -115,8 +117,8 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { //【排序线】获取产品加工规则 [前道所有装配件] @Override - public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext) { - return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext)); + public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap) { + return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext, workCellMap)); } 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..dcf6be7 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,29 @@ 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); + + List workOrderCutShowList = new ArrayList<>(); for (MesWorkOrderCut workOrderCutDb : workOrderCutList) { @@ -290,8 +322,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 +333,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,17 +354,98 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { continue; } - workOrderCutDb.setPrintContent(printModel.getPrintContextList()); workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + workOrderCutDb.setPrintTime(TimeTool.getNowTime(true)); + workOrderCutDb.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser()); workOrderCutRepository.save(workOrderCutDb); + workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList()); + workOrderCutShowList.add(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; + return workOrderCutShowList; } - return workOrderCutList; + return new ArrayList<>(); + } + + 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) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index e74fad1..506087e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -181,14 +181,12 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { if (!StringUtil.isEmpty(bean.getPullCode())) { DdlPreparedPack.getInPackList(Arrays.asList(bean.getPullCode().split(",")), "pullCode", packBean); } - if (!StringUtil.isEmpty(bean.getWorkCenterCode())) { - DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean); - } //查询拉动单主表是JIS拉动且拉动状态为10 String append = packBean.getWhereAppend() + - " AND EXISTS (select 1 from MesPullingOrderInfo po where po.pullingOrderNo = model.pullingOrderNo and po.pullOrderType=20 and po.pullOrderStatus =10 " ; - packBean.setWhereAppend(append+ " )"); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"status", "createDatetime"}, packBean); + " AND EXISTS (select 1 from MesPullingOrderInfo po where po.pullingOrderNo = model.pullingOrderNo" + + " and po.pullOrderType=20 and po.workCenterCode ='" + bean.getWorkCenterCode() + "' "; + packBean.setWhereAppend(append + " )"); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"status", "pullingOrderNo"}, packBean); pager = PagerHelper.getPager(pager, mesPullingOrderPartInfoRepository.findByHqlWhereCount(packBean)); @@ -205,13 +203,11 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { MesPartPullDetail mesPartPullDetail = pullCodePartMap.get(partInfo.getPullCode() + "=" + partInfo.getPartNo()).get(0); partInfo.setScanValidationType(StringUtil.isEmpty(mesPartPullDetail.getScanValidationType()) ? 10 : mesPartPullDetail.getScanValidationType()); partInfo.setRuleValidation(StringUtil.isEmpty(mesPartPullDetail.getRuleValidation()) ? "" : mesPartPullDetail.getRuleValidation()); - if (partInfo.getScanValidationType() == 10) { + if (mesPartPullDetail.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.UN_VALIDATE.getValue()) { partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); - } else { + }else if (partInfo.getColor()==MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()){ partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()); } - }else { - partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); } } } @@ -226,40 +222,41 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { if (!StringUtil.isEmpty(partInfo)) { //查拉动单明细对应的拉动组规则 DdlPackBean packBeanDetail = DdlPackBean.getDdlPackBean(partInfo.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(partInfo.getPullCode(), "pullCode", packBeanDetail); + DdlPreparedPack.getStringEqualPack(partInfo.getPullCode(), "pullCode", packBeanDetail); DdlPreparedPack.getStringEqualPack(partInfo.getPartNo(), "partNo", packBeanDetail); - MesPartPullDetail mesPartPullDetail = mesPartPullDetailRDao.getByProperty(packBeanDetail); - if (StringUtil.isEmpty(mesPartPullDetail)){ - MesPcnException.throwMesBusiException("工单【%s】拉动组数据为空", mesPullingOrderInfo.getWorkOrderNo()); - } + MesPartPullDetail mesPartPullDetail = mesPartPullDetailRDao.getByProperty(packBeanDetail); + if (StringUtil.isEmpty(mesPartPullDetail)) { + MesPcnException.throwMesBusiException("工单【%s】拉动组数据为空", mesPullingOrderInfo.getWorkOrderNo()); + } //校验规则 - if (checkRule(mesPullingOrderInfo,mesPartPullDetail)){ + if (checkRule(mesPullingOrderInfo, mesPartPullDetail)) { //校验成功修改颜色为黄色2 partInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.YELLOW.getCode()); ConvertBean.serviceModelUpdate(partInfo, userName); mesPullingOrderPartInfoRepository.update(partInfo); - }else { + } else { MesPcnException.throwMesBusiException("工单拉动组明细【%s】数据为空", mesPullingOrderInfo.getWorkOrderNo()); } - }else { + } else { MesPcnException.throwMesBusiException("工单拉动组明细【%s】数据为空", mesPullingOrderInfo.getWorkOrderNo()); } return partInfo; } private boolean checkRule(MesPullingOrderPartInfo mesPullingOrderInfo, MesPartPullDetail mesPartPullDetail) { - String rule=mesPartPullDetail.getRuleValidation(); - if (mesPullingOrderInfo.getScanValidationType()==MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.HOMEMADE_VALIDATE.getValue()){ + String rule = mesPartPullDetail.getRuleValidation(); + if (mesPullingOrderInfo.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.HOMEMADE_VALIDATE.getValue()) { List produceSnList = mesProduceSnExtService.getProduceSnList(mesPullingOrderInfo.getOrganizeCode(), mesPullingOrderInfo.getProductSn()); return mesPartPullDetail.getPullPartNo().equals(produceSnList.get(0).getPartNo()); - }else if (mesPullingOrderInfo.getScanValidationType()==MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.COOPERATION_VALIDATE.getValue()){ + } else if (mesPullingOrderInfo.getScanValidationType() == MesExtEnumUtil.PART_PULL_DETAIL_SCAN_VALIDATION_TYPE.COOPERATION_VALIDATE.getValue()) { return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())) .matchNumberRule(mesPullingOrderInfo.getOrganizeCode(), mesPullingOrderInfo.getProductSn(), rule, rule) .get(MesPcnExtConstWords.RESULT); - }else { + } else { return true; } } + @Override public List doMesPullingOrderInfoSend(List infoList, String userName) { List result = new ArrayList<>(); 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/rulematch/MesNumberRuleMatchVkmService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchVkmService.java new file mode 100644 index 0000000..4e9ad27 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchVkmService.java @@ -0,0 +1,131 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +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.MesPartPackageRule; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleRepository; +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.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + * @Description : 通用包装组零件校验(VKM) + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/20 16:54 + * @Modify: + **/ +@Slf4j +@Service +public class MesNumberRuleMatchVkmService implements IMesNumberRuleMatchDispatchService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesPartPackageRuleRepository mesPartPackageRuleRepository; + + @Autowired + private IMesPartPackageRuleDetailRepository mesPartPackageRuleDetailRepository; + + @Override + public Map matchNumberRule(String organizeCode, String sn, Object... params) { + // 校验正则表达式 + Map result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params); + + if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) { + return result; + } + //当前装配件清单信息 + MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0]; + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(new StationRequestBean(organizeCode, context.getWorkCenterCode(), context.getWorkCellCode())); + if (CollectionUtils.isEmpty(prodRuleContextList)) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!"); + return result; + } + //获取加工规则 + Optional contextOptional = prodRuleContextList.stream().filter(t -> Objects.equals(t.getForeignKey(), context.getForeignKey())).findFirst(); + if (!contextOptional.isPresent()) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!"); + return result; + } + //装配件清单 + List assemblyNosortContextList = contextOptional.get().getNosortAssemblyDataContext(); + if (CollectionUtils.isEmpty(assemblyNosortContextList)) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "当前不存在已装配的数据!"); + return result; + } + //装配件条码字段的长度等于60(固定)为VKM包条码 + Optional assemblyNosortContext = assemblyNosortContextList.stream().filter(t -> MesPcnExtConstWords.SIXTY == t.getAssemblySn().length()).findFirst(); + if (!assemblyNosortContext.isPresent()) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "不存在主零件!"); + return result; + } + //通用包装组零件规则 + MesPartPackageRule mesPartPackageRule = getMesPartPackageRule(organizeCode, assemblyNosortContext.get().getAssemblyPartNo()); + if (Objects.isNull(mesPartPackageRule)) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则不存在!"); + return result; + } + //通用包装组零件规则明细 + if (!isExitMesPartPackageRuleDetail(organizeCode, context.getAssemblyPartNo(), mesPartPackageRule.getId())) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则明细不存在!"); + return result; + } + //获取大包装流水最后十四位数(固定) + String seq = assemblyNosortContext.get().getAssemblySn().substring(assemblyNosortContext.get().getAssemblySn().length() - MesPcnExtConstWords.FOURTEEN); + //如果seq(22810138101376)的前四位(固定)与当前扫描的装配件条码的(26502271 8211001000000X 654406818 2123198103002281)后4位一致,则代表匹配成功,否则失败则提示:"流水号不一致" + if (!sn.endsWith(seq.substring(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.FOUR))) { + result.put(MesPcnExtConstWords.RESULT, false); + result.put(MesPcnExtConstWords.MESSAGE, "流水号不一致!"); + return result; + } + + return result; + } + + private MesPartPackageRule getMesPartPackageRule(String organizeCode, String assemblyPartNo) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) { + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PACKAGE_PART_NO, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_TYPE.PACKAGE_RULE_TYPE_10.getValue(), MesPcnExtConstWords.RULE_TYPE, packBean); + return mesPartPackageRuleRepository.getByProperty(packBean); + } + + private boolean isExitMesPartPackageRuleDetail(String organizeCode, String assemblyPartNo, long id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) { + return false; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, MesPcnExtConstWords.PID, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_MATCH_TYPE.PACKAGE_RULE_MATCH_TYPE_10.getValue(), MesPcnExtConstWords.MATCH_TYPE, packBean); + DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PART_NO, packBean); + return mesPartPackageRuleDetailRepository.isExitByHql(packBean); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java similarity index 85% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java index 44ea004..156b399 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionCutOrderDialogPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java @@ -1,26 +1,20 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg; import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.repository.MesCutSchemeFgRepository; import com.alibaba.fastjson.JSONObject; -import lombok.extern.log4j.Log4j; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -30,17 +24,13 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** - * @Description : 工位参数按钮事件接口实现【裁片工单打印弹框】 + * @Description : 裁片工单弹框接口实现【裁片工单打印弹框】 **/ @Service @Slf4j -public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implements IFsmModuleFunctionService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; +public class MesFunctionDialogCutOrderPrintService extends BaseSwsService implements IFsmModuleFunctionService { @Autowired private IMesProductionDispatchContextStepService productionDispatchContextStepService; @@ -80,7 +70,7 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem } @Override - public Object stepDialogDispatch(StationRequestBean reqBean) { + public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) { List mesWorkOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean); @@ -107,7 +97,6 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem } - // 成品列表为空则表示不需要弹框 - return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? null :mesWorkOrderCutFgDataContextList; + return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? dialogBean.unDialog() : dialogBean.obj(mesWorkOrderCutFgDataContextList); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java new file mode 100644 index 0000000..b3bd2c1 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 电子化检验弹框接口实现【电子化检验弹框】 + **/ +@Service +@Slf4j +public class MesFunctionDialogElectronicInspectionService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) { + + List productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + // 如果当前存在进料条码列表则返回条码集合 + if (!CollectionUtils.isEmpty(productionPsInContext)) { + List snList = productionPsInContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsInContext::getProductSn).distinct().collect(Collectors.toList()); + // 条码列表为空则表示不需要弹框 + if (CollectionUtils.isEmpty(snList)) return dialogBean.unDialog(); + else return dialogBean.asyn().obj(snList); + } else return dialogBean.unDialog(); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java index e3a747f..11d0e17 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java @@ -84,7 +84,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); //验证是否存在待绑定数据 - Boolean IsNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList); + Boolean isNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList); Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList); //根据产出零件或者腔数拿到需要的加工规则数量, 优先使用产出零件数量 @@ -96,10 +96,10 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { } //没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码 - if (!IsNeedScanAssembly || !hasUnBindAssembly) { + if (!isNeedScanAssembly || !hasUnBindAssembly) { return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, (CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(), - MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !IsNeedScanAssembly ? "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前加工规则对应的装配件扫描项均匹配完毕!"); + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !isNeedScanAssembly ? "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前加工规则对应的装配件扫描项均匹配完毕!"); } //获取上下文生产扫/读信息:装配件条码 @@ -113,17 +113,19 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { Boolean isSkip = checkIsSkip(productionProcessContext, equipVariableCollectContextList); //处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成] - Boolean result = doHandleMatchAssembly(reqBean, resultBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip); + Boolean result = doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip); //验证是否存在待绑定数据 hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList); //搜集装配件条码 + String suffix = MesPcnExtConstWords.EMPTY; String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString(); //匹配成功 【result=true 代表单次扫描匹配成功; hasUnBindAssembly=false 代表浑腔模式全部匹配成功】 if (result || !hasUnBindAssembly) { productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList); + suffix = isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn); } //全部匹配完毕,存在进料且进料数量满足腔数的时候直接调用 生成零件条码工步 @@ -133,12 +135,12 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { if (!hasUnBindAssembly) { return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, (CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(), - MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn))); + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix)); } //单次匹配成功 if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), - stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, isSkip ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn)); + stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix); //匹配失败验证是否重置装配件扫描项 MesWorkCell workCell = productionProcessContext.getWorkCell(); @@ -221,7 +223,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { } //处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成] - private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List prodRuleContextList, List equipVariableCollectContextList, Boolean isSkip) { + private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StepResult stepResult, List prodRuleContextList, List equipVariableCollectContextList, Boolean isSkip) { //遍历产品加工规则 for (MesProdRuleContext prodRuleContext : prodRuleContextList) { @@ -250,16 +252,15 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { //装配件跳过, 必须顺序扫描才生效 if (isSkip && !StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) { - //匹配成功 - equipVariableCollectContext.isConsume(); - - flag = true; - //装配件清单该数据标记跳过 productionAssemblyNosortContext.assemblySkip(); + //匹配成功 + equipVariableCollectContext.isConsume(); stepResult.msg(String.format("装配件跳过码验证成功,已跳过当前装配项!")); + flag = true; + break LOOP; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java new file mode 100644 index 0000000..4922de4 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchSortStepService.java @@ -0,0 +1,336 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +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.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +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.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 装配件匹配工步 【排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesAssemblyMatchSortStepService") +public class MesAssemblyMatchSortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService; + + @Autowired + private MesAssemblyShowNosortStepService assemblyShowNosortStepService; + + @Autowired + private IMesProductionRecordService productionRecordService; + + @Autowired + private IMesTimeEfficientCfgMatchService timeEfficientCfgMatchService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); + + //从上下文中取出生产线对象 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //获取上下文产出零件数据信息集合 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //获取上下文进料零件条码信息集合 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + //判断是否存在装配件清单 + if (!checkIsNeedScanAssembly(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!"); + + //验证是否存在待绑定数据 + Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList); + if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件扫描项均匹配完毕!"); + + //获取上下文生产扫/读信息:装配件条码 + List equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean); + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), "当前不存在装配件条码!"); + + //删除上下文扫/读信息:装配件条码 + productionDispatchContextStepService.removeScanAssemblySnContext(reqBean); + + //验证当前是否属于装配件跳过码 + Boolean isSkip = checkIsSkip(productionProcessContext, equipVariableCollectContextList); + //验证当前是否属于装配件整腔跳过码 + Boolean isCavitySkip = checkIsCavitySkip(productionProcessContext, equipVariableCollectContextList); + + //处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成] + Boolean result = doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip, isCavitySkip); + + //验证是否存在待绑定数据 + hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList); + + //搜集装配件条码 + String suffix = MesPcnExtConstWords.EMPTY; + String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString(); + //匹配成功 【result=true 代表单次扫描匹配成功; hasUnBindAssembly=false 代表浑腔模式全部匹配成功】 + if (result || !hasUnBindAssembly) { + productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); + assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList); + suffix = (isSkip || isCavitySkip) ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn); + } + + //验证是否存在待绑定数据 + if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix)); + + //单次匹配成功 + if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), + stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix); + + stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg())); + + this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn), + String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), stepResult.getMsg()); + + } + + private List resetAssembly(StationRequestBean reqBean, List prodRuleContextList) { + + //是否支持混腔扫描[工位参数] + String cavityNosortCfg = getCavityNosortCfg(reqBean); + + prodRuleContextList.forEach(o -> { + + if (!StringUtils.isEmpty(o.getAssemblyDataJson())) { + + List productionAssemblyNosortContextList = o.getNosortAssemblyDataContext(); + + if (!StringUtils.isEmpty(cavityNosortCfg) || hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) { + + productionAssemblyNosortContextList.forEach(i -> { if (i.getIsResetScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) i.assemblyStatusReset(); }); + + o.assemblyDataJson(productionAssemblyNosortContextList); + + } + + } + + }); + + return prodRuleContextList; + } + + //是否支持混腔扫描[工位参数] + private String getCavityNosortCfg(StationRequestBean reqBean) { + String cavityNosortCfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG); + return (!StringUtils.isEmpty(cavityNosortCfg) && cavityNosortCfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cavityNosortCfg : null; + } + + //验证当前是否属于装配件跳过码 + private Boolean checkIsSkip(MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList) { + if (equipVariableCollectContextList.size() > 1) return false; + if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0) return false; + if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblySkipCode())) return false; + return true; + } + + //验证当前是否属于装配件整腔跳过码 + private Boolean checkIsCavitySkip(MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList) { + if (equipVariableCollectContextList.size() > 1) return false; + if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0) return false; + if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblyCavitySkipCode())) return false; + return true; + } + + //判断是否存在装配件清单 + private Boolean checkIsNeedScanAssembly(List prodRuleContextList) { + Optional optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + + //验证是否存在待绑定数据 + private Boolean hasUnBindAssembly(List prodRuleContextList) { + Boolean hasUnBindAssembly = false; + for (MesProdRuleContext prodRuleContext : prodRuleContextList) { + if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + if (!hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) continue; + hasUnBindAssembly = true; + break; + } + return hasUnBindAssembly; + } + + private Boolean hasUnBindAssemblyOptional(List productionAssemblyNosortContextList) { + Optional optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + + //处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成] + private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StepResult stepResult, List prodRuleContextList, List equipVariableCollectContextList, Boolean isSkip, Boolean isCavitySkip) { + + //遍历产品加工规则 + for (MesProdRuleContext prodRuleContext : prodRuleContextList) { + + //没有装配件的条件 + if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + + //获取非排序装配件清单 + List productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext(); + + Boolean flag = false; + + //遍历装配件清单 + LOOP: + for (MesProductionAssemblySortContext productionAssemblySortContext : productionAssemblySortContextList) { + + //已装配 + if (null == productionAssemblySortContext || productionAssemblySortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) continue; + + //遍历装配件条码 + for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) { + + //已被消费 + if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue; + + //装配件跳过, 必须顺序扫描才生效 + if (isSkip && !StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) { + + //装配件清单该数据标记跳过 + productionAssemblySortContext.assemblySkip(); + + //匹配成功 + equipVariableCollectContext.isConsume(); + stepResult.msg(String.format("装配件跳过码验证成功,已跳过当前装配项!")); + + flag = true; + + break LOOP; + + } + + //装配件整腔跳过 + if (isCavitySkip) { + + //装配件清单该数据标记跳过 + productionAssemblySortContext.assemblySkip(); + + //判断当腔是否还存在待装配的数据 + Optional optional = productionAssemblySortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst(); + if (null == optional || !optional.isPresent()) { + + //匹配成功 [整腔全部跳过后标记] + equipVariableCollectContext.isConsume(); + stepResult.msg(String.format("装配件整腔跳过码验证成功,已跳过当腔装配项!")); + + flag = true; + + } + + break LOOP; + + } + + //匹配规则 + Map result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext); + + //匹配失败 + if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) { + String msg = (String) result.get(MesPcnExtConstWords.MESSAGE); + stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg)); + continue; + } + + MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA); + + //前道防错 + if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) { + if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) { + stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), + String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))); + continue; + } + } + + //时效性验证 + if (!StringUtils.isEmpty(filter.getProductSnId())) { + result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue()); + + if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) { + stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE))); + continue; + } + } + + //匹配成功 + equipVariableCollectContext.isConsume(); + + flag = true; + + //装配件清单该数据标记已装配 (如果是自制件赋值productSnId) + productionAssemblySortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId()); + + break; + + } + + //是否验证顺序装配 + if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 && + isCheckBindSeq(prodRuleContext, productionAssemblySortContext) && productionAssemblySortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0) break; + + } + + //存在匹配成功的数据 + if (flag) prodRuleContext.assemblyDataJson(productionAssemblySortContextList); + if (flag && equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0 && equipVariableCollectContextList.size() == 1) return true; + + } + + return false; + + } + + private Boolean isCheckBindSeq(MesProdRuleContext prodRuleContext, MesProductionAssemblySortContext productionAssemblySortContext) { + if (!StringUtils.isEmpty(prodRuleContext.getIsCheckBindSeq()) && prodRuleContext.getIsCheckBindSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; + if (!StringUtils.isEmpty(productionAssemblySortContext.getIsSeqScan()) && productionAssemblySortContext.getIsSeqScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) return true; + return false; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index 2068534..1d35e38 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -314,9 +314,6 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件携带产出零件 List prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, outPartNoList); - //TODO 提示优化 直接根除产出零件去查询,判断产出零件对应的加工规则是不是仅仅维护了一个 - //List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList)); - //根据产出零件分组数据 Map> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java index f05a588..4e1cbee 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -12,6 +13,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -28,10 +30,11 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS } public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { + Map workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean); //不携带工位工序条件 MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()) .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); - return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext); + return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap); } //装配件清单列表标题 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index 4685451..c394c54 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -103,7 +103,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { MesProdRuleContext prodRuleContext = new MesProdRuleContext( - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(productionProcessContext.getWorkCell().getIsSeqScan()) .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java index c462323..f07d27b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionServic import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -59,26 +60,27 @@ public class MesCustomDialogStepService extends BaseStepService { if (StringUtils.isEmpty(customPageName)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("弹框会话工步未配置工步参数[%s]!", MesPcnExtConstWords.CUSTOM_PAGE_NAME)); - //获取工步弹框需要渲染的数据 - Object stepDialogContext = fsmModuleFunctionService.stepDialogDispatch(reqBean, customPageName); + //获取工步弹框需要渲染的数据; 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框 + StationCustomDialogBean scdBean = fsmModuleFunctionService.stepDialogDispatch(reqBean, new StationCustomDialogBean(customPageName)); - //没有数据返回NULL则默认不需要弹框, 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框 - if (null == stepDialogContext) return stepResult; + //当前不需要弹框 + if (null == scdBean || !scdBean.getIsDialog()) return stepResult; - if (!(stepDialogContext instanceof Boolean)) - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- stepDialogContext:{}", - reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(stepDialogContext)); - - //发送弹框数据 - this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(stepDialogContext)); + if (null != scdBean.getObj()) + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- StationCustomDialogBean={}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(scdBean)); //清除剩余扫描队列 shippingDispatchService.clearScanQueue(reqBean); - //结束线程 - stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); + //发送弹框数据 + this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(scdBean.getObj())); + + //弹框业务同步处理 + if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); - return stepResult; + //弹框业务异步处理 + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "弹框会话开启!"); } 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-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index 0a792f5..d3d0b83 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -19,6 +19,7 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -52,7 +53,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl @Autowired private SnowflakeIdMaker snowflakeIdMaker; - private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString()); } + private String getContextKey(StationRequestBean reqBean) { + return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString()); + } + + private String getContextKey(String organizeCode, String workCenterCode, String workCellCode) { + return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString(); + } //清除上下文中的所有基础数据 @Override @@ -110,7 +117,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl if (isCheckProcess && (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode()))) processContext(reqBean, productionProcessContext); //生产过程上下文对象赋值生产过程控制全局密码 - if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode())) productionPwdContext(reqBean, productionProcessContext); + if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblyCavitySkipCode())) productionPwdContext(reqBean, productionProcessContext); return productionProcessContext; @@ -147,7 +154,8 @@ public class MesProductionProcessContextStepService extends BaseStepService impl Map> cfgKeyMap = CollectionUtils.isEmpty(configList) ? null : configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgKey()))).collect(Collectors.groupingBy(MesConfig::getCfgKey)); return productionProcessContext.finishCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CAVITY_FINISH_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CAVITY_FINISH_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE) .craftJumpCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CRAFT_JUMP_CODE) - .assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE); + .assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE) + .assemblyCavitySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE); } //验证组织模型有效性 @@ -450,16 +458,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl return !StringUtils.isEmpty(scanMonitorContextJson) ? JSONObject.parseObject(scanMonitorContextJson, MesScanMonitorContext.class) : null; } + //获取上下文工位扫描监控信息的开模记录ID @Override public String getScanMonitorContextMouldRecordId(StationRequestBean reqBean) { MesScanMonitorContext scanMonitorContext = getScanMonitorContext(reqBean); return (null != scanMonitorContext && !StringUtils.isEmpty(scanMonitorContext.getMouldRecordId())) ? scanMonitorContext.getMouldRecordId().toString() : null; } - private String getContextKey(String organizeCode, String workCenterCode, String workCellCode) { - return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString(); - } - //获取上下文工位扫描监控信息 @Override public MesScanMonitorContext getScanMonitorContext(String organizeCode, String workCenterCode, String workCellCode) { @@ -473,6 +478,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_MONITOR_CONTEXT); } + //获取生产线类型 @Override public Integer getCenterType(StationRequestBean reqBean) { if (!StringUtils.isEmpty(reqBean.getCenterType())) return reqBean.getCenterType(); @@ -483,4 +489,17 @@ public class MesProductionProcessContextStepService extends BaseStepService impl reqBean.setCenterType(productionProcessContext.getWorkCenter().getCenterType()); return reqBean.getCenterType(); } + + //获取生产线下的工位集合 + @Override + public Map dispatchWorkCellMap(StationRequestBean reqBean) { + String workCellMapJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_CELL_MAP_CONTEXT); + if (!StringUtils.isEmpty(workCellMapJson)) return JSONObject.parseObject(workCellMapJson, new TypeReference>() {}); + List workCellList = prodOrgExtService.getWorkCellList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + Map workCellMap = CollectionUtils.isEmpty(workCellList) ? null : workCellList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkCell::getWorkCellCode, o -> o)); + if (!CollectionUtils.isEmpty(workCellList)) dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_CELL_MAP_CONTEXT, JSONObject.toJSONString(workCellMap)); + return workCellMap; + + + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java index 353cd7f..61f0756 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -135,6 +135,13 @@ public class MesProdRuleContext implements Serializable { return this; } + //非排序无须使用工位的字段,直接使用非排序产品加工规则的字段; + //排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描 + public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) { + if (!StringUtils.isEmpty(isSeqScan)) this.isCheckBindSeq = isSeqScan; + return this; + } + public MesProdRuleContext workOrderNo(String workOrderNo) { this.workOrderNo = workOrderNo; return this; @@ -237,7 +244,7 @@ public class MesProdRuleContext implements Serializable { //排序装配件清单 public List getSortAssemblyDataContext() { List sortAssemblyList = !StringUtils.isEmpty(this.assemblyDataJson) ? JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblySortContext.class) : null; - return CollectionUtils.isEmpty(sortAssemblyList) ? null : sortAssemblyList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProductionAssemblySortContext::getRouteSeq)).collect(Collectors.toList()); + return CollectionUtils.isEmpty(sortAssemblyList) ? null : sortAssemblyList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProductionAssemblySortContext::getProcessSeq).thenComparing(MesProductionAssemblySortContext::getRouteSeq)).collect(Collectors.toList()); } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java index 1e71cc4..ecaf1de 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java @@ -107,4 +107,7 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam("工艺名称") public String craftName; + @ApiParam(name = "数据关联键") + public Integer foreignKey; + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java index 4d5b264..9dfde0e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java @@ -72,6 +72,11 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon return this; } + public MesProductionAssemblyNosortContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; + return this; + } + public MesProductionAssemblyNosortContext assemblyStatus(String assemblySn) { this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); this.assemblySn = assemblySn; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java index 6142caf..ed21595 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiParam; @@ -112,6 +113,9 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte @ApiParam(value = "装配件记录表创建人") public String createUser; + @ApiParam(name = "是否顺序扫描") + private Integer isSeqScan; + public MesProductionAssemblySortContext() {} public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly) { @@ -130,7 +134,7 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte return this; } - public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) { + public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly, MesWorkCell workCell) { if (null != workOrderAssembly) { BeanUtils.copyProperties(workOrderAssembly, this, MesPcnExtConstWords.BASE_BEAN_FIELDS); @@ -143,6 +147,8 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte this.createUser = productionAssembly.getCreateUser(); } + if (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) this.isSeqScan = workCell.getIsSeqScan(); + if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; if (StringUtils.isEmpty(this.processSeq)) this.processSeq = MesPcnExtConstWords.ZERO; @@ -155,16 +161,28 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte return this; } - public MesProductionAssemblySortContext assemblyStatus() { - this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); + public MesProductionAssemblySortContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; return this; } - public MesProductionAssemblySortContext assemblySn(String assemblySn) { + public MesProductionAssemblySortContext assemblyStatus(String assemblySn) { + this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); this.assemblySn = assemblySn; return this; } + public MesProductionAssemblySortContext assemblySkip() { + this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_40.getValue(); + this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + return this; + } + + public MesProductionAssemblySortContext productSnId(Long productSnId) { + this.productSnId = productSnId; + return this; + } + public MesProductionAssemblySortContext fileUrl(Map fileMap) { if (CollectionUtils.isEmpty(fileMap)) return this; if (!StringUtils.isEmpty(this.imageFileId)) this.imageFileUrl= fileMap.get(this.imageFileId); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java index 76e92cf..44fa99c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java @@ -44,6 +44,9 @@ public class MesProductionProcessContext implements Serializable { @ApiParam("装配件跳过码") private String assemblySkipCode; + @ApiParam("装配件整腔跳过码") + private String assemblyCavitySkipCode; + @ApiParam("生产线信息([Json]MesWorkCenter)") private String workCenterJson; @@ -133,6 +136,12 @@ public class MesProductionProcessContext implements Serializable { return this.isNeedCache(); } + //上下文赋值装配件整腔跳过码 + public MesProductionProcessContext assemblyCavitySkipCode(String assemblyCavitySkipCode) { + this.assemblyCavitySkipCode = assemblyCavitySkipCode; + return this.isNeedCache(); + } + //---------------------- 生产线对象 --------------------------------------- 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; +} 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 61ae7e2..52ba47e 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 @@ -233,6 +233,8 @@ public class MesPcnExtConstWords { public static final String CRAFT_JUMP_CODE = "CRAFT_JUMP_CODE"; // 装配件跳过码 public static final String ASSEMBLY_SKIP_CODE = "ASSEMBLY_SKIP_CODE"; + // 装配件整腔跳过码 + public static final String ASSEMBLY_CAVITY_SKIP_CODE = "ASSEMBLY_CAVITY_SKIP_CODE"; // 设备代码[工步参数] public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE"; // 模具号读一模多腔配置[工步参数] @@ -309,6 +311,12 @@ public class MesPcnExtConstWords { public static final Integer ONE = 1; // 3 public static final Integer THREE = 3; + //4 + public static final Integer FOUR = 4; + //14 + public static final Integer FOURTEEN = 14; + //60 + public static final Integer SIXTY = 60; // 中括号 public static final String SQUARE_BRACKETS = "[]"; // & @@ -395,6 +403,8 @@ public class MesPcnExtConstWords { public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT"; // 上下文: 工位扫描监控信息 public static final String SCAN_MONITOR_CONTEXT = "SCAN_MONITOR_CONTEXT"; + // 上下文: 工位集合 + public static final String WORK_CELL_MAP_CONTEXT = "WORK_CELL_MAP_CONTEXT"; // 上下文: 加工结果 public static final String PRODUCT_RESULT_CONTEXT = "PRODUCT_RESULT_CONTEXT"; // 上下文: 就绪信号 @@ -534,4 +544,8 @@ public class MesPcnExtConstWords { public static final String PRINT_TIME = "printTime"; // 裁片名称 public static final String CUT_NAME = "cutName"; + //包覆零件号 + public static final String PACKAGE_PART_NO = "packagePartNo"; + //规则类型 + public static final String RULE_TYPE = "ruleType"; }