forked from I3-YF/i3plus-mes-pcn-yfai
装配件二次确认 排序线
parent
72b58c2130
commit
dae94f2c07
@ -0,0 +1,122 @@
|
||||
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.api.busi.IMesProduceSnExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
|
||||
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.MesProduceSn;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
|
||||
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.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 装配件二次确认 【排序】
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesNumberRuleMatchSortDoubleCheckService implements IMesNumberRuleMatchDispatchService {
|
||||
|
||||
@Autowired
|
||||
private IMesProduceSnExtService produceSnExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesAssemblyExtService assemblyExtService;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> matchNumberRule(String organizeCode, String sn, Object... params) {
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put(MesPcnExtConstWords.RESULT, true);
|
||||
|
||||
if (!MesProductionAssemblySortContext.class.isAssignableFrom(params[0].getClass())) {
|
||||
result.put(MesPcnExtConstWords.RESULT, false);
|
||||
result.put(MesPcnExtConstWords.MESSAGE, "参数匹配规则信息不是排序线装配件匹配规则!");
|
||||
return result;
|
||||
}
|
||||
|
||||
//验证是否离线
|
||||
MesProductionAssemblySortContext context = (MesProductionAssemblySortContext) params[0];
|
||||
|
||||
//校验正则表达式
|
||||
if (!StringUtils.isEmpty(context.getMatchRule())) {
|
||||
result = ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(organizeCode, sn, params);
|
||||
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result;
|
||||
}
|
||||
|
||||
if (context.getIsClosedCheck()) return result;
|
||||
|
||||
result.put(MesPcnExtConstWords.RESULT, false);
|
||||
|
||||
//验证零件号
|
||||
if (!StringUtils.isEmpty(context.getAssemblyPartNo())) {
|
||||
|
||||
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn);
|
||||
if (CollectionUtils.isEmpty(produceSnList)) {
|
||||
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息不存在!", sn));
|
||||
return result;
|
||||
}
|
||||
|
||||
List<MesProduceSn> standardList = produceSnList.stream()
|
||||
.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)) {
|
||||
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息状态[未知]!", sn));
|
||||
return result;
|
||||
}
|
||||
|
||||
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 (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 (!context.getAssemblyPartNo().equals(produceSn.getPartNo())) {
|
||||
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息零件号[%s]!", sn, produceSn.getPartNo()));
|
||||
return result;
|
||||
}
|
||||
|
||||
//非已装配情况下
|
||||
if (MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue() != produceSn.getSnStatus()) {
|
||||
//创建/已完成/已拆解都可以被装配
|
||||
if (MesExtEnumUtil.PRODUCE_SN_STATUS.checkAllowAssembly(produceSn.getSnStatus())) {
|
||||
((MesProductionAssemblyContext) params[0]).setProductSnId(produceSn.getId());
|
||||
result.put(MesPcnExtConstWords.RESULT, true);
|
||||
return result;
|
||||
} else {
|
||||
result.put(MesPcnExtConstWords.MESSAGE, String.format("零件条码[%s]信息条码状态[%s]!", sn, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//已装配状态或者外协件情况下 --- 自制件:验证绑定的条码是否等于当前工单 外协件:验证绑定的条码是否是当前工单 或者 没有绑定记录
|
||||
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();
|
||||
if (null != optional && optional.isPresent() && !optional.get().getProductSn().equals(context.getWorkOrderNo())) {
|
||||
result.put(MesPcnExtConstWords.MESSAGE, String.format("装配件条码[%s]已被加工单[%s]装配!", sn, optional.get().getProductSn()));
|
||||
return result;
|
||||
}
|
||||
|
||||
result.put(MesPcnExtConstWords.RESULT, true);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue