装配件匹配提示优化

tags/yfai-pcn-ext-v1.4
王杰 11 months ago
parent cadf719f0a
commit 23b8e9fc51

@ -21,6 +21,9 @@ public interface IMesAssemblyExtService {
@ApiOperation(value = "获取装配件绑定记录")
List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, Integer dataSource, List<Long> sourceIdList);
@ApiOperation(value = "获取装配件绑定记录")
List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, String assemblySn);
@ApiOperation(value = "获取非排序装配件配置信息")
List<MesProductionAssemblyNosortContext> getProductionAssemblyNosortContextList(MesProdRuleContext prodRuleContext);

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
public interface IMesNumberRuleMatchDispatchService {
@ -10,6 +11,9 @@ public interface IMesNumberRuleMatchDispatchService {
default List<?> matchNumberRule(String organizeCode, String sn, List<?> numberRuleList) { return numberRuleList; }
@ApiOperation(value = "编码规则匹配")
default Boolean matchNumberRule(String organizeCode, String sn, Object... params) { return true; }
default Map<String, Object> matchNumberRule(String organizeCode, String sn, Object numberRuleObj) { return null; }
@ApiOperation(value = "编码规则匹配")
default Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) { return null; }
}

@ -110,6 +110,13 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
}
@Override
public List<MesProductionAssembly> getProductionAssemblyList(String organizeCode, String assemblySn) {
return productionAssemblyRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ASSEMBLY_SN},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), assemblySn});
}
//获取非排序装配件配置信息
@Override
public List<MesProductionAssemblyNosortContext> getProductionAssemblyNosortContextList(MesProdRuleContext prodRuleContext) {

@ -1,16 +1,19 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
*
@ -20,33 +23,28 @@ import org.springframework.stereotype.Service;
public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDispatchService {
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
private IMesAssemblyExtService assemblyExtService;
@Override
public Boolean matchNumberRule(String organizeCode, String sn, Object... params) {
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
// 校验正则表达式
Boolean result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
Map<String, Object> result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
if (!result) return false;
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result;
// 校验是否唯一
return validateUnique(organizeCode, sn);
List<MesProductionAssembly> productionAssemblyList = assemblyExtService.getProductionAssemblyList(organizeCode, sn);
}
Optional<MesProductionAssembly> optional = CollectionUtils.isEmpty(productionAssemblyList) ? null :
productionAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) == 0)).findFirst();
/**
*
* @param organizeCode
* @param sn
* @return
*/
private boolean validateUnique(String organizeCode, String sn) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(sn, MesPcnExtConstWords.ASSEMBLY_SN, ddlPackBean);
MesProductionAssembly productionAssembly = productionAssemblyRepository.getByProperty(ddlPackBean);
if (productionAssembly != null) {
return false;
if (null != optional && optional.isPresent()) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, String.format("条码[%s]状态[已装配]!", sn));
return result;
}
return true;
return result;
}
}

