Merge remote-tracking branch 'origin/dev-wuhan' into dev-wuhan

tags/yfai-pcn-ext-v2.3
yxw 8 months ago
commit b1905b75e3

@ -0,0 +1,131 @@
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.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
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.MesPartPackageRule;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.IMesPartPackageRuleRepository;
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 org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
/**
* @Description : (VKM)
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/20 16:54
* @Modify:
**/
@Slf4j
@Service
public class MesNumberRuleMatchVkmService implements IMesNumberRuleMatchDispatchService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesPartPackageRuleRepository mesPartPackageRuleRepository;
@Autowired
private IMesPartPackageRuleDetailRepository mesPartPackageRuleDetailRepository;
@Override
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
// 校验正则表达式
Map<String, Object> result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) {
return result;
}
//当前装配件清单信息
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
//获取上下文产品加工规则数据信息集合
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(new StationRequestBean(organizeCode, context.getWorkCenterCode(), context.getWorkCellCode()));
if (CollectionUtils.isEmpty(prodRuleContextList)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!");
return result;
}
//获取加工规则
Optional<MesProdRuleContext> contextOptional = prodRuleContextList.stream().filter(t -> Objects.equals(t.getForeignKey(), context.getForeignKey())).findFirst();
if (!contextOptional.isPresent()) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在非排序加工规则数据,请重置工序!");
return result;
}
//装配件清单
List<MesProductionAssemblyNosortContext> assemblyNosortContextList = contextOptional.get().getNosortAssemblyDataContext();
if (CollectionUtils.isEmpty(assemblyNosortContextList)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "当前不存在已装配的数据!");
return result;
}
//装配件条码字段的长度等于60(固定)为VKM包条码
Optional<MesProductionAssemblyNosortContext> assemblyNosortContext = assemblyNosortContextList.stream().filter(t -> MesPcnExtConstWords.SIXTY == t.getAssemblySn().length()).findFirst();
if (!assemblyNosortContext.isPresent()) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "不存在主零件!");
return result;
}
//通用包装组零件规则
MesPartPackageRule mesPartPackageRule = getMesPartPackageRule(organizeCode, assemblyNosortContext.get().getAssemblyPartNo());
if (Objects.isNull(mesPartPackageRule)) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则不存在!");
return result;
}
//通用包装组零件规则明细
if (!isExitMesPartPackageRuleDetail(organizeCode, context.getAssemblyPartNo(), mesPartPackageRule.getId())) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "通用包装组零件规则明细不存在!");
return result;
}
//获取大包装流水最后十四位数(固定)
String seq = assemblyNosortContext.get().getAssemblySn().substring(assemblyNosortContext.get().getAssemblySn().length() - MesPcnExtConstWords.FOURTEEN);
//如果seq(22810138101376)的前四位(固定)与当前扫描的装配件条码的(26502271 8211001000000X 654406818 2123198103002281)后4位一致则代表匹配成功否则失败则提示:"流水号不一致"
if (!sn.endsWith(seq.substring(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.FOUR))) {
result.put(MesPcnExtConstWords.RESULT, false);
result.put(MesPcnExtConstWords.MESSAGE, "流水号不一致!");
return result;
}
return result;
}
private MesPartPackageRule getMesPartPackageRule(String organizeCode, String assemblyPartNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) {
return null;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PACKAGE_PART_NO, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_TYPE.PACKAGE_RULE_TYPE_10.getValue(), MesPcnExtConstWords.RULE_TYPE, packBean);
return mesPartPackageRuleRepository.getByProperty(packBean);
}
private boolean isExitMesPartPackageRuleDetail(String organizeCode, String assemblyPartNo, long id) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(assemblyPartNo)) {
return false;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(id, MesPcnExtConstWords.PID, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PACKAGE_RULE_MATCH_TYPE.PACKAGE_RULE_MATCH_TYPE_10.getValue(), MesPcnExtConstWords.MATCH_TYPE, packBean);
DdlPreparedPack.getStringEqualPack(assemblyPartNo, MesPcnExtConstWords.PART_NO, packBean);
return mesPartPackageRuleDetailRepository.isExitByHql(packBean);
}
}

@ -311,6 +311,12 @@ public class MesPcnExtConstWords {
public static final Integer ONE = 1;
// 3
public static final Integer THREE = 3;
//4
public static final Integer FOUR = 4;
//14
public static final Integer FOURTEEN = 14;
//60
public static final Integer SIXTY = 60;
// 中括号
public static final String SQUARE_BRACKETS = "[]";
// &
@ -536,4 +542,8 @@ public class MesPcnExtConstWords {
public static final String PRINT_TIME = "printTime";
// 裁片名称
public static final String CUT_NAME = "cutName";
//包覆零件号
public static final String PACKAGE_PART_NO = "packagePartNo";
//规则类型
public static final String RULE_TYPE = "ruleType";
}

Loading…
Cancel
Save