顺序防错

tags/yfai-pcn-ext-v1.0
王杰 10 months ago
parent 79a5fbbb1e
commit cfea02b3b7

@ -36,4 +36,7 @@ public interface IMesAssemblyExtService {
@ApiOperation(value = "【排序线】获取生产工单装配件清单") @ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(String organizeCode, String workOrderNo, String productSn, String craftCode); List<MesWorkOrderAssembly> getWorkOrderAssemblyList(String organizeCode, String workOrderNo, String productSn, String craftCode);
@ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, List<String> productSnList);
} }

@ -19,6 +19,9 @@ public interface IMesProduceSnExtService {
@ApiOperation(value = "根据零件条码查询零件条码信息") @ApiOperation(value = "根据零件条码查询零件条码信息")
Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList); Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList);
@ApiOperation(value = "根据生产工单,生产线,工位查询工位队列信息")
List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo);
@ApiOperation(value = "根据零件条码,生产线,工位查询工位队列信息") @ApiOperation(value = "根据零件条码,生产线,工位查询工位队列信息")
List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List<String> productSnList); List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List<String> productSnList);

@ -14,6 +14,9 @@ public interface IMesWorkOrderExtService {
@ApiOperation(value = "根据生产工单ID查询生产工单信息") @ApiOperation(value = "根据生产工单ID查询生产工单信息")
MesWorkOrder getWorkOrder(String organizeCode, Long id); MesWorkOrder getWorkOrder(String organizeCode, Long id);
@ApiOperation(value = "根据生产工单顺序号,生产线代码查询上一个生产工单信息")
MesWorkOrder getWorkOrder(String organizeCode, String workCenterCode, Long produceSeq);
MesWorkOrder insert(MesWorkOrder item); MesWorkOrder insert(MesWorkOrder item);
void update(MesWorkOrder item); void update(MesWorkOrder item);

@ -164,6 +164,18 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, productSn, craftCode}); new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, productSn, craftCode});
} }
@Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, List<String> productSnList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode) || StringUtils.isEmpty(workOrderNo) || CollectionUtils.isEmpty(productSnList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(workCellCode, MesPcnExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getStringEqualPack(workOrderNo, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean);
else DdlPreparedPack.getInPackList(productSnList, MesPcnExtConstWords.PRODUCT_SN, packBean);
return workOrderAssemblyRepository.findByHqlWhere(packBean);
}
//剔除解绑的数据 //剔除解绑的数据
private List<MesProductionAssembly> filterProductionAssemblyList(List<MesProductionAssembly> productionAssemblyList) { private List<MesProductionAssembly> filterProductionAssemblyList(List<MesProductionAssembly> productionAssemblyList) {
return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList()); return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList());

@ -65,6 +65,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
} }
//根据生产工单,生产线,工位查询工位队列信息
@Override
public List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null;
return queueOrderRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.WORK_ORDER_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode, workOrderNo});
}
//根据零件条码,生产线,工位查询工位队列信息 //根据零件条码,生产线,工位查询工位队列信息
@Override @Override
public List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List<String> productSnList) { public List<MesQueueOrder> getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List<String> productSnList) {

@ -50,6 +50,16 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService {
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id}); new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id});
} }
//根据生产工单顺序号,生产线代码查询上一个生产工单信息
@Override
public MesWorkOrder getWorkOrder(String organizeCode, String workCenterCode, Long produceSeq) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || (StringUtils.isEmpty(produceSeq) || produceSeq.compareTo(0L) == 0)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getNumberSmallerPack(produceSeq, MesPcnExtConstWords.PRODUCE_SEQ, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.PRODUCE_SEQ}, packBean);
return workOrderRepository.getByProperty(packBean);
}
@Override @Override
@MonitorLog @MonitorLog

