From f346405d5d8bab80638ff10f300920a826c1c0fb Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 3 Jun 2024 13:17:09 +0800 Subject: [PATCH 1/2] step --- .../pcn/api/base/IMesMouldMultiCavityService.java | 4 + .../mes/pcn/api/base/IMesProdOrgExtService.java | 2 +- .../mes/pcn/api/busi/IMesAssemblyExtService.java | 56 +--- .../pcn/api/busi/IMesProdRuleCfgExtService.java | 38 ++- .../mes/pcn/api/busi/IMesProduceSnExtService.java | 17 + .../IMesProductionDispatchContextStepService.java | 63 ++-- .../IMesProductionProcessContextStepService.java | 3 + .../base/MesMouldMultiCavityService.java | 13 + .../serviceimpl/base/MesProdOrgExtService.java | 2 +- .../serviceimpl/busi/MesAssemblyExtService.java | 89 +++-- .../serviceimpl/busi/MesProdRuleCfgExtService.java | 94 ++++++ .../serviceimpl/busi/MesProduceSnExtService.java | 56 ++++ .../MesProductionNoSortModuleServiceBak.java | 2 +- .../step/MesAssemblyReadStepService.java | 4 +- .../step/MesAssemblyShowNosortStepService.java | 358 ++++++++++++--------- .../step/MesAssemblyShowSortStepService.java | 116 ++++--- .../step/MesFirstMouldNoReadStepService.java | 58 ++-- .../step/MesManyCellNoticeNextStepService.java | 8 +- .../MesManyCellTriggerTabSwitchStepService.java | 2 +- .../step/MesMouldNoReadStepService.java | 40 +-- .../step/MesProductResultReadStepService.java | 4 +- .../step/MesProductSnGenerateStepService.java | 36 +-- .../step/MesProductSnReadStepService.java | 38 ++- .../step/MesProductSnSaveStepService.java | 14 - .../step/MesProductSnScanStepService.java | 74 ++--- .../MesVariableWhenFinishedReadStepService.java | 24 +- .../MesProductionDispatchContextStepService.java | 139 +++----- .../MesProductionProcessContextStepService.java | 15 +- .../mes/pcn/pojo/context/MesProdRuleContext.java | 159 +++++++++ .../pcn/pojo/context/MesProdRuleNoSortContext.java | 58 ---- .../pojo/context/MesProductionAssemblyContext.java | 18 -- .../MesProductionAssemblyNosortContext.java | 8 + .../context/MesProductionAssemblySortContext.java | 7 +- .../pcn/pojo/context/MesProductionPartContext.java | 59 ++++ .../pojo/context/MesProductionProcessContext.java | 17 + .../context/MesSnProductionProcessContext.java | 31 -- .../mes/pcn/pojo/context/MesWorkOrderContext.java | 16 - .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 24 +- 38 files changed, 1031 insertions(+), 735 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java delete mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleNoSortContext.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java delete mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesSnProductionProcessContext.java delete mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderContext.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMouldMultiCavityService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMouldMultiCavityService.java index 3930bf5..7df3f0e 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMouldMultiCavityService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMouldMultiCavityService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.base; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; import io.swagger.annotations.ApiOperation; @@ -10,4 +11,7 @@ public interface IMesMouldMultiCavityService { @ApiOperation(value = "根据设备代码,模具号查询一模多腔信息") List getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo); + @ApiOperation(value = "根据设备代码,模具号查询产出零件信息") + List getProductionPartList(String organizeCode, String equipmentCode, String mouldNo); + } 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 5b5d8fa..226da97 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 @@ -21,7 +21,7 @@ public interface IMesProdOrgExtService { @ApiOperation(value = "根据生产线代码,工位代码,关系类型查询主子工位关系信息") List getWorkCellExtendCfgList(String organizeCode, String workCenterCode, String workCellCode, Integer extendType); - @ApiOperation(value = "根据生产线代码,工位代码查询主子工位实虚关系信息(排除传参workCellCodeBak数据)") + @ApiOperation(value = "根据生产线代码,工位代码查询主子工位实虚关系信息") List getWorkCellExtendCfgRvListByBak(String organizeCode, String workCenterCodeBak, String workCellCodeBak); } 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 4ee4727..c68b59a 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 @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; +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.MesWorkOrderAssembly; import io.swagger.annotations.ApiOperation; @@ -10,52 +12,20 @@ import java.util.List; public interface IMesAssemblyExtService { + @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录") + List getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, List workOrderNoList); - @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List】") - List getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblyContext, List workOrderNoList); + @ApiOperation(value = "【排序线】获取生产工单装配件清单") + List getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, List workOrderNoList); - @ApiOperation(value = "【排序线】获取生产工单装配件清单 【List】") - List getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortCmontext, List workOrderNoList); + @ApiOperation(value = "获取装配件绑定记录") + List getProductionAssemblyList(String organizeCode, Integer dataSource, List sourceIdList); - @ApiOperation(value = "获取装配件绑定记录 【List】") - List getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List sourceIdList); - - - -// @ApiOperation(value = "【排序线】获取装配件清单 【List】") -// List getAssemblyNosortCfgList(MesProductionAssemblyNosortContext productionAssemblyNosortContext); - - - -// @ApiOperation(value = "获取装配件绑定记录 【List】") -// List getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext); -// - -// -// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List】") -// List getProductionAssemblyNosortList(MesProductionAssemblyNosortContext productionAssemblyNosortContext); - - - -// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List】") -// List getProductionAssemblyContextSortList(List workOrderAssemblyList, List productionAssemblyList); -// -// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List】") -// List getProductionAssemblyContextNosortList(List workOrderAssemblyList, List productionAssemblyList); -// -// @ApiOperation(value = "获取装配件绑定记录 【List】") -// List getProductionAssemblyContextList(List workOrderAssemblyList, List productionAssemblyList); - - - - - -// @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 【List】") -// List getProductionAssemblyContextSortList(MesProductionAssemblySortContext productionAssemblySortContext); -// -// @ApiOperation(value = "【非排序线】获取装配件绑定记录 【List】") -// List getProductionAssemblyContextNosortList(MesProductionAssemblyNosortContext productionAssemblyNosortContext); + @ApiOperation(value = "获取非排序装配件配置信息") + List getProductionAssemblyNosortContextList(String organizeCode, Long... pids); + @ApiOperation(value = "获取非排序装配件配置信息") + List getAssemblyNosortCfgList(String organizeCode, Long... pids); } 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 2d5140f..b6f38a1 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 @@ -1,17 +1,21 @@ -//package cn.estsh.i3plus.ext.mes.pcn.api.busi; -// -//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; -//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; -//import io.swagger.annotations.ApiOperation; -// -//import java.util.List; -// -//public interface IMesProdRuleCfgExtService { -// -// @ApiOperation(value = "【非排序线】获取产品加工规则信息") -// List getProdRuleNosortCfgList(MesProdRuleNosortCfg prodRuleNosortCfg); -// -// @ApiOperation(value = "【排序线】获取产品加工规则信息") -// List getProdRuleSortCfgList(MesProdRuleSortCfg prodRuleSortCfg); -// -//} +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.MesProductionPartContext; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +public interface IMesProdRuleCfgExtService { + + @ApiOperation(value = "【排序线】获取产品加工规则(生产工单对应的装配件绑定记录)") + List getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List productionPartContextList); + + @ApiOperation(value = "【非排序线】获取产品加工规则") + List getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext); + + @ApiOperation(value = "【非排序线】获取产品加工规则对应的装配件信息") + MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java new file mode 100644 index 0000000..625828e --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import io.swagger.annotations.ApiOperation; + +import java.util.List; +import java.util.Map; + +public interface IMesProduceSnExtService { + + @ApiOperation(value = "根据零件条码查询零件条码信息") + List getProduceSnList(String organizeCode, List productSnList); + + @ApiOperation(value = "根据零件条码查询零件条码信息") + Map getProduceSnMap(String organizeCode, List productSnList); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index 61d81c5..89ff818 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -1,10 +1,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; -import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -72,17 +73,17 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文头道模具号") void deleteFirstMouldNoContext(StationRequestBean reqBean); - @ApiOperation(value = "获取上下文一模多腔信息") - List getMouldMultiCavityContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文产出零件信息") + List getProductionPartContext(StationRequestBean reqBean); - @ApiOperation(value = "验证上下文一模多腔信息是否存在") - Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean); + @ApiOperation(value = "验证上下文产出零件信息是否存在") + Boolean checkProductionPartIsExistContext(StationRequestBean reqBean); - @ApiOperation(value = "保存上下文一模多腔信息", notes = "[JSON]List") - Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List mouldMultiCavityList); + @ApiOperation(value = "保存上下文产出零件信息", notes = "[JSON]List") + Boolean saveProductionPartContext(StationRequestBean reqBean, List productionPartContextList); - @ApiOperation(value = "删除上下文一模多腔信息") - void deleteMouldMultiCavityContext(StationRequestBean reqBean); + @ApiOperation(value = "删除上下文产出零件信息") + void deleteProductionPartContext(StationRequestBean reqBean); @ApiOperation(value = "获取上下文零件数据信息") Map getPartDataContext(StationRequestBean reqBean); @@ -105,18 +106,6 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文模具号") void deleteMouldNoContext(StationRequestBean reqBean); - @ApiOperation(value = "获取上下文生产工单数据信息集合") - List getWorkOrderDataContext(StationRequestBean reqBean); - - @ApiOperation(value = "验证上下文生产工单数据信息集合是否存在") - Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存上下文生产工单数据信息集合", notes = "[JSON]List") - Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List workOrderContextList); - - @ApiOperation(value = "删除上下文生产工单数据信息集合") - void deleteWorkOrderDataContext(StationRequestBean reqBean); - @ApiOperation(value = "获取上下文生产扫/读信息:主条码") List getScanProductSnContext(StationRequestBean reqBean); @@ -153,28 +142,16 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产出条码数据信息集合") void deleteOutProduceSnDataContext(StationRequestBean reqBean); - @ApiOperation(value = "获取上下文装配件数据信息集合") - List getAssemblyDataContext(StationRequestBean reqBean, MesWorkCenter workCenter); - - @ApiOperation(value = "验证上下文装配件数据信息集合是否存在") - Boolean checkAssemblyDataIsExistContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存上下文装配件数据信息集合", notes = "[JSON]List") - Boolean saveAssemblyDataContext(StationRequestBean reqBean, List productionAssemblyContextList); - - @ApiOperation(value = "删除上下文装配件数据信息集合") - void deleteAssemblyDataContext(StationRequestBean reqBean); - - @ApiOperation(value = "获取上下文非排序产品加工规则信息集合") - List getProdRuleNosortDataContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文产品加工规则数据信息集合") + List getProdRuleDataContext(StationRequestBean reqBean); - @ApiOperation(value = "验证上下文非排序产品加工规则信息集合是否存在") - Boolean checkProdRuleNosortDataIsExistContext(StationRequestBean reqBean); + @ApiOperation(value = "验证上下文产品加工规则信息集合是否存在") + Boolean checkProdRuleDataIsExistContext(StationRequestBean reqBean); - @ApiOperation(value = "保存上下文非排序产品加工规则信息集合", notes = "[JSON]List") - Boolean saveProdRuleNosortDataContext(StationRequestBean reqBean, List prodRuleNoSortContextList); + @ApiOperation(value = "保存上下文产品加工规则信息集合", notes = "[JSON]List") + Boolean saveProdRuleDataContext(StationRequestBean reqBean, List prodRuleContextList); - @ApiOperation(value = "删除上下文非排序产品加工规则信息集合") - void deleteProdRuleNosortDataContext(StationRequestBean reqBean); + @ApiOperation(value = "删除上下文产品加工规则信息集合") + void deleteProdRuleDataContext(StationRequestBean reqBean); } 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 91bbe88..1b755ae 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 @@ -30,6 +30,9 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取工序工艺信息") MesProductionProcessContext processContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "获取finishCode码") + MesProductionProcessContext finishCodeContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "验证组织模型有效性") MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMouldMultiCavityService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMouldMultiCavityService.java index dbe690d..23d046f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMouldMultiCavityService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMouldMultiCavityService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; 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.MesMouldMultiCavity; @@ -8,8 +9,10 @@ import cn.estsh.i3plus.pojo.mes.repository.MesMouldMultiCavityRepository; 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.List; @Slf4j @@ -26,4 +29,14 @@ public class MesMouldMultiCavityService implements IMesMouldMultiCavityService { new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE, MesPcnExtConstWords.MOULD_NO}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode, mouldNo}); } + + @Override + public List getProductionPartList(String organizeCode, String equipmentCode, String mouldNo) { + List mouldMultiCavityList = getMouldMultiCavityList(organizeCode, equipmentCode, mouldNo); + if (CollectionUtils.isEmpty(mouldMultiCavityList)) return null; + List productionPartContextList = new ArrayList<>(); + mouldMultiCavityList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyMouldMultiCavity(o))); + return productionPartContextList; + } + } 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 ad2dd45..330e44c 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 @@ -72,7 +72,7 @@ public class MesProdOrgExtService implements IMesProdOrgExtService { MesWorkCellExtendCfg workCellExtendCfg = getWorkCellExtendCfg(organizeCode, workCenterCodeBak, workCellCodeBak, MesExtEnumUtil.WORK_CELL_EXTEND_TYPE.RV.getValue()); if (null == workCellCodeBak) return null; List workCellExtendCfgList = getWorkCellExtendCfgList(organizeCode, workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode(), MesExtEnumUtil.WORK_CELL_EXTEND_TYPE.RV.getValue()); - List workCellExtendCfgListAfter = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getId().compareTo(o.getId()) != 0 && workCellExtendCfg.getSeq().compareTo(o.getSeq()) <= 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList()); + List workCellExtendCfgListAfter = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getSeq().compareTo(o.getSeq()) <= 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList()); List workCellExtendCfgListBefore = workCellExtendCfgList.stream().filter(o -> (null != o && workCellExtendCfg.getSeq().compareTo(o.getSeq()) > 0)).sorted(Comparator.comparing(MesWorkCellExtendCfg::getSeq)).collect(Collectors.toList()); workCellExtendCfgList = new ArrayList<>(); workCellExtendCfgList.addAll(workCellExtendCfgListAfter); 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 074220c..84069fd 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 @@ -1,13 +1,16 @@ 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.pojo.context.MesProductionAssemblyContext; +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.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.MesAssemblyNosortCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import cn.estsh.i3plus.pojo.mes.repository.MesAssemblyNosortCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -32,44 +35,47 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { @Autowired private MesProductionAssemblyRepository productionAssemblyRepository; + @Autowired + private MesAssemblyNosortCfgRepository assemblyNosortCfgRepository; + //【排序线】获取生产工单装配件绑定记录 @Override - public List getProductionAssemblySortContextList(MesProductionAssemblySortContext productionAssemblySortContext, List workOrderNoList) { + public List getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, List workOrderNoList) { - if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null; + if (null == prodRuleContext || CollectionUtils.isEmpty(workOrderNoList)) return null; - if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) || - StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null; + if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getWorkCenterCode()) || + StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode())) return null; //【排序线】获取生产工单装配件清单 - List workOrderAssemblyList = getWorkOrderAssemblyList(productionAssemblySortContext, workOrderNoList); + List workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext, workOrderNoList); if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null; //获取装配件绑定记录 Map productionAssemblyMap = groupProductionAssembly(filterProductionAssemblyList(getProductionAssemblyList( - productionAssemblySortContext.dataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.SORT.getValue()), workOrderAssemblyList.stream().filter(o -> null != o).map(MesWorkOrderAssembly::getId).collect(Collectors.toList())))); + prodRuleContext.getOrganizeCode(), MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.SORT.getValue(), workOrderAssemblyList.stream().filter(o -> null != o).map(MesWorkOrderAssembly::getId).collect(Collectors.toList())))); - List productionAssemblyContextList = new ArrayList<>(); + List productionAssemblySortContextList = new ArrayList<>(); - workOrderAssemblyList.forEach(o -> productionAssemblyContextList.add(new MesProductionAssemblySortContext(o, getProductionAssembly(productionAssemblyMap, o.getId())))); + workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext(o, getProductionAssembly(productionAssemblyMap, o.getId())))); - return productionAssemblyContextList; + return productionAssemblySortContextList; } //【排序线】获取生产工单装配件清单 @Override - public List getWorkOrderAssemblyList(MesProductionAssemblySortContext productionAssemblySortContext, List workOrderNoList) { + public List getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, List workOrderNoList) { - if (null == productionAssemblySortContext || CollectionUtils.isEmpty(workOrderNoList)) return null; + if (null == prodRuleContext || CollectionUtils.isEmpty(workOrderNoList)) return null; - if (StringUtils.isEmpty(productionAssemblySortContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblySortContext.getWorkCenterCode()) || - StringUtils.isEmpty(productionAssemblySortContext.getWorkCellCode()) || StringUtils.isEmpty(productionAssemblySortContext.getProcessCode())) return null; + if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getWorkCenterCode()) || + StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode())) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblySortContext.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); - DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); - DdlPreparedPack.getStringEqualPack(productionAssemblySortContext.getProcessCode(), MesPcnExtConstWords.PROCESS_CODE, packBean); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(prodRuleContext.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(prodRuleContext.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(prodRuleContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean); + DdlPreparedPack.getStringEqualPack(prodRuleContext.getProcessCode(), MesPcnExtConstWords.PROCESS_CODE, packBean); if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean); else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); @@ -79,15 +85,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { //获取装配件绑定记录 @Override - public List getProductionAssemblyList(MesProductionAssemblyContext productionAssemblyContext, List sourceIdList) { - - if (null == productionAssemblyContext || CollectionUtils.isEmpty(sourceIdList)) return null; + public List getProductionAssemblyList(String organizeCode, Integer dataSource, List sourceIdList) { - if (StringUtils.isEmpty(productionAssemblyContext.getOrganizeCode()) || StringUtils.isEmpty(productionAssemblyContext.getDataSource())) return null; + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(dataSource) || CollectionUtils.isEmpty(sourceIdList)) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionAssemblyContext.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.ASSEMBLY_STATUS, packBean); - DdlPreparedPack.getNumEqualPack(productionAssemblyContext.getDataSource(), MesPcnExtConstWords.DATD_SOURCE, packBean); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(dataSource, MesPcnExtConstWords.DATD_SOURCE, packBean); if (sourceIdList.size() == 1) DdlPreparedPack.getNumEqualPack(sourceIdList.get(0), MesPcnExtConstWords.SOURCE_ID, packBean); else DdlPreparedPack.getInPackList(sourceIdList, MesPcnExtConstWords.SOURCE_ID, packBean); @@ -95,6 +98,39 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { } + //获取非排序装配件配置信息 + @Override + public List getProductionAssemblyNosortContextList(String organizeCode, Long... pids) { + + if (StringUtils.isEmpty(organizeCode) || null == pids) return null; + + //获取非排序装配件配置信息 + List assemblyNosortCfgList = getAssemblyNosortCfgList(organizeCode, pids); + + if (CollectionUtils.isEmpty(assemblyNosortCfgList)) return null; + + //获取装配件绑定记录 + Map productionAssemblyMap = groupProductionAssembly(filterProductionAssemblyList(getProductionAssemblyList( + organizeCode, MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue(), assemblyNosortCfgList.stream().filter(o -> null != o).map(MesAssemblyNosortCfg::getId).collect(Collectors.toList())))); + + List productionAssemblyNosortContextList = new ArrayList<>(); + + assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add(new MesProductionAssemblyNosortContext(o, getProductionAssembly(productionAssemblyMap, o.getId())))); + + return productionAssemblyNosortContextList; + + } + + //获取非排序装配件配置信息 + @Override + public List getAssemblyNosortCfgList(String organizeCode, Long... pids) { + if (StringUtils.isEmpty(organizeCode) || null == pids) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (pids.length == 1) DdlPreparedPack.getNumEqualPack(pids[0], MesPcnExtConstWords.PID, packBean); + else DdlPreparedPack.getInPackArray(pids, MesPcnExtConstWords.PID, packBean); + return assemblyNosortCfgRepository.findByHqlWhere(packBean); + } + //剔除解绑的数据 private List filterProductionAssemblyList(List productionAssemblyList) { return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList()); @@ -105,10 +141,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionAssembly::getSourceId, o -> o)); } - //根据生产工单装配件清单ID获取装配件绑定记录 + //根据装配件清单ID获取装配件绑定记录 private MesProductionAssembly getProductionAssembly(Map productionAssemblyMap, Long id) { return CollectionUtils.isEmpty(productionAssemblyMap) ? null : productionAssemblyMap.get(id); } - } 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 new file mode 100644 index 0000000..3f8c0e2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java @@ -0,0 +1,94 @@ +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.IMesProdRuleCfgExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +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.repository.MesProdRuleNoSortCfgRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { + + @Autowired + private IMesAssemblyExtService assemblyExtService; + + @Autowired + private MesProdRuleNoSortCfgRepository prodRuleNoSortCfgRepository; + + //【排序线】获取加工规则(生产工单对应的装配件绑定记录) + @Override + public List getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List productionPartContextList) { + + //【排序线】获取生产工单装配件绑定记录 + List productionAssemblySortContextList = assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, productionPartContextList.stream().filter(o -> null != o).map(MesProductionPartContext::getWorkOrderNo).collect(Collectors.toList())); + + //装配件绑定记录根据生产工单分组 + Map> assemblyDataMap = groupProductionAssemblySortContextList(productionAssemblySortContextList); + + //实例化排序线加工规则与装配件数据记录 + List prodRuleContextList = new ArrayList<>(); + productionPartContextList.forEach(o -> prodRuleContextList.add(createSortProdRuleContext(o, assemblyDataMap))); + + return prodRuleContextList; + + } + + //装配件绑定记录根据生产工单分组 + private Map> groupProductionAssemblySortContextList(List productionAssemblySortContextList) { + return CollectionUtils.isEmpty(productionAssemblySortContextList) ? null : + productionAssemblySortContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblySortContext::getWorkOrderNo)); + } + + //实例化排序线加工规则与装配件数据记录 + private MesProdRuleContext createSortProdRuleContext(MesProductionPartContext productionPartContext, Map> assemblyDataMap) { + MesProdRuleContext prodRuleContext = new MesProdRuleContext(productionPartContext.getOrganizeCode()).foreignKey(productionPartContext.getForeignKey()); + if (!CollectionUtils.isEmpty(assemblyDataMap)) prodRuleContext.assemblyDataJson(assemblyDataMap.get(productionPartContext.getWorkOrderNo())); + return prodRuleContext; + } + + //【非排序线】获取产品加工规则 + @Override + public List getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext) { + if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getEquipmentCode())) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(prodRuleContext.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(prodRuleContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + DdlPreparedPack.getStringEqualPack(prodRuleContext.getOutPartNo(), MesPcnExtConstWords.OUT_PART_NO, packBean); + + if (prodRuleContext.getInPartNoIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO, packBean); + else DdlPreparedPack.getStringEqualPack(prodRuleContext.getInPartNo(), MesPcnExtConstWords.IN_PART_NO, packBean); + + if (prodRuleContext.getInPartNoRuleIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean); + else DdlPreparedPack.getIsNotNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean); + + return prodRuleNoSortCfgRepository.findByHqlWhere(packBean); + } + + //【非排序线】获取产品加工规则对应的装配件信息 + @Override + public MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext) { + MesProdRuleContext prodRuleContext = new MesProdRuleContext().foreignKey(productionPartContext.getForeignKey()).pid(prodRuleNosortCfg.getId()); + BeanUtils.copyProperties(prodRuleNosortCfg, prodRuleContext); + //获取非排序装配件配置信息 + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == prodRuleContext.getIsHasBind()) prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblyNosortContextList(prodRuleContext.getOrganizeCode(), prodRuleContext.getPid())); + return prodRuleContext; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java new file mode 100644 index 0000000..e256e45 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java @@ -0,0 +1,56 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +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.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +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.*; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesProduceSnExtService implements IMesProduceSnExtService { + + @Autowired + private MesProduceSnRepository produceSnRepository; + + //根据零件条码查询零件条码信息 + @Override + public List getProduceSnList(String organizeCode, List productSnList) { + + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(productSnList)) return null; + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean); + else DdlPreparedPack.getInPackList(productSnList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()), MesPcnExtConstWords.PRODUCT_SN, packBean); + //根据创建时间倒叙查询零件条码 + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + + return distinctProduceSnList(produceSnRepository.findByHqlWhere(packBean)); + } + + private List distinctProduceSnList(List produceSnDataList) { + return CollectionUtils.isEmpty(produceSnDataList) ? null : + produceSnDataList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProduceSn::getProductSn))), ArrayList::new)); + } + + //根据零件条码查询零件条码信息 + @Override + public Map getProduceSnMap(String organizeCode, List productSnList) { + return groupProduceSnList(getProduceSnList(organizeCode, productSnList)); + } + + private Map groupProduceSnList(List produceSnDataList) { + return CollectionUtils.isEmpty(produceSnDataList) ? null : produceSnDataList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o)); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleServiceBak.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleServiceBak.java index 0e5213c..f755d22 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleServiceBak.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleServiceBak.java @@ -36,7 +36,7 @@ // resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); // resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); // resultBean.setResultObj(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean("shiftCode", "班次", "白班"), new StationKvBean("shiftGroup", "班组", "注塑"))); -// resultBean.setResultList(productionProcessContextStepService.getCachedModuleContext(reqBean)); +// resultBean.setResultList(productionProcessContextStepService.getModuleContentContext(reqBean)); // // this.sendMessage(reqBean, resultBean); // } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java index e862da1..4d24c00 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -131,14 +131,14 @@ public class MesAssemblyReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); //读取的装配件进行规则匹配 List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.ASSEMBLY.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); //保存设备当前一轮工序待验证的装配件条码信息 productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, equipVariableCollectContextList); 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 df26179..df35d88 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 @@ -1,156 +1,202 @@ -//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -// -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService; -//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.pojo.context.*; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -//import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; -//import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; -//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; -//import cn.estsh.i3plus.pojo.mes.model.AttrBean; -//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.BeanUtils; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Service; -//import org.springframework.util.CollectionUtils; -//import org.springframework.util.StringUtils; -// -//import java.util.ArrayList; -//import java.util.Comparator; -//import java.util.List; -//import java.util.Map; -//import java.util.stream.Collectors; -// -///** -// * @Description : 显示装配件扫描项工步【非排序】 -// * @Author : wangjie -// **/ -//@Slf4j -//@Service("mesAssemblyShowNosortStepService") -//public class MesAssemblyShowNosortStepService extends BaseStepService { -// -// @Autowired -// private IMesProductionProcessContextStepService productionProcessContextStepService; -// -// @Autowired -// private IMesProductionDispatchContextStepService productionDispatchContextStepService; -// -// @Autowired -// private IMesAssemblyExtService assemblyExtService; -// -// @Override -// public StepResult execute(StationRequestBean reqBean) { -// -// StationResultBean resultBean = new StationResultBean(); -// -// StepResult stepResult = StepResult.getSuccessComplete(); -// -// //获取上下文信息 -// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); -// -// //配置错误 抛出异常 -// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); -// -// //从上下文中取出生产线对象 -// MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); -// -// //从上下文中取出生产线对象 -// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); -// -// //获取上下文装配件数据信息集合 -// List productionAssemblyContextList = productionDispatchContextStepService.getAssemblyDataContext(reqBean, workCenter); -// -// //搜集当前设备对应的装配件数据信息 -// productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList); -// -// //不存在装配件数据信息则进行查询 -// if (CollectionUtils.isEmpty(productionAssemblyContextList)) productionAssemblyContextList = doHandleAssemblyData(reqBean, resultBean, stepResult, cellEquipContext); -// -// if (!stepResult.isCompleted()) return stepResult; -// -// if (CollectionUtils.isEmpty(productionAssemblyContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); -// -// //显示装配件信息 -// showProductionAssembly(reqBean, resultBean, getAssemblyShowContextList(productionAssemblyContextList)); -// -// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!"); -// -// } -// -// private List doHandleAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) { -// -// //从上下文中取出生产工单数据信息集合 -// List workOrderContextList = productionDispatchContextStepService.getWorkOrderDataContext(reqBean); -// -// //上下文中不存在生产工单数据信息集合 -// if (CollectionUtils.isEmpty(workOrderContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); -// -// //获取排序线的装配件清单 -// List productionAssemblyContextList = assemblyExtService.getProductionAssemblySortContextList( -// new MesProductionAssemblySortContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), workOrderContextList.stream().filter(o -> null != o).map(MesWorkOrderContext::getWorkOrderNo).collect(Collectors.toList())); -// -// //保存设备当前一轮工序的装配件清单信息 -// if (!CollectionUtils.isEmpty(productionAssemblyContextList)) productionDispatchContextStepService.saveAssemblyDataContext(reqBean, productionAssemblyContextList); -// -// return filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList); -// -// } -// -// private List filterProductionAssemblyContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { -// return CollectionUtils.isEmpty(productionAssemblyContextList) ? null : -// productionAssemblyContextList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(cellEquipContext.getEquipmentCode()))).collect(Collectors.toList()); -// } -// -// private List getAssemblyShowContextList(List productionAssemblyContextList) { -// List assemblyShowContextList = new ArrayList<>(); -// Map> assemblyMap = productionAssemblyContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblyContext::getWorkOrderNo)); -// for (Map.Entry> entry : assemblyMap.entrySet()) { -// if (null == entry) continue; -// List itemList = new ArrayList<>(); -// for (MesProductionAssemblyContext item : entry.getValue()) { -// if (null == item) continue; -// itemList.add(assemblyShowContext(item)); -// } -// itemList = itemList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); -// assemblyShowContextList.addAll(itemList); -// } -// return assemblyShowContextList; -// } -// -// private void showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, List assemblyShowContextList) { -// List attrBeanList = new ArrayList<>(); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "序号")); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "零件编码")); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料编码")); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料名称")); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料条码")); -// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否装配")); -// -// resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()); -// resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()); -// resultBean.setResultList(assemblyShowContextList); -// resultBean.setDataAttrList(attrBeanList); -// this.sendMessage(reqBean, resultBean); -// } -// -// private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) { -// MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); -// BeanUtils.copyProperties(o, assemblyShowContext); -// if (StringUtils.isEmpty(assemblyShowContext.getRouteSeq())) assemblyShowContext.setRouteSeq(MesPcnExtConstWords.ZERO); -// if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() == assemblyShowContext.getAssemblyStatus() && (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == assemblyShowContext.getMatchType() || -// MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == assemblyShowContext.getMatchType())) assemblyShowContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); -// assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(o.getAssemblyStatus())); -// if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus()) -// assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor()); -// return assemblyShowContext; -// } -// -// -//} +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +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.pojo.context.*; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +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 com.alibaba.fastjson.JSONObject; +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.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : 显示装配件扫描项工步【非排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesAssemblyShowNosortStepService") +public class MesAssemblyShowNosortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProdRuleCfgExtService prodRuleCfgExtService; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + //从上下文中取出生产线对象 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //获取上下文加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + //获取上下文产出零件数据信息集合 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //获取上下文读/扫主条码信息集合 + List scanProductSnList = productionDispatchContextStepService.getScanProductSnContext(reqBean); + + //根据现有数据【产出零件数据】【读/扫主条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 + if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); + doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList); + + + + + return stepResult; + } + + private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, List productionPartContextList, List scanProductSnList) { + //没有【产出零件数据】【读/扫主条码信息】,则直接跳过 【当前场景是直接匹配装配件规则来获取产品加工规则】 + if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(scanProductSnList)) return; + + //如果已经通过主条码条件获取了产品加工规则数据,如果当前上下文没有【读/扫主条码信息】,则直接跳过 + if (!CollectionUtils.isEmpty(prodRuleContextList) && !StringUtils.isEmpty(prodRuleContextList.get(0).getProductSn()) && CollectionUtils.isEmpty(scanProductSnList)) return; + + //根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + if (CollectionUtils.isEmpty(productionPartContextList)) doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, scanProductSnList); + //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 + else doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList); + + } + + + //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 + private void doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, List productionPartContextList, List scanProductSnList) { + + //加工规则的数据已与产出零件的数量一致 + if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return; + + //已获取的加工规则数据根据关联键分组 + Map prodRuleContextMap = CollectionUtils.isEmpty(prodRuleContextList) ? null : prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); + + //上下文当前存在【读/扫主条码信息】, 后面匹配成功的信息会从scanProductSnList中remove掉,所以需要一个标志判断循环是否结束 + Boolean isExistPs = CollectionUtils.isEmpty(scanProductSnList) ? false : true; + + for (MesProductionPartContext productionPartContext : productionPartContextList) { + + if (null == productionPartContext) continue; + + if (StringUtils.isEmpty(productionPartContext.getForeignKey())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("上下文中的产出零件信息数据异常,缺失数据关联键! 数据详情:[%s]", JSONObject.toJSONString(productionPartContext))); + + //当前上下文中的【读/扫主条码信息】已经全部匹配完成 + if (isExistPs && CollectionUtils.isEmpty(scanProductSnList)) break; + + //当前产出零件已获取过加工规则 + if (!CollectionUtils.isEmpty(prodRuleContextMap) && prodRuleContextMap.containsKey(productionPartContext.getForeignKey())) continue; + + //根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + if (CollectionUtils.isEmpty(scanProductSnList)) doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext); + //根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据 + else doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext, scanProductSnList); + + } + + + } + + //根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + private void doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, MesProductionPartContext productionPartContext) { + //【非排序线】获取产品加工规则 ; 条件进料[NULL] + List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNo(productionPartContext.getPartNo()).inPartNoIsEmpty().inPartNoRuleIsEmpty()); + if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo())); + if (prodRuleNosortCfgList.size() > 1) return; + //【非排序线】获取产品加工规则对应的装配件信息 + MesProdRuleContext prodRuleContext = prodRuleCfgExtService.getProdRuleContext(prodRuleNosortCfgList.get(0), productionPartContext); + prodRuleContextList.add(prodRuleContext); + } + + //根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + private void doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, List scanProductSnList) { + + //查询【读/扫主条码信息】 + Map produceSnDataMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), scanProductSnList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())); + + + for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) { + + if (null == equipVariableCollectContext) continue; + + MesProduceSn produceSnData = CollectionUtils.isEmpty(produceSnDataMap) ? null : produceSnDataMap.get(equipVariableCollectContext.getEquipVariableValue()); + + if (null != produceSnData) {} + else { + + } + + + + } + + //【非排序线】获取产品加工规则 + List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode())); +// if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo())); + if (prodRuleNosortCfgList.size() > 1) return; + + + } + + + + //根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据 + private void doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, MesProductionPartContext productionPartContext, List scanProductSnList) { + + for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) { + + if (null == equipVariableCollectContext) continue; + + + + + + } + + } + + + + + + +} 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 3f911f4..2cdd15a 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 @@ -1,12 +1,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService; 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.pojo.context.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.util.LocaleUtil; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; @@ -25,7 +24,6 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -43,7 +41,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesAssemblyExtService assemblyExtService; + private IMesProdRuleCfgExtService prodRuleCfgExtService; @Override public StepResult execute(StationRequestBean reqBean) { @@ -64,82 +62,90 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //从上下文中取出生产线对象 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - //获取上下文装配件数据信息集合 - List productionAssemblyContextList = productionDispatchContextStepService.getAssemblyDataContext(reqBean, workCenter); + //获取上下文加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); - //搜集当前设备对应的装配件数据信息 - productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList); - - //不存在装配件数据信息则进行查询 - if (CollectionUtils.isEmpty(productionAssemblyContextList)) productionAssemblyContextList = doHandleAssemblyData(reqBean, resultBean, stepResult, cellEquipContext); + //不存在加工规则数据信息则进行查询 + if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = doHandleProdRuleData(reqBean, resultBean, stepResult, cellEquipContext); if (!stepResult.isCompleted()) return stepResult; - if (CollectionUtils.isEmpty(productionAssemblyContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); - //显示装配件信息 - showProductionAssembly(reqBean, resultBean, getAssemblyShowContextList(productionAssemblyContextList)); + if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!"); } - private List doHandleAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) { + //查询排序线加工规则装配件数据信息 + private List doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) { //从上下文中取出生产工单数据信息集合 - List workOrderContextList = productionDispatchContextStepService.getWorkOrderDataContext(reqBean); + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); //上下文中不存在生产工单数据信息集合 - if (CollectionUtils.isEmpty(workOrderContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + if (CollectionUtils.isEmpty(productionPartContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); //获取排序线的装配件清单 - List productionAssemblyContextList = assemblyExtService.getProductionAssemblySortContextList( - new MesProductionAssemblySortContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), workOrderContextList.stream().filter(o -> null != o).map(MesWorkOrderContext::getWorkOrderNo).collect(Collectors.toList())); + List prodRuleContextList = prodRuleCfgExtService.getProdRuleSortContextList(new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), productionPartContextList); //保存设备当前一轮工序的装配件清单信息 - if (!CollectionUtils.isEmpty(productionAssemblyContextList)) productionDispatchContextStepService.saveAssemblyDataContext(reqBean, productionAssemblyContextList); + if (!CollectionUtils.isEmpty(prodRuleContextList)) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); - return filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList); + return prodRuleContextList; } - private List filterProductionAssemblyContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { - return CollectionUtils.isEmpty(productionAssemblyContextList) ? null : - productionAssemblyContextList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(cellEquipContext.getEquipmentCode()))).collect(Collectors.toList()); + private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList) { + + List attrBeanList = null; + + for (MesProdRuleContext prodRuleContext : prodRuleContextList) { + + if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + + //封装匹配当前设备的装配件信息 + List assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter)); + if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; + + //装配件清单列表标题 + if (CollectionUtils.isEmpty(attrBeanList)) attrBeanList = dataAttrList(); + + //封装多表格 + resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList)); + + } + + if (CollectionUtils.isEmpty(resultBean.getStationResultBeans())) return false; + + resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()); + this.sendMessage(reqBean, resultBean); + + return true; + } - private List getAssemblyShowContextList(List productionAssemblyContextList) { + //封装匹配当前设备的装配件信息 + private List getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { + productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList); + if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; List assemblyShowContextList = new ArrayList<>(); - Map> assemblyMap = productionAssemblyContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblyContext::getWorkOrderNo)); - for (Map.Entry> entry : assemblyMap.entrySet()) { - if (null == entry) continue; - List itemList = new ArrayList<>(); - for (MesProductionAssemblyContext item : entry.getValue()) { - if (null == item) continue; - itemList.add(assemblyShowContext(item)); - } - itemList = itemList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); - assemblyShowContextList.addAll(itemList); + for (MesProductionAssemblyContext item : productionAssemblyContextList) { + if (null == item) continue; + assemblyShowContextList.add(assemblyShowContext(item)); } + assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); return assemblyShowContextList; } - private void showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, List assemblyShowContextList) { - List attrBeanList = new ArrayList<>(); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "序号")); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "零件编码")); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料编码")); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料名称")); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料条码")); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否装配")); - - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()); - resultBean.setResultList(assemblyShowContextList); - resultBean.setDataAttrList(attrBeanList); - this.sendMessage(reqBean, resultBean); + //搜集匹配当前设备的装配件信息 + private List filterProductionAssemblyContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { + return CollectionUtils.isEmpty(productionAssemblyContextList) ? null : + productionAssemblyContextList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(cellEquipContext.getEquipmentCode()))).collect(Collectors.toList()); } + //封装装配件信息 private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); BeanUtils.copyProperties(o, assemblyShowContext); @@ -152,5 +158,17 @@ public class MesAssemblyShowSortStepService extends BaseStepService { return assemblyShowContext; } + //装配件清单列表标题 + private List dataAttrList() { + List attrBeanList = new ArrayList<>(); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态"); + return attrBeanList; + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 086368a..8225c84 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -5,17 +5,17 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; 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.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +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.api.iservice.base.IPartService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -83,8 +83,8 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); - //当前工序已存在头道模具号跟一模多腔信息 - if (productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean) && productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean)) return stepResult; + //当前工序已存在头道模具号跟产出零件信息 + if (productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult; //获取生产过程上下文对象有异常信息 抛出异常 if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); @@ -138,14 +138,14 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); //读取的头道模具号进行规则匹配 List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); //默认只需要配置一个点位 String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); @@ -154,49 +154,49 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { productionDispatchContextStepService.doSendStepContextMessage(reqBean, firstMouldNo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); //验证一模多腔信息 - List mouldMultiCavityList = getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true); + List productionPartContextList = getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), firstMouldNo, true); //获取零件信息 - Map partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList); + Map partDataMap = getPartDataMap(reqBean, resultBean, productionProcessContext, productionPartContextList); - //保存设备当前一轮工序的头道模具号,一模多腔信息,零件信息 + //保存设备当前一轮工序的头道模具号,产出零件(一模多腔)信息,零件信息 productionDispatchContextStepService.saveFirstMouldNoContext(reqBean, equipVariableCollectContextList.get(0)); - productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList); + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap); //更新展示组件MODULE_CONTENT内容 - doCacheMoudleContext(reqBean, mouldMultiCavityList, true); + doCacheMoudleContext(reqBean, productionPartContextList, true); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]头道模具号[%s]!", cellEquipContext.getEquipmentCode(), firstMouldNo)); } - public List getMouldMultiCavityList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, String equipmentCode, String mouldNo, Boolean isFirstMouldNo) { + public List getProductionPartList(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, String equipmentCode, String mouldNo, Boolean isFirstMouldNo) { - //从上下文中取出一模多腔信息集合 - List mouldMultiCavityList = productionDispatchContextStepService.getMouldMultiCavityContext(reqBean); + //从上下文中取出产出零件(一模多腔)信息集合 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); - //验证一模多腔信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息 - if (!checkCachedMouldMultiCavityValid(mouldMultiCavityList, equipmentCode, mouldNo)) mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), equipmentCode, mouldNo); + //验证产出零件(一模多腔)信息是否跟当前对设备及模具匹配; 根据设备代码,模具号查询一模多腔信息 + if (!checkCachedProductionPartValid(productionPartContextList, equipmentCode, mouldNo)) productionPartContextList = mouldMultiCavityService.getProductionPartList(reqBean.getOrganizeCode(), equipmentCode, mouldNo); //配置错误 抛出异常 - if (CollectionUtils.isEmpty(mouldMultiCavityList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", equipmentCode, isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo)); + if (CollectionUtils.isEmpty(productionPartContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前设备[%s]与读取到的%s模具号[%s]未维护有效的一模多腔信息!", equipmentCode, isFirstMouldNo ? "头道" : MesPcnExtConstWords.EMPTY, mouldNo)); - return mouldMultiCavityList; + return productionPartContextList; } - private Boolean checkCachedMouldMultiCavityValid(List mouldMultiCavityList, String equipmentCode, String firstMouldNo) { - return (!CollectionUtils.isEmpty(mouldMultiCavityList) && mouldMultiCavityList.get(0).getEquipmentCode().equals(equipmentCode) && mouldMultiCavityList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false; + private Boolean checkCachedProductionPartValid(List productionPartContextList, String equipmentCode, String firstMouldNo) { + return (!CollectionUtils.isEmpty(productionPartContextList) && productionPartContextList.get(0).getEquipmentCode().equals(equipmentCode) && productionPartContextList.get(0).getMouldNo().equals(firstMouldNo)) ? true : false; } - public Map getPartDataMap(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List mouldMultiCavityList) { + public Map getPartDataMap(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List productionPartContextList) { //从上下文中取出零件信息集合 Map partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean); //从一模多腔信息中搜集零件编码并去重 - List partNoList = (mouldMultiCavityList.stream().filter(o -> (null != o)).map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + List partNoList = (productionPartContextList.stream().filter(o -> (null != o)).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); //验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码 if (!CollectionUtils.isEmpty(partDataMap) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return partDataMap; @@ -214,15 +214,15 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { } - public void doCacheMoudleContext(StationRequestBean reqBean, List mouldMultiCavityList, Boolean isFirstMouldNo) { + public void doCacheMoudleContext(StationRequestBean reqBean, List productionPartContextList, Boolean isFirstMouldNo) { //存储展示组件MODULE_CONTENT内容 - productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, mouldMultiCavityList, isFirstMouldNo)); + productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList, isFirstMouldNo)); } //封装展示组件MODULE_CONTENT内容 - private List> getModuleContextData(StationRequestBean reqBean, List mouldMultiCavityList, Boolean isFirstMouldNo) { + private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList, Boolean isFirstMouldNo) { List> dataList = new ArrayList<>(); - mouldMultiCavityList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, + productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName()))); return dataList; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java index 892fdd4..77e50c8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java @@ -42,12 +42,14 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { //根据生产线代码,工位代码查询主子工位实虚关系信息(排除当前工位) List workCellExtendCfgList = prodOrgExtService.getWorkCellExtendCfgRvListByBak(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - if (CollectionUtils.isEmpty(workCellExtendCfgList)) return stepResult; + if (CollectionUtils.isEmpty(workCellExtendCfgList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未配置实虚工位对应关系", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); for (MesWorkCellExtendCfg workCellExtendCfg : workCellExtendCfgList) { if (null == workCellExtendCfg) continue; + if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue; + //验证下个工位是否在线 String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode()); if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue; @@ -58,7 +60,9 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { } - return stepResult; + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, + String.format("生产线[%s]工位[%s]切换分屏失败!原因:实体生产线[%s]工位[%s]%s!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), + workCellExtendCfgList.get(0).getWorkCenterCode(), workCellExtendCfgList.get(0).getWorkCellCode(), workCellExtendCfgList.size() == 1 ? "仅关联了当前操作的虚拟工位" : "关联的其他虚拟工位当前均不在线")); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java index 8ea34cd..91db516 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java @@ -37,7 +37,7 @@ public class MesManyCellTriggerTabSwitchStepService extends BaseStepService { BeanUtils.copyProperties(reqBean, stationRequestBean); stationRequestBean.setScanInfo(clientInfo); - return execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从[%s]切换到[%s]!", reqBean.getClientInfo(), clientInfo)); + return execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从[%s]切换到[%s]!", reqBean.getClientInfo(), clientInfo)); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index b2f4417..089bb26 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -5,14 +5,14 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; 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.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +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.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -76,8 +76,8 @@ public class MesMouldNoReadStepService extends BaseStepService { //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); - //当前工序已存在模具号 并且 存在一模多腔信息或者生产工单数据信息 - if (productionDispatchContextStepService.checkMouldNoIsExistContext(reqBean) && (productionDispatchContextStepService.checkMouldMultiCavityIsExistContext(reqBean) || productionDispatchContextStepService.checkWorkOrderDataIsExistContext(reqBean))) return stepResult; + //当前工序已存在模具号 并且 存在产出零件数据信息 + if (productionDispatchContextStepService.checkMouldNoIsExistContext(reqBean) && (productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean))) return stepResult; //获取生产过程上下文对象有异常信息 抛出异常 if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); @@ -132,12 +132,12 @@ public class MesMouldNoReadStepService extends BaseStepService { private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { - Boolean firstMouldNoIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); - Boolean workOrderDataIsExist = productionDispatchContextStepService.checkFirstMouldNoIsExistContext(reqBean); + //验证上下文产出零件信息是否存在 + Boolean productionPartContextIsExist = productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean); //未采集到数据 - if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist))) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || !productionPartContextIsExist)) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())); else if (!equipLogDispatchContext.getIsCollectValue()) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode())); @@ -145,8 +145,8 @@ public class MesMouldNoReadStepService extends BaseStepService { List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); //没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息 - if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (!firstMouldNoIsExist && !workOrderDataIsExist))) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || !productionPartContextIsExist)) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode())); else if (CollectionUtils.isEmpty(equipVariableCollectContextList)) //非常变值 没有有效的数据 也无需再读 return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的模具号,接口逻辑设置只读一次,当前读取模具号直接跳过!", cellEquipContext.getEquipmentCode())); @@ -159,8 +159,8 @@ public class MesMouldNoReadStepService extends BaseStepService { //将模具信息放到工步结果对象的中, 工步主方法体会从里面取出 stepResult.obj(equipVariableCollectContextList.get(0)); - //判断是否存在头道模具号或生产工单信息 - if (!firstMouldNoIsExist && !workOrderDataIsExist) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo); + //判断是否存在产出零件信息 + if (!productionPartContextIsExist) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]模具号信息[%s]!", cellEquipContext.getEquipmentCode(), mouldNo)); @@ -168,17 +168,17 @@ public class MesMouldNoReadStepService extends BaseStepService { private void doHandleFirstMouldNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo) { //磨具号当头道模具号的使用 - List mouldMultiCavityList = firstMouldNoReadStepService.getMouldMultiCavityList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false); + List productionPartContextList = firstMouldNoReadStepService.getProductionPartList(reqBean, resultBean, productionProcessContext, cellEquipContext.getEquipmentCode(), mouldNo, false); //获取零件信息 - Map partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, mouldMultiCavityList); + Map partDataMap = firstMouldNoReadStepService.getPartDataMap(reqBean, resultBean, productionProcessContext, productionPartContextList); - //保存设备当前一轮工序的一模多腔信息,零件信息 - productionDispatchContextStepService.saveMouldMultiCavityContext(reqBean, mouldMultiCavityList); + //保存设备当前一轮工序的产出零件(一模多腔)信息,零件信息 + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap); //更新展示组件MODULE_CONTENT内容 - firstMouldNoReadStepService.doCacheMoudleContext(reqBean, mouldMultiCavityList, false); + firstMouldNoReadStepService.doCacheMoudleContext(reqBean, productionPartContextList, false); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index f1c1f93..603da1d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -130,7 +130,7 @@ public class MesProductResultReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode())); //根据变量类别分组数据 Map> variableCategoryMap = equipLogDispatchContext.getEquipVariableCfgCollectContextList().stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory)); @@ -168,7 +168,7 @@ public class MesProductResultReadStepService extends BaseStepService { //加工结果匹配失败 return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, - MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index a348e86..bfc29db 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -3,17 +3,17 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.apiservice.util.MesPcnException; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderContext; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -21,12 +21,10 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; @@ -70,12 +68,10 @@ public class MesProductSnGenerateStepService extends BaseStepService { // 获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); - // 获取一模多腔信息 - List mesModelMultiCavities = mesProductionDispatchContextStepService.getMouldMultiCavityContext(reqBean); - // 获取工单号信息 - List workOrderDataContext = mesProductionDispatchContextStepService.getWorkOrderDataContext(reqBean); + // 获取产出零件信息 + List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); // 获取零件号,可能存在多个 - List partNoList = getPartNoList(mesModelMultiCavities, workOrderDataContext); + List partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); // 根据零件号组装产品条码信息 List mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList); // 保存条码信息 @@ -114,24 +110,6 @@ public class MesProductSnGenerateStepService extends BaseStepService { } /** - * 获取零件号列表 - * 一模多腔或者加工单信息中获取 - * @param mesModelMultiCavities - * @param workOrderDataContext - * @return - */ - private List getPartNoList(List mesModelMultiCavities, List workOrderDataContext) { - List partNoList = new ArrayList<>(); - if (!CollectionUtils.isEmpty(workOrderDataContext)) { - partNoList = workOrderDataContext.stream().map(MesWorkOrder::getPartNo).collect(Collectors.toList()); - } - if (!CollectionUtils.isEmpty(mesModelMultiCavities)) { - partNoList = mesModelMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).collect(Collectors.toList()); - } - return partNoList; - } - - /** * 生成条码 * @param mesPart * @return diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java index ad297ac..de846cc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java @@ -5,10 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatc import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; 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.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +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.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -131,14 +128,17 @@ public class MesProductSnReadStepService extends BaseStepService { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode())); //读取的主条码进行规则匹配 List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SN.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); //没有有效的数据 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode())); + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode())); + + //读取主条码前置验证 + if (!checkReadProductSnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList).isCompleted()) return stepResult; //保存设备当前一轮工序的待验证的主条码信息 productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList); @@ -151,5 +151,31 @@ public class MesProductSnReadStepService extends BaseStepService { } + //读取主条码前置验证 + private StepResult checkReadProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipVariableCollectContextList) { + + //剔除finishCode信息 + List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && !o.getEquipVariableValue().equals(productionProcessContext.getFinishCode()))).collect(Collectors.toList()); + + //根据读取条码分组数据 + Map> produceSnCollectMap = CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCollectContext::getEquipVariableValue)); + + //验证是否存在重复条码 + if (!CollectionUtils.isEmpty(filterList) && filterList.size() != produceSnCollectMap.size()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码存在重复条码,持续监听中...", cellEquipContext.getEquipmentCode())); + + //验证条码数量是否满足腔数 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + if (!CollectionUtils.isEmpty(productionPartContextList) && equipVariableCollectContextList.size() != productionPartContextList.size()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码数量[%s]与产出零件对应的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), productionPartContextList.size())); + + if (CollectionUtils.isEmpty(productionPartContextList) && equipVariableCollectContextList.size() != cellEquipContext.getCavity()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前读取到设备[%s]主条码数量[%s]与工位设备维护的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), cellEquipContext.getCavity())); + + + return stepResult; + + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java index 9550dfa..2d8e06b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java @@ -3,30 +3,16 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.pojo.context.MesProductionProcessContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext; -import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; -import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; 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.MesPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; import java.util.List; /** diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java index 965facd..267e74f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java @@ -1,37 +1,37 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * @Description : 扫描主条码工步 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductSnScanStepService") -public class MesProductSnScanStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - - - @Override - public StepResult execute(StationRequestBean reqBean) { - - return null; - - } - - - -} +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +//import cn.estsh.i3plus.pojo.mes.model.StepResult; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +// +///** +// * @Description : 扫描主条码工步 +// * @Author : wangjie +// **/ +//@Slf4j +//@Service("mesProductSnScanStepService") +//public class MesProductSnScanStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// return null; +// +// } +// +// +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java index 9efa785..e663395 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesVariableWhenFinishedReadStepService.java @@ -2,46 +2,28 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import akka.actor.ActorRef; import akka.actor.ActorSystem; -import akka.actor.Props; 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.apiservice.serviceimpl.actor.MesHandlerEquipLogActor; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.MesEquipmentExtService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog.MesEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesSnProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage; -import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; -import cn.estsh.i3plus.mes.pcn.config.SpringExt; import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.*; -import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; 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.MesEquipmentLogDetailRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.eclipse.milo.opcua.stack.core.channel.messages.HelloMessage; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.*; +import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; /** * @Description : 保存工艺参数 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 7801ade..e97dcf9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -1,16 +1,17 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.context; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -39,10 +40,8 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //发送设备质量信息 @Override public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) { - StationResultBean resultBean = new StationResultBean(); - resultBean.setResultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality())); - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()); + StationResultBean resultBean = new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality())); this.sendMessage(reqBean, resultBean); } @@ -94,12 +93,11 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //发送工步内容 @Override public void sendStepContextMessage(StationRequestBean reqBean, List lastScanContext) { - StationResultBean resultBean = new StationResultBean(); - resultBean.setResultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), - lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null, - lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null)); - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue()); + StationResultBean resultBean = new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.KEY_VALUE.getValue()) + .resultList(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + lastScanContext.size() > 1 ? lastScanContext.get(1).name("上次" + lastScanContext.get(1).getName()).key(MesPcnExtConstWords.LAST_SCAN_INFO) : null, + lastScanContext.size() > 0 ? lastScanContext.get(0).name("当前" + lastScanContext.get(0).getName()).key(MesPcnExtConstWords.SCAN_INFO) : null)); this.sendMessage(reqBean, resultBean); } @@ -169,29 +167,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //获取上下文一模多腔信息 @Override - public List getMouldMultiCavityContext(StationRequestBean reqBean) { - String mouldCavityJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT); - return !StringUtils.isEmpty(mouldCavityJson) ? JSONObject.parseArray(mouldCavityJson, MesMouldMultiCavity.class) : null; + public List getProductionPartContext(StationRequestBean reqBean) { + String productionPartJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT); + return !StringUtils.isEmpty(productionPartJson) ? JSONObject.parseArray(productionPartJson, MesProductionPartContext.class) : null; } //验证上下文一模多腔信息是否存在 @Override - public Boolean checkMouldMultiCavityIsExistContext(StationRequestBean reqBean) { - String mouldCavityJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT); - return !StringUtils.isEmpty(mouldCavityJson) ? true : false; + public Boolean checkProductionPartIsExistContext(StationRequestBean reqBean) { + String productionPartJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT); + return !StringUtils.isEmpty(productionPartJson) ? true : false; } - //保存上下文一模多腔信息 [JSON]List + //保存上下文一模多腔信息 [JSON]List @Override - public Boolean saveMouldMultiCavityContext(StationRequestBean reqBean, List mouldMultiCavityList) { - if (CollectionUtils.isEmpty(mouldMultiCavityList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT, JSONObject.toJSONString(mouldMultiCavityList)); + public Boolean saveProductionPartContext(StationRequestBean reqBean, List productionPartContextList) { + if (CollectionUtils.isEmpty(productionPartContextList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT, JSONObject.toJSONString(productionPartContextList)); } //删除上下文一模多腔信息 @Override - public void deleteMouldMultiCavityContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_MULTI_CAVITY_CONTEXT); + public void deleteProductionPartContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PART_CONTEXT); } //获取上下文零件数据信息 @@ -241,33 +239,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT); } - //获取上下文生产工单数据信息集合 - @Override - public List getWorkOrderDataContext(StationRequestBean reqBean) { - String workOrderDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT); - return !StringUtils.isEmpty(workOrderDataJson) ? JSONObject.parseArray(workOrderDataJson, MesWorkOrderContext.class) : null; - } - - //验证上下文生产工单数据信息集合是否存在 - @Override - public Boolean checkWorkOrderDataIsExistContext(StationRequestBean reqBean) { - String workOrderDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT); - return !StringUtils.isEmpty(workOrderDataJson) ? true : false; - } - - //保存上下文生产工单数据信息集合 [JSON]List - @Override - public Boolean saveWorkOrderDataContext(StationRequestBean reqBean, List workOrderContextList) { - if (CollectionUtils.isEmpty(workOrderContextList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT, JSONObject.toJSONString(workOrderContextList)); - } - - //删除上下文生产工单数据信息集合 - @Override - public void deleteWorkOrderDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_ORDER_DATA_CONTEXT); - } - //获取上下文扫/读信息:主条码 @Override public List getScanProductSnContext(StationRequestBean reqBean) { @@ -349,67 +320,31 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT); } - //获取上下文装配件数据信息集合 - @Override - public List getAssemblyDataContext(StationRequestBean reqBean, MesWorkCenter workCenter) { - String productionAssemblyJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT); - if (StringUtils.isEmpty(productionAssemblyJson)) return null; - List productionAssemblyContextList = new ArrayList<>(); - if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) { - List productionAssemblySortContextList = JSONObject.parseArray(productionAssemblyJson, MesProductionAssemblySortContext.class); - productionAssemblySortContextList.forEach(o -> productionAssemblyContextList.add(o)); - } else { - List productionAssemblyNosortContextList = JSONObject.parseArray(productionAssemblyJson, MesProductionAssemblyNosortContext.class); - productionAssemblyNosortContextList.forEach(o -> productionAssemblyContextList.add(o)); - } - return productionAssemblyContextList; - } - - //验证上下文装配件数据信息集合是否存在 - @Override - public Boolean checkAssemblyDataIsExistContext(StationRequestBean reqBean) { - String productionAssemblyJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT); - return !StringUtils.isEmpty(productionAssemblyJson) ? true : false; - } - - //保存上下文装配件数据信息集合 [JSON]List - @Override - public Boolean saveAssemblyDataContext(StationRequestBean reqBean, List productionAssemblyContextList) { - if (CollectionUtils.isEmpty(productionAssemblyContextList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT, JSONObject.toJSONString(productionAssemblyContextList)); - } - - //删除上下文装配件数据信息集合 - @Override - public void deleteAssemblyDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_DATA_CONTEXT); - } - - //获取上下文非排序产品加工规则信息集合 + //获取上下文产品加工规则信息集合 @Override - public List getProdRuleNosortDataContext(StationRequestBean reqBean) { - String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT); - return !StringUtils.isEmpty(prodRuleNosortJson) ? JSONObject.parseArray(prodRuleNosortJson, MesProdRuleNoSortContext.class) : null; + public List getProdRuleDataContext(StationRequestBean reqBean) { + String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); + return !StringUtils.isEmpty(prodRuleNosortJson) ? JSONObject.parseArray(prodRuleNosortJson, MesProdRuleContext.class) : null; } - //验证上下文非排序产品加工规则信息集合是否存在 + //验证上下文产品加工规则信息集合是否存在 @Override - public Boolean checkProdRuleNosortDataIsExistContext(StationRequestBean reqBean) { - String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT); + public Boolean checkProdRuleDataIsExistContext(StationRequestBean reqBean) { + String prodRuleNosortJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); return !StringUtils.isEmpty(prodRuleNosortJson) ? true : false; } - //保存上下文非排序产品加工规则信息集合 [JSON]List + //保存上下文产品加工规则信息集合 [JSON]List @Override - public Boolean saveProdRuleNosortDataContext(StationRequestBean reqBean, List prodRuleNoSortContextList) { - if (CollectionUtils.isEmpty(prodRuleNoSortContextList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT, JSONObject.toJSONString(prodRuleNoSortContextList)); + public Boolean saveProdRuleDataContext(StationRequestBean reqBean, List prodRuleContextList) { + if (CollectionUtils.isEmpty(prodRuleContextList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT, JSONObject.toJSONString(prodRuleContextList)); } - //删除上下文非排序产品加工规则信息集合 + //删除上下文产品加工规则信息集合 @Override - public void deleteProdRuleNosortDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_NOSORT_DATA_CONTEXT); + public void deleteProdRuleDataContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); } } 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 1003cd4..95a6b70 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 @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -41,6 +42,9 @@ public class MesProductionProcessContextStepService extends BaseStepService impl @Autowired private IFsmRouteDataService fsmRouteDataService; + @Autowired + private IConfigService configService; + private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); } //存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】 @@ -70,11 +74,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl //生产过程上下文对象赋值工序工艺信息 if (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode())) processContext(reqBean, productionProcessContext); + //生产过程上下文对象赋值工序工艺信息 + if (StringUtils.isEmpty(productionProcessContext.getFinishCode())) finishCodeContext(reqBean, productionProcessContext); + //验证组织模型有效性 return checkBaseData(reqBean, productionProcessContext); } - //获取工序工艺信息 @Override public MesProductionProcessContext processContext(StationRequestBean reqBean) { @@ -100,6 +106,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl } + //获取finishCode码 + @Override + public MesProductionProcessContext finishCodeContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { + MesConfig config = configService.getMesConfigByCfgCode(MesPcnExtConstWords.CAVITY_FINISH_CODE, reqBean.getOrganizeCode()); + return productionProcessContext.finishCode((null != config && !StringUtils.isEmpty(config.getCfgValue())) ? config.getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE); + } + //验证组织模型有效性 @Override public MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { 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 new file mode 100644 index 0000000..448f588 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -0,0 +1,159 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 生产过程上下文对象-产品加工规则(排序) + */ +@Data +public class MesProdRuleContext implements Serializable { + + private static final long serialVersionUID = 1522652732930288854L; + + @ApiParam("组织代码") + public String organizeCode; + + @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") + private String foreignKey; + + @ApiParam("装配件绑定清单 [JSON]List") + public String assemblyDataJson; + + //-------以下排序属性------------- + + @ApiParam("生产线代码") + public String workCenterCode; + + @ApiParam("工位代码") + public String workCellCode; + + @ApiParam("工序代码") + public String processCode; + + //-------以下非排序属性------------- + + @ApiParam(name = "读/扫主条码信息(内制件/外协件),不一定有值") + private String productSn; + + @ApiParam(name = "进料零件号是否为空") + private Boolean inPartNoIsEmpty = false; + + @ApiParam(name = "进料零件规则是否为空") + private Boolean inPartNoRuleIsEmpty = false; + + @ApiParam("非排序产品加工规则ID") + public Long pid; + + @ApiParam(name = "进料零件号") + private String inPartNo; + + @ApiParam(name = "产成零件号") + private String outPartNo; + + @ApiParam(name = "设备代码") + private String equipmentCode; + + @ApiParam(name = "进料零件规则") + private String inPartNoRule; + + @ApiParam(name = "是否打印条码") + private Integer isPrint; + + @ApiParam(name = "是否有装配件") + private Integer isHasBind; + + @ApiParam(name = "汇报方式") + private Integer reportType; + + @ApiParam(name = "是否验证加工单数量") + private Integer isCheckOrderQty; + + @ApiParam(name = "是否包装") + private Integer isPackage; + + @ApiParam(name = "是否验证装配件扫描顺序") + private Integer isCheckBindSeq; + + @ApiParam(name = "成品站点") + private String partLocation; + + @ApiParam(name = "子箱设备信号点") + private String packageEquSignal; + + public MesProdRuleContext() {} + + public MesProdRuleContext(String organizeCode) { + this.organizeCode = organizeCode; + } + + public MesProdRuleContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) { + this.organizeCode = organizeCode; + this.workCenterCode = workCenterCode; + this.workCellCode = workCellCode; + this.processCode = processCode; + } + + public MesProdRuleContext foreignKey(String foreignKey) { + this.foreignKey = foreignKey; + return this; + } + + public MesProdRuleContext inPartNoIsEmpty() { + this.inPartNoIsEmpty = true; + return this; + } + + public MesProdRuleContext inPartNoRuleIsEmpty() { + this.inPartNoRuleIsEmpty = true; + return this; + } + + public MesProdRuleContext pid(Long pid) { + this.pid = pid; + return this; + } + + public MesProdRuleContext inPartNo(String inPartNo) { + this.inPartNo = inPartNo; + return this; + } + + public MesProdRuleContext outPartNo(String outPartNo) { + this.outPartNo = outPartNo; + return this; + } + + public MesProdRuleContext equipmentCode(String equipmentCode) { + this.equipmentCode = equipmentCode; + return this; + } + + public MesProdRuleContext assemblyDataJson(List productionAssemblyContextList) { + this.assemblyDataJson = !CollectionUtils.isEmpty(productionAssemblyContextList) ? JSONObject.toJSONString(productionAssemblyContextList) : null; + return this; + } + + public List getAssemblyDataContext(MesWorkCenter workCenter) { + if (StringUtils.isEmpty(this.assemblyDataJson)) return null; + List productionAssemblyContextList = new ArrayList<>(); + if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) { + List productionAssemblySortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblySortContext.class); + productionAssemblySortContextList.forEach(o -> productionAssemblyContextList.add(o)); + } else { + List productionAssemblyNosortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblyNosortContext.class); + productionAssemblyNosortContextList.forEach(o -> productionAssemblyContextList.add(o)); + } + return productionAssemblyContextList; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleNoSortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleNoSortContext.java deleted file mode 100644 index b2fff40..0000000 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleNoSortContext.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.pojo.context; - -import io.swagger.annotations.ApiParam; -import lombok.Data; - -import java.io.Serializable; - -/** - * 生产过程上下文对象-产品加工规则(非排序) - */ -@Data -public class MesProdRuleNoSortContext implements Serializable { - - private static final long serialVersionUID = -3062405517994447105L; - - @ApiParam(name = "零件条码") - private String productSn; - - @ApiParam(name = "生产工单号") - private String workOrderNo; - - @ApiParam(name = "进料零件号") - private String inPartNo; - - @ApiParam(name = "产成零件号") - private String outPartNo; - - @ApiParam(name = "设备代码") - private String equipmentCode; - - @ApiParam(name = "进料零件规则") - private String inPartNoRule; - - @ApiParam(name = "是否打印条码") - private Integer isPrint; - - @ApiParam(name = "是否有装配件") - private Integer isHasBind; - - @ApiParam(name = "汇报方式") - private Integer reportType; - - @ApiParam(name = "是否验证加工单数量") - private Integer isCheckOrderQty; - - @ApiParam(name = "是否包装") - private Integer isPackage; - - @ApiParam(name = "是否验证装配件扫描顺序") - private Integer isCheckBindSeq; - - @ApiParam(name = "成品站点") - private String partLocation; - - @ApiParam(name = "子箱设备信号点") - private String packageEquSignal; - -} 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 f683bd2..52e4e3b 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 @@ -25,10 +25,6 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam("装配件条码") public String assemblySn; - //非排序可能无值 - @ApiParam(value = "生产工单号") - public String workOrderNo; - @ApiParam("过程条码") public String serialNumber; @@ -110,18 +106,4 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam("工艺名称") public String craftName; - public MesProductionAssemblyContext() {} - - public MesProductionAssemblyContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) { - this.organizeCode = organizeCode; - this.workCenterCode = workCenterCode; - this.workCellCode = workCellCode; - this.processCode = processCode; - } - - public MesProductionAssemblyContext dataSource(Integer dataSource) { - this.dataSource = dataSource; - return this; - } - } 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 8ce8972..313ab93 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 @@ -1,7 +1,10 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import io.swagger.annotations.ApiParam; import lombok.Data; +import org.springframework.beans.BeanUtils; import java.io.Serializable; @@ -25,4 +28,9 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon @ApiParam(value = "工序用量") private Integer qty; + public MesProductionAssemblyNosortContext(MesAssemblyNosortCfg assemblyNosortCfg, MesProductionAssembly productionAssembly) { + if (null != assemblyNosortCfg) BeanUtils.copyProperties(assemblyNosortCfg, this); + if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this); + } + } 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 c26d749..31e480e 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 @@ -16,6 +16,9 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte private static final long serialVersionUID = -1492128619505737538L; + @ApiParam(value = "生产工单号") + public String workOrderNo; + @ApiParam(value = "工艺顺序号") private Integer processSeq; @@ -102,10 +105,6 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte public MesProductionAssemblySortContext() {} - public MesProductionAssemblySortContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) { - super(organizeCode, workCenterCode, workCellCode, processCode); - } - public MesProductionAssemblySortContext(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) { if (null != workOrderAssembly) BeanUtils.copyProperties(workOrderAssembly, this); if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java new file mode 100644 index 0000000..a173ff9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.beans.BeanUtils; + +import java.io.Serializable; + +/** + * 生产过程上下文对象-产出零件信息 + */ +@Data +public class MesProductionPartContext implements Serializable { + + private static final long serialVersionUID = 5562937531822977296L; + + @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") + private String foreignKey; + + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("生产工单号") + private String workOrderNo; + + @ApiParam("设备代码") + private String equipmentCode; + + @ApiParam("设备名称") + private String equipmentName; + + @ApiParam("零件号") + private String partNo; + + @ApiParam("零件名称") + private String partName; + + @ApiParam("模具代码") + private String mouldNo; + + public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { + BeanUtils.copyProperties(mouldMultiCavity, this); + this.foreignKey = mouldMultiCavity.getId().toString(); + return this; + } + + //-------以下场景预留未开发------- + public MesProductionPartContext copyWorkOrder(String workOrderNo) { + this.foreignKey = workOrderNo + "腔顺序号"; + return this; + } + + public MesProductionPartContext copyPartNo(String partNo) { + this.foreignKey = partNo + "腔顺序号"; + return this; + } + +} 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 789b69f..e529e69 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 @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; @@ -34,6 +35,9 @@ public class MesProductionProcessContext implements Serializable { @ApiParam("组织代码") private String organizeCode; + @ApiParam("finishCode码") + private String finishCode; + @ApiParam("生产线信息([Json]MesWorkCenter)") private String workCenterJson; @@ -101,6 +105,15 @@ public class MesProductionProcessContext implements Serializable { return this; } + //---------------------- finishCode码赋值 --------------------------------------- + + //上下文赋值finishCode码 + public MesProductionProcessContext finishCode(String finishCode) { + this.finishCode = finishCode; + return this; + } + + //---------------------- 生产线对象 --------------------------------------- //从上下文中取出生产线对象 @@ -184,6 +197,10 @@ public class MesProductionProcessContext implements Serializable { //上下文赋值工位当前要使用的设备 public MesProductionProcessContext curCellEquipJson(MesCellEquipContext curEquip) { + //未配置则默认1腔 + if (StringUtils.isEmpty(curEquip.getCavity()) || curEquip.getCavity().compareTo(MesPcnExtConstWords.ZERO) == 0) curEquip.setCavity(MesPcnExtConstWords.ONE); + //未配置则默认没有装配件 + if (StringUtils.isEmpty(curEquip.getBindQty())) curEquip.setBindQty(MesPcnExtConstWords.ZERO); this.curCellEquipJson = null != curEquip ? JSONObject.toJSONString(curEquip) : null; return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesSnProductionProcessContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesSnProductionProcessContext.java deleted file mode 100644 index 7015048..0000000 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesSnProductionProcessContext.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.pojo.context; - -import cn.estsh.i3plus.pojo.mes.bean.*; -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.ApiParam; -import lombok.Data; -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; - -/** - * 生产过程上下文对象 - */ -@Data -public class MesSnProductionProcessContext extends MesProductionProcessContext{ - - @ApiParam("零件条码信息") - private String produceSnJson; - - - //上下文赋值一模多腔信息 - public MesSnProductionProcessContext productSns(List mesProduceSns) { - this.produceSnJson = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null; - return this; - } -} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderContext.java deleted file mode 100644 index 0a64738..0000000 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderContext.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.pojo.context; - -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; -import lombok.Data; - -import java.io.Serializable; - -/** - * 生产过程上下文对象-装配件清单信息(非排序) - */ -@Data -public class MesWorkOrderContext extends MesWorkOrder implements Serializable { - - private static final long serialVersionUID = 5562937531822977296L; - -} 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 7df7e6f..449fcc5 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 @@ -94,9 +94,23 @@ public class MesPcnExtConstWords { public static final String WORK_CELL_CODE_BAK = "workCellCodeBak"; // 主子工位关系类型 public static final String EXTEND_TYPE = "extendType"; + // 产成零件号 + public static final String OUT_PART_NO = "outPartNo"; + // 进料零件号 + public static final String IN_PART_NO = "inPartNo"; + // 进料零件规则 + public static final String IN_PART_NO_RULE = "inPartNoRule"; + // 过程条码 + public static final String SERIAL_NUMBER = "serialNumber"; + // 零件条码 + public static final String PRODUCT_SN = "productSn"; + // 客户条码 + public static final String CUST_SN = "custSn"; + // 空腔码 + public static final String CAVITY_FINISH_CODE = "CAVITY_FINISH_CODE"; // 设备代码[工步参数] public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE"; // 读取失败睡眠毫秒数[工步参数] @@ -108,6 +122,8 @@ public class MesPcnExtConstWords { // 0 public static final Integer ZERO = 0; + // 1 + public static final Integer ONE = 1; // 中括号 public static final String SQUARE_BRACKETS = "[]"; // & @@ -143,8 +159,8 @@ public class MesPcnExtConstWords { public static final String FIRST_MOULD_NO_CONTEXT = "FIRST_MOULD_NO_CONTEXT"; // 上下文: 模具号 public static final String MOULD_NO_CONTEXT = "MOULD_NO_CONTEXT"; - // 上下文: 一模多腔信息 - public static final String MOULD_MULTI_CAVITY_CONTEXT = "MOULD_MULTI_CAVITY_CONTEXT"; + // 上下文: 产出零件信息 + public static final String PRODUCTION_PART_CONTEXT = "PRODUCTION_PART_CONTEXT"; // 上下文: 零件数据信息 public static final String PART_DATA_CONTEXT = "PART_DATA_CONTEXT"; // 上下文: 扫/读信息:生产工单号 @@ -153,8 +169,6 @@ public class MesPcnExtConstWords { public static final String SCAN_PRODUCT_SN_CONTEXT = "SCAN_PRODUCT_SN_CONTEXT"; // 上下文: 扫/读信息:装配件条码 public static final String SCAN_ASSEMBLY_SN_CONTEXT = "SCAN_ASSEMBLY_SN_CONTEXT"; - // 上下文: 生产工单数据信息 - public static final String WORK_ORDER_DATA_CONTEXT = "WORK_ORDER_DATA_CONTEXT"; // 上下文: 产品加工规则数据信息 public static final String PROD_RULE_DATA_CONTEXT = "PROD_RULE_DATA_CONTEXT"; // 上下文: 进料条码数据信息 @@ -176,4 +190,6 @@ public class MesPcnExtConstWords { public static final String EQUIPMENT_ID="equipmentId"; public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable"; public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable"; + + } From c40ecb6c16e2d86255d3422d7c87100e2fe1eaea Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 3 Jun 2024 15:26:50 +0800 Subject: [PATCH 2/2] opc link --- .../api/busi/IMesEquipVariableRwExtService.java | 18 ++ .../pcn/api/busi/IWriteOPCEquipmentService.java | 33 --- ...r.java => MesEquipVariableRwExtController.java} | 25 +-- .../equiplog/MesEquipmentRwExtServiceImpl.java | 118 ++++++++++ .../equiplog/WriteOPCEquipmentServiceImpl.java | 240 --------------------- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 8 + 6 files changed, 153 insertions(+), 289 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java delete mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java rename modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/{MesOpcLinkController.java => MesEquipVariableRwExtController.java} (65%) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtServiceImpl.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java new file mode 100644 index 0000000..3c15355 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableRwExtService.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import io.swagger.annotations.ApiOperation; + +public interface IMesEquipVariableRwExtService { + + @ApiOperation(value = "读写访问地址") + MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel); + + @ApiOperation(value = "写值") + MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel); + + @ApiOperation(value = "读取") + MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java deleted file mode 100644 index 4c08b1a..0000000 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteOPCEquipmentService.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.api.busi; - -import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; -import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel; -import cn.estsh.impp.framework.boot.util.ResultBean; -import io.swagger.annotations.ApiOperation; - -import java.util.List; -import java.util.Map; - -/** - * @Description : - * @Reference : - * @Author : - * @CreateDate : 2024-05-29 10:37 - * @Modify: - **/ -public interface IWriteOPCEquipmentService { - - @ApiOperation(value = "查询工单") - ResultBean doOPCEquipment(List> listData,String xmlString); - - @ApiOperation(value = "writeVariableHttp") - String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception; - - @ApiOperation(value = "写值") - MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel); - - @ApiOperation(value = "读取") - MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel); - - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesEquipVariableRwExtController.java similarity index 65% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesEquipVariableRwExtController.java index effbfbe..854a919 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesOpcLinkController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/opc/MesEquipVariableRwExtController.java @@ -1,8 +1,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.opc; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -14,27 +14,20 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -/** - * @Description :opc - * @Reference : - * @Author : junsheng.li - * @CreateDate 2024/6/3 10:24 - * @Modify: - **/ @RestController -@Api(tags = "opc") +@Api(tags = "设备数据变量读写API") @RequestMapping(MesCommonConstant.MES_YANFEN + "/opc") @Slf4j -public class MesOpcLinkController { +public class MesEquipVariableRwExtController { @Autowired - private IWriteOPCEquipmentService iWriteOPCEquipmentService; + private IMesEquipVariableRwExtService equipVariableRwExtService; @PostMapping("/write-variable") @ApiOperation(value = "写值") - public ResultBean writeVariable(MesOpcLinkModel mesOpcLinkModel) { + public ResultBean writeVariable(MesEquipVariableRwModel mesOpcLinkModel) { try { - return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.writeVariable(mesOpcLinkModel)); + return ResultBean.success("操作成功").setResultObject(equipVariableRwExtService.writeVariable(mesOpcLinkModel)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { @@ -44,9 +37,9 @@ public class MesOpcLinkController { @PostMapping("/read-variable") @ApiOperation(value = "读值") - public ResultBean readVariable(MesOpcLinkModel mesOpcLinkModel) { + public ResultBean readVariable(MesEquipVariableRwModel mesOpcLinkModel) { try { - return ResultBean.success("执行成功").setResultObject(iWriteOPCEquipmentService.readVariable(mesOpcLinkModel)); + return ResultBean.success("读取成功").setResultObject(equipVariableRwExtService.readVariable(mesOpcLinkModel)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtServiceImpl.java new file mode 100644 index 0000000..e313abb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtServiceImpl.java @@ -0,0 +1,118 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; +import cn.estsh.i3plus.platform.common.tool.HttpClientTool; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +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.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesEquipmentRwExtServiceImpl implements IMesEquipVariableRwExtService { + + @Autowired + private IConfigService configService; + + @Override + public MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel) { + + if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode())) return equipVariableRwModel; + + //根据cfgCode查询缓存的配置数据 + List configList = configService.doCachedConfigList(MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG, equipVariableRwModel.getOrganizeCode()); + + //根据设备标识分组 + Map> requestUrlMap = getConfigMap(configList, MesPcnExtConstWords.KEPWARE_FLAG_CFG); + //根据读写标志分组 + Map> rwApiMap = getConfigMap(configList, MesPcnExtConstWords.RW_API_CFG); + + if (CollectionUtils.isEmpty(requestUrlMap) || CollectionUtils.isEmpty(rwApiMap)) return equipVariableRwModel; + if (!rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()) || !rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr())) return equipVariableRwModel; + + List requestUrlList = (StringUtils.isEmpty(equipVariableRwModel.getKepwareFlag()) || !requestUrlMap.containsKey(equipVariableRwModel.getKepwareFlag())) ? requestUrlMap.get(MesPcnExtConstWords.DEFAULT_URL) : requestUrlMap.get(equipVariableRwModel.getKepwareFlag()); + if (CollectionUtils.isEmpty(requestUrlList)) return equipVariableRwModel; + + //赋值读/写访问地址 + return equipVariableRwModel.readRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()).get(0).getCfgValue()). + writeRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr()).get(0).getCfgValue()); + + } + + private Map> getConfigMap(List configList, String cfgType) { + List filterList = CollectionUtils.isEmpty(configList) ? null : + configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgType()) && !StringUtils.isEmpty(o.getCfgKey()) && o.getCfgType().equals(MesPcnExtConstWords.RW_API_CFG))).collect(Collectors.toList()); + return CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesConfig::getCfgKey)); + } + + @Override + public MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel) { + + MesEquipVariableRwResult result = checkBefore(equipVariableRwModel); + + if (!result.getIsSuccessed()) return result; + + if (StringUtils.isEmpty(equipVariableRwModel.getValue())) return new MesEquipVariableRwResult(false).message("入参缺失必要参数[value]!"); + + Map params = new HashMap<>(); + params.put(MesPcnExtConstWords.VALUE, equipVariableRwModel.getValue()); + params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle()); + params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); + params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId()); + + String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null); + if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class); + else return result.isSuccessed(false).message(String.format("设备数据变量写值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel))); + + } + + private MesEquipVariableRwResult checkBefore(MesEquipVariableRwModel equipVariableRwModel) { + + if (null == equipVariableRwModel) return new MesEquipVariableRwResult(false).message("入参为空!"); + + if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode()) || StringUtils.isEmpty(equipVariableRwModel.getChannel()) || StringUtils.isEmpty(equipVariableRwModel.getEquipId()) || StringUtils.isEmpty(equipVariableRwModel.getClientHandle())) + return new MesEquipVariableRwResult(false).message("入参缺失必要参数,请检查参数[organizeCode][channel][equipId][clientHandle]是否缺失!"); + + if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl())) getRwRequestUrl(equipVariableRwModel); + + if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl())) + return new MesEquipVariableRwResult(false).message(String.format("工厂[%s]缺失系统配置信息[%s]!", equipVariableRwModel.getOrganizeCode(), MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG)); + + return new MesEquipVariableRwResult(true); + + } + + @Override + public MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel) { + + MesEquipVariableRwResult result = checkBefore(equipVariableRwModel); + + if (!result.getIsSuccessed()) return result; + + Map params = new HashMap<>(); + params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle()); + params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); + params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId()); + + String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getReadRequestUrl(), params, null, null); + if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class); + else return result.isSuccessed(false).message(String.format("设备数据变量读值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel))); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java deleted file mode 100644 index b108f55..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/WriteOPCEquipmentServiceImpl.java +++ /dev/null @@ -1,240 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteOPCEquipmentService; -import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -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.util.datatable.DataColumnCollection; -import cn.estsh.i3plus.platform.common.tool.HttpClientTool; -import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.WmsEnumUtil; -import cn.estsh.i3plus.pojo.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesConfig; -import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel; -import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel; -import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.util.ResultBean; -import cn.hutool.json.XML; -import com.alibaba.excel.util.StringUtils; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * @Description : WriteOPCEquipmentServiceImpl - * @Author :gsz - * @Date 2024/5/29 10:48 - * @Modify - **/ -@Slf4j -@Service("WriteOPCEquipmentServiceImpl") -public class WriteOPCEquipmentServiceImpl implements IWriteOPCEquipmentService { - - @Autowired - private IConfigService configService; - - @Override - public ResultBean doOPCEquipment(List> listData,String xmlString) { - - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); -// headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //application/soap+xml;charset=UTF-8 - headers.setContentType(MediaType.APPLICATION_JSON_UTF8); - cn.hutool.json.JSONObject jsonObjectParam = XML.toJSONObject(xmlString); - String content = jsonObjectParam.toString(); - HttpEntity request = new HttpEntity<>(content, headers); - String url = String.format("http://172.28.16.50:8111/WriteOPCEquipmentService" ); - ResponseEntity response = restTemplate.postForEntity(url, request, String.class); - - if (response.getStatusCode().is2xxSuccessful()) { - String bodyJson = response.getBody(); - JSONObject jsonObject = JSON.parseObject(bodyJson); - if ("0" == jsonObject.getString("code")) { - return new ResultBean(WmsEnumUtil.RC_RESPONSE_TIPS.OK.getCodeStatus(), - "OK"); - } else { - throw new ImppBusiException(String.format("Error message【%s】", jsonObject.getString("message"))); - } - } else { - throw new ImppBusiException(String.format("Error Code %s", response.getStatusCode().toString())); - } - } - @Override - public String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception{ - //服务的地址 http://172.28.16.50:8111 - wsUrl="http://172.28.16.50:8111"; - URL url = new URL(wsUrl); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - - conn.setDoInput(true); - conn.setDoOutput(true); - conn.setRequestMethod("POST"); - conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8"); - - //请求体---使用soapui获取 - StringBuffer sb = new StringBuffer(); - sb.append(""); - sb.append(""); - sb.append("http://172.28.16.50:8111/WriteOPCEquipmentService\n"); - sb.append(""); - sb.append(""); - - sb.append(""); - sb.append(""+equipmentId+""); - sb.append(""+channel+""); - sb.append(""+clientHandle+ ""); - sb.append(""+v+""); - sb.append(""); - - sb.append(""); - sb.append(""); - String soap = sb.toString(); - - conn.connect(); - - OutputStream os = conn.getOutputStream(); - os.write(soap.getBytes("UTF-8")); - - InputStream is = conn.getInputStream(); - - byte[] b = new byte[1024]; - int len = 0; - String s = ""; - while ((len = is.read(b)) != -1) { - String ss = new String(b, 0, len, "UTF-8"); - s += ss; - } - - is.close(); - os.close(); - conn.disconnect(); - - return s; - } - - @Override - public MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel) { - MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL); - if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) { - MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL); - } - String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_WRITE_VARIABLE; - Map params = new HashMap<>(); - params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue()); - params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle()); - params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel()); - params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId()); - String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null); - MesOpcLinkReturnModel returnModel = null; - if (!StringUtils.isEmpty(data)) { - returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class); - } else { - log.error("HTTP[{}]调用opcLink写值接口失败", requestUrl); - } - - return returnModel; - } - - @Override - public MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel) { - MesConfig mesConfigByCfgCode = configService.getMesConfigByCfgCode(MesPcnExtConstWords.OPC_LINK_URL); - if (Objects.isNull(mesConfigByCfgCode) || StringUtil.isEmpty(mesConfigByCfgCode.getCfgValue())) { - MesPcnException.throwFlowException("系统参数【%s】未维护",MesPcnExtConstWords.OPC_LINK_URL); - } - String requestUrl = mesConfigByCfgCode.getCfgValue() + MesPcnExtConstWords.OPC_READ_VARIABLE; - Map params = new HashMap<>(); - params.put(MesPcnExtConstWords.VALUE, mesOpcLinkModel.getValue()); - params.put(MesPcnExtConstWords.CLIENT_HANDLE, mesOpcLinkModel.getClientHandle()); - params.put(MesPcnExtConstWords.CHANNEL, mesOpcLinkModel.getChannel()); - params.put(MesPcnExtConstWords.EQUIPMENT_ID, mesOpcLinkModel.getEquipmentId()); - String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, requestUrl, params, null, null); - MesOpcLinkReturnModel returnModel = null; - if (!StringUtils.isEmpty(data)) { - returnModel = JsonUtilTool.decode(data, MesOpcLinkReturnModel.class); - } else { - log.error("HTTP[{}]调用opcLink读取接口失败", requestUrl); - } - - return returnModel; - } - - private String convertListToXml(DataColumnCollection newTable, List> listData, String rootNodeName, String nodeName, - String rootClassName, String nodeClassName) { - if (listData == null || listData.size() == 0) { - throw new RuntimeException("listData is null ! "); - } - - StringBuilder sb = new StringBuilder(); - - if (rootNodeName != null && !rootNodeName.isEmpty() && rootClassName != null && !rootClassName.isEmpty()) { - sb.append(String.format("<%s class=\"%s\">\n", rootNodeName, rootClassName)); - } - - - for (Map row : listData) { - // 子节点的类名可能为空,这种情况下不需要填充类名 - if (StringUtils.isEmpty(nodeClassName)) { - sb.append(String.format("<%s>\n", nodeName)); - } else { - sb.append(String.format("<%s class=\"%s\">\n", nodeName, nodeClassName)); - } - newTable.forEach( s -> - sb.append(String.format("<%s>%s\n", s, row.get(s.getColumnName()), s)) - ); - - sb.append(String.format("\n", nodeName)); - } - - if (rootNodeName != null && !rootNodeName.isEmpty()) { - sb.append(String.format("\n", rootNodeName)); - } - - return sb.toString(); - } -// private HashMap getData(String serviceCode, String xmlPara){ -// HashMap res = new HashMap<>(); -// String endpoint = "http://124.205.248.2:8080/eSales/esales.asmx?WSDL"; -// PostMethod postMethod = new PostMethod(endpoint); -// byte[] b; -// try { -// b = xmlPara.getBytes("utf-8"); -// InputStream is = new ByteArrayInputStream(b,0,b.length); -// RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8"); -// //把Soap请求数据添加到PostMethod中 -// postMethod.setRequestEntity(re); -// -// //生成一个HttpClient对象,并发出postMethod请求 -// HttpClient httpClient = new HttpClient(); -// int statusCode = httpClient.executeMethod(postMethod); -// if(200==statusCode){ -// String getServerData = postMethod.getResponseBodyAsString(); -// //System.out.println("----->"+getServerData); -// //获取返回值状态标识,标识为0:成功;非0:失败 -// res.put("status", "0"); -// res.put("msg", msg); -// } -// } catch (Exception e) { -// res.put("status", "1"); -// res.put("msg", e.toString()); -// e.printStackTrace(); -// } -// return res; -// } -} 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 449fcc5..7b72e9e 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 @@ -108,6 +108,14 @@ public class MesPcnExtConstWords { public static final String CUST_SN = "custSn"; + //设备数据变量读写访问配置 + public static final String EQUIP_VARIABLE_RW_CFG = "EQUIP_VARIABLE_RW_CFG"; + //kepware标识 + public static final String KEPWARE_FLAG_CFG = "KEPWARE_FLAG_CFG"; + //默认URL + public static final String DEFAULT_URL = "DEFAULT_URL"; + //读写API + public static final String RW_API_CFG = "RW_API_CFG"; // 空腔码 public static final String CAVITY_FINISH_CODE = "CAVITY_FINISH_CODE";