装配件匹配策略 规则且唯一 注解不生效 问题解决

tags/yfai-pcn-ext-v1.3
王杰 9 months ago
parent 8df0968991
commit 1df0d9bbac

@ -1,20 +1,17 @@
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.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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
*
*/
@ -22,24 +19,19 @@ import javax.annotation.Resource;
@Service
public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDispatchService {
private static final Logger LOGGER = LoggerFactory.getLogger(MesNumberRuleMatchAndUniqueService.class);
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Resource
@Qualifier("mesNumberRuleMatchRegularExpressionService")
private IMesNumberRuleMatchDispatchService mesNumberRuleMatchDispatchService;
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
@Override
public Boolean matchNumberRule(String organizeCode, String sn, Object... params) {
// 校验正则表达式
boolean flag = mesNumberRuleMatchDispatchService.matchNumberRule(organizeCode, sn, params);
Boolean result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
if (!result) return false;
// 校验是否唯一
boolean uniqueFlag = validateUnique(organizeCode, sn);
return validateUnique(organizeCode, sn);
return flag && uniqueFlag;
}
/**
@ -50,7 +42,7 @@ public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDi
*/
private boolean validateUnique(String organizeCode, String sn) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(sn,"assemblySn", ddlPackBean);
DdlPreparedPack.getStringEqualPack(sn, MesPcnExtConstWords.ASSEMBLY_SN, ddlPackBean);
MesProductionAssembly productionAssembly = productionAssemblyRepository.getByProperty(ddlPackBean);
if (productionAssembly != null) {
return false;

@ -28,11 +28,11 @@ 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 -> matchNumberRule(organizeCode, sn, resultList, "mesNumberRuleMatchRegularExpressionService", 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 -> matchNumberRule(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 -> matchNumberRule(organizeCode, sn, resultList, "mesNumberRuleMatchRegularExpressionService", o, ((MesProductionAssemblySortContext) o).getMatchRule()));
return resultList;

@ -25,7 +25,7 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul
}
private boolean match(String ruleStr, String barCode) {
private /**static**/ boolean match(String ruleStr, String barCode) {
if (StringUtils.isEmpty(ruleStr)) {
return false;
}
@ -62,7 +62,7 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul
return false;
}
public String transfer(String str){
public /**static**/ String transfer(String str){
// 1. 定义正则表达式,匹配特殊字符
String regex = "[^a-zA-Z0-9^\\s^*?[)>.:^/]]";
@ -72,8 +72,8 @@ public class MesNumberRuleMatchRegularExpressionService implements IMesNumberRul
}
public static void main(String[] args) {
String sn = "1574110000123";
String matchRule = "1574110000*";
System.out.println(sn.matches(matchRule));
// String sn = "M00061603-R80512000";
// String matchRule = "M00061596*";
// System.out.println(match(matchRule, sn));
}
}

@ -65,8 +65,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean);
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 1 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
@ -86,8 +84,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//获取上下文进料零件条码信息集合
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 2 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//验证是否存在待绑定数据
Boolean IsNeedScanAssembly = checkIsNeedScanAssembly(prodRuleContextList);
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
@ -99,8 +95,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
if (!hasUnBindAssembly && !CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() >= needQty && !productionDispatchContextStepService.checkProductionPsOutIsExistContext(reqBean))
((IStepService) SpringContextsUtil.getBean("mesProductSnGenerateStepService")).executeInState(reqBean);
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 3 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码
if (!IsNeedScanAssembly || !hasUnBindAssembly)
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
@ -120,8 +114,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
Boolean result = doHandleMatchAssembly(reqBean, resultBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip);
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 8 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//验证是否存在待绑定数据
hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
@ -133,13 +125,9 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
}
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 9 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//全部匹配完毕,存在进料且进料数量满足腔数的时候直接调用 生成零件条码工步
if (!hasUnBindAssembly && !CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() >= needQty) ((IStepService) SpringContextsUtil.getBean("mesProductSnGenerateStepService")).executeInState(reqBean);
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 10 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码
if (!hasUnBindAssembly)
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult,
@ -157,8 +145,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
}
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 11 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
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()));
@ -276,8 +262,6 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
List<MesProductionAssemblyNosortContext> filterList = (List<MesProductionAssemblyNosortContext>)
numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), Stream.of(productionAssemblyNosortContext).collect(Collectors.toList()));
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 4 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//匹配失败
if (CollectionUtils.isEmpty(filterList)) continue;
@ -291,14 +275,10 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
}
}
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 6 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
//时效性验证
if (!StringUtils.isEmpty(filterList.get(0).getProductSnId())) {
Map<String, Object> result = productionRecordService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filterList.get(0).getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE30.getValue());
log.info("工厂{}生产线{}工位{} MesAssemblyMatchNosortStepService ---- 7 ----", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
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;

Loading…
Cancel
Save