@ -1,182 +1,230 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.*;
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
//import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
//import lombok.extern.slf4j.Slf4j; import cn.estsh.i3plus.pojo.mes.model.StepResult;
//import org.springframework.beans.factory.annotation.Autowired; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
//import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j;
//import org.springframework.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.StringUtils; import org.springframework.stereotype.Service;
// import org.springframework.util.CollectionUtils;
//import java.util.ArrayList; import org.springframework.util.StringUtils;
//import java.util.List;
//import java.util.Optional; import java.util.ArrayList;
// import java.util.List;
///** import java.util.Map;
// * @Description : 生产工单顺序防错 import java.util.Optional;
// * @Author : wangjie import java.util.stream.Collectors;
// **/
//@Slf4j /**
//@Service("mesProduceSeqCheckStepService") * @Description :
//public class MesProduceSeqCheckStepService extends BaseStepService { * @Author : wangjie
// **/
// @Autowired @Slf4j
// private IMesProductionProcessContextStepService productionProcessContextStepService; @Service("mesProduceSeqCheckStepService")
// public class MesProduceSeqCheckStepService extends BaseStepService {
// @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
// @Override
// public StepResult execute(StationRequestBean reqBean) { @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
// StationResultBean resultBean = new StationResultBean();
// @Autowired
// StepResult stepResult = StepResult.getSuccessComplete(); private IMesWorkOrderExtService workOrderExtService;
//
// //获取上下文信息 @Autowired
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean); private IMesProduceSnExtService produceSnExtService;
//
// //获取生产过程上下文对象有异常信息 抛出异常 @Autowired
// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); private IMesAssemblyExtService assemblyExtService;
//
// //存储生产过程上下文对象 @Override
// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); public StepResult execute(StationRequestBean reqBean) {
//
// //获取上下文产出零件信息 StationResultBean resultBean = new StationResultBean();
// List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
// StepResult stepResult = StepResult.getSuccessComplete();
// //验证是否存在加工单
// if (!checkIsExistWorkOrder(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无加工单信息,无需进行顺序防错验证!"); //获取上下文信息
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean);
// //验证工位是否设置需要顺序防错
// if (!isNeedCheckProduceSeq(productionPartContextList)) //获取生产过程上下文对象有异常信息 抛出异常
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置顺序防错,无需进行顺序防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//
// //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 //存储生产过程上下文对象
// List<String> workOrderNoList2Jump = doHandleCraftJumpCode(reqBean, productionPartContextList); productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
// if (!CollectionUtils.isEmpty(workOrderNoList2Jump))
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList2Jump.toString()), stepResult, String.format("加工单%s跳过顺序防错验证成功!", workOrderNoList2Jump.toString())); //获取上下文产出零件信息
// List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
// //验证是否已经全部通过
// if (!isExistNeedCheckProduceSeq(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "加工单均已通过顺序防错验证!"); //验证是否存在加工单
// if (!checkIsExistWorkOrder(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无加工单信息,无需进行顺序防错验证!");
// //顺序防错验证处理
// doHandleProduceSeqCheck(reqBean, resultBean, stepResult, productionProcessContext, productionProcessContext.getWorkCenter(), productionPartContextList); //验证工位是否设置需要顺序防错
// if (!isNeedCheckProduceSeq(productionPartContextList))
// return stepResult; return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置顺序防错,无需进行顺序防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
//
// } //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单
// List<String> workOrderNoList2Jump = doHandleCraftJumpCode(reqBean, productionPartContextList);
// //验证是否存在加工单 if (!CollectionUtils.isEmpty(workOrderNoList2Jump))
// private Boolean checkIsExistWorkOrder(List<MesProductionPartContext> productionPartContextList) { return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList2Jump.toString()), stepResult, String.format("加工单%s跳过顺序防错验证成功!", workOrderNoList2Jump.toString()));
//
// if (CollectionUtils.isEmpty(productionPartContextList)) return false; //验证是否已经全部通过
// if (!isExistNeedCheckProduceSeq(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "加工单均已通过顺序防错验证!");
// Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst();
// //顺序防错验证处理
// return (null == optional || !optional.isPresent()) ? false : true; doHandleProduceSeqCheck(reqBean, resultBean, stepResult, productionProcessContext, productionProcessContext.getWorkCenter(), productionPartContextList);
//
// } return stepResult;
//
// //验证工位是否设置需要前道防错 }
// private Boolean isNeedCheckProduceSeq(List<MesProductionPartContext> productionPartContextList) {
// Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && //验证是否存在加工单
// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst(); private Boolean checkIsExistWorkOrder(List<MesProductionPartContext> productionPartContextList) {
// return (null == optional || !optional.isPresent()) ? false : true;
// } if (CollectionUtils.isEmpty(productionPartContextList)) return false;
//
// //验证是否已经全部通过 Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst();
// private Boolean isExistNeedCheckProduceSeq(List<MesProductionPartContext> productionPartContextList) {
// Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o && return (null == optional || !optional.isPresent()) ? false : true;
// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).findFirst();
// return (null == optional || !optional.isPresent()) ? false : true; }
// }
// //验证工位是否设置需要前道防错
// //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 private Boolean isNeedCheckProduceSeq(List<MesProductionPartContext> productionPartContextList) {
// private List<String> doHandleCraftJumpCode(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) { Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o &&
// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst();
// List<String> workOrderNoList2Jump = null; return (null == optional || !optional.isPresent()) ? false : true;
// }
// for (MesProductionPartContext productionPartContext : productionPartContextList) {
// //验证是否已经全部通过
// if (null == productionPartContext || productionPartContext.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 || StringUtils.isEmpty(productionPartContext.getCraftJumpCode())) continue; private Boolean isExistNeedCheckProduceSeq(List<MesProductionPartContext> productionPartContextList) {
// Optional<MesProductionPartContext> optional = productionPartContextList.stream().filter(o -> (null != o &&
// if (CollectionUtils.isEmpty(workOrderNoList2Jump)) workOrderNoList2Jump = new ArrayList<>(); o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).findFirst();
// return (null == optional || !optional.isPresent()) ? false : true;
// workOrderNoList2Jump.add(productionPartContext.getWorkOrderNo()); }
//
// productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单
// private List<String> doHandleCraftJumpCode(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
// }
// List<String> workOrderNoList2Jump = null;
// //保存上下文产出零件信息
// if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); for (MesProductionPartContext productionPartContext : productionPartContextList) {
//
// return workOrderNoList2Jump; if (null == productionPartContext || productionPartContext.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 || StringUtils.isEmpty(productionPartContext.getCraftJumpCode())) continue;
//
// } if (CollectionUtils.isEmpty(workOrderNoList2Jump)) workOrderNoList2Jump = new ArrayList<>();
//
// //顺序防错验证处理 workOrderNoList2Jump.add(productionPartContext.getWorkOrderNo());
// private void doHandleProduceSeqCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List<MesProductionPartContext> productionPartContextList) {
// productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
// List<String> workOrderNoList = new ArrayList<>();
// }
// for (MesProductionPartContext productionPartContext : productionPartContextList) {
// //保存上下文产出零件信息
// if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || productionPartContext.getCheckSeqResult().compareTo(MesPcnExtConstWords.ZERO) != 0) continue; if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
//
// //顺序防错验证 return workOrderNoList2Jump;
// Boolean result = doProduceSeqCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPartContextList);
// }
// if (!result) productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
// else productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); //顺序防错验证处理
// private void doHandleProduceSeqCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List<MesProductionPartContext> productionPartContextList) {
// workOrderNoList.add(productionPartContext.getWorkOrderNo());
// List<String> workOrderNoList = new ArrayList<>();
// }
// for (MesProductionPartContext productionPartContext : productionPartContextList) {
// //保存上下文产出零件信息
// productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || productionPartContext.getCheckSeqResult().compareTo(MesPcnExtConstWords.ZERO) != 0) continue;
//
// if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), String.format("加工单%s顺序防错验证成功!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //顺序防错验证
// else this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); Boolean result = doProduceSeqCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPartContext);
//
// } if (!result) productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
// else productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
// //顺序防错验证
// private Boolean doProduceSeqCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List<MesProductionPartContext> productionPartContextList) { workOrderNoList.add(productionPartContext.getWorkOrderNo());
//
// //排序 }
// if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProduceSeqCheckSort(reqBean, stepResult, productionProcessContext, productionPartContextList);
// //保存上下文产出零件信息
// //非排序 productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
// return doProduceSeqCheckNosort(reqBean, stepResult, productionProcessContext, productionPartContextList);
// if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), String.format("加工单%s顺序防错验证成功!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
// } else this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
//
// //前道工艺防错验证 【排序】 }
// private Boolean doProduceSeqCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList) {
// //顺序防错验证
// private Boolean doProduceSeqCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, MesProductionPartContext productionPartContext) {
//
// } //排序
// if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProduceSeqCheckSort(reqBean, stepResult, productionProcessContext, productionPartContext);
// //前道工艺防错验证 【非排序】
// private Boolean doProduceSeqCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList) { //非排序
// return doProduceSeqCheckNosort(reqBean, stepResult, productionProcessContext, productionPartContext);
//
// }
// }
// //前道工艺防错验证 【排序】
//} private Boolean doProduceSeqCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPartContext productionPartContext) {
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
//根据生产工单顺序号,生产线代码查询上一个生产工单信息
MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), productionPartContext.getProduceSeq());
if (null == workOrder) return true;
if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) < 0)
return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]工单状态[%s]",
message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))).isCompleted();
if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()) >= 0) return true;
//根据生产工单,生产线,工位查询工位队列信息
List<MesQueueOrder> queueOrderList = produceSnExtService.getQueueOrderList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), workOrder.getWorkOrderNo());
Optional<MesQueueOrder> optional = CollectionUtils.isEmpty(queueOrderList) ? null : queueOrderList.stream().filter(o -> (null != o && o.getStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) == 0)).findFirst();
if (null == optional || !optional.isPresent()) return true;
//根据未完成零件条码获取生产工单装配件清单
List<String> productSnList = queueOrderList.stream().filter(o -> (null != o && o.getStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) == 0)).map(MesQueueOrder::getProductSn).collect(Collectors.toList());
List<MesWorkOrderAssembly> workOrderAssemblyList = assemblyExtService.getWorkOrderAssemblyList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), workOrder.getWorkOrderNo(), productSnList);
Map<String, List<MesWorkOrderAssembly>> productSnMap = CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssembly::getProductSn));
if (CollectionUtils.isEmpty(productSnMap))return true;
return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]在当前工位[%s]存在未完成队列条码%s",
message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), reqBean.getWorkCellCode(), productSnMap.keySet().toString())).isCompleted();
}
//前道工艺防错验证 【非排序】
private Boolean doProduceSeqCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPartContext productionPartContext) {
String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON;
//根据生产工单顺序号,生产线代码查询上一个生产工单信息
MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), productionPartContext.getProduceSeq());
if (null == workOrder) return true;
if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()) >= 0) return true;
return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]工单状态[%s]",
message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))).isCompleted();
}
}

