diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java index da49646..20ebe22 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentLogService.java @@ -61,6 +61,8 @@ public class MesEquipmentLogService implements IMesEquipmentLogService { // 筛选出该设备中设备变量属性对应的数据采集信息 equipmentLogList = equipmentLogList.stream().filter(mesEquipmentLog -> equipVariableIdList.contains(mesEquipmentLog.getEquipVariableId())).collect(Collectors.toList()); + LOGGER.info("需要保存的工艺参数信息: list ={}", equipmentLogList); + Long recordId = snowflakeIdMaker.nextId(); MesEquipmentRecord mesEquipmentRecord =new MesEquipmentRecord(); @@ -71,8 +73,10 @@ public class MesEquipmentLogService implements IMesEquipmentLogService { ConvertBean.serviceModelInitialize(mesEquipmentRecord, actorMessage.getUserName()); String key = getKey(mesEquipmentRecord); + LOGGER.info("key ={}", key); // todo 目前没有适合的方法,需要优化一下 equipmentLogList.forEach(equipLog -> { + redisMesPcn.putList(key, equipLog); }); /* MesEq diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java new file mode 100644 index 0000000..5194f62 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchCompareRangeService.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +import com.google.common.base.Objects; +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; + +/** + * 正则表达式匹配 + */ +@Slf4j +@Service +public class MesNumberRuleMatchCompareRangeService implements IMesNumberRuleMatchDispatchService { + + @Override + public Boolean matchNumberRule(String organizeCode, String sn, Object... params) { + Object obj = params[0].toString(); + if (obj instanceof MesProductionAssemblyNosortContext) { + MesProductionAssemblyNosortContext context = (MesProductionAssemblyNosortContext) obj; + if (StringUtils.isEmpty(context.getMaxValue()) || StringUtils.isEmpty(context.getMinValue())) { + return false; + } + try { + Double snValue = Double.parseDouble(sn); + if (snValue > context.getMaxValue()) { + return false; + } + if (snValue < context.getMinValue()) { + return false; + } + } catch (Exception e) { + return false; + } + } else { + return false; + } + return true; + } +} 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 3e2d986..40a1d7a 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 @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortConte import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; @@ -29,7 +30,7 @@ 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 MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProductionAssemblyNosortContext) o).getMatchRule())); + if (numberRuleList.get(0) instanceof MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfStrategyClass(((MesProductionAssemblyNosortContext) o).getMatchType()),o, ((MesProductionAssemblyNosortContext) o).getMatchRule())); if (numberRuleList.get(0) instanceof MesProductionAssemblySortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProductionAssemblySortContext) o).getMatchRule())); 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 36fa84f..ed60352 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 @@ -2,8 +2,6 @@ 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 jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java new file mode 100644 index 0000000..0099741 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesNumberRuleMatchSnService.java @@ -0,0 +1,79 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.MesPojoVersionServiceImpl; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.google.common.base.Objects; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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.Comparator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * 自制件规则匹配 + */ +@Slf4j +@Service +public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MesNumberRuleMatchSnService.class); + + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Override + public Boolean matchNumberRule(String organizeCode, String sn, Object... params) { + + List produceSnList = produceSnExtService.getProduceSnList(organizeCode, Arrays.asList(sn)); + if (CollectionUtils.isEmpty(produceSnList)) { + LOGGER.info("条码不存在"); + return false; + } + List standardList = produceSnList.stream() + .filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0)) + .sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(standardList)) { + LOGGER.info("匹配到的条码不存在"); + return false; + } + MesProduceSn mesProduceSn = standardList.get(0); + if (StringUtils.isEmpty(mesProduceSn.getSnStatus()) || StringUtils.isEmpty(mesProduceSn.getQcStatus()) || StringUtils.isEmpty(mesProduceSn.getPartNo())) { + LOGGER.info("snStatus 为空, 或者 qcStatus为空, 或者 partNo 为空"); + return false; + } + if (!Objects.equal(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(), mesProduceSn.getQcStatus())) { + LOGGER.info("条码:{}, 质量状态不合格 qcStatus={}", mesProduceSn.getProductSn(), mesProduceSn.getQcStatus()); + return false; + } + if (!Objects.equal(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue(), mesProduceSn.getSnStatus())) { + LOGGER.info("条码:{}, 条码状态未完成 snStatus={}", mesProduceSn.getProductSn(), mesProduceSn.getSnStatus()); + return false; + } + Object obj = params[0].toString(); + if (!(obj instanceof MesProductionAssemblyNosortContext)) { + return false; + } + MesProductionAssemblyNosortContext context = (MesProductionAssemblyNosortContext) obj; + if (!Objects.equal(context.getAssemblyPartNo(), mesProduceSn.getPartNo())) { + return false; + } + // 需要校验时效性 + + return true; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java index fd14946..1705085 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java @@ -1,21 +1,25 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; -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.IWriteVariableService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; 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 cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import java.util.Date; import java.util.List; import java.util.Objects; @@ -35,6 +39,11 @@ public class WriteVariableService implements IWriteVariableService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; /** * 写值 * @param value @@ -62,6 +71,14 @@ public class WriteVariableService implements IWriteVariableService { public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey, Integer index) { List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); List productionPsOutContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); + List productionPsInContexts = mesProductionDispatchContextStepService.getProductionPsInContext(reqBean); + + + + String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); + MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + MesProductionPartContext mesProductionPartContext; MesProductionPsOutContext productionPsOutSn; @@ -70,18 +87,50 @@ public class WriteVariableService implements IWriteVariableService { mesProductionPartContext = productionPartContextList.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null); productionPsOutSn = productionPsOutContexts.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null); String newValue = ""; - if (value.contains("%")) { - if (value.contains("partNo")) { - newValue = mesProductionPartContext.getPartNo(); - } else if (value.contains("orderNo")) { - newValue = mesProductionPartContext.getWorkOrderNo(); - } else if (value.contains("sn")) { - newValue = productionPsOutSn.getCustSn(); - } - return newValue; - } else { - return value; + if (StringUtils.isEmpty(value)) { + return null; + } + switch (value.toUpperCase()) { + case "%RESULT%" : newValue = mesProductionPartContext.getPartNo(); break; + case "%PARAM%": newValue = mesProductionPartContext.getWorkOrderNo(); break; + case "%ORDERCODE%": newValue = mesProductionPartContext.getWorkOrderNo(); break; + case "%CUSTPARTNO%": newValue = mesProductionPartContext.getCustPartNo(); break; + case "%EMPLOYEENO%": newValue = reqBean.getUserInfo(); break;///当前操作员工号 用户名 + case "%BARCODE%": newValue = productionPsOutContexts.get(0).getProductSn(); break;// 条码 + case "%BARCODE2%": newValue = productionPsOutContexts.get(1).getProductSn(); break;///条码 + case "%BARCODE3%": newValue = productionPsOutContexts.get(2).getProductSn(); break;///条码 + case "%BARCODE4%": newValue = productionPsOutContexts.get(3).getProductSn(); break;///条码 + case "%BARCODE5%": newValue = productionPsOutContexts.get(4).getProductSn(); break;///条码 + case "%BARCODE6%": newValue = productionPsOutContexts.get(5).getProductSn(); break;///条码 + case "%BARCODE7%": newValue = productionPsOutContexts.get(6).getProductSn(); break;///条码 + case "%BARCODE8%": newValue = productionPsOutContexts.get(7).getProductSn(); break;///条码 + case "%BARCODE9%": newValue = productionPsOutContexts.get(8).getProductSn(); break;///条码 + case "%BARCODE10%": newValue = productionPsOutContexts.get(9).getProductSn(); break;///条码 + case "%BARCODE11%": newValue = productionPsOutContexts.get(10).getProductSn(); break;///条码 + case "%BARCODE12%": newValue = productionPsOutContexts.get(11).getProductSn(); break;///条码 + case "%BARCODE13%": newValue = productionPsOutContexts.get(12).getProductSn(); break;///条码 + case "%BARCODE14%": newValue = productionPsOutContexts.get(13).getProductSn(); break;///条码 + case "%BARCODE15%": newValue = productionPsOutContexts.get(14).getProductSn(); break;///条码 + case "%BARCODE16%": newValue = productionPsOutContexts.get(15).getProductSn(); break;///条码 + case "%BARCODE17%": newValue = productionPsOutContexts.get(16).getProductSn(); break;///条码 + case "%BARCODE18%": newValue = productionPsOutContexts.get(17).getProductSn(); break;///条码 + case "%BARCODE19%": newValue = productionPsOutContexts.get(18).getProductSn(); break;///条码 + case "%BARCODE20%": newValue = productionPsOutContexts.get(19).getProductSn(); break;///条码 + case "%CREATEDATE%": newValue = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); break;///加工记录的创建时间 + case "%CREATEUSER%": newValue = reqBean.getUserInfo(); break;///当前操作员工号 用户名 + case "%SHIFT%": newValue = mesProdShiftKvBean.getShiftGroup(); break;///当前操作员工号 用户名 + //case "%STATUS%": newValue = productionPsInContexts.get(0).get() +"" ; break;//进料条码状态 + // case "%CUSTORDERCOD%": newValue = mesProductionPartContext.getCustOrderNo(); break;///客户订单号 + case "%PARTNO%": newValue = mesProductionPartContext.getPartNo(); break;///工单对应的零件号 + //case "%VINCODE%": newValue = mesProductionPartContext.getv(); break;///工单对应的vincode + case "%SEQUENCE%": newValue = reqBean.getUserInfo(); break;///工单顺序号 不是生产顺序号 + case "%CUSTBARCODE%": newValue = productionPsOutContexts.get(0).getCustSn(); break;///客户条码 + case "%GETDATE%": newValue = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); break;///客户条码 + + default: + newValue = value; } + return newValue; } else { if (index != null && foreignKey == null) { mesProductionPartContext = productionPartContextList.get(index); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java index 4ba0250..0a17dce 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.BaseMesScheduleJob; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -16,6 +17,8 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,6 +37,9 @@ import java.util.stream.Collectors; @Service("mesProductionRecordGenerateStepService") public class MesProductionRecordGenerateStepService extends BaseStepService { + public static final Logger LOGGER = LoggerFactory.getLogger(MesProductionRecordGenerateStepService.class); + + @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService;