From db4c1846a5354bf650ec802013e5427be462169f Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 4 Jun 2024 15:34:08 +0800 Subject: [PATCH 01/17] step --- .../mes/pcn/api/busi/IMesProduceSnExtService.java | 4 -- .../IMesProductionDispatchContextStepService.java | 27 ++++++---- .../serviceimpl/busi/MesProdRuleCfgExtService.java | 10 +++- .../serviceimpl/busi/MesProduceSnExtService.java | 20 +++----- .../step/MesAssemblyScanStepService.java | 1 + .../MesProductionDispatchContextStepService.java | 58 ++++++++++++++------- .../MesProductionProcessContextStepService.java | 1 + .../mes/pcn/pojo/context/MesProdRuleContext.java | 32 +++++++++++- .../pcn/pojo/context/MesProductionPsInContext.java | 59 ++++++++++++++++++++++ .../pojo/context/MesProductionPsOutContext.java | 40 +++++++++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 8 ++- 11 files changed, 210 insertions(+), 50 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java 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 index 625828e..db5b81d 100644 --- 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 @@ -4,14 +4,10 @@ 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 80d84a2..4b0cfda 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,9 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; -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.context.*; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; @@ -139,17 +136,29 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文扫/读信息:装配件条码") void deleteScanAssemblySnContext(StationRequestBean reqBean); + @ApiOperation(value = "获取进料主条码数据信息") + List getProductionPsInContext(StationRequestBean reqBean); + + @ApiOperation(value = "验证进料主条码数据是否存在") + Boolean checkProductionPsInIsExistContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存进料主条码数据", notes = "[JSON]List") + Boolean saveProductionPsInContext(StationRequestBean reqBean, List productionPsInContextList); + + @ApiOperation(value = "删除进料主条码数据") + void deleteProductionPsInContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文产出条码数据信息集合") - List getOutProduceSnDataContext(StationRequestBean reqBean); + List getProductionPsOutContext(StationRequestBean reqBean); @ApiOperation(value = "验证上下文产出条码数据信息集合是否存在") - Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean); + Boolean checkProductionPsOutIsExistContext(StationRequestBean reqBean); - @ApiOperation(value = "保存上下文产出条码数据信息集合", notes = "[JSON]List") - Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List outProduceSnDataList); + @ApiOperation(value = "保存上下文产出条码数据信息集合", notes = "[JSON]List") + Boolean saveProductionPsOutContext(StationRequestBean reqBean, List productionPsOutContextList); @ApiOperation(value = "删除上下文产出条码数据信息集合") - void deleteOutProduceSnDataContext(StationRequestBean reqBean); + void deleteProductionPsOutContext(StationRequestBean reqBean); @ApiOperation(value = "获取上下文产品加工规则数据信息集合") List getProdRuleDataContext(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java index 3f8c0e2..612f2ce 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java @@ -69,11 +69,19 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { 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); + + //outPartNo与outPartNos 带入条件必须互斥 , 此处查询时不作判断 DdlPreparedPack.getStringEqualPack(prodRuleContext.getOutPartNo(), MesPcnExtConstWords.OUT_PART_NO, packBean); + DdlPreparedPack.getInPackList(prodRuleContext.getOutPartNoList(), 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); + else { + //inPartNo与inPartNos 带入条件必须互斥 , 此处查询时不作判断 + DdlPreparedPack.getStringEqualPack(prodRuleContext.getInPartNo(), MesPcnExtConstWords.IN_PART_NO, packBean); + DdlPreparedPack.getInPackList(prodRuleContext.getInPartNoList(), 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); 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 index e256e45..a04dc8f 100644 --- 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 @@ -13,7 +13,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.TreeSet; import java.util.stream.Collectors; @Slf4j @@ -29,12 +32,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(productSnList)) return null; + productSnList = productSnList.size() == 1 ? productSnList : productSnList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + 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); + else DdlPreparedPack.getInPackList(productSnList, 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)); } @@ -43,14 +49,4 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { 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/step/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index 4ec7b6b..b170d6b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -48,6 +48,7 @@ public class MesAssemblyScanStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); + //TODO 先判断上下文当前工序是否全部扫完 if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描装配件条码!"); //扫描信息置空 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 715f499..487f586 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,24 +1,19 @@ 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.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.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.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -312,31 +307,58 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_ASSEMBLY_SN_CONTEXT); } + //获取进料主条码数据信息 + @Override + public List getProductionPsInContext(StationRequestBean reqBean) { + String productionPsInJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_IN_CONTEXT); + return !StringUtils.isEmpty(productionPsInJson) ? JSONObject.parseArray(productionPsInJson, MesProductionPsInContext.class) : null; + } + + //验证上下文进料主条码数据集合是否存在 + @Override + public Boolean checkProductionPsInIsExistContext(StationRequestBean reqBean) { + String productionPsInJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_IN_CONTEXT); + return !StringUtils.isEmpty(productionPsInJson) ? true : false; + } + + //保存上下文进料主条码数据信息集合 [JSON]List + @Override + public Boolean saveProductionPsInContext(StationRequestBean reqBean, List productionPsInContextList) { + if (CollectionUtils.isEmpty(productionPsInContextList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_IN_CONTEXT, JSONObject.toJSONString(productionPsInContextList)); + } + + //删除上下文进料主条码数据信息集合 + @Override + public void deleteProductionPsInContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_IN_CONTEXT); + } + //获取上下文产出条码数据信息集合 @Override - public List getOutProduceSnDataContext(StationRequestBean reqBean) { - String outProduceSnDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT); - return !StringUtils.isEmpty(outProduceSnDataJson) ? JSONObject.parseArray(outProduceSnDataJson, MesProduceSn.class) : null; + public List getProductionPsOutContext(StationRequestBean reqBean) { + String productionPsOutJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_OUT_CONTEXT); + return !StringUtils.isEmpty(productionPsOutJson) ? JSONObject.parseArray(productionPsOutJson, MesProductionPsOutContext.class) : null; } //验证上下文产出条码数据信息集合是否存在 @Override - public Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean) { - String outProduceSnDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT); - return !StringUtils.isEmpty(outProduceSnDataJson) ? true : false; + public Boolean checkProductionPsOutIsExistContext(StationRequestBean reqBean) { + String productionPsOutJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_OUT_CONTEXT); + return !StringUtils.isEmpty(productionPsOutJson) ? true : false; } - //保存上下文产出条码数据信息集合 [JSON]List + //保存上下文产出条码数据信息集合 [JSON]List @Override - public Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List outProduceSnDataList) { - if (CollectionUtils.isEmpty(outProduceSnDataList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT, JSONObject.toJSONString(outProduceSnDataList)); + public Boolean saveProductionPsOutContext(StationRequestBean reqBean, List productionPsOutContextList) { + if (CollectionUtils.isEmpty(productionPsOutContextList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_OUT_CONTEXT, JSONObject.toJSONString(productionPsOutContextList)); } //删除上下文产出条码数据信息集合 @Override - public void deleteOutProduceSnDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.OUT_PRODUCE_SN_DATA_CONTEXT); + public void deleteProductionPsOutContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_PS_OUT_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 5695371..203e6fa 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 @@ -50,6 +50,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl //存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】 @Override public Boolean saveProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { + if (!productionProcessContext.getIsNeedCache()) return true; return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.BASE_DATA_CONTEXT, JSONObject.toJSONString(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 index 448f588..43cc367 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.List; /** - * 生产过程上下文对象-产品加工规则(排序) + * 生产过程上下文对象-产品加工规则 */ @Data public class MesProdRuleContext implements Serializable { @@ -90,6 +90,13 @@ public class MesProdRuleContext implements Serializable { @ApiParam(name = "子箱设备信号点") private String packageEquSignal; + //----------仅作为查询条件冗余------------- + @ApiParam(name = "进料零件号") + private String inPartNos; + + @ApiParam(name = "产成零件号") + private String outPartNos; + public MesProdRuleContext() {} public MesProdRuleContext(String organizeCode) { @@ -133,6 +140,28 @@ public class MesProdRuleContext implements Serializable { return this; } + public MesProdRuleContext inPartNos(List inPartNoList) { + if (CollectionUtils.isEmpty(inPartNoList)) return this; + if (inPartNoList.size() > 1) this.inPartNos = JSONObject.toJSONString(inPartNoList); + else this.inPartNo = inPartNoList.get(0); + return this; + } + + public MesProdRuleContext outPartNos(List outPartNoList) { + if (CollectionUtils.isEmpty(outPartNoList)) return this; + if (outPartNoList.size() > 1) this.outPartNos = JSONObject.toJSONString(outPartNoList); + else this.outPartNo = outPartNoList.get(0); + return this; + } + + public List getInPartNoList() { + return !StringUtils.isEmpty(this.inPartNos) ? JSONObject.parseObject(this.inPartNos, List.class) : null; + } + + public List getOutPartNoList() { + return !StringUtils.isEmpty(this.outPartNos) ? JSONObject.parseObject(this.outPartNos, List.class) : null; + } + public MesProdRuleContext equipmentCode(String equipmentCode) { this.equipmentCode = equipmentCode; return this; @@ -143,6 +172,7 @@ public class MesProdRuleContext implements Serializable { return this; } + //根据生产线类型返回装配件数据集合【向上转型】 public List getAssemblyDataContext(MesWorkCenter workCenter) { if (StringUtils.isEmpty(this.assemblyDataJson)) return null; List productionAssemblyContextList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java new file mode 100644 index 0000000..c18cad2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * 生产过程上下文对象-零件条码(非排序进料零件条码/排序工单号) + */ +@Data +public class MesProductionPsInContext implements Serializable { + + private static final long serialVersionUID = 5562937531822977296L; + + @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") + private String foreignKey; + + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("零件条码ID") + private Long id; + + @ApiParam("非排序进料零件条码/排序工单号") + private String productSn; + + @ApiParam("过程条码") + private String serialNumber; + + @ApiParam("客户条码") + private String custSn; + + @ApiParam("零件号") + private String partNo; + + @ApiParam("零件名称") + private String partName; + + //默认否 + @ApiParam("是否顺序防错") + private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + + //默认否 + @ApiParam(name = "是否前道工艺防错") + private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + + //默认未验证 + @ApiParam("顺序防错结果") + private Integer checkSeqResult = MesPcnExtConstWords.ZERO; + + //默认未验证 + @ApiParam(name = "前道工艺防错结果") + private Integer checkCraftResult = MesPcnExtConstWords.ZERO; + + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java new file mode 100644 index 0000000..fb9d355 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * 生产过程上下文对象-零件条码(非排序产出零件条码) + */ +@Data +public class MesProductionPsOutContext implements Serializable { + + private static final long serialVersionUID = 5562937531822977296L; + + @ApiParam(name = "数据关联键 非排序:snowflakeId") + private String foreignKey; + + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("零件条码ID") + private Long id; + + @ApiParam("非排序产出零件条码") + private String productSn; + + @ApiParam("非排序产出零件过程条码") + private String serialNumber; + + @ApiParam("非排序产出客户条码") + private String custSn; + + @ApiParam("零件号") + private String partNo; + + @ApiParam("零件名称") + private String partName; + +} 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 29eefe3..32e993c 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 @@ -185,12 +185,10 @@ public class MesPcnExtConstWords { public static final String SCAN_ASSEMBLY_SN_CONTEXT = "SCAN_ASSEMBLY_SN_CONTEXT"; // 上下文: 产品加工规则数据信息 public static final String PROD_RULE_DATA_CONTEXT = "PROD_RULE_DATA_CONTEXT"; + // 上下文: 进料条码数据信息 + public static final String PRODUCTION_PS_IN_CONTEXT = "PRODUCTION_PS_IN_CONTEXT"; // 上下文: 产出条码数据信息 - public static final String OUT_PRODUCE_SN_DATA_CONTEXT = "OUT_PRODUCE_SN_DATA_CONTEXT"; - // 上下文: 装配件清单 - public static final String ASSEMBLY_DATA_CONTEXT = "ASSEMBLY_DATA_CONTEXT"; - // 上下文: 非排序产品加工规则信息 - public static final String PROD_RULE_NOSORT_DATA_CONTEXT = "PROD_RULE_NOSORT_DATA_CONTEXT"; + public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT"; /*** * OPC From 2c5140c1b815b823e5c16ada3bade49e0a68488a Mon Sep 17 00:00:00 2001 From: gsz Date: Tue, 4 Jun 2024 17:26:23 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=8C=96=E6=A3=80?= =?UTF-8?q?=E9=AA=8C-=E8=BD=AC=E6=AD=A3=E5=B8=B8=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E8=B4=A3=E4=BB=BB=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesInputDefectRecordController.java | 2 +- .../controller/busi/MesNcProcessingController.java | 4 +- .../src/main/resources/application-71.properties | 200 +++++++++++++++++++++ 3 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java index 7f7d939..166684e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java @@ -68,7 +68,7 @@ public class MesInputDefectRecordController { try { if (StringUtils.isEmpty(model.getSn()) && - (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLot()) || StringUtils.isEmpty(model.getQty()))) { + (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLot()) || StringUtils.isEmpty(model.getQty()) || model.getQty() == 0)) { throw new ImppBusiException("条码为空或零件号+批次+数量为空"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java index c4d2048..b6f21c3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java @@ -85,7 +85,9 @@ public class MesNcProcessingController { // 数据校验 ValidatorBean.checkNotNull(model.getPartInspection(), "单据不能为空"); ValidatorBean.checkNotNull(model.getPartInspectionDetailList(), "单据明细不能为空"); - ValidatorBean.checkNotNull(model.getPerson(), "责任人不能为空"); + if (model.getType() != 10) { + ValidatorBean.checkNotNull(model.getPerson(), "责任人不能为空"); + } String description = MesExtEnumUtil.NC_TYPE.valueOfDescription(model.getType()); if (StringUtils.isEmpty(description)) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties new file mode 100644 index 0000000..1f61c78 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties @@ -0,0 +1,200 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8350 +#\u672C\u673Aip +impp.server.ip=10.196.77.226 +#impp.server.ip=192.168.0.105 +#andon ip +impp.andon.url=http://10.195.88.71:8750 +#ptl-pcn ip +impp.ptl-pcn.url=http://10.195.88.71:8750 +#pcn plc\u5168\u5C40\u4E1A\u52A1\u5F00\u5173 1.yfai-hnc +mes.plc.callback.open=123 +#console\u63A7\u5236\u53F0\u670D\u52A1\uFF08zipkin\u8FFD\u8E2A\u5168\u8DEF\u5F84\uFF09 +impp.console.ip=http://10.195.88.71:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=22 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=22 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +mes.ws=ws://10.197.190.121:8300/ws/pcn-regist/ +#mes-pcn.ws.path=ws://10.197.176.77:8350 +mes-pcn.ws.path=ws://10.196.77.226:8350 +pcn.code=PCN-U7 +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=false +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fileserver=false +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=true +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=true +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#redisIP +redis.hostName=10.195.88.71 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=Admin123! +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.vhost=/ +spring.rabbitmq.host=10.195.88.71 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.pcn.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes-pcn/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes-pcn/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes-pcn/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6241\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6241\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server +eureka.instance.prefer-ip-address=false +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6241\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2 +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=10000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=10000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 + +# mysql +impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.write.datasource.username=root +impp.write.datasource.password=estsh123 +impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.read.datasource.username=root +impp.read.datasource.password=estsh123 +#\u4E2D\u822A\u6570\u636E\u6E90 +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=estsh123 +impp.schedule.datasource.max-connections=20 +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.min-idle=10 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +#spring.datasource.validationQuery=SELECT 1 +##Sql-server## +spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy +#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 +# \u811A\u672C\u5728\u7EBF\u8C03\u8BD5\u751F\u6210\u7684\u65E5\u5FD7\u6587\u4EF6\u76F8\u5BF9\u8DEF\u5F84\uFF0Cclasspath:xx +pcn.script.logger.path=pluginlogs +pcn.schedule.job=false + +server.tomcat.max-threads=300 +server.tomcat.max-connections=300 From 596f6490d89d689d11eac5a59a361b3a10091e5c Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 5 Jun 2024 01:15:38 +0800 Subject: [PATCH 03/17] step --- .../busi/IMesNumberRuleMatchDispatchService.java | 15 ++ .../pcn/api/busi/IMesProdRuleCfgExtService.java | 5 +- .../serviceimpl/busi/MesProdRuleCfgExtService.java | 39 ++++- .../MesNumberRuleMatchDispatchService.java | 42 +++++ ...MesNumberRuleMatchRegularExpressionService.java | 35 ++++ .../step/MesAssemblyShowNosortStepService.java | 190 +++++++++++++-------- .../pcn/pojo/context/MesAssemblyShowContext.java | 2 +- .../mes/pcn/pojo/context/MesProdRuleContext.java | 30 ++-- .../pcn/pojo/context/MesProductionPartContext.java | 15 +- .../pcn/pojo/context/MesProductionPsInContext.java | 9 +- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 + 11 files changed, 276 insertions(+), 108 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNumberRuleMatchDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNumberRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNumberRuleMatchDispatchService.java new file mode 100644 index 0000000..c960e2c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNumberRuleMatchDispatchService.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +public interface IMesNumberRuleMatchDispatchService { + + @ApiOperation(value = "编码规则匹配") + default List matchNumberRule(String organizeCode, String sn, List numberRuleList) { return numberRuleList; } + + @ApiOperation(value = "编码规则匹配") + default Boolean matchNumberRule(String organizeCode, String sn, Object... params) { return true; } + +} 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 b6f38a1..2a394d7 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 @@ -15,7 +15,10 @@ public interface IMesProdRuleCfgExtService { @ApiOperation(value = "【非排序线】获取产品加工规则") List getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext); + @ApiOperation(value = "【非排序线】获取产品加工规则") + List getProdRuleNosortCfgList(MesProdRuleContext... prodRuleContext); + @ApiOperation(value = "【非排序线】获取产品加工规则对应的装配件信息") - MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext); + MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, Integer foreignKey); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java index 612f2ce..291bc7e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java @@ -45,7 +45,11 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { //实例化排序线加工规则与装配件数据记录 List prodRuleContextList = new ArrayList<>(); - productionPartContextList.forEach(o -> prodRuleContextList.add(createSortProdRuleContext(o, assemblyDataMap))); + + //实例化排序线加工规则与装配件数据记录 + for (int i = 0; i < productionPartContextList.size(); i ++) { + prodRuleContextList.add(createSortProdRuleContext(productionPartContextList.get(i).foreignKey(i + 1), assemblyDataMap)); + } return prodRuleContextList; @@ -69,30 +73,47 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { 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); //outPartNo与outPartNos 带入条件必须互斥 , 此处查询时不作判断 DdlPreparedPack.getStringEqualPack(prodRuleContext.getOutPartNo(), MesPcnExtConstWords.OUT_PART_NO, packBean); DdlPreparedPack.getInPackList(prodRuleContext.getOutPartNoList(), MesPcnExtConstWords.OUT_PART_NO, packBean); - if (prodRuleContext.getInPartNoIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO, packBean); - else { + if (prodRuleContext.getInPartIsEmpty()) { + //进料为NULL + DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO, packBean); + DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean); + } else { //inPartNo与inPartNos 带入条件必须互斥 , 此处查询时不作判断 DdlPreparedPack.getStringEqualPack(prodRuleContext.getInPartNo(), MesPcnExtConstWords.IN_PART_NO, packBean); DdlPreparedPack.getInPackList(prodRuleContext.getInPartNoList(), MesPcnExtConstWords.IN_PART_NO, packBean); + //进料规则有值 + if (prodRuleContext.getInPartRuleIsNotEmpty()) DdlPreparedPack.getIsNotNull(MesPcnExtConstWords.IN_PART_NO_RULE, 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 List getProdRuleNosortCfgList(MesProdRuleContext... prodRuleContexts) { + if (null == prodRuleContexts) return null; + List prodRuleNosortCfgList = null; + for (MesProdRuleContext prodRuleContext : prodRuleContexts) { + if (null == prodRuleContext) continue; + List itemList = getProdRuleNosortCfgList(prodRuleContext); + if (CollectionUtils.isEmpty(itemList)) continue; + if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) prodRuleNosortCfgList = new ArrayList<>(); + prodRuleNosortCfgList.addAll(itemList); + } + return prodRuleNosortCfgList; } //【非排序线】获取产品加工规则对应的装配件信息 @Override - public MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext) { - MesProdRuleContext prodRuleContext = new MesProdRuleContext().foreignKey(productionPartContext.getForeignKey()).pid(prodRuleNosortCfg.getId()); + public MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, Integer foreignKey) { + MesProdRuleContext prodRuleContext = new MesProdRuleContext().foreignKey(foreignKey).pid(prodRuleNosortCfg.getId()); BeanUtils.copyProperties(prodRuleNosortCfg, prodRuleContext); //获取非排序装配件配置信息 if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == prodRuleContext.getIsHasBind()) prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblyNosortContextList(prodRuleContext.getOrganizeCode(), prodRuleContext.getPid())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchDispatchService.java new file mode 100644 index 0000000..5be46a7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchDispatchService.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Primary +@Service +public class MesNumberRuleMatchDispatchService implements IMesNumberRuleMatchDispatchService { + + @Override + public List matchNumberRule(String organizeCode, String sn, List numberRuleList) { + + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn) || CollectionUtils.isEmpty(numberRuleList)) return null; + + List resultList = new ArrayList<>(); + + if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService", ((MesProdRuleNosortCfg) o).getInPartNoRule())); + + return resultList; + + } + + private void matchNumberRule(String organizeCode, String sn, List resultList, Object o, String strategyClass, Object... params) { + + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn) || StringUtils.isEmpty(strategyClass) || null == o) return; + + Boolean result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchNumberRule(organizeCode, sn, o, params); + + if (result) resultList.add(o); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java new file mode 100644 index 0000000..7035f6b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java @@ -0,0 +1,35 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 正则表达式匹配 + */ +@Slf4j +@Service +public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRuleMatchDispatchService { + + @Override + public Boolean matchNumberRule(String organizeCode, String sn, Object... params) { + + String matchRule = (String) params[0]; + + + return true; + + } + + public static void main(String[] args) { + Pattern pattern = Pattern.compile("12345*54321"); + Matcher matcher = pattern.matcher("12345*54321"); + + while (matcher.find()) { + System.out.println(matcher.group()); + } + } +} 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 df35d88..4f4a421 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,13 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; 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.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.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; @@ -19,9 +20,7 @@ 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.*; import java.util.stream.Collectors; /** @@ -42,7 +41,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { private IMesProdRuleCfgExtService prodRuleCfgExtService; @Autowired - private IMesProduceSnExtService produceSnExtService; + private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService; @Override public StepResult execute(StationRequestBean reqBean) { @@ -69,134 +68,183 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //获取上下文产出零件数据信息集合 List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); - //获取上下文读/扫主条码信息集合 - List scanProductSnList = productionDispatchContextStepService.getScanProductSnContext(reqBean); + //获取上下文进料零件条码信息集合 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); - //根据现有数据【产出零件数据】【读/扫主条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 + //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); - doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList); - - + doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); 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; + List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { + //没有【产出零件数据】【进料零件条码信息】,则直接跳过 【当前场景是直接匹配装配件规则来获取产品加工规则】 + if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(productionPsInContextList)) return; //根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) - if (CollectionUtils.isEmpty(productionPartContextList)) doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, scanProductSnList); + if (CollectionUtils.isEmpty(productionPartContextList)) doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPsInContextList); //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 - else doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList); + else doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); } - //根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 private void doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, - List prodRuleContextList, List productionPartContextList, List scanProductSnList) { + List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { //加工规则的数据已与产出零件的数量一致 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)); + //拿到当前最大的foreignKey + Optional maxForeignKeyOptional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPartContext::getForeignKey)); + Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO; - //上下文当前存在【读/扫主条码信息】, 后面匹配成功的信息会从scanProductSnList中remove掉,所以需要一个标志判断循环是否结束 - Boolean isExistPs = CollectionUtils.isEmpty(scanProductSnList) ? false : true; + //搜集未匹配规则的产出零件 + List outPartNoList = productionPartContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); - for (MesProductionPartContext productionPartContext : productionPartContextList) { + //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + if (CollectionUtils.isEmpty(productionPsInContextList)) doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey); + //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 + else doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey); - if (null == productionPartContext) continue; + } - if (StringUtils.isEmpty(productionPartContext.getForeignKey())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("上下文中的产出零件信息数据异常,缺失数据关联键! 数据详情:[%s]", JSONObject.toJSONString(productionPartContext))); + //没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) + private void doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, + List prodRuleContextList, List productionPartContextList, List outPartNoList, Integer foreignKey) { - //当前上下文中的【读/扫主条码信息】已经全部匹配完成 - if (isExistPs && CollectionUtils.isEmpty(scanProductSnList)) break; + //【非排序线】获取产品加工规则 ; 条件进料[NULL] + List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList).inPartIsEmpty()); + //根据产出零件分组数据 + Map> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList); - //当前产出零件已获取过加工规则 - if (!CollectionUtils.isEmpty(prodRuleContextMap) && prodRuleContextMap.containsKey(productionPartContext.getForeignKey())) continue; + for (MesProductionPartContext productionPartContext : productionPartContextList) { - //根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则) - if (CollectionUtils.isEmpty(scanProductSnList)) doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext); - //根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据 - else doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext, scanProductSnList); + //foreignKey有值代表已经匹配过产品加工规则 + if (null == productionPartContext || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; - } + List filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null; + if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件[空]进料零件规则[空]的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo())); + //【非排序线】获取产品加工规则对应的装配件信息 + if (prodRuleNosortCfgList.size() == 1) prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(prodRuleNosortCfgList.get(0), productionPartContext.foreignKey(foreignKey += 1).getForeignKey())); - } + if (prodRuleNosortCfgList.size() > 1) this.sendMessage(reqBean, resultBean, String.format( + "显示装配件匹配非排序产品加工规则[%s]条,直接跳过,后续通过装配件规则匹配加工规则,数据源:[%s]!", prodRuleNosortCfgList.size(), JSONObject.toJSONString(productionPartContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - //根据进料[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) { + List prodRuleContextList, List productionPsInContextList) { - //查询【读/扫主条码信息】 - Map produceSnDataMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), scanProductSnList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())); + //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回 + List prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, null); + //拿到当前最大的foreignKey + Optional maxForeignKeyOptional = productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPsInContext::getForeignKey)); + Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO; - for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) { + for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { - if (null == equipVariableCollectContext) continue; + //foreignKey有值代表已经匹配过产品加工规则 + if (null == productionPsInContext || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue; - MesProduceSn produceSnData = CollectionUtils.isEmpty(produceSnDataMap) ? null : produceSnDataMap.get(equipVariableCollectContext.getEquipVariableValue()); + List filterList; + //搜集进料零件号匹配的产品加工规则 + if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) filterList = filterProdRuleNosortCfgList(prodRuleNosortCfgList, productionPsInContext.getPartNo()); + //进料零件条码匹配进料零件规则 + else filterList = (List) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(prodRuleNosortCfgList)); - if (null != produceSnData) {} - else { - - } + if (CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]进料零件%s的配置信息", + cellEquipContext.getEquipmentCode(), !StringUtils.isEmpty(productionPsInContext.getPartNo()) ? String.format("号匹配[%s]", productionPsInContext.getPartNo()) : String.format("规则匹配[%s]", productionPsInContext.getProductSn()))); + //【非排序线】获取产品加工规则对应的装配件信息 + if (filterList.size() == 1) prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(filterList.get(0), productionPsInContext.foreignKey(foreignKey += 1).getForeignKey())); + if (filterList.size() > 1) this.sendMessage(reqBean, resultBean, String.format( + "显示装配件匹配非排序产品加工规则[%s]条,直接跳过,后续通过装配件规则匹配加工规则,数据源:[%s]!", filterList.size(), JSONObject.toJSONString(productionPsInContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); } - //【非排序线】获取产品加工规则 - 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 List getProdRuleNosortCfgList(StationRequestBean reqBean, MesCellEquipContext cellEquipContext, List productionPsInContextList, List outPartNoList) { + //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件可能携带产出零件 + List inPartNoList = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList()); + Optional optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && StringUtils.isEmpty(o.getPartNo()))).findFirst(); + List prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList( + !CollectionUtils.isEmpty(inPartNoList) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartNos(inPartNoList).outPartNos(outPartNoList) : null, + (null != optional && optional.isPresent()) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartRuleIsNotEmpty().outPartNos(outPartNoList) : null); + return prodRuleNosortCfgList; + } + //搜集进料零件号匹配的产品加工规则 + private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList, String partNo) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList()); } + //搜集进料零件规则有值的产品加工规则 + private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNoRule()))).collect(Collectors.toList()); + } + //根据产出零件分组数据 + private Map> groupProdRuleNosortCfgList(List prodRuleNosortCfgList) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo)); + } - //根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据 + //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 private void doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, - List prodRuleContextList, MesProductionPartContext productionPartContext, List scanProductSnList) { + List prodRuleContextList, List productionPartContextList, List productionPsInContextList, List outPartNoList, Integer foreignKey) { - for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) { + //【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件携带产出零件 + List prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, outPartNoList); + //根据产出零件分组数据 + Map> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList); - if (null == equipVariableCollectContext) continue; + for (MesProductionPartContext productionPartContext : productionPartContextList) { - + //foreignKey有值代表已经匹配过产品加工规则 + if (null == productionPartContext || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; + //获取匹配产出零件的所有加工规则 + List outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null; + MesProdRuleNosortCfg filter = null; - } + for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { - } + //foreignKey有值代表已经匹配过产品加工规则 + if (null == productionPsInContext || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue; + + List innerfilterList; + //搜集进料零件号匹配的产品加工规则 + if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) innerfilterList = filterProdRuleNosortCfgList(outPartNoProdRuleList, productionPsInContext.getPartNo()); + //进料零件条码匹配进料零件规则 + else innerfilterList = (List) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(outPartNoProdRuleList)); + if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue; + productionPartContext.foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()); + filter = innerfilterList.get(0); + break; + } + + if (null == filter) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]匹配任意一个主条码的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartName())); + + //【非排序线】获取产品加工规则对应的装配件信息 + prodRuleContextList.add(prodRuleCfgExtService.getProdRuleContext(filter, productionPartContext.getForeignKey())); + + } + + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java index d30352c..87a7266 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java @@ -38,7 +38,7 @@ public class MesAssemblyShowContext implements Serializable { private Integer assemblyStatus; @ApiParam("装配件条码确认方式") - private String matchType; + private Integer matchType; @ApiParam("装配零件状态") private String assemblyStatusName; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java index 43cc367..ad72378 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -11,6 +11,7 @@ import org.springframework.util.StringUtils; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 生产过程上下文对象-产品加工规则 @@ -23,8 +24,8 @@ public class MesProdRuleContext implements Serializable { @ApiParam("组织代码") public String organizeCode; - @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") - private String foreignKey; + @ApiParam(name = "数据关联键") + private Integer foreignKey; @ApiParam("装配件绑定清单 [JSON]List") public String assemblyDataJson; @@ -45,12 +46,6 @@ public class MesProdRuleContext implements Serializable { @ApiParam(name = "读/扫主条码信息(内制件/外协件),不一定有值") private String productSn; - @ApiParam(name = "进料零件号是否为空") - private Boolean inPartNoIsEmpty = false; - - @ApiParam(name = "进料零件规则是否为空") - private Boolean inPartNoRuleIsEmpty = false; - @ApiParam("非排序产品加工规则ID") public Long pid; @@ -91,6 +86,13 @@ public class MesProdRuleContext implements Serializable { private String packageEquSignal; //----------仅作为查询条件冗余------------- + + @ApiParam(name = "进料零件号与规则是否均为空") + private Boolean inPartIsEmpty = false; + + @ApiParam(name = "进料规则是否有值") + private Boolean inPartRuleIsNotEmpty = false; + @ApiParam(name = "进料零件号") private String inPartNos; @@ -110,18 +112,18 @@ public class MesProdRuleContext implements Serializable { this.processCode = processCode; } - public MesProdRuleContext foreignKey(String foreignKey) { + public MesProdRuleContext foreignKey(Integer foreignKey) { this.foreignKey = foreignKey; return this; } - public MesProdRuleContext inPartNoIsEmpty() { - this.inPartNoIsEmpty = true; + public MesProdRuleContext inPartIsEmpty() { + this.inPartIsEmpty = true; return this; } - public MesProdRuleContext inPartNoRuleIsEmpty() { - this.inPartNoRuleIsEmpty = true; + public MesProdRuleContext inPartRuleIsNotEmpty() { + this.inPartRuleIsNotEmpty = true; return this; } @@ -142,6 +144,7 @@ public class MesProdRuleContext implements Serializable { public MesProdRuleContext inPartNos(List inPartNoList) { if (CollectionUtils.isEmpty(inPartNoList)) return this; + inPartNoList = inPartNoList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); if (inPartNoList.size() > 1) this.inPartNos = JSONObject.toJSONString(inPartNoList); else this.inPartNo = inPartNoList.get(0); return this; @@ -149,6 +152,7 @@ public class MesProdRuleContext implements Serializable { public MesProdRuleContext outPartNos(List outPartNoList) { if (CollectionUtils.isEmpty(outPartNoList)) return this; + outPartNoList = outPartNoList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); if (outPartNoList.size() > 1) this.outPartNos = JSONObject.toJSONString(outPartNoList); else this.outPartNo = outPartNoList.get(0); return 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 index a173ff9..15af52b 100644 --- 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 @@ -15,8 +15,8 @@ public class MesProductionPartContext implements Serializable { private static final long serialVersionUID = 5562937531822977296L; - @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") - private String foreignKey; + @ApiParam(name = "数据关联键") + private Integer foreignKey; @ApiParam("组织代码") private String organizeCode; @@ -41,18 +41,11 @@ public class MesProductionPartContext implements Serializable { 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 + "腔顺序号"; + public MesProductionPartContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java index c18cad2..0b5394c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -13,10 +13,10 @@ import java.io.Serializable; @Data public class MesProductionPsInContext implements Serializable { - private static final long serialVersionUID = 5562937531822977296L; + private static final long serialVersionUID = 4337949265011880288L; @ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId") - private String foreignKey; + private Integer foreignKey; @ApiParam("组织代码") private String organizeCode; @@ -55,5 +55,10 @@ public class MesProductionPsInContext implements Serializable { @ApiParam(name = "前道工艺防错结果") private Integer checkCraftResult = MesPcnExtConstWords.ZERO; + public MesProductionPsInContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; + return this; + } + } 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 32e993c..a90af51 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 @@ -130,6 +130,8 @@ public class MesPcnExtConstWords { // 最大重试次数[工步参数] public static final Integer MAX_RETRY_TIMES_DEFAULT = 10; + // 未知腔数[工位参数] + public static final String CAVITY_UNKNOWN_CFG = "CAVITY_UNKNOWN_CFG"; // 0 From c2088d7828e7914ec3a4823a29bb5f8e6fb3a5bf Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 5 Jun 2024 10:10:25 +0800 Subject: [PATCH 04/17] step --- .../IMesProductionDispatchContextStepService.java | 22 +++++ ...MesNumberRuleMatchRegularExpressionService.java | 10 -- .../step/MesAssemblyShowNosortStepService.java | 110 ++++++++++++++++++--- .../step/MesAssemblyShowSortStepService.java | 2 + .../MesProductionDispatchContextStepService.java | 43 ++++++++ 5 files changed, 161 insertions(+), 26 deletions(-) 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 4b0cfda..b91fd95 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 @@ -172,4 +172,26 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产品加工规则信息集合") void deleteProdRuleDataContext(StationRequestBean reqBean); + + + + + + + @Deprecated + @ApiOperation(value = "获取上下文产出条码数据信息集合") + List getOutProduceSnDataContext(StationRequestBean reqBean); + + @Deprecated + @ApiOperation(value = "验证上下文产出条码数据信息集合是否存在") + Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean); + + @Deprecated + @ApiOperation(value = "保存上下文产出条码数据信息集合", notes = "[JSON]List") + Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List outProduceSnDataList); + + @Deprecated + @ApiOperation(value = "删除上下文产出条码数据信息集合") + void deleteOutProduceSnDataContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java index 7035f6b..1ae4b48 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchRegularExpressionService.java @@ -4,9 +4,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * 正则表达式匹配 */ @@ -24,12 +21,5 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul } - public static void main(String[] args) { - Pattern pattern = Pattern.compile("12345*54321"); - Matcher matcher = pattern.matcher("12345*54321"); - while (matcher.find()) { - System.out.println(matcher.group()); - } - } } 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 4f4a421..f64eda7 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 @@ -7,14 +7,18 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepServ 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.PojoAttrUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; 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 com.alibaba.fastjson.JSONObject; 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; @@ -73,10 +77,16 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); + Integer initSize = prodRuleContextList.size(); + doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); + if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + + //显示装配件信息 + showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList); - return stepResult; + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "装配件扫描项已查询完毕,请查看!"); } private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, @@ -183,21 +193,6 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { return prodRuleNosortCfgList; } - //搜集进料零件号匹配的产品加工规则 - private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList, String partNo) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList()); - } - - //搜集进料零件规则有值的产品加工规则 - private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNoRule()))).collect(Collectors.toList()); - } - - //根据产出零件分组数据 - private Map> groupProdRuleNosortCfgList(List prodRuleNosortCfgList) { - return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo)); - } - //存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 private void doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList, List productionPsInContextList, List outPartNoList, Integer foreignKey) { @@ -247,4 +242,87 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } + //搜集进料零件号匹配的产品加工规则 + private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList, String partNo) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList()); + } + + //搜集进料零件规则有值的产品加工规则 + private List filterProdRuleNosortCfgList(List prodRuleNosortCfgList) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNoRule()))).collect(Collectors.toList()); + } + + //根据产出零件分组数据 + private Map> groupProdRuleNosortCfgList(List prodRuleNosortCfgList) { + return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo)); + } + + //显示装配件信息 + 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(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { + if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; + List assemblyShowContextList = new ArrayList<>(); + 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 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; + } + + //装配件清单列表标题 + 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/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index 2cdd15a..6a802f8 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 @@ -74,6 +74,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); + productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!"); } 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 487f586..85ddecb 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 @@ -8,6 +8,7 @@ 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.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -388,4 +389,46 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); } + + + + + + + + + + + + @Deprecated + //获取上下文产出条码数据信息集合 + @Override + public List getOutProduceSnDataContext(StationRequestBean reqBean) { + String outProduceSnDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); + return !StringUtils.isEmpty(outProduceSnDataJson) ? JSONObject.parseArray(outProduceSnDataJson, MesProduceSn.class) : null; + } + + @Deprecated + //验证上下文产出条码数据信息集合是否存在 + @Override + public Boolean checkOutProduceSnDataIsExistContext(StationRequestBean reqBean) { + String outProduceSnDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); + return !StringUtils.isEmpty(outProduceSnDataJson) ? true : false; + } + + @Deprecated + //保存上下文产出条码数据信息集合 [JSON]List + @Override + public Boolean saveOutProduceSnDataContext(StationRequestBean reqBean, List outProduceSnDataList) { + if (CollectionUtils.isEmpty(outProduceSnDataList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT", JSONObject.toJSONString(outProduceSnDataList)); + } + + @Deprecated + //删除上下文产出条码数据信息集合 + @Override + public void deleteOutProduceSnDataContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); + } + } From 208d876e29d40ea5dbcdd263b0094a9ab1db4854 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 5 Jun 2024 11:17:59 +0800 Subject: [PATCH 05/17] step --- .../step/MesAssemblyShowNosortStepService.java | 28 +++++++++++++++------- .../pcn/pojo/context/MesAssemblyShowContext.java | 3 +++ 2 files changed, 22 insertions(+), 9 deletions(-) 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 f64eda7..7822b38 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 @@ -84,7 +84,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); //显示装配件信息 - showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList); + showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "装配件扫描项已查询完毕,请查看!"); } @@ -258,7 +258,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //显示装配件信息 - private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList) { + private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList) { + + Map productionPartMap = productionPartContextList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); List attrBeanList = null; @@ -266,12 +268,14 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; + String workOrderNo = getWorkOrderNo(productionPartMap, prodRuleContext.getForeignKey()); + //封装匹配当前设备的装配件信息 - List assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter)); + List assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter), prodRuleContext, workOrderNo); if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; //装配件清单列表标题 - if (CollectionUtils.isEmpty(attrBeanList)) attrBeanList = dataAttrList(); + if (CollectionUtils.isEmpty(attrBeanList)) attrBeanList = dataAttrList(workOrderNo); //封装多表格 resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList)); @@ -287,22 +291,28 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } + private String getWorkOrderNo(Map productionPartMap, Integer foreignKey) { + return (!CollectionUtils.isEmpty(productionPartMap) && productionPartMap.containsKey(foreignKey)) ? productionPartMap.get(foreignKey).getWorkOrderNo() : null; + } + //封装匹配当前设备的装配件信息 - private List getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList) { + private List getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List productionAssemblyContextList, MesProdRuleContext prodRuleContext, String workOrderNo) { if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null; List assemblyShowContextList = new ArrayList<>(); for (MesProductionAssemblyContext item : productionAssemblyContextList) { if (null == item) continue; - assemblyShowContextList.add(assemblyShowContext(item)); + assemblyShowContextList.add(assemblyShowContext(item, prodRuleContext, workOrderNo)); } assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList()); return assemblyShowContextList; } //封装装配件信息 - private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) { + private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o, MesProdRuleContext prodRuleContext, String workOrderNo) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); BeanUtils.copyProperties(o, assemblyShowContext); + if (!StringUtils.isEmpty(workOrderNo)) assemblyShowContext.setWorkOrderNo(workOrderNo); + assemblyShowContext.setPartNo(prodRuleContext.getOutPartNo()); 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()); @@ -313,10 +323,10 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //装配件清单列表标题 - private List dataAttrList() { + private List dataAttrList(String workOrderNo) { List attrBeanList = new ArrayList<>(); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号"); + if (!StringUtils.isEmpty(workOrderNo)) 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, "原料名称"); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java index 87a7266..784417e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java @@ -13,6 +13,9 @@ public class MesAssemblyShowContext implements Serializable { private static final long serialVersionUID = -3650546953572889323L; + @ApiParam("生产工单号") + private String workOrderNo; + @ApiParam("零件编码") private String partNo; From d09ff666d1ebc0103494965aaec38628d9a6f7ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Wed, 5 Jun 2024 13:25:13 +0800 Subject: [PATCH 06/17] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../station/MesProductionNoSortModuleService.java | 58 +++----------- .../step/MesMouldRecordGenerateStepService.java | 2 + .../MesProductResultErrorHandleStepService.java | 90 ++++++++++++++++++++++ .../MesProductionReocrdGenerateStepService.java | 10 ++- .../step/MesSaveProcessResultStepService.java | 81 +++++++++++++++++++ 5 files changed, 192 insertions(+), 49 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index eff2f63..bd0ef23 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; +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.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; @@ -29,12 +30,18 @@ public class MesProductionNoSortModuleService extends BaseModuleService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + @Override public void init(StationRequestBean reqBean) { /** * 工单号 和 分组 */ - StationResultBean resultBean = getStationResultBean(reqBean); + List> moduleContentContext = mesProductionDispatchContextStepService.getModuleContentContext(reqBean); + + + StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext); StationResultBean resultBean1 = getStationResultBean1(reqBean); @@ -44,62 +51,17 @@ public class MesProductionNoSortModuleService extends BaseModuleService { this.sendMessage(reqBean, resultBean); - - - - this.sendMessage(reqBean, resultBean); } - private StationResultBean getStationResultBean(StationRequestBean reqBean) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - List> stationKvBeansList = new ArrayList<>(); - List stationKvBeans = new ArrayList<>(); - StationKvBean stationKvBean = new StationKvBean(); - stationKvBean.setKey("orderNo"); - stationKvBean.setName("工单号"); - stationKvBean.setValue("11111"); - stationKvBeans.add(stationKvBean); - - StationKvBean stationKvBean1 = new StationKvBean(); - stationKvBean1.setKey("partNo"); - stationKvBean1.setName("零件号"); - stationKvBean1.setValue("111"); - stationKvBeans.add(stationKvBean1); - - StationKvBean stationKvBean2 = new StationKvBean(); - stationKvBean2.setKey("count"); - stationKvBean2.setName("单数"); - stationKvBean2.setValue("1111"); - stationKvBeans.add(stationKvBean2); - - stationKvBeansList.add(stationKvBeans); - List stationKvBeans1 = new ArrayList<>(); - StationKvBean stationKvBean4 = new StationKvBean(); - stationKvBean4.setKey("orderNo"); - stationKvBean4.setName("工单号"); - stationKvBean4.setValue("11111"); - stationKvBeans1.add(stationKvBean4); - - StationKvBean stationKvBean5 = new StationKvBean(); - stationKvBean5.setKey("partNo"); - stationKvBean5.setName("零件号"); - stationKvBean5.setValue("111"); - stationKvBeans1.add(stationKvBean5); - - StationKvBean stationKvBean6 = new StationKvBean(); - stationKvBean6.setKey("count"); - stationKvBean6.setName("单数"); - stationKvBean6.setValue("1111"); - stationKvBeans1.add(stationKvBean6); - stationKvBeansList.add(stationKvBeans1); - List stationKvBeans3 = new ArrayList<>(); StationKvBean stationKvBean7 = new StationKvBean(); @@ -115,7 +77,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { stationKvBeans3.add(stationKvBean8); resultBean.setResultObj(stationKvBeans3); - resultBean.setResultList(stationKvBeansList); + resultBean.setResultList(moduleContentContext); return resultBean; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java index 14788ca..43e06f7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java @@ -11,6 +11,7 @@ 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.util.MesPcnExtConstWords; 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.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; @@ -91,6 +92,7 @@ public class MesMouldRecordGenerateStepService extends BaseStepService { MesProdMouldRecord mesProductionRecord = getMesProdMouldRecord(mesCellEquipContext, mouldNo, mesMouldMappingCfg); + ConvertBean.serviceModelInitialize(mesProductionRecord, reqBean.getUserInfo()); mesProdMouldRecords.add(mesProductionRecord); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java new file mode 100644 index 0000000..8e8900c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -0,0 +1,90 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import akka.actor.ActorRef; +import akka.actor.ActorSystem; +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.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage; +import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +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.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 java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Description : 加工异常处理工步 + * @Author : zxw + **/ +@Slf4j +@Service +public class MesProductResultErrorHandleStepService extends BaseStepService { + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + + @Autowired + private ActorSystem actorSystem; + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + + private static final Map refMap = new ConcurrentHashMap<>(200); + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + // 获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + // 获取条码信息 + List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean); + // 通过上下文获取工位设备信息 + MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip(); + + String mesProduceSnsStr = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null; + ActorMessage actorMessage = ActorMessage.builder() + .equipmentCode(curCellEquip.getEquipmentCode()) + .equipId(curCellEquip.getEquipId()) + .organizeCode(reqBean.getOrganizeCode()) + .organizeName(reqBean.getOrganizeName()) + .workCellCode(reqBean.getWorkCellCode()) + .workCenterCode(reqBean.getWorkCenterCode()) + .areaCode(reqBean.getAreaCode()) + .craftCode(productionProcessContext.getCraftCode()) + .processCode(reqBean.getProcessCode()) + .produceSnJson(mesProduceSnsStr) + .userName(reqBean.getUserInfo()) + .build(); + // 数据采集信息需要存放到 redis中 + String key = this.getFsmBusikey(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.name()); + ActorRef ref = refMap.computeIfAbsent(key, + k -> actorSystem.actorOf(SpringExtProvider.getInstance().get(actorSystem).create("mesHandlerEquipLogActor"), key)); + ref.tell(actorMessage, ActorRef.noSender()); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存工艺参数成功"); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java index 8705df5..f317df1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; 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.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; @@ -63,6 +64,7 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProduceSns.forEach(mesProduceSn -> { MesProductionRecord mesProductionRecord = getMesProductionRecord(productionProcessContext, mesProduceSn, reqBean); + ConvertBean.serviceModelInitialize(mesProductionRecord, reqBean.getUserInfo()); mesProductionRecords.add(mesProductionRecord); }); @@ -78,11 +80,17 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProductionRecord.setAreaCode(mesProduceSn.getAreaCode()); mesProductionRecord.setCraftCode(mesProduceSn.getCraftCode()); mesProductionRecord.setCustSn(mesProduceSn.getCustSn()); - mesProductionRecord.setEquipmentCode(mesProduceSn.getEquipmentCode()); + mesProductionRecord.setProductSn(mesProduceSn.getCustSn()); + mesProductionRecord.setEquipmentCode(productionProcessContext.getCurCellEquip().getEquipmentCode()); + mesProductionRecord.setEquipmentName(productionProcessContext.getCurCellEquip().getEquipmentName()); + mesProductionRecord.setPartNo(mesProduceSn.getPartNo()); + mesProductionRecord.setPartName(mesProduceSn.getPartNameRdd()); mesProductionRecord.setIsComplete(MesEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecord.setCompleteDateTime(DateUtil.formatDateTime(new Date())); mesProductionRecord.setLotNo(mesProduceSn.getLotNo()); mesProductionRecord.setEquipmentName(mesProduceSn.getEquipmentName()); + //mesProductionRecord.setShiftGroup(); + //mesProductionRecord.setWorkOrderNo(productionProcessContext.get); String mouldNo = ""; MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java new file mode 100644 index 0000000..eef2e48 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java @@ -0,0 +1,81 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import akka.actor.ActorRef; +import akka.actor.ActorSystem; +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.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage; +import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +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.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 java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Description : 加工异常处理工步 + * @Author : zxw + **/ +@Slf4j +@Service +public class MesSaveProcessResultStepService extends BaseStepService { + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + + @Autowired + private ActorSystem actorSystem; + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private MesVariableWhenFinishedReadStepService mesVariableWhenFinishedReadStepService; + + @Autowired + private MesMouldRecordGenerateStepService mesMouldRecordGenerateStepService; + + @Autowired + private MesProductSnSaveStepService MesProductSnSaveStepService; + + @Autowired + private MesProductionReocrdGenerateStepService mesProductionReocrdGenerateStepService; + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + + private static final Map refMap = new ConcurrentHashMap<>(200); + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + mesMouldRecordGenerateStepService.execute(reqBean); + + MesProductSnSaveStepService.execute(reqBean); + + mesProductionReocrdGenerateStepService.execute(reqBean); + + + mesProductionDispatchContextStepService.deleteFirstMouldNoContext(reqBean); + mesProductionDispatchContextStepService.deleteMouldNoContext(reqBean); + mesProductionDispatchContextStepService.deleteProductResultContext(reqBean); + mesProductionDispatchContextStepService.deleteReadySignalContext(reqBean); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工结果成功"); + } +} From b049a2097a9e6d9803ca0719b62dd841dd0b946d Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 5 Jun 2024 13:28:30 +0800 Subject: [PATCH 07/17] =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=8C=96=E6=A3=80?= =?UTF-8?q?=E9=AA=8C-=E8=BD=AC=E6=AD=A3=E5=B8=B8=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E8=B4=A3=E4=BB=BB=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/base/IMesOrgService.java | 17 +++++++++ .../controller/busi/MesOrgController.java | 42 ++++++++++++++++++++++ .../serviceimpl/base/MesOrgServiceImpl.java | 42 ++++++++++++++++++++++ .../serviceimpl/busi/MesNcProcessingService.java | 26 ++++++++------ .../pcn/pojo/model/MesNcProcessingInputModel.java | 3 ++ 5 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesOrgService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesOrgController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrgServiceImpl.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesOrgService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesOrgService.java new file mode 100644 index 0000000..04ae68c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesOrgService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.MesOrg; + +import java.util.List; + +/** + * @Description: 责任人库区关系 + * @Author: gsz + * @Date: 2024/5/25 18:16 + * @Modify: + */ +public interface IMesOrgService { + + List queryMesOrg(MesOrg mesOrg); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesOrgController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesOrgController.java new file mode 100644 index 0000000..f3fc87b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesOrgController.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesOrgService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesOrg; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description: 责任人库区关系 + * @Author: gsz + * @Date: 2024/6/5 10:16 + * @Modify: + */ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesOrg") +public class MesOrgController { + @Autowired + private IMesOrgService mesOrgService; + + + @GetMapping(value = "/query") + @ApiOperation(value = "查询责任人区域关系") + public ResultBean queryMesProdShiftRecord(MesOrg mesOrg) { + try { + + List mesOrgList= mesOrgService.queryMesOrg(mesOrg); + return ResultBean.success("查询成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mesOrgList); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrgServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrgServiceImpl.java new file mode 100644 index 0000000..b43c8d9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrgServiceImpl.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesOrgService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesOrg; +import cn.estsh.i3plus.pojo.mes.repository.MesOrgRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * @Description: 责任人区域关系 + * @Author: gsz + * @Date: 2024/6/5 10:16 + * @Modify: + */ +@Service +@Slf4j +public class MesOrgServiceImpl implements IMesOrgService { + + @Autowired + private MesOrgRepository mesOrgRDao; + + @Override + public List queryMesOrg(MesOrg bean) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getInventoryLocationCode(), "inventoryLocationCode", packBean); + if(StringUtil.isEmpty(bean.getResponsibleParty())){ + DdlPreparedPack.getIsNotNull( "responsibleParty", packBean); + }else { + DdlPreparedPack.getStringEqualPack(bean.getResponsibleParty(), "responsibleParty", packBean); + } + packBean.setOrderByStr(bean.orderBy()); + + return mesOrgRDao.findByHqlWhere(packBean); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 2039695..4004c66 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -165,14 +165,14 @@ public class MesNcProcessingService implements IMesNcProcessingService { MesDefectType person = model.getPerson(); //保存数据 - saveDate(model, model.getPart(), type, person, org); + saveDate(model, model.getPart(), type, person, org,model.getAreaCode()); } else { Integer type = model.getType(); MesDefectType person = model.getPerson(); //保存数据 - saveDate(model, model.getPart(), type, person, org); + saveDate(model, model.getPart(), type, person, org,model.getAreaCode()); } } @@ -320,7 +320,7 @@ public class MesNcProcessingService implements IMesNcProcessingService { * @param person * @param org */ - private void saveDate(MesNcProcessingInputModel model, MesPartSap part, Integer type, MesDefectType person, String org) { + private void saveDate(MesNcProcessingInputModel model, MesPartSap part, Integer type, MesDefectType person, String org,String areaCode) { if (type == MesExtEnumUtil.NC_TYPE.NORMAL.getValue()) { @@ -337,14 +337,15 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(sn, AuthUtil.getSessionUser().getUserName()); partInspectionRepository.save(model.getPartInspection()); - //移库 转正常 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); + //移库 转正常、放行:8000移至2000 areaCode=2000 + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); +// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); moveRepository.save(move); } else if (type == MesExtEnumUtil.NC_TYPE.REWORK.getValue()) { - //生成返工单 + //生成返工单 根据责任方库区对应关系,选择哪个责任方,就移动到哪个库区(8000移至8002/8003); GenSerialNoModel serialNoModel = new GenSerialNoModel("NC_REWORK"); serialNoModel.setPartNo(part.getPartNo()); ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1); @@ -386,6 +387,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { model.getPartInspection().setReworkTaskId(reworkTask.getId()); partInspectionRepository.save(model.getPartInspection()); + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); + moveRepository.save(move); + } else if (type == MesExtEnumUtil.NC_TYPE.SCRAP.getValue()) { //更新条码质量状态 @@ -401,8 +405,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(sn, AuthUtil.getSessionUser().getUserName()); partInspectionRepository.save(model.getPartInspection()); - //移库 转报废 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "SCRAP"), org); + //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); +// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "SCRAP"), org); moveRepository.save(move); } else if (type == MesExtEnumUtil.NC_TYPE.RELEASE.getValue()) { @@ -421,8 +426,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { partInspectionRepository.save(model.getPartInspection()); - //移库 转正常 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); + //移库 转正常、放行:8000移至2000 areaCode=2000 + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); +// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); moveRepository.save(move); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java index 86638d8..768958d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java @@ -29,6 +29,9 @@ public class MesNcProcessingInputModel { @ApiParam("责任人") private MesDefectType person; + @ApiParam("区域代码") + private String areaCode; + @ApiParam("物料") private MesPartSap part; From 580f586d120efe91df039e90a51b292624e1911e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 5 Jun 2024 16:21:25 +0800 Subject: [PATCH 08/17] step --- .../step/MesAssemblyReadStepService.java | 17 ++++++----- .../step/MesAssemblyScanStepService.java | 1 + .../step/MesFirstMouldNoReadStepService.java | 18 ++++++------ .../step/MesMouldNoReadStepService.java | 18 ++++++------ .../step/MesProductResultReadStepService.java | 24 ++++++++-------- .../step/MesProductSnReadStepService.java | 33 +++++++++++----------- .../step/MesReadySignalReadStepService.java | 29 ++++++++----------- .../step/MesSendInitializationCmdStepService.java | 18 +++++++----- .../step/MesSendProcessCmdStepService.java | 14 ++++----- 9 files changed, 84 insertions(+), 88 deletions(-) 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 4d24c00..35ab51b 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 @@ -115,30 +115,29 @@ public class MesAssemblyReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //验证装配件条码的有效性 - if (stepResult.isCompleted()) matchAssemblySnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - - return stepResult; + //匹配读取的装配件的有效性 + return matchAssemblySnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); } - private StepResult matchAssemblySnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + //匹配读取的装配件的有效性 + private StepResult matchAssemblySnValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的装配件进行规则匹配 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.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //保存设备当前一轮工序待验证的装配件条码信息 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/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index b170d6b..8f79e19 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -49,6 +49,7 @@ public class MesAssemblyScanStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); //TODO 先判断上下文当前工序是否全部扫完 + if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描装配件条码!"); //扫描信息置空 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 8225c84..dc38a5e 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 @@ -122,30 +122,29 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //验证头道模具号的有效性 - if (stepResult.isCompleted()) checkFirstMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - - return stepResult; + //验证头道模具号的有效性 + return checkFirstMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); } - private StepResult checkFirstMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + //验证头道模具号的有效性 + private StepResult checkFirstMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的头道模具号进行规则匹配 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.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //默认只需要配置一个点位 String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); @@ -227,5 +226,4 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { return dataList; } - } 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 089bb26..f5cee59 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 @@ -115,29 +115,28 @@ public class MesMouldNoReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //验证模具号的有效性 - if (stepResult.isCompleted()) checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); + checkMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); //保存设备当前一轮工序的模具号 if (null != stepResult.getObj()) productionDispatchContextStepService.saveMouldNoContext(reqBean, (MesEquipVariableCollectContext) stepResult.getObj()); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - return stepResult; } - private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //验证上下文产出零件信息是否存在 Boolean productionPartContextIsExist = productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean); //未采集到数据 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())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); 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())); @@ -146,7 +145,8 @@ public class MesMouldNoReadStepService extends BaseStepService { //没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息 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())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); 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())); 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 4833253..e512453 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 @@ -113,30 +113,28 @@ public class MesProductResultReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //匹配加工结果 - matchProductResult(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - - return stepResult; + //匹配加工结果 + return matchProductResult(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); } - private StepResult matchProductResult(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + //匹配加工结果 + private StepResult matchProductResult(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //根据变量类别分组数据 Map> variableCategoryMap = equipLogDispatchContext.getEquipVariableCfgCollectContextList().stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory)); //根据变量类别分别匹配加工结果 - matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); + matchVariableCategoryMap(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); //保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果 if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, (String) stepResult.getObj()); @@ -146,7 +144,7 @@ public class MesProductResultReadStepService extends BaseStepService { } //加工结果规则匹配:根据变量类别分组, 只要匹配一组即可; 在一组中根据规则类别分组, 相同规则类别的一组必须全部匹配, 任意一组规则类别匹配成功即可 - private StepResult matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + private StepResult matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map> variableCategoryMap) { for (Map.Entry> entry : variableCategoryMap.entrySet()) { @@ -167,8 +165,10 @@ public class MesProductResultReadStepService extends BaseStepService { } //加工结果匹配失败 - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, - MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + + return stepResult.isCompleted(false); } 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 de846cc..fab17cf 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 @@ -112,33 +112,32 @@ public class MesProductSnReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //验证主条码的有效性 - if (stepResult.isCompleted()) matchProductSnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - - return stepResult; + //匹配读取的主条码的有效性 + return matchProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); } - private StepResult matchProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + //匹配读取的主条码的有效性 + private StepResult matchProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 if (!equipLogDispatchContext.getIsCollectValue()) - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]主条码,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取的主条码进行规则匹配 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.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //读取主条码前置验证 - if (!checkReadProductSnValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList).isCompleted()) return stepResult; + checkReadProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList); //保存设备当前一轮工序的待验证的主条码信息 productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList); @@ -152,7 +151,7 @@ public class MesProductSnReadStepService extends BaseStepService { } //读取主条码前置验证 - private StepResult checkReadProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipVariableCollectContextList) { + private void checkReadProductSnValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, 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()); @@ -162,18 +161,18 @@ public class MesProductSnReadStepService extends BaseStepService { //验证是否存在重复条码 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())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前读取到设备[%s]主条码存在重复条码,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //验证条码数量是否满足腔数 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())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前读取到设备[%s]主条码数量[%s]与产出零件对应的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), productionPartContextList.size())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); 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; + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前读取到设备[%s]主条码数量[%s]与工位设备维护的腔数[%s]不一致,持续监听中...", cellEquipContext.getEquipmentCode(), equipVariableCollectContextList.size(), cellEquipContext.getCavity())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java index dbb3813..691cfaf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java @@ -109,39 +109,34 @@ public class MesReadySignalReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //匹配就绪信号有效性 - matchReadySignal(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); - - //保存设备当前一轮工序的就绪信号, 写1 - if (stepResult.isCompleted()) productionDispatchContextStepService.saveReadySignalContext(reqBean); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - - return stepResult; + //匹配就绪信号有效性 + return matchReadySignal(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); } - private StepResult matchReadySignal(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + private StepResult matchReadySignal(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { //未采集到数据 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())); + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]就绪信号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); //匹配就绪信号有效性 Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); + if (!result) execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("读取设备[%s]就绪信号的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + //匹配成功发送工步内容 - if (result) productionDispatchContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + productionDispatchContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getDescription(), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); - //匹配成功 - if (result) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]就绪信号信息!", cellEquipContext.getEquipmentCode())); + //保存设备当前一轮工序的就绪信号, 写1 + productionDispatchContextStepService.saveReadySignalContext(reqBean); - //匹配失败 - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, - MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("读取设备[%s]就绪信号的数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, 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/MesSendInitializationCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java index 239e85a..f9ff27a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendInitializationCmdStepService.java @@ -82,26 +82,26 @@ public class MesSendInitializationCmdStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - //发送数据给设备的数据变量 - execSendInitializationCmd(reqBean, resultBean, stepResult, cellEquipContext, stepParamMap, equipmentVariableCfgList.get(0), equipmentVariableList.get(0), cellEquipContext.getKepwareFlag(equipmentVariableList.get(0).getChannel())); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - return stepResult; + //发送数据给设备的数据变量 + return execSendInitializationCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, equipmentVariableCfgList.get(0), equipmentVariableList.get(0), cellEquipContext.getKepwareFlag(equipmentVariableList.get(0).getChannel())); } - private StepResult execSendInitializationCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext, - Optional> stepParamMap, MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag) { + private StepResult execSendInitializationCmd(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, + MesCellEquipContext cellEquipContext, MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag) { + + //最大重试次数[工步参数] Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); MesEquipVariableRwResult equipVariableRwResult; for (int i = 1; i <= maxRetryTimes; i ++) { + //写值 equipVariableRwResult = equipVariableRwExtService.writeVariable(equipmentVariableCfg, equipmentVariable, kepwareFlag); - this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:[%s]", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); @@ -110,14 +110,18 @@ public class MesSendInitializationCmdStepService extends BaseStepService { execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:[%s]", cellEquipContext.getEquipmentCode(), i, equipVariableRwResult.getMessage())); + //每失败一次 睡眠 if (i != maxRetryTimes) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); } + execSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return stepResult; } + //最大重试次数[工步参数] private Integer getMaxRetryTimes(Optional> stepParamMap) { Integer maxRetryTimes = null; try { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java index 4101c7c..9ba4699 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendProcessCmdStepService.java @@ -85,23 +85,23 @@ public class MesSendProcessCmdStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //发送数据给设备的数据变量 MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(equipmentVariableCfgList.get(0), equipmentVariableList.get(0), cellEquipContext.getKepwareFlag(equipmentVariableList.get(0).getChannel())); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:[%s]", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //保存设备当前一轮工序的发送允许加工指令, 写接口逻辑参考值 if (equipVariableRwResult.getIsSuccessed()) productionDispatchContextStepService.saveSendProcessCmdContext(reqBean, equipmentVariableCfgList.get(0).getValue()); - if (!equipVariableRwResult.getIsSuccessed()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + if (!equipVariableRwResult.getIsSuccessed()) + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("设备[%s]:允许加工指令发送失败!原因:[%s]", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); - return !equipVariableRwResult.getIsSuccessed() ? - execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送失败!原因:[%s]", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())) : - execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送成功!", cellEquipContext.getEquipmentCode())); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:允许加工指令发送成功!", cellEquipContext.getEquipmentCode())); } From 129d37e3767354c6168b8527584578596e5608d7 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 5 Jun 2024 16:30:17 +0800 Subject: [PATCH 09/17] pcn --- .../pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java | 2 +- .../ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java | 2 +- .../ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index a4d7604..4835585 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -547,7 +547,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService partInspection.setInspectionStatus(inspectionStatus); partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()); partInspection.setSn(model.getSn()); - partInspection.setLot(model.getLot()); + partInspection.setLotNo(model.getLot()); partInspection.setQty(model.getQty()); partInspection.setWorkCenterCode(model.getWorkCenterCode()); partInspection.setShiftCode(model.getShiftCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 4004c66..90bd10b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -98,7 +98,7 @@ public class MesNcProcessingService implements IMesNcProcessingService { DdlPreparedPack.getStringEqualPack(partInspection.getSn(), "sn", packBean); DdlPreparedPack.getStringEqualPack(partInspection.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringLikerPack(partInspection.getPartName(), "partName", packBean); - DdlPreparedPack.getStringEqualPack(partInspection.getLot(), "lot", packBean); + DdlPreparedPack.getStringEqualPack(partInspection.getLotNo(), "lotNo", packBean); DdlPreparedPack.getNumEqualPack(partInspection.getQty(), "qty", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), "inspectionStatus", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 32d0ee9..197b21a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -179,7 +179,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { for (MesBom mesBom : mesBoms) { newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); - newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartNameRdd()); + newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); newMesProductOffLine.setItemQty(mesBom.getItemQty()); From 9b30b12a00d20a0e18148dbf3e7903cd2a9af35f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Wed, 5 Jun 2024 18:02:44 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/MesInputDefectRecordController.java | 2 +- .../controller/busi/MesReworkTaskController.java | 7 +- .../pcn/apiservice/dao/IMesNcProcessingDao.java | 4 +- .../pcn/apiservice/daoimpl/MesNcProcessingDao.java | 16 ++-- .../serviceimpl/base/MesReworkTaskServiceImpl.java | 7 +- .../busi/MesInputDefectRecordService.java | 6 +- .../serviceimpl/busi/MesNcProcessingService.java | 6 +- .../MesProductResultErrorHandleStepService.java | 101 ++++++++++++++------- .../step/MesProductSnGenerateStepService.java | 18 +++- .../MesVariableWhenFinishedReadStepService.java | 3 + .../src/main/resources/application-71.properties | 4 +- .../pcn/pojo/model/MesNcProcessingInputModel.java | 2 +- .../pojo/model/MesNcProcessingPartAndLotModel.java | 2 +- .../pojo/model/MesPartInspectionInputModel.java | 2 +- .../pcn/pojo/model/MesReworkTaskRequestModel.java | 2 +- 15 files changed, 118 insertions(+), 64 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java index 166684e..cf44f99 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java @@ -68,7 +68,7 @@ public class MesInputDefectRecordController { try { if (StringUtils.isEmpty(model.getSn()) && - (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLot()) || StringUtils.isEmpty(model.getQty()) || model.getQty() == 0)) { + (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLotNo()) || StringUtils.isEmpty(model.getQty()) || model.getQty() == 0)) { throw new ImppBusiException("条码为空或零件号+批次+数量为空"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java index 8cf9716..ff10713 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java @@ -18,6 +18,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -82,7 +83,9 @@ public class MesReworkTaskController { @ApiOperation(value = "装配件查询") public ResultBean assemblyQuery(MesReworkTaskRequestModel requestModel) { // 数据校验 - ValidatorBean.checkNotNull(requestModel.getCustSn(), "客户条码不能为空"); + if (StringUtils.isEmpty(requestModel.getCustSn())) { + ResultBean.success("返工成功").setResultObject(null); + } /*ValidatorBean.checkNotNull(requestModel.getPartNo(), "零件号不能为空");*/ try { List mesProductionRecords = mesReworkTaskService.assemblyQuery(requestModel); @@ -117,7 +120,7 @@ public class MesReworkTaskController { @ApiOperation(value = "返工成功") public ResultBean reworkSuccess(MesReworkTaskRequestModel requestModel) { // 数据校验 - ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); + //ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); try { mesReworkTaskService.reworkSuccess(requestModel); return ResultBean.success("返工成功"); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesNcProcessingDao.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesNcProcessingDao.java index 6adbd14..a0066ff 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesNcProcessingDao.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesNcProcessingDao.java @@ -9,9 +9,9 @@ import java.util.List; public interface IMesNcProcessingDao { @ApiOperation(value = "查询返工返修数据") - int queryDefectRecordByPagerCount(String partNo, String lot, String org); + int queryDefectRecordByPagerCount(String partNo, String lotNo, String org); @ApiOperation(value = "查询停工统计数据") - List queryDefectRecordByPager(String partNo, String lot, String org, Pager pager); + List queryDefectRecordByPager(String partNo, String lotNo, String org, Pager pager); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesNcProcessingDao.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesNcProcessingDao.java index 5cd3d91..5cf65fa 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesNcProcessingDao.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesNcProcessingDao.java @@ -21,7 +21,7 @@ public class MesNcProcessingDao implements IMesNcProcessingDao { private EntityManager entityManager; @Override - public int queryDefectRecordByPagerCount(String partNo, String lot, String org) { + public int queryDefectRecordByPagerCount(String partNo, String lotNo, String org) { StringBuffer hql = new StringBuffer(); hql.append("select count(1) from mes_defect_record as mdr "); @@ -29,9 +29,9 @@ public class MesNcProcessingDao implements IMesNcProcessingDao { hql.append(" and mdr.isValid = :isValid "); hql.append(" and mdr.isDeleted = :isDeleted "); hql.append(" and mdr.part_no = :partNo "); - hql.append(" and mdr.lot = :lot "); + hql.append(" and mdr.lotNo = :lotNo "); hql.append(" and mdr.nc_type = 0 "); - hql.append(" group by mdr.part_no , mdr.lot "); + hql.append(" group by mdr.part_no , mdr.lotNo "); Query query = entityManager.createNativeQuery(hql.toString()); @@ -47,17 +47,17 @@ public class MesNcProcessingDao implements IMesNcProcessingDao { } @Override - public List queryDefectRecordByPager(String partNo, String lot, String org, Pager pager) { + public List queryDefectRecordByPager(String partNo, String lotNo, String org, Pager pager) { StringBuffer hql = new StringBuffer(); - hql.append("select mdr.part_no ,mdr.part_name , mdr.lot from mes_defect_record as mdr "); + hql.append("select mdr.part_no ,mdr.part_name , mdr.lotNo from mes_defect_record as mdr "); hql.append(" where mdr.organizeCode = :organizeCode "); hql.append(" and mdr.isValid = :isValid "); hql.append(" and mdr.isDeleted = :isDeleted "); hql.append(" and mdr.part_no = :partNo "); - hql.append(" and mdr.lot = :lot "); + hql.append(" and mdr.lotNo = :lotNo "); hql.append(" and mdr.nc_type = 0 "); - hql.append(" group by mdr.part_no ,mdr.part_name , mdr.lot "); + hql.append(" group by mdr.part_no ,mdr.part_name , mdr.lotNo "); Query query = entityManager.createNativeQuery(hql.toString()); @@ -83,7 +83,7 @@ public class MesNcProcessingDao implements IMesNcProcessingDao { String defectLot = String.valueOf(cells[2]); model.setPartNo(defectPartNo); model.setPartName(defectPartName); - model.setLot(defectLot); + model.setLotNo(defectLot); modelList.add(model); } return modelList; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java index c2912e9..6b8ba42 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -267,7 +267,12 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { private MesReworkTask getMesReworkTask(MesReworkTaskRequestModel requestModel) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + if (!StringUtils.isEmpty(requestModel.getSn())) { + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + } + if (!StringUtils.isEmpty(requestModel.getReworkOrder())) { + DdlPreparedPack.getStringEqualPack(requestModel.getReworkOrder(), "reworkOrder", packBean); + } DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); MesReworkTask res = mesReworkTaskRepository.getByProperty(packBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index 4835585..bd1b0e9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -108,7 +108,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService } else { // 数据校验 ValidatorBean.checkNotNull(inputModel.getPartNo(), "物料不能为空"); - ValidatorBean.checkNotNull(inputModel.getLot(), "批次不能为空"); + ValidatorBean.checkNotNull(inputModel.getLotNo(), "批次不能为空"); ValidatorBean.checkNotNull(inputModel.getFrontBack(), "正反面不能为空"); ValidatorBean.checkNotNull(inputModel.getQty(), "数量不能为空"); @@ -408,7 +408,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService //根据扫描的条码查询条码是否存在 DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getStringEqualPack(inputModel.getPartNo(), "partNo", packBean); - DdlPreparedPack.getStringEqualPack(inputModel.getLot(), "lot", packBean); + DdlPreparedPack.getStringEqualPack(inputModel.getLotNo(), "lotNo", packBean); DdlPreparedPack.getNumEqualPack(inputModel.getQty(), "qty", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue(), "sourceType", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); @@ -547,7 +547,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService partInspection.setInspectionStatus(inspectionStatus); partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()); partInspection.setSn(model.getSn()); - partInspection.setLotNo(model.getLot()); + partInspection.setLotNo(model.getLotNo()); partInspection.setQty(model.getQty()); partInspection.setWorkCenterCode(model.getWorkCenterCode()); partInspection.setShiftCode(model.getShiftCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 90bd10b..1f4de79 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -148,11 +148,11 @@ public class MesNcProcessingService implements IMesNcProcessingService { } @Override - public ListPager queryPartLot(String partNo, String lot, String org, Pager pager) { + public ListPager queryPartLot(String partNo, String lotNo, String org, Pager pager) { - pager = PagerHelper.getPager(pager, ncProcessingDao.queryDefectRecordByPagerCount(partNo, lot, org)); + pager = PagerHelper.getPager(pager, ncProcessingDao.queryDefectRecordByPagerCount(partNo, lotNo, org)); - List modelList = ncProcessingDao.queryDefectRecordByPager(partNo, lot, org, pager); + List modelList = ncProcessingDao.queryDefectRecordByPager(partNo, lotNo, org, pager); return new ListPager(modelList, pager); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java index 8e8900c..7b741a1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -2,25 +2,39 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import akka.actor.ActorRef; import akka.actor.ActorSystem; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; 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.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel; import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesDefectType; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; 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 cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.google.common.base.Objects; 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.Arrays; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -36,12 +50,10 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { private SnowflakeIdMaker snowflakeIdMaker; @Autowired - private ActorSystem actorSystem; - - @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; - + @Autowired + private IMesNcProcessingService ncProcessingService; @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; @@ -53,38 +65,61 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { + StepResult stepResult = StepResult.getSuccessComplete(); StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); - // 获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); + // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 + if (!Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工结果合格,无需记录异常"); + } + String defectTypeCode = MesEnumUtil.DEFECT_TYPE_CODE.BACK_SPRAY.getValue(); - // 获取条码信息 List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean); - // 通过上下文获取工位设备信息 - MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip(); - - String mesProduceSnsStr = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null; - ActorMessage actorMessage = ActorMessage.builder() - .equipmentCode(curCellEquip.getEquipmentCode()) - .equipId(curCellEquip.getEquipId()) - .organizeCode(reqBean.getOrganizeCode()) - .organizeName(reqBean.getOrganizeName()) - .workCellCode(reqBean.getWorkCellCode()) - .workCenterCode(reqBean.getWorkCenterCode()) - .areaCode(reqBean.getAreaCode()) - .craftCode(productionProcessContext.getCraftCode()) - .processCode(reqBean.getProcessCode()) - .produceSnJson(mesProduceSnsStr) - .userName(reqBean.getUserInfo()) - .build(); - // 数据采集信息需要存放到 redis中 - String key = this.getFsmBusikey(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.name()); - ActorRef ref = refMap.computeIfAbsent(key, - k -> actorSystem.actorOf(SpringExtProvider.getInstance().get(actorSystem).create("mesHandlerEquipLogActor"), key)); - ref.tell(actorMessage, ActorRef.noSender()); - - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存工艺参数成功"); - } + + mesProduceSns.forEach(mesProduceSn -> { + MesNcProcessingInputModel model = new MesNcProcessingInputModel(); + MesDefectType mesDefectType = new MesDefectType(); + mesDefectType.setBackDefect(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + mesDefectType.setDefectTypeCode(defectTypeCode); + mesDefectType.setDefectTypeName(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getDescription()); + //mesDefectType.setDefectType(MesExtEnumUtil.MES_DEFECT_TYPE); + model.setSn(mesProduceSn.getProductSn()); + model.setPerson(mesDefectType); + + MesPartInspection partInspection = new MesPartInspection(); + + Long id = snowflakeIdMaker.nextId(); + partInspection.setWorkCenterCode(reqBean.getWorkCenterCode()); + partInspection.setSourceType(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()); + partInspection.setPartNo(mesProduceSn.getPartNo()); + partInspection.setPartName(mesProduceSn.getPartNameRdd()); + partInspection.setDefectTypeCode(mesDefectType.getDefectTypeCode()); + partInspection.setInspectionDate(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); + partInspection.setLotNo(mesProduceSn.getLotNo()); + partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()); + partInspection.setRejectQty(mesProduceSn.getQty().intValue()); + partInspection.setShiftCode(mesProduceSn.getShiftCode()); + partInspection.setSn(mesProduceSn.getProductSn()); + partInspection.setQty(mesProduceSn.getQty().intValue()); + partInspection.setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()); + partInspection.setId(id); + ConvertBean.serviceModelInitialize(partInspection, reqBean.getUserInfo()); + + MesPartInspectionDetail mesPartInspectionDetail = new MesPartInspectionDetail(); + mesPartInspectionDetail.setPid(id); + mesPartInspectionDetail.setStatus(10); + mesPartInspectionDetail.setDefectTypeCode(mesDefectType.getDefectTypeCode()); + mesPartInspectionDetail.setDefectTypeName(mesDefectType.getDefectTypeName()); + model.setPartInspection(partInspection); + model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail)); + ncProcessingService.saveNc(model, reqBean.getOrganizeCode()); + }); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工异常处理成功"); + + + } } 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 bfc29db..eac6cb9 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 @@ -22,6 +22,7 @@ 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.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -65,6 +66,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { StationResultBean resultBean = new StationResultBean(); StepResult stepResult = StepResult.getSuccessComplete(); + String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); // 获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); @@ -73,7 +75,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { // 获取零件号,可能存在多个 List partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); // 根据零件号组装产品条码信息 - List mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList); + List mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList, result); // 保存条码信息 mesProduceSnRepository.saveAll(mesProduceSns); // 放到上下文 @@ -90,7 +92,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { * @param partNoList * @return */ - private List generateSn(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesWorkCell mesWorkCell, List partNoList) { + private List generateSn(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesWorkCell mesWorkCell, List partNoList, String result) { List mesProduceSns = new ArrayList<>(); for (String partNo : partNoList) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); @@ -102,7 +104,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { // 根据条码规则生成条码 String sn = generateByRule(mesPart); // 组装条码信息 - MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn, mesWorkCell, productionProcessContext, reqBean); + MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn, mesWorkCell, productionProcessContext, reqBean, result); ConvertBean.serviceModelInitialize(mesProduceSn, reqBean.getUserInfo()); mesProduceSns.add(mesProduceSn); } @@ -122,7 +124,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { return resultList.get(0); } - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, MesWorkCell mesWorkCell,MesProductionProcessContext productionProcessContext, StationRequestBean reqBean) { + private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, MesWorkCell mesWorkCell,MesProductionProcessContext productionProcessContext, StationRequestBean reqBean, String result) { long serialNum = snowflakeIdMaker.nextId(); MesProduceSn mesProduceSn = new MesProduceSn(); @@ -139,7 +141,13 @@ public class MesProductSnGenerateStepService extends BaseStepService { mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); mesProduceSn.setQty(1d); mesProduceSn.setSnStatus(10); - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + Integer qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(); + if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { + qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue(); + } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) { + qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue(); + } + mesProduceSn.setQcStatus(qcStatus); mesProduceSn.setLotNo(DateUtil.format(new Date(), "YYYYMMDD")); mesProduceSn.setRouteCode(reqBean.getRouteCode()); mesProduceSn.setProcessCode(productionProcessContext.getProcessCode()); 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 e663395..6825d19 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 @@ -80,6 +80,9 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService { .userName(reqBean.getUserInfo()) .build(); // 数据采集信息需要存放到 redis中 + + // 需要保存磨具号 + String key = this.getFsmBusikey(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.name()); ActorRef ref = refMap.computeIfAbsent(key, k -> actorSystem.actorOf(SpringExtProvider.getInstance().get(actorSystem).create("mesHandlerEquipLogActor"), key)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties index 1f61c78..2486caf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u7AEF\u53E3 server.port=8350 #\u672C\u673Aip -impp.server.ip=10.196.77.226 +impp.server.ip=10.196.76.180 #impp.server.ip=192.168.0.105 #andon ip impp.andon.url=http://10.195.88.71:8750 @@ -24,7 +24,7 @@ impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ logging.config=classpath:log4j2-spring.xml mes.ws=ws://10.197.190.121:8300/ws/pcn-regist/ #mes-pcn.ws.path=ws://10.197.176.77:8350 -mes-pcn.ws.path=ws://10.196.77.226:8350 +mes-pcn.ws.path=ws://10.196.76.180:8350 pcn.code=PCN-U7 ########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## #\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java index 768958d..32d267a 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java @@ -18,7 +18,7 @@ import java.util.List; * @Modify: **/ @Data -public class MesNcProcessingInputModel { +public class MesNcProcessingInputModel { @ApiParam("类型") private Integer type; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingPartAndLotModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingPartAndLotModel.java index 169b00c..9cf0da5 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingPartAndLotModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingPartAndLotModel.java @@ -21,7 +21,7 @@ public class MesNcProcessingPartAndLotModel { private String partName; @ApiParam("批次") - private String lot; + private String lotNo; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java index b846ec5..eb1c9a5 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartInspectionInputModel.java @@ -38,7 +38,7 @@ public class MesPartInspectionInputModel { private Integer frontBack; @ApiParam("批次") - private String lot; + private String lotNo; @ApiParam("数量") private Integer qty; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java index 8860716..310ba54 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java @@ -19,11 +19,11 @@ public class MesReworkTaskRequestModel { * 条码 */ private String custSn; + /** * 返工单 */ private String reworkOrder; - /** * 零件号 */ From 15ea715a113c8efb3489c3a667b41cc6c3dd88a2 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 5 Jun 2024 19:06:34 +0800 Subject: [PATCH 11/17] =?UTF-8?q?=E8=BF=94=E5=B7=A5=E8=A1=A8=20reworkOrder?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java index 6b8ba42..3160b01 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -80,6 +80,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { if (mesReworkTask.getSn() != null) { DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean); } + DdlPreparedPack.getStringEqualPack(mesReworkTask.getReworkOrder(), "reworkOrder", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); From af8decbd88dc414ea2c528bfbfa9ab19efc63eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Wed, 5 Jun 2024 22:35:51 +0800 Subject: [PATCH 12/17] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/busi/IMesWorkOrderService.java | 3 +- .../controller/busi/MesWorkOrderController.java | 2 +- .../serviceimpl/busi/MesWorkOrderService.java | 7 +-- .../equiplog/MesEquipmentRwExtServiceImpl.java | 2 +- .../MesProductResultErrorHandleStepService.java | 35 ++++++++++----- .../step/MesProductSnGenerateStepService.java | 4 ++ .../step/MesReportGenerateStepService.java | 52 ++++++++++++++++++++++ .../step/MesSaveProcessResultStepService.java | 27 +++++++++-- 8 files changed, 109 insertions(+), 23 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReportGenerateStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java index 18265ed..f10fa94 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java @@ -27,7 +27,6 @@ public interface IMesWorkOrderService { @ApiOperation(value = "查询工单") public ListPager queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager); - void doProductReport(List mesProduceSnList); - + void doProductReport(List mesProduceSnList, String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java index 40bd1f8..e5e5199 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java @@ -65,7 +65,7 @@ public class MesWorkOrderController { @ApiOperation(value = "生产报工") public ResultBean doProductReport(@RequestBody List mesProduceSnList) { try { - workOrderService.doProductReport(mesProduceSnList); + //workOrderService.doProductReport(mesProduceSnList); return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 197b21a..dcaf9d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -96,11 +96,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Override - public void doProductReport(List mesProduceSnList) { - //新增初始化 - String organizeCode = AuthUtil.getOrganizeCode(); - String userName = AuthUtil.getSessionUser().getUserName(); - + public void doProductReport(List mesProduceSnList, String organizeCode, String userName) { + //新增初始化 todo Map> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo)); Map mesPartMap = new HashMap<>(); MesPart mesPart = null; 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 index 00e0e65..01be53a 100644 --- 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 @@ -59,7 +59,7 @@ public class MesEquipmentRwExtServiceImpl implements IMesEquipVariableRwExtServi 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()); + configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgType()) && !StringUtils.isEmpty(o.getCfgKey()) && o.getCfgType().equals(cfgType))).collect(Collectors.toList()); return CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesConfig::getCfgKey)); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java index 7b741a1..05aae9b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -32,6 +32,7 @@ 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.Arrays; import java.util.Date; @@ -68,17 +69,29 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); StationResultBean resultBean = new StationResultBean(); - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); - + // 获取加工结果 String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 - if (!Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { + if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), result)) { return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工结果合格,无需记录异常"); } - String defectTypeCode = MesEnumUtil.DEFECT_TYPE_CODE.BACK_SPRAY.getValue(); - + // 获取条码列表 List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean); + // 保存加工异常记录(NC判断记录) + saveProductResultException(reqBean, mesProduceSns, result); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工异常处理成功"); + + + } + /** + * 存加工异常记录 + * @param reqBean + * @param mesProduceSns + */ + private void saveProductResultException(StationRequestBean reqBean, List mesProduceSns, String result) { + String defectTypeCode = MesEnumUtil.DEFECT_TYPE_CODE.DETERMIND.getValue(); mesProduceSns.forEach(mesProduceSn -> { MesNcProcessingInputModel model = new MesNcProcessingInputModel(); MesDefectType mesDefectType = new MesDefectType(); @@ -99,7 +112,11 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { partInspection.setDefectTypeCode(mesDefectType.getDefectTypeCode()); partInspection.setInspectionDate(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); partInspection.setLotNo(mesProduceSn.getLotNo()); - partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()); + if (!Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { + partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()); + } else { + partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()); + } partInspection.setRejectQty(mesProduceSn.getQty().intValue()); partInspection.setShiftCode(mesProduceSn.getShiftCode()); partInspection.setSn(mesProduceSn.getProductSn()); @@ -117,9 +134,5 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail)); ncProcessingService.saveNc(model, reqBean.getOrganizeCode()); }); - - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工异常处理成功"); - - - } + } } 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 eac6cb9..1d432e4 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 @@ -26,6 +26,7 @@ import com.google.common.base.Objects; 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; @@ -72,6 +73,9 @@ public class MesProductSnGenerateStepService extends BaseStepService { MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); // 获取产出零件信息 List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); + if (CollectionUtils.isEmpty(productionPartContextList)) { + foundExThrow(reqBean, "必过工步不允许跳过"); + } // 获取零件号,可能存在多个 List partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); // 根据零件号组装产品条码信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReportGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReportGenerateStepService.java new file mode 100644 index 0000000..f78faed --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReportGenerateStepService.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import akka.actor.ActorRef; +import akka.actor.ActorSystem; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Description : 生产汇报工步 + * @Author : zxw + **/ +@Slf4j +@Service +public class MesReportGenerateStepService extends BaseStepService { + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + + + public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + + private static final Map refMap = new ConcurrentHashMap<>(200); + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean); + + mesWorkOrderService.doProductReport(mesProduceSns, reqBean.getOrganizeCode(), reqBean.getUserInfo()); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工结果成功"); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java index eef2e48..7d87ff2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java @@ -56,6 +56,12 @@ public class MesSaveProcessResultStepService extends BaseStepService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + @Autowired + private MesProductResultErrorHandleStepService mesProductResultErrorHandleStepService; + + @Autowired + private MesReportGenerateStepService mesReportGenerateStepService; + public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; private static final Map refMap = new ConcurrentHashMap<>(200); @@ -65,17 +71,32 @@ public class MesSaveProcessResultStepService extends BaseStepService { StationResultBean resultBean = new StationResultBean(); StepResult stepResult = StepResult.getSuccessComplete(); + /** + * 生成开模记录 + */ mesMouldRecordGenerateStepService.execute(reqBean); - + /** + * 保存零件条码信息工步 + */ MesProductSnSaveStepService.execute(reqBean); - + /** + * 生成加工记录工步 + */ mesProductionReocrdGenerateStepService.execute(reqBean); - + /** + * 加工异常处理工步 + */ + mesProductResultErrorHandleStepService.execute(reqBean); + /** + * 报工 + */ + mesReportGenerateStepService.execute(reqBean); mesProductionDispatchContextStepService.deleteFirstMouldNoContext(reqBean); mesProductionDispatchContextStepService.deleteMouldNoContext(reqBean); mesProductionDispatchContextStepService.deleteProductResultContext(reqBean); mesProductionDispatchContextStepService.deleteReadySignalContext(reqBean); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工结果成功"); } } From d7fec1f617a6afb5d5496eccd64d6705d37b97fe Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 6 Jun 2024 01:18:15 +0800 Subject: [PATCH 13/17] =?UTF-8?q?step=20=E8=AF=BB=E4=B8=BB=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E5=B7=A5=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionDispatchContextStepService.java | 2 +- .../step/MesAssemblyScanStepService.java | 10 +- .../step/MesAssemblyShowStepService.java | 3 + .../step/MesMouldNoReadStepService.java | 16 +- .../step/MesProductSnReadStepService.java | 2 + .../step/MesProductSnScanStepService.java | 254 ++++++++++++++++++--- .../pcn/pojo/context/MesProductionPsInContext.java | 3 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 5 +- 8 files changed, 248 insertions(+), 47 deletions(-) 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 b91fd95..ba3615a 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 @@ -121,7 +121,7 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "保存上下文扫/读信息:主条码", notes = "[JSON]List") Boolean saveScanProductSnContext(StationRequestBean reqBean, List productSnList); - @ApiOperation(value = "删除上下文扫/读信息:装配件条码") + @ApiOperation(value = "删除上下文扫/读信息:主条码") void deleteScanProductSnContext(StationRequestBean reqBean); @ApiOperation(value = "获取上下文生产扫/读信息:装配件条码") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index 8f79e19..4210178 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -37,7 +37,7 @@ public class MesAssemblyScanStepService extends BaseStepService { productionDispatchContextStepService.doSendStepContextMessage(reqBean); - return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描装配件条码!"); + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(), "请扫描装配件条码!"); } @@ -48,13 +48,12 @@ public class MesAssemblyScanStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); - //TODO 先判断上下文当前工序是否全部扫完 - - if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描装配件条码!"); + if (StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描装配件条码!"); //扫描信息置空 String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); //获取生产过程上下文对象有异常信息 抛出异常 @@ -66,6 +65,9 @@ public class MesAssemblyScanStepService extends BaseStepService { //发送工步内容 productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo)); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java index fbafdbb..a709aeb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java @@ -41,6 +41,9 @@ public class MesAssemblyShowStepService extends BaseStepService { //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取排序线的装配件清单 if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowSortStepService")).execute(reqBean); 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 f5cee59..9b8baee 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 @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepSer 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.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; @@ -22,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; @@ -53,6 +55,9 @@ public class MesMouldNoReadStepService extends BaseStepService { @Autowired private MesFirstMouldNoReadStepService firstMouldNoReadStepService; + @Autowired + private IFsmCommonService fsmCommonService; + @Override public StepResult init(StationRequestBean reqBean) { @@ -133,8 +138,11 @@ public class MesMouldNoReadStepService extends BaseStepService { //验证上下文产出零件信息是否存在 Boolean productionPartContextIsExist = productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean); + //未知腔数[工位参数] + String cavityUnknownCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_UNKNOWN_CFG); + //未采集到数据 - if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || !productionPartContextIsExist)) + if (!equipLogDispatchContext.getIsCollectValue() && (equipLogDispatchContext.getNeedNewValue() || (!productionPartContextIsExist && StringUtils.isEmpty(cavityUnknownCfg)))) execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())), MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); else if (!equipLogDispatchContext.getIsCollectValue()) @@ -144,7 +152,7 @@ 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() || !productionPartContextIsExist)) + if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || (!productionPartContextIsExist && StringUtils.isEmpty(cavityUnknownCfg)))) execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentCode())), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); else if (CollectionUtils.isEmpty(equipVariableCollectContextList)) //非常变值 没有有效的数据 也无需再读 @@ -159,8 +167,8 @@ public class MesMouldNoReadStepService extends BaseStepService { //将模具信息放到工步结果对象的中, 工步主方法体会从里面取出 stepResult.obj(equipVariableCollectContextList.get(0)); - //判断是否存在产出零件信息 - if (!productionPartContextIsExist) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo); + //判断是否存在产出零件信息 或者 工位参数没有配置未知腔数 + if (!productionPartContextIsExist && StringUtils.isEmpty(cavityUnknownCfg)) doHandleFirstMouldNo(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]模具号信息[%s]!", cellEquipContext.getEquipmentCode(), mouldNo)); 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 fab17cf..e399f39 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 @@ -141,6 +141,8 @@ public class MesProductSnReadStepService extends BaseStepService { //保存设备当前一轮工序的待验证的主条码信息 productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList); + //重新读到信息需要删除历史验证数据, 删除设备当前一轮工序的进料零件条码信息, 不管实际是否已经存在 + productionDispatchContextStepService.deleteScanProductSnContext(reqBean); //发送工步内容 String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); 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 267e74f..1dc23cd 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,217 @@ -//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.ext.mes.pcn.pojo.context.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import 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.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * @Description : 扫描主条码工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesProductSnScanStepService") +public class MesProductSnScanStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Override + public StepResult guide(StationRequestBean reqBean) { + + productionDispatchContextStepService.doSendStepContextMessage(reqBean); + + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(), "请扫描主条码!"); + + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //扫描信息置空 + String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + + //当前工位使用的设备 + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); + + //获取上下文产出零件信息 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //获取上下文扫/读信息:主条码 + List equipVariableCollectContextList = productionDispatchContextStepService.getScanProductSnContext(reqBean); + + //获取进料主条码数据信息 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + //验证扫描信息是否属于工艺跳过码 + Boolean isCraftJumpCode = checkScanInfoMatchCraftJumpCode(reqBean, scanInfo); + + //不属于工艺跳过码时,剔除此前已标记工艺防错结果错误的数据,如有数据变更则标记 stepResult.obj 为true + if (!isCraftJumpCode && !CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList = removeCraftCheckFailureData(stepResult, productionPsInContextList); + + //验证扫描信息属于工艺跳过码的情况下是否支持跳过 + Boolean isAllowJump = checkIsAllowJump(reqBean, productionPsInContextList, isCraftJumpCode, scanInfo); + + //封装待验证的主条码信息 + if (!isCraftJumpCode && !StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, equipVariableCollectContextList, scanInfo); + + //先判断前期扫描数量 + Integer scanedQty = (CollectionUtils.isEmpty(equipVariableCollectContextList) ? MesPcnExtConstWords.ZERO : equipVariableCollectContextList.size()) + (CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.ZERO : productionPsInContextList.size()); + + //根据产出零件或者腔数拿到需要的扫描数量, 优先使用产出零件数量 + Integer needQty = !CollectionUtils.isEmpty(productionPartContextList) ? productionPartContextList.size() : cellEquipmentContext.getCavity(); + + //扫描信息为空 + if (scanedQty.compareTo(needQty) < 0 && StringUtils.isEmpty(scanInfo)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描主条码!"); + + //发送工步内容 + productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + + //验证前期扫描数量是否已超过匹配腔数 + checkIsAboveNeedQty(reqBean, resultBean, stepResult, scanedQty, needQty, equipVariableCollectContextList, productionPsInContextList, productionPartContextList, cellEquipmentContext); + + //扫描信息匹配跳过码, 判断是否允许跳过 + if (isCraftJumpCode && !isAllowJump) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息工艺跳过码[%s],上下文中目前没有可以跳过的主条码信息!", scanInfo)); + + //验证是否存在重复主条码 + if (checkIsExistRepeatScan(productionProcessContext, equipVariableCollectContextList, productionPsInContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息主条码[%s],上下文中存在重复扫描的主条码!", scanInfo)); + + //允许跳过码 或者 存在 stepResult.obj 则保存进料主条码数据到上下文中 + if (isAllowJump || null != stepResult.getObj()) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); + //不属于工艺跳过码时, 则保存上下文扫/读信息:主条码 + if (!isCraftJumpCode) productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList); + + //属于工艺跳过码时并且允许跳过时,直接返回成功 + if (isCraftJumpCode && isAllowJump) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息工艺跳过码[%s]!", scanInfo)); + + //前期扫描数量已等于腔数 + if (scanedQty.compareTo(needQty) == 0) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息主条码[%s],上下文中的主条码个数[%s]已满足腔数!", scanInfo, scanedQty)); + + //是否支持混腔扫描[工位参数] + String cavityNosortCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG); + if (StringUtils.isEmpty(cavityNosortCfg)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息主条码[%s]!", scanInfo)); + else return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息主条码[%s],已知腔数[%s],还需要再连续扫描[%s]次主条码!", scanInfo, needQty, needQty - equipVariableCollectContextList.size())); + + } + + //剔除此前已标记工艺防错结果错误的数据,如有数据变更则标记 stepResult.obj + private List removeCraftCheckFailureData(StepResult stepResult, List productionPsInContextList) { + Integer sourceSize = productionPsInContextList.size(); + productionPsInContextList = productionPsInContextList.stream().filter(o -> (null != o && o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() < sourceSize) stepResult.obj(true); + return productionPsInContextList; + } + + //验证扫描信息属于工艺跳过码的情况下是否支持跳过 + private Boolean checkIsAllowJump(StationRequestBean reqBean, List productionPsInContextList, Boolean isCraftJumpCode, String scanInfo) { + AtomicReference isAllowJump = new AtomicReference<>(false); + if (CollectionUtils.isEmpty(productionPsInContextList)) return isAllowJump.get(); + //修改此前已标记工艺防错结果错误的数据, 标记跳过码 + productionPsInContextList.forEach(o -> { + if (o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 || o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) { + o.setCraftJumpCode(scanInfo); + isAllowJump.set(true); + } + }); + //不存在错误的数据则返回false + return isAllowJump.get(); + } + + //验证扫描信息是否属于工艺跳过码 + private Boolean checkScanInfoMatchCraftJumpCode(StationRequestBean reqBean, String scanInfo) { + if (StringUtils.isEmpty(scanInfo)) return false; + String craftJumpCode = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CRAFT_JUMP_CODE); + if (StringUtils.isEmpty(craftJumpCode)) return false; + return scanInfo.equals(craftJumpCode) ? true : false; + } + + //验证前期扫描数量是否已超过匹配腔数 + private void checkIsAboveNeedQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Integer scanedQty, Integer needQty, + List equipVariableCollectContextList, List productionPsInContextList, List productionPartContextList, MesCellEquipContext cellEquipmentContext) { + if (scanedQty.compareTo(needQty) <= 0) return; + String message = String.format("请检查相关数据,上下文中的主条码个数[%s]已满足腔数[%s],可重置工位解决!", scanedQty, needQty); + this.sendMessage(reqBean, resultBean, message + + " --- List --- [" + getJsonMessage(equipVariableCollectContextList) + "]" + + " --- List --- [" + getJsonMessage(productionPsInContextList) + "]" + + " --- List --- [" + getJsonMessage(productionPartContextList) + "]" + + " --- MesCellEquipContext --- [" + JSONObject.toJSONString(cellEquipmentContext) + "] ---", MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), message); + } + + //集合判空转JSON + private String getJsonMessage(List list) { + return CollectionUtils.isEmpty(list) ? MesPcnExtConstWords.EMPTY : JSONObject.toJSONString(list); + } + + //封装扫/读信息:主条码信息 + private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, List equipVariableCollectContextList, String scanInfo) { + + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); + + equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true))); + + return equipVariableCollectContextList; + + } + + //验证是否存在重复主条码 + private Boolean checkIsExistRepeatScan(MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList, List productionPsInContextList) { + + //剔除finishCode信息 + List filterList1 = equipVariableCollectContextList.stream().filter(o -> (null != o && !o.getEquipVariableValue().equals(productionProcessContext.getFinishCode()))).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); + //剔除finishCode信息 + List filterList2 = productionPsInContextList.stream().filter(o -> (null != o && !o.getProductSn().equals(productionProcessContext.getFinishCode()))).map(MesProductionPsInContext::getProductSn).collect(Collectors.toList()); + + List filterList = new ArrayList<>(); + if (CollectionUtils.isEmpty(filterList1)) filterList.addAll(filterList1); + if (CollectionUtils.isEmpty(filterList2)) filterList.addAll(filterList2); + + //验证是否存在重复条码 + if (!CollectionUtils.isEmpty(filterList) && filterList.size() != filterList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size()) return true; + + return false; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java index 0b5394c..56ad63d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -39,6 +39,9 @@ public class MesProductionPsInContext implements Serializable { @ApiParam("零件名称") private String partName; + @ApiParam("工艺跳过码") + private String craftJumpCode; + //默认否 @ApiParam("是否顺序防错") private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); 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 a90af51..563bee1 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 @@ -130,9 +130,12 @@ public class MesPcnExtConstWords { // 最大重试次数[工步参数] public static final Integer MAX_RETRY_TIMES_DEFAULT = 10; + // 工艺跳过码(前后防错/顺序防错)[工位参数] + public static final String CRAFT_JUMP_CODE = "CRAFT_JUMP_CODE"; // 未知腔数[工位参数] public static final String CAVITY_UNKNOWN_CFG = "CAVITY_UNKNOWN_CFG"; - + // 支持混腔扫描[工位参数] + public static final String CAVITY_NOSORT_CFG = "CAVITY_NOSORT_CFG"; // 0 public static final Integer ZERO = 0; From 82e8c91c0e0ca99c23ad9dba331859d50d76f1bb Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 6 Jun 2024 13:23:49 +0800 Subject: [PATCH 14/17] =?UTF-8?q?=E8=B4=A3=E4=BB=BB=E4=BA=BA=E5=8D=A1?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/MesNcProcessingController.java | 2 +- .../apiservice/serviceimpl/busi/MesNcProcessingService.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java index b6f21c3..da9fb11 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java @@ -85,7 +85,7 @@ public class MesNcProcessingController { // 数据校验 ValidatorBean.checkNotNull(model.getPartInspection(), "单据不能为空"); ValidatorBean.checkNotNull(model.getPartInspectionDetailList(), "单据明细不能为空"); - if (model.getType() != 10) { + if (model.getType() != 10 && model.getType() != 40) { ValidatorBean.checkNotNull(model.getPerson(), "责任人不能为空"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 1f4de79..56a03dd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -337,9 +337,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { ConvertBean.serviceModelUpdate(sn, AuthUtil.getSessionUser().getUserName()); partInspectionRepository.save(model.getPartInspection()); - //移库 转正常、放行:8000移至2000 areaCode=2000 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); -// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); + //移库 转正常、放行:8000移至2000 +// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); moveRepository.save(move); } else if (type == MesExtEnumUtil.NC_TYPE.REWORK.getValue()) { @@ -426,9 +426,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { partInspectionRepository.save(model.getPartInspection()); - //移库 转正常、放行:8000移至2000 areaCode=2000 - MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); -// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); + //移库 转正常、放行:8000移至2000 +// MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), areaCode, org); + MesMove move = createMove(model, configService.getCfgValue(org, "UMLGO"), configService.getCfgValue(org, "LGORT"), org); moveRepository.save(move); } From e8f48d7034e79b96f2fa8267e3319d783cfd6928 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 6 Jun 2024 14:59:22 +0800 Subject: [PATCH 15/17] step --- .../MesProductResultErrorHandleStepService.java | 2 +- .../step/MesProductSnCheckStepService.java | 87 ++++++++++++++++++++++ .../step/MesProductSnGenerateStepService.java | 2 +- .../step/MesProductSnScanStepService.java | 3 +- .../MesProductionReocrdGenerateStepService.java | 3 +- .../pojo/context/MesProductionPsOutContext.java | 24 +----- 6 files changed, 94 insertions(+), 27 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java index 05aae9b..375d895 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -108,7 +108,7 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { partInspection.setWorkCenterCode(reqBean.getWorkCenterCode()); partInspection.setSourceType(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()); partInspection.setPartNo(mesProduceSn.getPartNo()); - partInspection.setPartName(mesProduceSn.getPartNameRdd()); + partInspection.setPartName(mesProduceSn.getPartName()); partInspection.setDefectTypeCode(mesDefectType.getDefectTypeCode()); partInspection.setInspectionDate(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); partInspection.setLotNo(mesProduceSn.getLotNo()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java new file mode 100644 index 0000000..608a2c2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java @@ -0,0 +1,87 @@ +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.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import 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.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * @Description : 主条码验证工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesProductSnCheckStepService") +public class MesProductSnCheckStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + + + + + + + + + + + + + + + + + + + + return stepResult; + } + + + + + +} 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 1d432e4..7f2e59c 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 @@ -136,7 +136,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { mesProduceSn.setProductSn(sn); mesProduceSn.setCustSn(sn); mesProduceSn.setPartNo(mesPart.getPartNo()); - mesProduceSn.setPartNameRdd(mesPart.getPartName()); + mesProduceSn.setPartName(mesPart.getPartName()); mesProduceSn.setAreaCode(mesWorkCell.getAreaCode()); mesProduceSn.setWorkCenterCode(mesWorkCell.getWorkCenterCode()); mesProduceSn.setWorkCellCode(mesWorkCell.getWorkCellCode()); 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 1dc23cd..d984a68 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 @@ -130,7 +130,8 @@ public class MesProductSnScanStepService extends BaseStepService { //是否支持混腔扫描[工位参数] String cavityNosortCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG); if (StringUtils.isEmpty(cavityNosortCfg)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息主条码[%s]!", scanInfo)); - else return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, + + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息主条码[%s],已知腔数[%s],还需要再连续扫描[%s]次主条码!", scanInfo, needQty, needQty - equipVariableCollectContextList.size())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java index f317df1..32868d0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java @@ -84,7 +84,7 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProductionRecord.setEquipmentCode(productionProcessContext.getCurCellEquip().getEquipmentCode()); mesProductionRecord.setEquipmentName(productionProcessContext.getCurCellEquip().getEquipmentName()); mesProductionRecord.setPartNo(mesProduceSn.getPartNo()); - mesProductionRecord.setPartName(mesProduceSn.getPartNameRdd()); + mesProductionRecord.setPartName(mesProduceSn.getPartName()); mesProductionRecord.setIsComplete(MesEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecord.setCompleteDateTime(DateUtil.formatDateTime(new Date())); mesProductionRecord.setLotNo(mesProduceSn.getLotNo()); @@ -107,7 +107,6 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProductionRecord.setProcessCode(mesProduceSn.getProcessCode()); mesProductionRecord.setReportPartNo(mesProduceSn.getPartNo()); mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); - mesProductionRecord.setReportType(mesProduceSn.getReportType() + ""); mesProductionRecord.setShiftCode(mesProduceSn.getShiftCode()); mesProductionRecord.setShiftGroup(mesProduceSn.getShiftGroup()); mesProductionRecord.setWorkOrderNo(mesProduceSn.getWorkOrderNo()); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index fb9d355..73fa749 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -9,32 +10,11 @@ import java.io.Serializable; * 生产过程上下文对象-零件条码(非排序产出零件条码) */ @Data -public class MesProductionPsOutContext implements Serializable { +public class MesProductionPsOutContext extends MesProduceSn implements Serializable { private static final long serialVersionUID = 5562937531822977296L; @ApiParam(name = "数据关联键 非排序:snowflakeId") private String foreignKey; - @ApiParam("组织代码") - private String organizeCode; - - @ApiParam("零件条码ID") - private Long id; - - @ApiParam("非排序产出零件条码") - private String productSn; - - @ApiParam("非排序产出零件过程条码") - private String serialNumber; - - @ApiParam("非排序产出客户条码") - private String custSn; - - @ApiParam("零件号") - private String partNo; - - @ApiParam("零件名称") - private String partName; - } From f0291610d0f70fee7e2ad59bd565fbae73912271 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 6 Jun 2024 15:02:45 +0800 Subject: [PATCH 16/17] pcn --- ...{MesEquipmentRwExtServiceImpl.java => MesEquipmentRwExtService.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/{MesEquipmentRwExtServiceImpl.java => MesEquipmentRwExtService.java} (98%) 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/MesEquipmentRwExtService.java similarity index 98% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtServiceImpl.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java index 01be53a..bd6f73f 100644 --- 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/MesEquipmentRwExtService.java @@ -27,7 +27,7 @@ import java.util.stream.Collectors; @Slf4j @Service -public class MesEquipmentRwExtServiceImpl implements IMesEquipVariableRwExtService { +public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { @Autowired private IConfigService configService; From 9e0a82ebd549306c2df4f5c4a8c6970a529c7eb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Thu, 6 Jun 2024 15:05:03 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E9=9B=86=E6=88=90sharding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-ext-mes-pcn-apiservice/pom.xml | 12 +- .../config/ScanExtPackageConfiguration.java | 2 +- .../apiservice/controller/busi/TestController.java | 40 ++++ .../src/main/resources/application-71.properties | 80 +++++-- .../src/main/resources/application-72.properties | 252 +++++++++++++++++++++ .../src/main/resources/application.properties | 2 +- pom.xml | 2 +- 7 files changed, 371 insertions(+), 19 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-72.properties diff --git a/modules/i3plus-ext-mes-pcn-apiservice/pom.xml b/modules/i3plus-ext-mes-pcn-apiservice/pom.xml index e9ad082..c7f9a76 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/pom.xml +++ b/modules/i3plus-ext-mes-pcn-apiservice/pom.xml @@ -14,12 +14,20 @@ jar - + + com.google.guava + guava + 20.0 + impp.framework impp-framework-boot - + + cn.hutool + hutool-all + 5.4.5 + i3plus.ext.mes.pcn i3plus-ext-mes-pcn-api diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/config/ScanExtPackageConfiguration.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/config/ScanExtPackageConfiguration.java index caa113d..889850b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/config/ScanExtPackageConfiguration.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/config/ScanExtPackageConfiguration.java @@ -33,7 +33,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @ComponentScan(basePackages = { // 扩展包 - "${impp.app.ext.base-packages:}.**" + "${impp.app.ext.base-packages:}.**","org.apache.shardingsphere.shardingjdbc.spring.boot","cn.estsh.impp.framework.**" }) //cn.estsh.i3plus.app.ext public class ScanExtPackageConfiguration { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java new file mode 100644 index 0000000..da061cc --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; +import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/test") +public class TestController { + @Autowired + private IMesEquipmentLogExtService mesEquipmentLogExtService; + + + @GetMapping("/equipment/log/query") + @ApiOperation(value = "查询设备交互") + public ResultBean queryReworkTaskByPager(String organizeCode, Integer equipId) { + try { + List equipmentLogList = mesEquipmentLogExtService.getEquipmentLogList(organizeCode, equipId); + return ResultBean.success("查询成功").setResultList(equipmentLogList); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties index 2486caf..e34bd48 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-71.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u7AEF\u53E3 server.port=8350 #\u672C\u673Aip -impp.server.ip=10.196.76.180 +impp.server.ip=10.196.74.30 #impp.server.ip=192.168.0.105 #andon ip impp.andon.url=http://10.195.88.71:8750 @@ -24,7 +24,7 @@ impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ logging.config=classpath:log4j2-spring.xml mes.ws=ws://10.197.190.121:8300/ws/pcn-regist/ #mes-pcn.ws.path=ws://10.197.176.77:8350 -mes-pcn.ws.path=ws://10.196.76.180:8350 +mes-pcn.ws.path=ws://10.196.74.30:8350 pcn.code=PCN-U7 ########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## #\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 @@ -132,21 +132,72 @@ spring.zipkin.base-url=${impp.console.ip} spring.sleuth.sampler.probability=1.0 # mysql -impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource -impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 -impp.write.datasource.username=root -impp.write.datasource.password=estsh123 -impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource -impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 -impp.read.datasource.username=root -impp.read.datasource.password=estsh123 +#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.write.datasource.username=root +#impp.write.datasource.password=estsh123 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.read.datasource.username=root +#impp.read.datasource.password=estsh123 +# + +###########################\u8BFB\u5199\u5206\u79BB####################################### + +spring.shardingsphere.datasource.names=master,slave +##\u5199\u5E93 +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=estsh123 + +spring.shardingsphere.datasource.master.maximum-pool-size=400 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + +##\u8BFB\u5E93 +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=estsh123 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +##\u8BFB\u5199\u5206\u79BB\u914D\u7F6E +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave + +#\u9ED8\u8BA4datasource \u9ED8\u8BA4\u6570\u636E\u6E90\uFF0C\u672A\u5206\u7247\u7684\u8868\u9ED8\u8BA4\u6267\u884C\u5E93 +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#\u7CFB\u7EDF\u5C5E\u6027\uFF0C\u663E\u793A\u6B63\u5E38\u7684sql\u8BED\u53E5 +spring.shardingsphere.props.sql.show=false + +spring.shardingsphere.sharding.tables.mes_equipment_log.actual-data-nodes=ds0.mes_equipment_log_$->{1..100} +spring.shardingsphere.sharding.tables.mes_equipment_log.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log.table-strategy.inline.algorithm-expression=mes_equipment_log_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log + #\u4E2D\u822A\u6570\u636E\u6E90 ##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## impp.schedule.open=true impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 impp.schedule.datasource.username=root impp.schedule.datasource.password=estsh123 impp.schedule.datasource.max-connections=20 @@ -194,7 +245,8 @@ slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 slm.app.id=20190513 # \u811A\u672C\u5728\u7EBF\u8C03\u8BD5\u751F\u6210\u7684\u65E5\u5FD7\u6587\u4EF6\u76F8\u5BF9\u8DEF\u5F84\uFF0Cclasspath:xx pcn.script.logger.path=pluginlogs -pcn.schedule.job=false +pcn.schedule.job=true server.tomcat.max-threads=300 server.tomcat.max-connections=300 +plugin.mainPackage=cn.estsh.i3plus \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-72.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-72.properties new file mode 100644 index 0000000..e34bd48 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application-72.properties @@ -0,0 +1,252 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8350 +#\u672C\u673Aip +impp.server.ip=10.196.74.30 +#impp.server.ip=192.168.0.105 +#andon ip +impp.andon.url=http://10.195.88.71:8750 +#ptl-pcn ip +impp.ptl-pcn.url=http://10.195.88.71:8750 +#pcn plc\u5168\u5C40\u4E1A\u52A1\u5F00\u5173 1.yfai-hnc +mes.plc.callback.open=123 +#console\u63A7\u5236\u53F0\u670D\u52A1\uFF08zipkin\u8FFD\u8E2A\u5168\u8DEF\u5F84\uFF09 +impp.console.ip=http://10.195.88.71:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=22 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=22 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +mes.ws=ws://10.197.190.121:8300/ws/pcn-regist/ +#mes-pcn.ws.path=ws://10.197.176.77:8350 +mes-pcn.ws.path=ws://10.196.74.30:8350 +pcn.code=PCN-U7 +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=false +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fileserver=false +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=true +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=true +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#redisIP +redis.hostName=10.195.88.71 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=Admin123! +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.vhost=/ +spring.rabbitmq.host=10.195.88.71 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.pcn.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes-pcn/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes-pcn/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes-pcn/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6241\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6241\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server +eureka.instance.prefer-ip-address=false +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6241\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2 +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=10000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=10000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 + +# mysql +#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.write.datasource.username=root +#impp.write.datasource.password=estsh123 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.read.datasource.username=root +#impp.read.datasource.password=estsh123 +# + +###########################\u8BFB\u5199\u5206\u79BB####################################### + +spring.shardingsphere.datasource.names=master,slave +##\u5199\u5E93 +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=estsh123 + +spring.shardingsphere.datasource.master.maximum-pool-size=400 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + +##\u8BFB\u5E93 +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=estsh123 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +##\u8BFB\u5199\u5206\u79BB\u914D\u7F6E +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave + +#\u9ED8\u8BA4datasource \u9ED8\u8BA4\u6570\u636E\u6E90\uFF0C\u672A\u5206\u7247\u7684\u8868\u9ED8\u8BA4\u6267\u884C\u5E93 +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#\u7CFB\u7EDF\u5C5E\u6027\uFF0C\u663E\u793A\u6B63\u5E38\u7684sql\u8BED\u53E5 +spring.shardingsphere.props.sql.show=false + +spring.shardingsphere.sharding.tables.mes_equipment_log.actual-data-nodes=ds0.mes_equipment_log_$->{1..100} +spring.shardingsphere.sharding.tables.mes_equipment_log.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log.table-strategy.inline.algorithm-expression=mes_equipment_log_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log + +#\u4E2D\u822A\u6570\u636E\u6E90 +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=estsh123 +impp.schedule.datasource.max-connections=20 +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.min-idle=10 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +#spring.datasource.validationQuery=SELECT 1 +##Sql-server## +spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy +#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 +# \u811A\u672C\u5728\u7EBF\u8C03\u8BD5\u751F\u6210\u7684\u65E5\u5FD7\u6587\u4EF6\u76F8\u5BF9\u8DEF\u5F84\uFF0Cclasspath:xx +pcn.script.logger.path=pluginlogs +pcn.schedule.job=true + +server.tomcat.max-threads=300 +server.tomcat.max-connections=300 +plugin.mainPackage=cn.estsh.i3plus \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties index 55ef997..156f701 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/resources/application.properties @@ -1,5 +1,5 @@ #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=71 +spring.profiles.active=72 #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801 desc.application.name=\u751F\u4EA7\u4E2D\u5FC3\u8282\u70B9 ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### diff --git a/pom.xml b/pom.xml index 421466c..176d237 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ true UTF-8 - 1.0.0.4-patch + 1.0.1-YZ 1.0.0-yfai 1.0.0.1-patch 1.0.0-yfai