@ -1,14 +1,14 @@
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 cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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;
import java.util.HashMap;
import java.util.Map;
/**
*
@ -18,27 +18,43 @@ import java.util.regex.Pattern;
public class MesNumberRuleMatchCompareRangeService implements IMesNumberRuleMatchDispatchService {
@Override
public Boolean matchNumberRule(String organizeCode, String sn, Object... params) {
Object obj = params[0];
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;
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, false);
if (!MesProductionAssemblyContext.class.isAssignableFrom(params[0].getClass())) {
result.put(MesPcnExtConstWords.MESSAGE, "参数匹配规则信息不是装配件匹配规则!");
return result;
}
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (StringUtils.isEmpty(context.getMaxValue()) || StringUtils.isEmpty(context.getMinValue())) {
result.put(MesPcnExtConstWords.MESSAGE, "请检查匹配规则信息的[最大值/最小值]是否均维护!");
return result;
}
Double snValue;
try {
snValue = Double.parseDouble(sn);
} catch (NumberFormatException e) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描信息[%s]不匹配规则确认方式大小校验!", sn));
return result;
}
return true;
if (snValue > context.getMaxValue()) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描信息[%s]不匹配规则最大值[%s]!", sn, context.getMaxValue()));
return result;
}
if (snValue < context.getMinValue()) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("扫描信息[%s]不匹配规则最小值[%s]!", sn, context.getMinValue()));
return result;
}
result.put(MesPcnExtConstWords.RESULT, true);
return result;
}
}

@ -3,8 +3,8 @@ 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 cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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;
@ -14,7 +14,9 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Primary
@ -28,23 +30,63 @@ public class MesNumberRuleMatchDispatchService implements IMesNumberRuleMatchDis
List<Object> resultList = new ArrayList<>();
if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, "mesNumberRuleMatchRegularExpressionService", o, ((MesProdRuleNosortCfg) o).getInPartNoRule()));
if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRuleBackList(organizeCode, sn, resultList, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass(), o, ((MesProdRuleNosortCfg) o).getInPartNoRule()));
if (numberRuleList.get(0) instanceof MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfStrategyClass(((MesProductionAssemblyNosortContext) o).getMatchType()), o, ((MesProductionAssemblyNosortContext) o).getMatchRule()));
if (numberRuleList.get(0) instanceof MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRuleBackList(organizeCode, sn, resultList, 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, "mesNumberRuleMatchRegularExpressionService", o, ((MesProductionAssemblySortContext) o).getMatchRule()));
if (numberRuleList.get(0) instanceof MesProductionAssemblySortContext) numberRuleList.forEach(o -> matchNumberRuleBackList(organizeCode, sn, resultList, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfStrategyClass(((MesProductionAssemblySortContext) o).getMatchType()), o, ((MesProductionAssemblySortContext) o).getMatchRule()));
return resultList;
}
private void matchNumberRule(String organizeCode, String sn, List<Object> resultList, String strategyClass, Object... params) {
private List<Object> matchNumberRuleBackList(String organizeCode, String sn, List<Object> resultList, String strategyClass, Object... params) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn) || StringUtils.isEmpty(strategyClass) || null == params[0]) return;
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn) || StringUtils.isEmpty(strategyClass) || null == params[0]) return resultList;
Boolean result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchNumberRule(organizeCode, sn, params);
Map<String, Object> result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchNumberRule(organizeCode, sn, params);
if (result) resultList.add(params[0]);
if ((Boolean) result.get(MesPcnExtConstWords.RESULT)) resultList.add(params[0]);
return resultList;
}
@Override
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object numberRuleObj) {
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, false);
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sn) || null == numberRuleObj) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("请检查必要参数:工厂[%s]条码[%s]及规则匹配信息!", organizeCode, sn));
return result;
}
if (numberRuleObj instanceof MesProdRuleNosortCfg) return matchNumberRuleBackMap(organizeCode, sn, result, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass(), numberRuleObj, ((MesProdRuleNosortCfg) numberRuleObj).getInPartNoRule());
if (numberRuleObj instanceof MesProductionAssemblyNosortContext) return matchNumberRuleBackMap(organizeCode, sn, result, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfStrategyClass(((MesProductionAssemblyNosortContext) numberRuleObj).getMatchType()), numberRuleObj, ((MesProductionAssemblyNosortContext) numberRuleObj).getMatchRule());
if (numberRuleObj instanceof MesProductionAssemblySortContext) return matchNumberRuleBackMap(organizeCode, sn, result, MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfStrategyClass(((MesProductionAssemblySortContext) numberRuleObj).getMatchType()), numberRuleObj, ((MesProductionAssemblySortContext) numberRuleObj).getMatchRule());
return result;
}
private Map<String, Object> matchNumberRuleBackMap(String organizeCode, String sn, Map<String, Object> resultMap, String strategyClass, Object... params) {
if (StringUtils.isEmpty(strategyClass)) {
resultMap.put(MesPcnExtConstWords.MESSAGE, "规则匹配信息的匹配确认方式配置错误,未找到相应的匹配策略!");
return resultMap;
}
Map<String, Object> result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchNumberRule(organizeCode, sn, params);
if ((Boolean) result.get(MesPcnExtConstWords.RESULT)) result.put(MesPcnExtConstWords.DATA, params[0]);
return result;
}
}

@ -1,11 +1,14 @@
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.util.MesPcnExtConstWords;
import com.google.common.base.Objects;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -17,32 +20,46 @@ import java.util.regex.Pattern;
public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRuleMatchDispatchService {
@Override
public Boolean matchNumberRule(String organizeCode, String sn, Object... params) {
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, false);
if (StringUtils.isEmpty(params[1])) {
result.put(MesPcnExtConstWords.MESSAGE, "未维护匹配规则!");
return result;
}
String matchRule = params[1].toString();
return match(matchRule, sn);
if (!match(matchRule, sn)) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("条码[%s]不匹配规则[%s]!", sn, matchRule));
return result;
}
result.put(MesPcnExtConstWords.RESULT, true);
return result;
}
private /**static**/ boolean match(String ruleStr, String barCode) {
private /**static**/ Boolean match(String ruleStr, String barCode) {
if (StringUtils.isEmpty(ruleStr)) {
return false;
}
if (!ruleStr.contains("*") && !ruleStr.contains("?") && !ruleStr.contains(",")) {
if (!ruleStr.contains(MesPcnExtConstWords.ASTERISK) && !ruleStr.contains(MesPcnExtConstWords.QUESTION_MARK) && !ruleStr.contains(MesPcnExtConstWords.COMMA)) {
if (Objects.equal(ruleStr.toLowerCase(), barCode.toLowerCase())) {
return true;
}
return false;
}
String ruleArray[] = ruleStr.split(",");
String ruleArray[] = ruleStr.split(MesPcnExtConstWords.COMMA);
for (String rule : ruleArray) {
if (rule.contains("yyyyMMdd")) {
if (rule.contains(MesPcnExtConstWords.DATE_FORMAT_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")) {
} else if (rule.contains(MesPcnExtConstWords.DATE_FORMAT_POINT) || rule.contains(MesPcnExtConstWords.DATE_FORMAT_SLASH) || rule.contains(MesPcnExtConstWords.DATE_FORMAT_SEPARATOR)) {
String pattern = "\\d{4}[./-]\\d{2}[./-]\\d{2}";
Pattern regex = Pattern.compile(pattern);
Matcher matcher = regex.matcher(rule);
@ -52,7 +69,7 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul
String ruleNoSpecialChar = transfer(rule);
String barcodeNoSpecialChar = transfer(barCode);
///将规则转换为正则表达式,使用正则表达式进行匹配,正则中去除二维码的起始特殊符号
String regStr = "^" + ruleNoSpecialChar.toLowerCase().replace(")", "\\)").replace("?", "(?:.|\n){1}").replace("*", "(?:.|-\n)*").replace("[", "\\[") + "$";
String regStr = "^" + ruleNoSpecialChar.toLowerCase().replace(MesPcnExtConstWords.BRACKET_R, "\\)").replace(MesPcnExtConstWords.QUESTION_MARK, "(?:.|\n){1}").replace(MesPcnExtConstWords.ASTERISK, "(?:.|-\n)*").replace(MesPcnExtConstWords.SQUARE_BRACKETS_L, "\\[") + "$";
Pattern regex = Pattern.compile(regStr);
//end update
if (regex.matcher(barcodeNoSpecialChar.toLowerCase()).matches()) return true;
@ -65,15 +82,14 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul
public /**static**/ String transfer(String str){
// 1. 定义正则表达式,匹配特殊字符
String regex = "[^a-zA-Z0-9^\\s^*?[)>.:^/]]";
// 2. 使用正则表达式替换特殊字符为空字符串
return str.replaceAll(regex, "");
}
public static void main(String[] args) {
// public static void main(String[] args) {
// String sn = "M00061603-R80512000";
// String matchRule = "M00061596*";
// System.out.println(match(matchRule, sn));
}
// }
}

@ -2,10 +2,10 @@ 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.pojo.context.MesProductionAssemblyNosortContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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;
@ -14,9 +14,10 @@ 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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -33,48 +34,57 @@ public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchS
private IMesProduceSnExtService produceSnExtService;
@Override
public Boolean matchNumberRule(String organizeCode, String sn, Object... params) {
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, Arrays.asList(sn));
Map<String, Object> result = new HashMap<>();
result.put(MesPcnExtConstWords.RESULT, false);
if (!MesProductionAssemblyContext.class.isAssignableFrom(params[0].getClass())) {
result.put(MesPcnExtConstWords.MESSAGE, "参数匹配规则信息不是装配件匹配规则!");
return result;
}
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn);
if (CollectionUtils.isEmpty(produceSnList)) {
LOGGER.info("条码不存在");
return false;
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息不存在!", sn));
return result;
}
List<MesProduceSn> 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());
.filter(o -> (null != o && !StringUtils.isEmpty(o.getSnStatus()) && 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;
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息状态[未知]!", sn));
return result;
}
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;
MesProduceSn produceSn = standardList.get(0);
if (StringUtils.isEmpty(produceSn.getSnStatus()) || StringUtils.isEmpty(produceSn.getQcStatus()) || StringUtils.isEmpty(produceSn.getPartNo())) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息异常:状态[%s]质量[%s]零件号[%s]!", sn, produceSn.getSnStatus(), produceSn.getQcStatus(), produceSn.getPartNo()));
return result;
}
if (mesProduceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 &&
mesProduceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) {
LOGGER.info("条码:{}, 质量状态不合格 qcStatus={}", mesProduceSn.getProductSn(), mesProduceSn.getQcStatus());
return false;
if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息质量状态[%s]!", sn, MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
return result;
}
//创建/已完成/已拆解都可以被装配
if (mesProduceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) != 0 &&
mesProduceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) != 0 && mesProduceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) != 0) {
LOGGER.info("条码:{}, 条码状态未完成 snStatus={}", mesProduceSn.getProductSn(), mesProduceSn.getSnStatus());
return false;
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()) != 0 &&
produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) != 0 && produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) != 0) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息条码状态[%s]!", sn, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
return result;
}
Object obj = params[0];
if (!(obj instanceof MesProductionAssemblyNosortContext)) {
return false;
}
MesProductionAssemblyNosortContext context = (MesProductionAssemblyNosortContext) obj;
context.setProductSnId(mesProduceSn.getId());
if (!Objects.equal(context.getAssemblyPartNo(), mesProduceSn.getPartNo())) {
return false;
if (!((MesProductionAssemblyContext) params[0]).getPartNo().equals(produceSn.getPartNo())) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息零件号[%s]!", sn, produceSn.getPartNo()));
return result;
}
// 需要校验时效性
return true;
((MesProductionAssemblyContext) params[0]).setProductSnId(produceSn.getId());
result.put(MesPcnExtConstWords.RESULT, true);
return result;
}
}

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -21,7 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -114,8 +114,15 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
//判断是否存在未消费的装配件条码
Optional<MesEquipVariableCollectContext> optional = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
if (CollectionUtils.isEmpty(prodRuleContextList) || (null != optional && optional.isPresent()))
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
if (CollectionUtils.isEmpty(prodRuleContextList) || (null != optional && optional.isPresent())) {
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, stepResult.getMsg());
}
//保存上下文产品加工规则信息集合
productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
@ -196,14 +203,19 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
if (null == equipVariableCollectContext || equipVariableCollectContext.getIsConsume().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
//匹配规则
List<MesProductionAssemblyNosortContext> filterList = (List<MesProductionAssemblyNosortContext>)
numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), Stream.of(productionAssemblyNosortContext).collect(Collectors.toList()));
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext);
//匹配失败
if (CollectionUtils.isEmpty(filterList)) continue;
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
String msg = (String) result.get(MesPcnExtConstWords.MESSAGE);
stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg));
continue;
}
MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA);
//前道防错
if (!StringUtils.isEmpty(filterList.get(0).getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
@ -212,8 +224,8 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
}
//时效性验证
if (!StringUtils.isEmpty(filterList.get(0).getProductSnId())) {
Map<String, Object> result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filterList.get(0).getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
if (!StringUtils.isEmpty(filter.getProductSnId())) {
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE)));
continue;
@ -221,7 +233,7 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
}
//装配件清单该数据标记已装配
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId());
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
}

