From bd24b5010051b9b21bd264787cb8d759c19dc88d Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 1 Nov 2023 15:16:01 +0800 Subject: [PATCH] jx pcn --- .../api/busi/jx/IJxProdBusiStrategyService.java | 24 ++ .../busi/jx/JxProdBusiStrategyAttemptService.java | 325 +++++++++++---------- .../busi/jx/JxProdBusiStrategyCommonService.java | 118 +++++++- .../busi/jx/JxProdBusiStrategyRepairService.java | 39 +-- .../busi/jx/JxProdBusiStrategyStandardService.java | 53 ++-- .../JxSnFinalInspectionCheckMcOrPsStepService.java | 1 + .../step/jx/JxSnLineOffCheckPsStepService.java | 123 ++++++++ .../step/jx/JxSnLineOffCompleteStepService.java | 95 ++++++ 8 files changed, 561 insertions(+), 217 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCheckPsStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCompleteStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProdBusiStrategyService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProdBusiStrategyService.java index a115d84..b5de78a 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProdBusiStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProdBusiStrategyService.java @@ -40,6 +40,22 @@ public interface IJxProdBusiStrategyService { StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params); /** + * 下线验证 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "下线验证", notes = "下线验证") + StepResult checkLineOff(JxProdBusiStrategyParamsBuilder params); + + /** + * 完成下线 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "完成下线", notes = "完成下线") + StepResult execLineOff(JxProdBusiStrategyParamsBuilder params); + + /** * 从管理码开始查询业务数据 * @param params 参数 * @return 结果 @@ -114,4 +130,12 @@ public interface IJxProdBusiStrategyService { @ApiOperation(value = "写入条码履历", notes = "写入条码履历") default void insertProduceSnTravel(JxProdBusiStrategyParamsBuilder params) {} + /** + * 验证流程工序 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "验证流程工序", notes = "验证流程工序") + default StepResult checkSnProcessIsValid(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { return stepResult; } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyAttemptService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyAttemptService.java index 821b907..1ba271c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyAttemptService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyAttemptService.java @@ -1,161 +1,164 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -/** - * @Author: wangjie - * @CreateDate: 2021/01/18 11:41 上午 - * @Description: 试制工单 - **/ -@Slf4j -@Service -public class JxProdBusiStrategyAttemptService implements IJxProdBusiStrategyService { - - @Override - public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) { - - ((IJxProdBusiStrategyService) params.getStrategyService()).checkLineOn(params); - - StepResult stepResult = StepResult.getNonComplete(); - - if (null == params.getManageCodeDb() && null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的管理编码或产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); - - if (null != params.getProduceSnExtDb()) return checkLineOn4Ps(params, stepResult); - - return checkLineOn4Mc(params, stepResult); - - } - - private StepResult checkLineOn4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); - - } - - private StepResult checkLineOn4Mc(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - - if (null != params.getProduceSnMcRecordDb()) { - if (!params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]已绑定其他生产工单[%s],验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo())); - - if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() == params.getProduceSnMcRecordDb().getLineOnStatus()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前状态[已上线],验证失败!", params.getScanName(), params.getScanInfo())); - else - return stepResult.isCompleted(true).msg(String.format("%s[%s]此前上线未完成,验证成功!", params.getScanName(), params.getScanInfo())); - } else { - Integer count = ((IJxProdBusiStrategyService) params.getStrategyService()).queryOrderBindedQty(params); - if (count >= params.getOrderModel().getQty()) - return stepResult.msg(String.format("生产工单[%s]计划数量[%s]上线数量已达标,请切换生产工单!", params.getOrderModel().getOrderNo(), params.getOrderModel().getQty())); - - return stepResult.isCompleted(true).msg(String.format("%s[%s]验证成功!", params.getScanName(), params.getScanInfo())); - } - - } - - @Override - public StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params) { - - ((IJxProdBusiStrategyService) params.getStrategyService()).insertProduceSnMcRecord(params); - - return StepResult.getSuccessComplete().data(params.getProduceSnMcRecordDb()); - - } - - @Override - public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { - - ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); - - StepResult stepResult = StepResult.getNonComplete(); - - if (null == params.getProduceSnMcRecordDb() && null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的管理编码与工单条码关系信息或产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); - - if (null != params.getProduceSnExtDb()) return checkFinalInspection4Ps(params, stepResult); - - return checkFinalInspection4Mc(params, stepResult); - - } - - private StepResult checkFinalInspection4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() != params.getProduceSnExtDb().getSnStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); - - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()) && params.getProduceSnExtDb().getProcessCode().equals(params.getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息已完成当前工序,验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); - - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); - - } - - private StepResult checkFinalInspection4Mc(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - - if (!params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnMcRecordDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getQcStatus()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getLineOnStatus()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前状态[上线未完成],验证失败!", params.getScanName(), params.getScanInfo())); - - return stepResult.isCompleted(true).msg(String.format("%s[%s]验证成功!", params.getScanName(), params.getScanInfo())); - - } - - @Override - public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { - - StepResult stepResult = StepResult.getNonComplete(); - - ((IJxProdBusiStrategyService) params.getStrategyService()).queryProduceSnInfo(params.productSn(params.getScanInfo())); - - if (null == params.getProduceSnExtDb()) - return stepResult.msg(String.format("产品条码[%s]未关联试制工单[%s],操作失败!", params.getScanInfo(), params.getOrderModel().getOrderNo())); - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("产品条码[%s]信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getTrayNo())) - return stepResult.msg(String.format("产品条码[%s]已经过终检工序,验证失败!", params.getScanInfo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue() != params.getProduceSnExtDb().getSnStatus()) - return stepResult.msg(String.format("产品条码[%s]信息当前状态[%s],验证失败!", params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("产品条码[%s]信息当前业务类型[返修],验证失败!", params.getScanInfo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) - return stepResult.msg(String.format("产品条码[%s]信息当前质量状态[不合格],验证失败!", params.getScanInfo())); - - return stepResult.isCompleted(true); - } - -} \ No newline at end of file +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +//import cn.estsh.i3plus.pojo.mes.model.StepResult; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Service; +//import org.springframework.util.StringUtils; +// +///** +// * @Author: wangjie +// * @CreateDate: 2021/01/18 11:41 上午 +// * @Description: 试制工单 +// **/ +//@Slf4j +//@Service +//public class JxProdBusiStrategyAttemptService implements IJxProdBusiStrategyService { +// +// @Override +// public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) { +// +// ((IJxProdBusiStrategyService) params.getStrategyService()).checkLineOn(params); +// +// StepResult stepResult = StepResult.getNonComplete(); +// +// if (null == params.getManageCodeDb() && null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的管理编码或产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (null != params.getProduceSnExtDb()) return checkLineOn4Ps(params, stepResult); +// +// return checkLineOn4Mc(params, stepResult); +// +// } +// +// private StepResult checkLineOn4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { +// +// if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); +// +// if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus()) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); +// +// if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); +// +// return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); +// +// } +// +// private StepResult checkLineOn4Mc(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { +// +// if (null != params.getProduceSnMcRecordDb()) { +// if (!params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) +// return stepResult.msg(String.format("%s[%s]已绑定其他生产工单[%s],验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo())); +// +// if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() == params.getProduceSnMcRecordDb().getLineOnStatus()) +// return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前状态[已上线],验证失败!", params.getScanName(), params.getScanInfo())); +// else +// return stepResult.isCompleted(true).msg(String.format("%s[%s]此前上线未完成,验证成功!", params.getScanName(), params.getScanInfo())); +// } else { +// Integer count = ((IJxProdBusiStrategyService) params.getStrategyService()).queryOrderBindedQty(params); +// if (count >= params.getOrderModel().getQty()) +// return stepResult.msg(String.format("生产工单[%s]计划数量[%s]上线数量已达标,请切换生产工单!", params.getOrderModel().getOrderNo(), params.getOrderModel().getQty())); +// +// return stepResult.isCompleted(true).msg(String.format("%s[%s]验证成功!", params.getScanName(), params.getScanInfo())); +// } +// +// } +// +// @Override +// public StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params) { +// +// ((IJxProdBusiStrategyService) params.getStrategyService()).insertProduceSnMcRecord(params); +// +// return StepResult.getSuccessComplete().data(params.getProduceSnMcRecordDb()); +// +// } +// +// @Override +// public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { +// +// ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); +// +// StepResult stepResult = StepResult.getNonComplete(); +// +// if (null == params.getProduceSnMcRecordDb() && null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的管理编码与工单条码关系信息或产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (null != params.getProduceSnExtDb()) return checkFinalInspection4Ps(params, stepResult); +// +// return checkFinalInspection4Mc(params, stepResult); +// +// } +// +// private StepResult checkFinalInspection4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { +// +// if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); +// +// if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() != params.getProduceSnExtDb().getSnStatus()) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); +// +// if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()) && params.getProduceSnExtDb().getProcessCode().equals(params.getProcessCode())) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息已完成当前工序,验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) +// return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); +// +// return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); +// +// } +// +// private StepResult checkFinalInspection4Mc(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { +// +// if (!params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) +// return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); +// +// if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnMcRecordDb().getOperateType()) +// return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getQcStatus()) +// return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getLineOnStatus()) +// return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前状态[上线未完成],验证失败!", params.getScanName(), params.getScanInfo())); +// +// return stepResult.isCompleted(true).msg(String.format("%s[%s]验证成功!", params.getScanName(), params.getScanInfo())); +// +// } +// +// @Override +// public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { +// +// StepResult stepResult = StepResult.getNonComplete(); +// +// ((IJxProdBusiStrategyService) params.getStrategyService()).queryProduceSnInfo(params.productSn(params.getScanInfo())); +// +// if (null == params.getProduceSnExtDb()) +// return stepResult.msg(String.format("产品条码[%s]未关联试制工单[%s],操作失败!", params.getScanInfo(), params.getOrderModel().getOrderNo())); +// +// if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) +// return stepResult.msg(String.format("产品条码[%s]信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); +// +// if (!StringUtils.isEmpty(params.getProduceSnExtDb().getTrayNo())) +// return stepResult.msg(String.format("产品条码[%s]已经过终检工序,验证失败!", params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue() != params.getProduceSnExtDb().getSnStatus()) +// return stepResult.msg(String.format("产品条码[%s]信息当前状态[%s],验证失败!", params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); +// +// if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) +// return stepResult.msg(String.format("产品条码[%s]信息当前业务类型[返修],验证失败!", params.getScanInfo())); +// +// if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) +// return stepResult.msg(String.format("产品条码[%s]信息当前质量状态[不合格],验证失败!", params.getScanInfo())); +// +// return stepResult.isCompleted(true); +// } +// +// @Override +// public StepResult checkLineOff(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } +// +//} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java index 87d50bb..10a0f24 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java @@ -10,8 +10,10 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.ConvertBeanExt; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesRouteProcess; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import lombok.extern.slf4j.Slf4j; @@ -20,7 +22,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.Comparator; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * @Author: wangjie @@ -58,6 +63,9 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi @Autowired private MesRepairTaskRepository repairTaskRepository; + @Autowired + private IFsmRouteDataService fsmRouteDataService; + @Override public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) { if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) queryBusiData4Mc(params.manageCode(params.getScanInfo())); @@ -228,9 +236,34 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi @Override public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getSuccessComplete(); + if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) queryBusiData4Mc(params.manageCode(params.getScanInfo())); else queryProduceSnInfo(params.productSn(params.getScanInfo())).scanName(); - return StepResult.getSuccessComplete(); + + if (null == params.getProduceSnExtDb()) return stepResult.isCompleted(false).msg(String.format("%s[%s]未匹配到有效的产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); + + return checkFinalInspection4Ps(params, stepResult); + + } + + private StepResult checkFinalInspection4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { + + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); + + if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() != params.getProduceSnExtDb().getSnStatus()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + + if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); + + if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); + + return stepResult; + } @Override @@ -273,7 +306,6 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi if (StringUtils.isEmpty(produceSnExtDb.getProductSn())) produceSnExtDb.setProductSn(params.getScanInfo()); if (StringUtils.isEmpty(produceSnExtDb.getTrayNo())) produceSnExtDb.setTrayNo(params.getManageCode()); - if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue() != produceSnExtDb.getQcStatus()) produceSnExtDb.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue()); produceSnExtService.doPackSnExtProcess((StationRequestBean) params.getObj(), produceSnExtDb); ConvertBean.serviceModelUpdate(produceSnExtDb, params.getUserInfo()); @@ -436,4 +468,86 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi } + @Override + public StepResult checkLineOff(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getSuccessComplete(); + + queryProduceSnInfo(params.productSn(params.getScanInfo())).scanName(); + + if (null == params.getProduceSnExtDb()) return stepResult.isCompleted(false).msg(String.format("产品条码[%s]信息不存在,操作失败!", params.getScanInfo())); + + if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.isCompleted(false).msg(String.format("产品条码[%s]关联的生产工单[%s]与当前操作的生产工单[%s]不一致,操作失败!", params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); + + if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() < params.getProduceSnExtDb().getSnStatus()) + return stepResult.isCompleted(false).msg(String.format("产品条码[%s]信息当前状态[%s],操作失败!", params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + + if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) + return stepResult.isCompleted(false).msg(String.format("产品条码[%s]信息当前业务类型[返修],验证失败!", params.getScanInfo())); + + if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) + return stepResult.isCompleted(false).msg(String.format("产品条码[%s]信息当前质量状态[不合格],验证失败!", params.getScanInfo())); + + if (!checkSnProcessIsValid(params, stepResult).isCompleted()) return stepResult; + + return stepResult.msg(String.format("产品条码[%s]信息验证成功!", params.getScanInfo())); + + } + + @Override + public StepResult checkSnProcessIsValid(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { + + StationRequestBean reqBean = (StationRequestBean) params.getObj(); + MesProduceSnExt produceSnExt = params.getProduceSnExtDb(); + + if (null == reqBean) return stepResult.isCompleted(false).msg("验证流程工序:入参缺失[StationRequestBean]对象信息,操作失败!"); + if (null == produceSnExt) return stepResult.isCompleted(false).msg("验证流程工序:入参缺失[MesProduceSnExt]对象信息,操作失败!"); + + List routeProcessAllList = fsmRouteDataService.getCachedFsmRouteProcessData(reqBean); + + if (CollectionUtils.isEmpty(routeProcessAllList)) return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的流程代码[%s]未关联工序,操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getRouteCode())); + + Optional routeProcessBySn = StringUtils.isEmpty(produceSnExt.getProcessCode()) ? Optional.of(routeProcessAllList.get(0)) : routeProcessAllList.stream().filter(o -> (null != o && o.getProcessCode().equals(produceSnExt.getProcessCode()))).findFirst(); + if (null == routeProcessBySn || !routeProcessBySn.isPresent()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的工序代码[%s]不匹配当前流程代码[%s],操作失败!", params.getScanName(), params.getScanInfo(), produceSnExt.getProcessCode(), reqBean.getRouteCode())); + + Optional routeProcessOp = routeProcessAllList.stream().filter(o -> (null != o && o.getProcessCode().equals(reqBean.getProcessCode()))).findFirst(); + if (null == routeProcessOp || !routeProcessOp.isPresent()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的流程代码[%s]不匹配当前工序代码[%s],操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getRouteCode(), reqBean.getProcessCode())); + + if (!StringUtils.isEmpty(produceSnExt.getProcessCode()) && produceSnExt.getProcessCode().equals(reqBean.getProcessCode())) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getProcessCode())); + + List routeProcessList = routeProcessAllList.stream().filter(o -> (null != o && o.getSeq().compareTo(routeProcessOp.get().getSeq()) < 0)).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(routeProcessList) && (!StringUtils.isEmpty(produceSnExt.getProcessCode()) || !StringUtils.isEmpty(produceSnExt.getNextProcessCode()))) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过首道工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), routeProcessAllList.get(0).getProcessCode())); + + if (CollectionUtils.isEmpty(routeProcessList)) return stepResult; + + if (StringUtils.isEmpty(produceSnExt.getProcessCode()) && routeProcessList.get(0).getIsNecessary() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息未经过首道工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), routeProcessList.get(0).getProcessCode())); + + Optional completeProcessOp = routeProcessList.stream().filter(o -> (null != o && o.getProcessCode().equals(reqBean.getProcessCode()))).findFirst(); + if (null == completeProcessOp || !completeProcessOp.isPresent()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getProcessCode())); + + List unCompleteProcessList = routeProcessList.stream().filter(o -> (null != o && o.getSeq().compareTo(completeProcessOp.get().getSeq()) > 0)).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(unCompleteProcessList)) return stepResult; + + unCompleteProcessList = unCompleteProcessList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesRouteProcess::getSeq)).collect(Collectors.toList()); + + Optional unCompleteProcessOp = unCompleteProcessList.stream().filter(o -> (null != o && o.getIsNecessary() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())).findFirst(); + if (null != unCompleteProcessOp && unCompleteProcessOp.isPresent()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息经过的上道工序[%s]与当前工序[%s]之间还存在必过工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), produceSnExt.getProcessCode(), reqBean.getProcessCode(), unCompleteProcessOp.get().getProcessCode())); + + return stepResult; + } + + @Override + public StepResult execLineOff(JxProdBusiStrategyParamsBuilder params) { + return null; + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java index 67331ef..43b75df 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java @@ -35,8 +35,8 @@ public class JxProdBusiStrategyRepairService implements IJxProdBusiStrategyServi if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus() && !StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) + return stepResult.msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); @@ -51,38 +51,25 @@ public class JxProdBusiStrategyRepairService implements IJxProdBusiStrategyServi @Override public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { - ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); + StepResult stepResult = ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); - StepResult stepResult = StepResult.getNonComplete(); + if (!stepResult.isCompleted()) return stepResult; - if (null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); + if (!((IJxProdBusiStrategyService) params.getStrategyService()).checkSnProcessIsValid(params, stepResult).isCompleted()) return stepResult; - return checkFinalInspection4Ps(params, stepResult); + return stepResult.msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); } - private StepResult checkFinalInspection4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() != params.getProduceSnExtDb().getSnStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); - - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()) && params.getProduceSnExtDb().getProcessCode().equals(params.getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息已完成当前工序,验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); - - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + @Override + public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } - } + @Override + public StepResult checkLineOff(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } @Override - public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + public StepResult execLineOff(JxProdBusiStrategyParamsBuilder params) { + return null; + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java index 0871263..76e08aa 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java @@ -81,8 +81,8 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus() && !StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode())) + return stepResult.msg(String.format("%s[%s]对应的产品条码信息已经过当前工序,当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); @@ -181,43 +181,32 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer @Override public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { - ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); + StepResult stepResult = ((IJxProdBusiStrategyService) params.getStrategyService()).checkFinalInspection(params); - StepResult stepResult = StepResult.getNonComplete(); - - if (null == params.getProduceSnExtDb()) return stepResult.msg(String.format("%s[%s]未匹配到有效的产品条码信息,验证失败!", params.getScanName(), params.getScanInfo())); - - return checkFinalInspection4Ps(params, stepResult); - - } + if (!stepResult.isCompleted()) return stepResult; - private StepResult checkFinalInspection4Ps(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { + if (!checkFinalInspection4Mc(params, stepResult).isCompleted()) return stepResult; - if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo())); + if (!((IJxProdBusiStrategyService) params.getStrategyService()).checkSnProcessIsValid(params, stepResult).isCompleted()) return stepResult; - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() != params.getProduceSnExtDb().getSnStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus()))); + return stepResult.msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); - if (!StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()) && params.getProduceSnExtDb().getProcessCode().equals(params.getProcessCode())) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息已完成当前工序,验证失败!", params.getScanName(), params.getScanInfo())); + } - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); + private StepResult checkFinalInspection4Mc(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { - if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue() == params.getProduceSnExtDb().getQcStatus()) - return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); + if (null == params.getProduceSnMcRecordDb()) return stepResult; - if (null != params.getProduceSnMcRecordDb() && MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnMcRecordDb().getOperateType()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); + if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnMcRecordDb().getOperateType()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前业务类型[返修],验证失败!", params.getScanName(), params.getScanInfo())); - if (null != params.getProduceSnMcRecordDb() && MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getQcStatus()) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); + if (MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == params.getProduceSnMcRecordDb().getQcStatus()) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的管理编码与工单条码关系信息当前质量状态[不合格],验证失败!", params.getScanName(), params.getScanInfo())); - if (null != params.getProduceSnMcRecordDb() && !params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) - return stepResult.msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); + if (!params.getProduceSnMcRecordDb().getWorkOrderNo().equals(params.getOrderModel().getOrderNo())) + return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的管理编码与工单条码关系信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnMcRecordDb().getWorkOrderNo(), params.getOrderModel().getOrderNo())); - return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + return stepResult; } @@ -283,4 +272,12 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer } + @Override + public StepResult checkLineOff(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + @Override + public StepResult execLineOff(JxProdBusiStrategyParamsBuilder params) { + return null; + } + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionCheckMcOrPsStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionCheckMcOrPsStepService.java index 9049c8d..2d0e1c0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionCheckMcOrPsStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionCheckMcOrPsStepService.java @@ -105,6 +105,7 @@ public class JxSnFinalInspectionCheckMcOrPsStepService extends BaseStepService { .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) .routeProcess(reqBean.getRouteCode(), reqBean.getProcessCode()) .orderModel(orderModel) + .obj(reqBean) .strategyService(SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) .build(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCheckPsStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCheckPsStepService.java new file mode 100644 index 0000000..dfc54bf --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCheckPsStepService.java @@ -0,0 +1,123 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnLineOffModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WorkOrderExtModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +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 cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.StringJoiner; + +/** + * @Description : 嘉兴条码下线扫描工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("jxSnLineOffCheckPsStepService") +public class JxSnLineOffCheckPsStepService extends BaseStepService { + + @Autowired + private JxSnLineOffModuleService snLineOffModuleService; + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Override + public StepResult guide(StationRequestBean reqBean) { + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描产品条码!"); + } + + @Override + public StepResult init(StationRequestBean reqBean) { + reqBean.setSerialNumber(null); + reqBean.setProductSn(null); + clearStepContent(reqBean); + snLineOffModuleService.doHandleBindKeyPartData(reqBean, 3, new StringJoiner(MesPcnExtConstWords.COMMA).add(MesPcnExtConstWords.BIND_KEY_PART).add(MesPcnExtConstWords.EXEC_BIND_KEY).toString(), null); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOffCheckPsStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StepResult stepResult = StepResult.getSuccessComplete(); + + StationResultBean resultBean = new StationResultBean(); + + if (StringUtils.isEmpty(reqBean.getScanInfo())) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "入参缺少产品条码!"); + + String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean); + + WorkOrderExtModel orderModel = getWorkOrderExtModel(reqBean, resultBean, curExecWorkOrderNo); + + checkScanInfoIsValid(reqBean, resultBean, stepResult, orderModel); + + reqBean.setScanInfo(null); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOffCheckPsStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return stepResult; + } + + private String getCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean) { + String curExecWorkOrderNo = (String) snLineOffModuleService.doHandleCurExecWorkOrder(reqBean, 1, null); + if (StringUtils.isEmpty(curExecWorkOrderNo)) execExpSendMsgAndThrowEx(reqBean, resultBean, "此前操作的工单号已丢失,请选择启动状态的生产工单!"); + return curExecWorkOrderNo; + } + + private WorkOrderExtModel getWorkOrderExtModel(StationRequestBean reqBean, StationResultBean resultBean, String curExecWorkOrderNo) { + WorkOrderExtModel orderModel = !reqBean.getDataMap().containsKey(MesPcnExtConstWords.WORK_ORDER) ? null : + JSONObject.parseObject(JSONObject.toJSONString(reqBean.getDataMap().get(MesPcnExtConstWords.WORK_ORDER)), WorkOrderExtModel.class); + if (null == orderModel) { + MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); + if (null != workOrderExt) { + orderModel = new WorkOrderExtModel(); + BeanUtils.copyProperties(workOrderExt, orderModel, MesPcnExtConstWords.ID); + } + } + if (null == orderModel) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("此前操作的工单号[%s]对应的信息不存在!", curExecWorkOrderNo)); + return orderModel; + } + + private StepResult checkScanInfoIsValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, WorkOrderExtModel orderModel) { + + JxProdBusiStrategyParamsBuilder params = new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .scanInfo(reqBean.getScanInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .routeProcess(reqBean.getRouteCode(), reqBean.getProcessCode()) + .orderModel(orderModel) + .build(); + + StepResult result = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())).checkLineOff(params); + + this.sendMessage(reqBean, resultBean, result.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, result.isCompleted() ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + stepResult.setCompleted(result.isCompleted()); + + reqBean.setSerialNumber(params.getSerialNumber()); + reqBean.setProductSn(params.getProductSn()); + + return stepResult; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCompleteStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCompleteStepService.java new file mode 100644 index 0000000..3280482 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOffCompleteStepService.java @@ -0,0 +1,95 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnLineOffModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WorkOrderExtModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +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 cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 嘉兴条码下线扫描工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("jxSnLineOffCompleteStepService") +public class JxSnLineOffCompleteStepService extends BaseStepService { + + @Autowired + private JxSnLineOffModuleService snLineOffModuleService; + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOffCompleteStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StationResultBean resultBean = new StationResultBean(); + + String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean); + + WorkOrderExtModel orderModel = getWorkOrderExtModel(reqBean, resultBean, curExecWorkOrderNo); + + StepResult stepResult = execLineOff(reqBean, resultBean, orderModel); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOffCompleteStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return stepResult; + } + + private String getCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean) { + String curExecWorkOrderNo = (String) snLineOffModuleService.doHandleCurExecWorkOrder(reqBean, 1, null); + if (StringUtils.isEmpty(curExecWorkOrderNo)) execExpSendMsgAndThrowEx(reqBean, resultBean, "此前操作的工单号已丢失,请选择启动状态的生产工单!"); + return curExecWorkOrderNo; + } + + private WorkOrderExtModel getWorkOrderExtModel(StationRequestBean reqBean, StationResultBean resultBean, String curExecWorkOrderNo) { + WorkOrderExtModel orderModel = !reqBean.getDataMap().containsKey(MesPcnExtConstWords.WORK_ORDER) ? null : + JSONObject.parseObject(JSONObject.toJSONString(reqBean.getDataMap().get(MesPcnExtConstWords.WORK_ORDER)), WorkOrderExtModel.class); + if (null == orderModel) { + MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); + if (null != workOrderExt) { + orderModel = new WorkOrderExtModel(); + BeanUtils.copyProperties(workOrderExt, orderModel, MesPcnExtConstWords.ID); + } + } + if (null == orderModel) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("此前操作的工单号[%s]对应的信息不存在!", curExecWorkOrderNo)); + return orderModel; + } + + private StepResult execLineOff(StationRequestBean reqBean, StationResultBean resultBean, WorkOrderExtModel orderModel) { + + StepResult result = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.valueOfClazz(orderModel.getWorkOrderType()))).execLineOff( + new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .userInfo(reqBean.getUserInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .serialNumber(reqBean.getSerialNumber()) + .productSn(reqBean.getProductSn()) + .build()); + + this.sendMessage(reqBean, resultBean, result.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, result.isCompleted() ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + return result; + } + +}