@ -64,6 +64,9 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("信息来源") @ApiParam("信息来源")
private Integer messageSource; private Integer messageSource;
@ApiParam("生产序号")
private Long produceSeq;
@ApiParam("客户订单号【用于发送设备加工参数】") @ApiParam("客户订单号【用于发送设备加工参数】")
private String custOrderNo; private String custOrderNo;

@ -147,6 +147,8 @@ public class MesPcnExtConstWords {
public static final String MOULD_RECORD_ID = "mouldRecordId"; public static final String MOULD_RECORD_ID = "mouldRecordId";
// 工步代码 // 工步代码
public static final String STEP_CODE = "stepCode"; public static final String STEP_CODE = "stepCode";
// 生产顺序号
public static final String PRODUCE_SEQ = "produceSeq";
// 时间格式 // 时间格式
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
@ -231,6 +233,8 @@ public class MesPcnExtConstWords {
public static final String NEXT_TRIGGER_EVENT_ASSEMBLY = "ASSEMBLY"; public static final String NEXT_TRIGGER_EVENT_ASSEMBLY = "ASSEMBLY";
// 自定义触发事件: 主条码 // 自定义触发事件: 主条码
public static final String NEXT_TRIGGER_EVENT_PRODUCT_SN = "PRODUCT_SN"; public static final String NEXT_TRIGGER_EVENT_PRODUCT_SN = "PRODUCT_SN";
// 自定义触发事件: 工单
public static final String NEXT_TRIGGER_EVENT_ORDER = "ORDER";
// 工序完成 // 工序完成
public static final String PROCESS_COMPLETE = "processComplete"; public static final String PROCESS_COMPLETE = "processComplete";

Loading…
Cancel
Save