@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
@ -145,8 +144,12 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
}
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));
this.sendMessage(reqBean, new StationResultBean().writeDbLog().scanInfo(assemblySn),
String.format("%s%s", stepResult.getMsg(), StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), stepResult.getMsg());
}
@ -259,14 +262,19 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
}
//匹配规则
List<MesProductionAssemblyNosortContext> filterList = (List<MesProductionAssemblyNosortContext>)
numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), Stream.of(productionAssemblyNosortContext).collect(Collectors.toList()));
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext);
//匹配失败
if (CollectionUtils.isEmpty(filterList)) continue;
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
String msg = (String) result.get(MesPcnExtConstWords.MESSAGE);
stepResult.obj(String.format("%s%s", StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.EMPTY : stepResult.getObj(), StringUtils.isEmpty(msg) ? MesPcnExtConstWords.EMPTY : msg));
continue;
}
MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA);
//前道防错
if (!StringUtils.isEmpty(filterList.get(0).getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
@ -275,8 +283,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
}
//时效性验证
if (!StringUtils.isEmpty(filterList.get(0).getProductSnId())) {
Map<String, Object> result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filterList.get(0).getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
if (!StringUtils.isEmpty(filter.getProductSnId())) {
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(), result.get(MesPcnExtConstWords.MESSAGE)));
@ -290,7 +298,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
flag = true;
//装配件清单该数据标记已装配 (如果是自制件赋值productSnId)
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId());
productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filter.getProductSnId());
}

@ -160,9 +160,9 @@ public class MesAssemblyReadStepService extends BaseStepService {
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的装配件条码,持续监听中..", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}

@ -103,7 +103,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
//保存进料主条码数据
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList);
}
} else resultBean.checkRepeatType(false);
//显示装配件信息
showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList);

@ -91,7 +91,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
//保存进料主条码数据
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList);
}
} else resultBean.checkRepeatType(false);
if (!stepResult.isCompleted()) return stepResult;
@ -121,7 +121,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
if (null == productionPsInContext || productionPsInContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue;
//【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单)
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleSortContext(
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleSortContext(
new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(
productionPartContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()).getForeignKey())));

@ -100,7 +100,7 @@ public class MesEquipByPassReadStepService extends BaseStepService {
//匹配BYPASS信号有效性
Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), String.format("读取到设备[%s]BYPASS信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(false), String.format("读取到设备[%s]BYPASS信号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//发送BYPASS信号给客户端
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BYPASS_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(result ? MesExtEnumUtil.COLOR.GREEN.getValue() : MesExtEnumUtil.COLOR.RED.getValue()));

@ -145,9 +145,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}

@ -138,7 +138,7 @@ public class MesMembraneSignalReadStepService extends BaseStepService {
Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MEMBRANE_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
if (!result) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("读取设备[%s]胎膜切换信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]胎膜切换信号,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);

@ -151,9 +151,9 @@ public class MesMouldNoReadStepService extends BaseStepService {
//没有有效的数据: 设置常变值 或者 当前没有头道模具号或生产工单信息
if (CollectionUtils.isEmpty(equipVariableCollectContextList) && (equipLogDispatchContext.getNeedNewValue() || !StringUtils.isEmpty(isReadMultiCavityCfg))) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的模具号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的模具号,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
} else if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {

@ -181,7 +181,7 @@ public class MesProductResultReadStepService extends BaseStepService {
String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey())));
}
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("读取设备[%s]加工结果的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工结果,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);

@ -142,9 +142,9 @@ public class MesProductSnReadStepService extends BaseStepService {
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的主条码,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的主条码,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}

@ -144,9 +144,9 @@ public class MesProductionPartNoReadStepService extends BaseStepService {
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的产出零件号,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的产出零件号,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}

@ -138,7 +138,7 @@ public class MesReadySignalReadStepService extends BaseStepService {
Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.READY_SIGNAL.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
if (!result) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("读取设备[%s]就绪信号的数据变量值匹配接口逻辑规则失败,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]就绪信号,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);

@ -146,9 +146,9 @@ public class MesWorkOrderReadStepService extends BaseStepService {
//没有有效的数据
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
String.format("当前未读取到设备[%s]有效的加工单,持续监听中...%s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeatType(),
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean,
stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的加工单,持续监听中...", cellEquipContext.getEquipmentName())),
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}

@ -155,6 +155,8 @@ public class MesPcnExtConstWords {
public static final String RESULT = "result";
// 信息
public static final String MESSAGE = "message";
// 数据
public static final String DATA = "data";
// 开模记录ID
public static final String MOULD_RECORD_ID = "mouldRecordId";
// 工步代码
@ -176,7 +178,11 @@ public class MesPcnExtConstWords {
// 时间格式
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_FORMAT_SEPARATOR = "yyyy-MM-dd";
public static final String DATE_FORMAT_SHORT = "yyMMdd";
public static final String DATE_FORMAT_yyyyMMdd = "yyyyMMdd";
public static final String DATE_FORMAT_POINT = "yyyy.MM.dd";
public static final String DATE_FORMAT_SLASH = "yyyy/MM/dd";
//设备数据变量读写访问配置
@ -279,10 +285,16 @@ public class MesPcnExtConstWords {
public static final String COLON = ":";
// %
public static final String PERCENT = "%";
// ?
public static final String QUESTION_MARK = "?";
// [
public static final String SQUARE_BRACKETS_L = "[";
// ]
public static final String SQUARE_BRACKETS_R = "]";
// (
public static final String BRACKET_L = "(";
// )
public static final String BRACKET_R = ")";
// *
public static final String ASTERISK = "*";
//-

Loading…
Cancel
Save