forked from I3-YF/i3plus-mes-pcn-yfai
前道防错
parent
de09ab75cc
commit
b416e13e41
@ -1,75 +1,196 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
|
||||
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.pojo.context.MesProductionProcessContext;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 工艺路线验证工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesProdCraftRouteCheckStepService")
|
||||
public class MesProdCraftRouteCheckStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProduceSnExtService produceSnExtService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||
|
||||
//获取生产过程上下文对象有异常信息 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||
|
||||
//从上下文中取出工位对象
|
||||
MesWorkCell workCell = productionProcessContext.getWorkCell();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return stepResult;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
//
|
||||
//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.api.busi.IMesProductionRecordService;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
//import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
|
||||
//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.bean.MesCraftRouteDetail;
|
||||
//import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
//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;
|
||||
//
|
||||
///**
|
||||
// * @Description : 前道工艺防错工步
|
||||
// * @Author : wangjie
|
||||
// **/
|
||||
//@Slf4j
|
||||
//@Service("mesProdCraftRouteCheckStepService")
|
||||
//public class MesProdCraftRouteCheckStepService extends BaseStepService {
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionRecordService productionRecordService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IFsmRouteDataService fsmRouteDataService;
|
||||
//
|
||||
// @Override
|
||||
// public StepResult execute(StationRequestBean reqBean) {
|
||||
//
|
||||
// StationResultBean resultBean = new StationResultBean();
|
||||
//
|
||||
// StepResult stepResult = StepResult.getSuccessComplete();
|
||||
//
|
||||
// //获取上下文信息
|
||||
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||
//
|
||||
// //获取生产过程上下文对象有异常信息 抛出异常
|
||||
// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
//
|
||||
// //存储生产过程上下文对象
|
||||
// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
//
|
||||
// //获取进料主条码数据信息
|
||||
// List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(productionPsInContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无主条码信息,无需进行前道工艺防错验证!");
|
||||
//
|
||||
// Optional<MesProductionPsInContext> optional = productionPsInContextList.stream().filter(o -> (null != o &&
|
||||
// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst();
|
||||
// if (null == optional || !optional.isPresent())
|
||||
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置前道工艺防错,无需进行前道工艺防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
||||
//
|
||||
// //验证是否存在工艺强过码
|
||||
// List<String> productSnList2Jump = doHandleCraftJumpCode(reqBean, productionPsInContextList);
|
||||
// if (!CollectionUtils.isEmpty(productSnList2Jump))
|
||||
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("主条码%s跳过前道工艺防错验证成功!", productSnList2Jump.toString()));
|
||||
//
|
||||
// List<String> partNoList = (productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) &&
|
||||
// o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
||||
// if (CollectionUtils.isEmpty(partNoList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "主条码均已通过前道工艺防错验证!");
|
||||
//
|
||||
// //查询工艺路线数据
|
||||
// Map<String, List<MesCraftRouteDetail>> craftRouteDataMap = new HashMap<>();
|
||||
// partNoList.forEach(o -> doHandleProdCraftData(reqBean, o, craftRouteDataMap));
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(craftRouteDataMap) || craftRouteDataMap.size() != partNoList.size())
|
||||
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("零件编码%s未匹配到产品工艺路线!",
|
||||
// CollectionUtils.isEmpty(craftRouteDataMap) ? partNoList.toString() : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !craftRouteDataMap.containsKey(o))).collect(Collectors.toList()).toString()));
|
||||
//
|
||||
// //前道工艺防错验证处理
|
||||
// doHandleProdCraftRouteCheck(reqBean, resultBean, stepResult, productionProcessContext, productionPsInContextList, craftRouteDataMap);
|
||||
//
|
||||
// return stepResult;
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //查询工艺路线数据
|
||||
// private void doHandleProdCraftData(StationRequestBean reqBean, String o, Map<String, List<MesCraftRouteDetail>> craftRouteDataMap) {
|
||||
// List<MesCraftRouteDetail> craftRouteDetailList = fsmRouteDataService.doHandleProdCraftData(reqBean, o);
|
||||
// if (!CollectionUtils.isEmpty(craftRouteDetailList)) craftRouteDataMap.put(o, craftRouteDetailList);
|
||||
// }
|
||||
//
|
||||
// //验证是否存在工艺强过码, 存在则保存 获取进料主条码数据信息,并返回强过的主条码
|
||||
// private List<String> doHandleCraftJumpCode(StationRequestBean reqBean, List<MesProductionPsInContext> productionPsInContextList) {
|
||||
//
|
||||
// List<String> productSnList2Jump = null;
|
||||
//
|
||||
// for (MesProductionPsInContext productionPsInContext : productionPsInContextList) {
|
||||
//
|
||||
// if (null == productionPsInContext || productionPsInContext.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 || StringUtils.isEmpty(productionPsInContext.getCraftJumpCode())) continue;
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(productSnList2Jump)) productSnList2Jump = new ArrayList<>();
|
||||
//
|
||||
// productSnList2Jump.add(productionPsInContext.getProductSn());
|
||||
//
|
||||
// productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //保存进料主条码数据
|
||||
// if (!CollectionUtils.isEmpty(productSnList2Jump)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList);
|
||||
//
|
||||
// return productSnList2Jump;
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //前道工艺防错验证处理
|
||||
// private void doHandleProdCraftRouteCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext,
|
||||
// List<MesProductionPsInContext> productionPsInContextList, Map<String, List<MesCraftRouteDetail>> craftRouteDataMap) {
|
||||
//
|
||||
// for (MesProductionPsInContext productionPsInContext : productionPsInContextList) {
|
||||
//
|
||||
// if (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getPartNo()) || productionPsInContext.getIsCheckCraft().compareTo(MesPcnExtConstWords.ZERO) != 0) continue;
|
||||
//
|
||||
// //前道工艺防错验证
|
||||
// Boolean result = doProdCraftRouteCheck(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo()));
|
||||
//
|
||||
// if (!result) productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
// else productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //保存进料主条码数据
|
||||
// productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList);
|
||||
//
|
||||
// if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog(), "主条码前道工艺防错验证成功!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
// else this.sendMessage(reqBean, resultBean.writeDbLog(), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //前道工艺防错验证
|
||||
// private Boolean doProdCraftRouteCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List<MesCraftRouteDetail> craftRouteDetailList) {
|
||||
//
|
||||
// String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
|
||||
//
|
||||
// //判断主条码的当前工艺是否包含在产品工艺路线中
|
||||
// Optional<MesCraftRouteDetail> optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst();
|
||||
// if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent()))
|
||||
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]",
|
||||
// message, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted();
|
||||
//
|
||||
// //判断当前工位的工序对应的工艺是否包含在产品工艺路线中
|
||||
// Optional<MesCraftRouteDetail> optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst();
|
||||
// if (null == optionalCell || !optionalCell.isPresent())
|
||||
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]零件[%s]对应的产品工艺路线[%s]不包含当前工位[%s]对应的工艺[%s]工序[%s]",
|
||||
// message, productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())).isCompleted();
|
||||
//
|
||||
// //验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同
|
||||
// if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))
|
||||
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]",
|
||||
// message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
|
||||
//
|
||||
// //验证是否捆绑后道工艺: 如果当前工位的工艺与主条码的当前工艺不一致的情况下, 根据主条码的当前工艺获取在工艺路线明细的下一个工艺, 判断当前工位的工艺与下个工艺是否一致
|
||||
// if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) {
|
||||
// Optional<MesCraftRouteDetail> optional = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalPs.get().getSeq()) > 0)).findFirst();
|
||||
// if (null != optionalCell && optionalCell.isPresent() && !productionProcessContext.getCraftCode().equals(optional.get().getCraftCode()))
|
||||
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]捆绑后道工艺,上道工艺[%s]下道工艺[%s]当前工位工艺[%s]",
|
||||
// message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), optional.get().getCraftCode(), productionProcessContext.getCraftCode())).isCompleted();
|
||||
// }
|
||||
//
|
||||
// //验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数
|
||||
// if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0) {
|
||||
// List<MesProductionRecord> productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), reqBean.getProcessCode(), productionProcessContext.getCraftCode());
|
||||
// if (!CollectionUtils.isEmpty(productionRecordList) && productionRecordList.size() >= optionalPs.get().getRepeatTimes())
|
||||
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]",
|
||||
// message, productionPsInContext.getProductSn(), reqBean.getProcessCode(), craftRouteDetailList.get(0).getCraftRouteCode(), optionalPs.get().getRepeatTimes())).isCompleted();
|
||||
// }
|
||||
//
|
||||
// //验证首工艺
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
Loading…
Reference in New Issue