From b768644b407e780ce8dcea0095521447e0f36862 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: Sat, 15 Jun 2024 18:28:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E6=AD=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesNumberRuleMatchDispatchService.java | 4 + ...MesNumberRuleMatchRegularExpressionService.java | 109 ++++++++++++++++++++- .../strategy/AbstractWriteVariableService.java | 41 ++++++++ .../strategy/CommonWriteVariableService.java | 18 ++++ .../strategy/OrderWriteVariableService.java | 62 ++++++++++++ .../strategy/PartWriteVariableService.java | 63 ++++++++++++ .../step/MesSaveAssemblyStepService.java | 105 ++++++++++++++++++++ .../MesSendCavityGroupParamsCmdStepService.java | 49 +++++---- .../step/MesSendEquipParamsCmdStepService.java | 99 +++++++++++-------- .../MesProductionCustomContextStepService.java | 2 +- 10 files changed, 483 insertions(+), 69 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/AbstractWriteVariableService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/CommonWriteVariableService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/OrderWriteVariableService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/PartWriteVariableService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveAssemblyStepService.java 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 index 0b3fc8f..6cc23d6 100644 --- 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 @@ -2,6 +2,7 @@ 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.i3plus.pojo.mes.bean.MesProdRuleSortCfg; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; @@ -26,6 +27,9 @@ public class MesNumberRuleMatchDispatchService implements IMesNumberRuleMatchDis if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule())); + if (numberRuleList.get(0) instanceof MesProdRuleSortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule())); + + return resultList; } 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 8f8c889..9095ac5 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 @@ -1,8 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import com.google.common.base.Objects; +import jdk.nashorn.internal.runtime.regexp.joni.Regex; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * 正则表达式匹配 @@ -16,10 +22,111 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul String matchRule = params[1].toString(); + if (sn.matches(matchRule)){ + return true; + } + + return false; + } - return true; + private boolean match(String ruleStr, String barCode) { + if (StringUtils.isEmpty(ruleStr)) { + return false; + } + if (!ruleStr.contains("*") && !ruleStr.contains("?") && !ruleStr.contains(",")) { + if (Objects.equal(ruleStr.toLowerCase(), barCode.toLowerCase())) { + return true; + } + return false; + } + String ruleArray[] = ruleStr.split(","); + for (String rule : ruleArray) { + if (rule.contains("yyyyMMdd")) { + String pattern = "\\d{4}\\d{2}\\d{2}"; + Pattern regex = Pattern.compile(pattern); + Matcher matcher = regex.matcher(rule); + return matcher.matches(); + } else if (rule.contains("yyyy.MM.dd") || rule.contains("yyyy/MM/dd") || rule.contains("yyyy-MM-dd")) { + String pattern = "\\d{4}[./-]\\d{2}[./-]\\d{2}"; + Pattern regex = Pattern.compile(pattern); + Matcher matcher = regex.matcher(rule); + return matcher.matches(); + } + } + return false; + } + public static void main(String[] args) { + String sn = "1574110000123"; + String matchRule = "1574110000*"; + System.out.println(sn.matches(matchRule)); } +/* + /// + /// 装配件BarCode规则是否匹配 + /// + /// 规则字串 + /// 条码 + /// + public static Boolean BarcodeRuleIsMatch(String ruleStr, String barCode) + { + if (String.IsNullOrEmpty(ruleStr)) + return false; + if (!ruleStr.Contains("*") && !ruleStr.Contains("?") && !ruleStr.Contains(",")) + { + if (ruleStr.ToLower() == barCode.ToLower()) + return true; + else + return false; + } + ///首先规则可以是多种以逗号隔开,将其先拆到数组中 + string[] rules = ruleStr.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries); + ///以当前扫入的条码匹配每一条规则,当某条匹配上后直接返回true + foreach (var rule in rules) + { + if (rule.Contains("yyyyMMdd")) + { + Regex reg = new Regex(@"\d{4}[年/.-]?\d{1,2}[月./-]?(\d{1,2}日?)?"); + MatchCollection mc = reg.Matches(barCode); + if (reg.IsMatch(barCode.ToLower())) return true; + } + else if (rule.Contains("yyyy.MM.dd")) + { + Regex reg = new Regex(@"\d{4}[年/.-]?\d{1,2}[月./-]?(\d{1,2}日?)?"); + MatchCollection mc = reg.Matches(barCode); + if (reg.IsMatch(barCode.ToLower())) return true; + } + else if (rule.Contains("yyyy/MM/dd")) + { + Regex reg = new Regex(@"\d{4}[年/.-]?\d{1,2}[月./-]?(\d{1,2}日?)?"); + MatchCollection mc = reg.Matches(barCode); + if (reg.IsMatch(barCode.ToLower())) return true; + } + else if (rule.Contains("yyyy-MM-dd")) + { + Regex reg = new Regex(@"\d{4}[年/.-]?\d{1,2}[月./-]?(\d{1,2}日?)?"); + MatchCollection mc = reg.Matches(barCode); + if (reg.IsMatch(barCode.ToLower())) return true; + } + else if (rule.Contains("yyyy-MM-dd hh:mm:ss")) + { + Regex reg = new Regex(@"\d{4}[年/.-]?\d{1,2}[月./-]?(\d{1,2}日?)?"); + MatchCollection mc = reg.Matches(barCode); + if (reg.IsMatch(barCode.ToLower())) return true; + } + string ruleNoSpecialChar = StringUtil.TrimSpecialChars2(rule); + string barcodeNoSpecialChar = StringUtil.TrimSpecialChars2(barCode); + ///将规则转换为正则表达式,使用正则表达式进行匹配,正则中去除二维码的起始特殊符号 + //update by huxj 2020.04.07 添加二维码前缀正则匹配 + var regStr = "^" + ruleNoSpecialChar.ToLower().Replace(")", @"\)").Replace("?", @"(?:.|\n){1}").Replace("*", @"(?:.|-\n)*").Replace("[", @"\[") + "$"; + //Regex rgx = new Regex("^" + ruleNoSpecialChar.ToLower().Replace("?", @"(?:.|\n){1}").Replace("*", @"(?:.|\n)*") + "$"); + Regex rgx = new Regex(regStr); + //end update + if (rgx.IsMatch(barcodeNoSpecialChar.ToLower())) return true; + if (rule == barCode) return true; + } + return false; + }*/ } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/AbstractWriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/AbstractWriteVariableService.java new file mode 100644 index 0000000..ff42c52 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/AbstractWriteVariableService.java @@ -0,0 +1,41 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 发送加工参数的抽象类 + * @Author : zxw + **/ +public abstract class AbstractWriteVariableService { + + @Autowired + private IMesEquipVariableRwExtService equipVariableRwExtService; + + /** + * 写值 + * @param value + * @param equipmentVariable + * @param kepwareFlag + */ + public MesEquipVariableRwResult writeVariable(StationRequestBean reqBean, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey) { + // 需要不同的策略不同的转换方式 + String newValue = transferValue(reqBean, value, foreignKey); + MesEquipVariableRwResult mesEquipVariableRwResult = equipVariableRwExtService.writeVariable(newValue, equipmentVariable, kepwareFlag); + /* if (mesEquipVariableRwResult.getIsSuccessed()) { + handlerValue(); + }*/ + return mesEquipVariableRwResult; + } + + + public abstract String transferValue(StationRequestBean reqBean, String value, Integer foreignKey); + +/* public abstract void handlerValue(); + + public abstract void removeValue();*/ +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/CommonWriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/CommonWriteVariableService.java new file mode 100644 index 0000000..f12f9c7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/CommonWriteVariableService.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy; + +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import io.swagger.models.auth.In; +import org.springframework.stereotype.Service; + +/** + * 发送工单号 + */ +@Service +public class CommonWriteVariableService extends AbstractWriteVariableService{ + + + @Override + public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey) { + return value; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/OrderWriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/OrderWriteVariableService.java new file mode 100644 index 0000000..8843bb3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/OrderWriteVariableService.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +/** + * 发送工单号 + */ +@Service +public class OrderWriteVariableService extends AbstractWriteVariableService{ + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + private Map map = new HashMap<>(); + + private String orderNo; + + @Override + public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey) { + + List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); + + MesProductionPartContext mesProductionPartContext = productionPartContextList.stream().filter(pductionPartContext -> Objects.equals(pductionPartContext.getForeignKey(), foreignKey)).findFirst().orElse(null); + + if (mesProductionPartContext != null) { + return mesProductionPartContext.getWorkOrderNo(); + } + /* + for (MesProductionPartContext mesProductionPartContext : productionPartContextList) { + + if (orderNoList.contains(mesProductionPartContext.getWorkOrderNo())) { + continue; + } + orderNo = mesProductionPartContext.getWorkOrderNo(); + return mesProductionPartContext.getWorkOrderNo(); + }*/ + return null; + } + + /* public void addList(String orderNo){ + orderNoList.add(orderNo); + } + + @Override + public void handlerValue() { + orderNoList.add(this.orderNo); + } + + @Override + public void removeValue() { + orderNoList.clear(); + orderNo = null; + }*/ +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/PartWriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/PartWriteVariableService.java new file mode 100644 index 0000000..d28f03a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/strategy/PartWriteVariableService.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 发送物料号 + */ +@Service +public class PartWriteVariableService extends AbstractWriteVariableService{ + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + private Map map = new HashMap<>(); + + private String orderNo; + + @Override + public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey) { + + List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); + + MesProductionPartContext mesProductionPartContext = productionPartContextList.stream().filter(pductionPartContext -> Objects.equals(pductionPartContext.getForeignKey(), foreignKey)).findFirst().orElse(null); + + if (mesProductionPartContext != null) { + return mesProductionPartContext.getPartNo(); + } + /* + for (MesProductionPartContext mesProductionPartContext : productionPartContextList) { + + if (orderNoList.contains(mesProductionPartContext.getWorkOrderNo())) { + continue; + } + orderNo = mesProductionPartContext.getWorkOrderNo(); + return mesProductionPartContext.getWorkOrderNo(); + }*/ + return null; + } + + /* public void addList(String orderNo){ + orderNoList.add(orderNo); + } + + @Override + public void handlerValue() { + orderNoList.add(this.orderNo); + } + + @Override + public void removeValue() { + orderNoList.clear(); + orderNo = null; + }*/ +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveAssemblyStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveAssemblyStepService.java new file mode 100644 index 0000000..95a2fcd --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveAssemblyStepService.java @@ -0,0 +1,105 @@ +/* +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.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +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.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +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.google.common.base.Objects; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +*/ +/** + * @Description : 保存装配件 + * @Author : zxw + **//* + +@Slf4j +@Service +public class MesSaveAssemblyStepService 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; + + @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); + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + */ +/** + * 获取上下文 + *//* + + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + + List mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); + + List mesProductionRecords = new ArrayList<>(); + mesProduceSnContexts.forEach(mesProductionPsOutContext -> { + + MesProductionRecord mesProductionRecord = getMesProductionRecord(productionProcessContext, mesProductionPsOutContext, reqBean); + ConvertBean.serviceModelInitialize(mesProductionRecord, reqBean.getUserInfo()); + mesProductionRecords.add(mesProductionRecord); + }); + + mesProductionRecordRepository.saveAll(mesProductionRecords); + if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCell.getIsCountFinish())) { + // 保存班次加工数量上下文 + productionCustomContextStepService.addProductionStatisticsContext(reqBean,mesProduceSnContexts.size()); + } + + 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/MesSendCavityGroupParamsCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java index de5fdc7..e30af40 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendCavityGroupParamsCmdStepService.java @@ -3,9 +3,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; 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.MesProdRuleContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService; +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.bean.DdlPackBean; @@ -22,6 +21,7 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.repository.MesCavityGroupDetailCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -103,42 +103,26 @@ public class MesSendCavityGroupParamsCmdStepService extends BaseStepService { DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean); List mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// + String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); + AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); + DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean); MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean); if (mesEquipmentVariable == null) { continue; } - execSendEquipParamsCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel())); + execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null); } } } - private StepResult execSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, - MesCellEquipContext cellEquipContext, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag) { - - //最大重试次数[工步参数] - Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); - - MesEquipVariableRwResult equipVariableRwResult; - for (int i = 1; i <= maxRetryTimes; i ++) { - //写值 - equipVariableRwResult = equipVariableRwExtService.writeVariable(value, equipmentVariable, kepwareFlag); - this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, + String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey) { - if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); - - if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode())); - - 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); - } + equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey); - execSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - - return stepResult; } @@ -152,4 +136,17 @@ public class MesSendCavityGroupParamsCmdStepService extends BaseStepService { return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; } + private String getStrateClass(String value) { + + String strategyClass = "commonWriteVariableService"; + + if (value.contains("orderNo")) { + strategyClass = "OrderWriteVariableService"; + } else if (value.contains("partNo")) { + strategyClass = "PartWriteVariableService"; + } else if (value.contains("sn")) { + strategyClass = "SnWriteVariableService"; + } + return strategyClass; + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java index d93c888..4dbeb9c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java @@ -1,21 +1,21 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.strategy.AbstractWriteVariableService; 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.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesDefectWarnConfig; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.model.*; import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -23,9 +23,11 @@ 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.Optional; +import java.util.stream.Collector; import java.util.stream.Collectors; /** @@ -43,8 +45,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { private IMesProductionDispatchContextStepService productionDispatchContextStepService; - @Autowired - private IMesEquipVariableRwExtService equipVariableRwExtService; + @Autowired private MesEquipmentVariableRepository mesEquipmentVariableRepository; @@ -74,49 +75,53 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { if (CollectionUtils.isEmpty(prodRuleContextList)) { return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数"); } - // 获取加工参数 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getNumEqualPack(prodRuleContextList.get(0).getPid(), "sourceId", ddlPackBean); - List mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); - mesEquipmentProdParamCfgs.forEach(mesEquipmentProdParamCfg -> { - // - DdlPackBean packBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); - MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); - if (mesEquipmentVariable == null) { - return; - } - execSendEquipParamsCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext,mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel())); - }); - - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送加工参数成功"); - } - - private StepResult execSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, - MesCellEquipContext cellEquipContext, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag) { - - //最大重试次数[工步参数] - Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); + List mesEquipmentVariableList = new ArrayList<>(); + List mesEquipmentProdParamCfgList = new ArrayList<>(); + + for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) { + // 获取加工参数 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(mesProdRuleContext.getPid(), "sourceId", ddlPackBean); + List mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); + for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// + + String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); + AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); + MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); + if (mesEquipmentVariable == null) { + continue; + } + mesEquipmentVariableList.add(mesEquipmentVariable); + mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); + execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), mesProdRuleContext.getForeignKey()); - MesEquipVariableRwResult equipVariableRwResult; + } + } - for (int i = 1; i <= maxRetryTimes; i ++) { - //写值 - equipVariableRwResult = equipVariableRwExtService.writeVariable(value, equipmentVariable, kepwareFlag); - this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + Map> map = mesEquipmentProdParamCfgList.stream().collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getMatchRule)); + Map> mapVariable = mesEquipmentVariableList.stream().collect(Collectors.groupingBy(mesEquipmentVariable -> mesEquipmentVariable.getId() + "")); - if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage())); + /* map.forEach((k, v) -> { + String strategyClass = getStrateClass(k); + AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); + v.stream().forEach(mesEquipmentProdParamCfg -> { + MesEquipmentVariable mesEquipmentVariable = mapVariable.get(mesEquipmentProdParamCfg.getEquipVariableId()+"").get(0); + execSendEquipParamsCmd(equipVariableRwExtService, reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel())); + }); + equipVariableRwExtService.removeValue(); + });*/ - if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode())); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送加工参数成功"); + } - 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); - } + private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, + String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey) { - execSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey); - return stepResult; } @@ -129,5 +134,17 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { } return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; } + private String getStrateClass(String value) { + + String strategyClass = "commonWriteVariableService"; + if (value.contains("orderNo")) { + strategyClass = "OrderWriteVariableService"; + } else if (value.contains("partNo")) { + strategyClass = "PartWriteVariableService"; + } else if (value.contains("sn")) { + strategyClass = "SnWriteVariableService"; + } + return strategyClass; + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 1482e79..6cb4005 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -158,7 +158,7 @@ public class MesProductionCustomContextStepService extends BaseStepService imple //获取上下文班次班组信息 @Override public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { - String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode), workCenterCode); + String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null; }