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 3b4290c..a115d84 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 @@ -16,6 +16,30 @@ public interface IJxProdBusiStrategyService { StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params); /** + * 上线绑定 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "上线绑定", notes = "上线绑定") + StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params); + + /** + * 终检验证 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "终检验证", notes = "终检验证") + StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params); + + /** + * 第三方产品条码验证 + * @param params 参数 + * @return 结果 + */ + @ApiOperation(value = "第三方产品条码验证", notes = "第三方产品条码验证") + StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params); + + /** * 从管理码开始查询业务数据 * @param params 参数 * @return 结果 @@ -55,4 +79,39 @@ public interface IJxProdBusiStrategyService { @ApiOperation(value = "获取生产工单已绑数据", notes = "获取生产工单已绑数据") default Integer queryOrderBindedQty(JxProdBusiStrategyParamsBuilder params) { return MesPcnExtConstWords.ZERO; } + /** + * 写入管理编码与工单条码关系信息 + * @param params 参数 + */ + @ApiOperation(value = "写入管理编码与工单条码关系信息", notes = "写入管理编码与工单条码关系信息") + default void insertProduceSnMcRecord(JxProdBusiStrategyParamsBuilder params) {} + + /** + * 完成上线 + * @param params 参数 + */ + @ApiOperation(value = "完成上线", notes = "完成上线") + default StepResult execLineOnComplete(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + /** + * 终检绑定 + * @param params 参数 + */ + @ApiOperation(value = "终检绑定", notes = "终检绑定") + default void execFinalInspectionBindPs(JxProdBusiStrategyParamsBuilder params) {} + + /** + * 终检标记返修 + * @param params 参数 + */ + @ApiOperation(value = "终检标记返修", notes = "终检标记返修") + default void execFinalInspectionMarkRepair(JxProdBusiStrategyParamsBuilder params) {} + + /** + * 写入条码履历 + * @param params 参数 + */ + @ApiOperation(value = "写入条码履历", notes = "写入条码履历") + default void insertProduceSnTravel(JxProdBusiStrategyParamsBuilder params) {} + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxNumberRuleCheckAttributeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxNumberRuleCheckAttributeService.java index abd7651..76efc14 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxNumberRuleCheckAttributeService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxNumberRuleCheckAttributeService.java @@ -334,4 +334,11 @@ public class SxNumberRuleCheckAttributeService implements ISxNumberRuleCheckAttr return commonCheck(map, numberRuleDb, null); } + /** + * 编码规则可增加 年 月 日 时 分 秒 前缀 流水号 物料号 供应商定制代码 固定拼接字符 配置 + */ + private Map jxmethod1(Map map, MesNumberRuleExt numberRuleDb){ + return commonCheck(map, numberRuleDb, null); + } + } 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 b3da557..7a2894b 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 @@ -6,6 +6,7 @@ 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 @@ -66,5 +67,89 @@ public class JxProdBusiStrategyAttemptService implements IJxProdBusiStrategyServ } + @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()).checkLineOn(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())); + + 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.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.QUALIFIED.getValue() != params.getProduceSnExtDb().getQcStatus()) + return stepResult.msg(String.format("产品条码[%s]信息当前质量状态[不合格],验证失败!", params.getScanInfo())); + + return stepResult.isCompleted(true); + } } \ 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 f91bf05..94805b9 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 @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnMcRecordService; @@ -7,8 +8,13 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesManageCode; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnMcRecord; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnExtRepository; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnMcRecordRepository; +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.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +39,15 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi @Autowired private IJxProduceSnExtService produceSnExtService; + @Autowired + private MesProduceSnMcRecordRepository produceSnMcRecordRepository; + + @Autowired + private MesProduceSnExtRepository produceSnExtRepository; + + @Autowired + private IProduceSnTravelExtService produceSnTravelExtService; + @Override public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) { if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) queryBusiData4Mc(params.manageCode(params.getScanInfo())); @@ -101,4 +116,201 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi return CollectionUtils.isEmpty(produceSnMcRecordList) ? MesPcnExtConstWords.ZERO : produceSnMcRecordList.size(); } + @Override + public void insertProduceSnMcRecord(JxProdBusiStrategyParamsBuilder params) { + MesProduceSnMcRecord produceSnMcRecord = new MesProduceSnMcRecord(); + produceSnMcRecord.setManageCode(params.getManageCode()); + produceSnMcRecord.setSerialNumber(params.getSerialNumber()); + produceSnMcRecord.setPartNo(params.getOrderModel().getPartNo()); + produceSnMcRecord.setPartNameRdd(params.getOrderModel().getPartNameRdd()); + produceSnMcRecord.setWorkCenterCode(params.getWorkCenterCode()); + produceSnMcRecord.setWorkOrderNo(params.getOrderModel().getOrderNo()); + produceSnMcRecord.setSnStatus(MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.LINE_ON.getValue()); + produceSnMcRecord.setLineOnStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.FALSE.getValue()); + produceSnMcRecord.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.TRUE.getValue()); + produceSnMcRecord.setOrganizeCode(params.getOrganizeCode()); + produceSnMcRecord.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + ConvertBean.serviceModelInitialize(produceSnMcRecord, params.getUserInfo()); + params.produceSnMcRecordDb(produceSnMcRecordRepository.insert(produceSnMcRecord)); + } + + @Override + public StepResult execLineOnComplete(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = saveProduceSn4LineOn(params); + + if (!stepResult.isCompleted()) return stepResult; + + StepResult result = saveProduceSnMcRecord4LineOn(params); + + if (!result.isCompleted()) return result; + + insertProduceSnTravel(params); + + return stepResult; + + } + + private StepResult saveProduceSn4LineOn(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getSuccessComplete(); + + if (StringUtils.isEmpty(params.getSerialNumber()) && StringUtils.isEmpty(params.getProductSn())) return stepResult; + + String serialNumber = params.getSerialNumber(); + String productSn = params.getProductSn(); + + queryProduceSnInfo(params); + + MesProduceSnExt produceSnExtDb = params.getProduceSnExtDb(); + + if (null == produceSnExtDb) return stepResult.isCompleted(false).msg(String.format("过程条码[%s]产品条码[%s]对应的信息不存在!", serialNumber, productSn)); + + if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == produceSnExtDb.getOperateType()) return stepResult.isCompleted(false).msg(String.format("过程条码[%s]产品条码[%s]对应的信息当前业务状态[返修]!", params.getSerialNumber(), params.getProductSn())); + + if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= produceSnExtDb.getSnStatus()) return stepResult; + + produceSnExtDb.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()); + produceSnExtService.doPackSnExtProcess((StationRequestBean) params.getObj(), produceSnExtDb); + ConvertBean.serviceModelUpdate(produceSnExtDb, params.getUserInfo()); + produceSnExtDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(produceSnExtDb).convertBean(produceSnExtDb); + + params.produceSnExtDb(produceSnExtRepository.save(produceSnExtDb)); + + return stepResult; + + } + + private StepResult saveProduceSnMcRecord4LineOn(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getSuccessComplete(); + + if (StringUtils.isEmpty(params.getManageCode()) || !params.getManageCode().contains(MesPcnExtConstWords.AND)) return stepResult; + + String[] manageCodeArr = params.getManageCode().split(MesPcnExtConstWords.AND); + + MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getById(Long.parseLong(manageCodeArr[1])); + + if (null == produceSnMcRecordDb) return stepResult.isCompleted(false).msg(String.format("管理编码[%s]ID[%s]对应的管理编码与工单条码关系信息不存在!", manageCodeArr[0], manageCodeArr[1])); + + if (MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == produceSnMcRecordDb.getQcStatus()) return stepResult.isCompleted(false).msg(String.format("管理编码[%s]ID[%s]对应的管理编码与工单条码关系信息当前业务状态[返修]!", manageCodeArr[0], manageCodeArr[1])); + + if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() == produceSnMcRecordDb.getLineOnStatus()) return stepResult; + + produceSnMcRecordDb.setLineOnStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue()); + ConvertBean.serviceModelUpdate(produceSnMcRecordDb, params.getUserInfo()); + produceSnMcRecordDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + produceSnMcRecordRepository.save(produceSnMcRecordDb); + + return stepResult; + } + + @Override + public void insertProduceSnTravel(JxProdBusiStrategyParamsBuilder params) { + if (null == params.getProduceSnExtDb()) return; + produceSnTravelExtService.insertProduceSnTravelExt(params.getProduceSnExtDb()); + } + + @Override + public StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + @Override + public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + @Override + public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + @Override + public void execFinalInspectionBindPs(JxProdBusiStrategyParamsBuilder params) { + + saveProduceSnMcRecord4FinalInspection(params); + + saveProduceSn4FinalInspection(params); + + insertProduceSnTravel(params); + + } + + private void saveProduceSnMcRecord4FinalInspection(JxProdBusiStrategyParamsBuilder params) { + + if (StringUtils.isEmpty(params.getManageCode()) || !params.getManageCode().contains(MesPcnExtConstWords.AND)) return; + + String[] manageCodeArr = params.getManageCode().split(MesPcnExtConstWords.AND); + + MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getById(Long.parseLong(manageCodeArr[1])); + + produceSnMcRecordDb.setSnStatus(MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.LINE_OFF.getValue()); + if (StringUtils.isEmpty(produceSnMcRecordDb.getSerialNumber())) produceSnMcRecordDb.setSerialNumber(params.getProduceSnExtDb().getSerialNumber()); + if (StringUtils.isEmpty(produceSnMcRecordDb.getProductSn())) produceSnMcRecordDb.setProductSn(params.getScanInfo()); + ConvertBean.serviceModelUpdate(produceSnMcRecordDb, params.getUserInfo()); + produceSnMcRecordDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + produceSnMcRecordRepository.save(produceSnMcRecordDb); + + params.manageCode(produceSnMcRecordDb.getManageCode()); + + } + + private void saveProduceSn4FinalInspection(JxProdBusiStrategyParamsBuilder params) { + + MesProduceSnExt produceSnExtDb = null == params.getProduceSnExtDb() ? queryProduceSnInfo(params).getProduceSnExtDb() : params.getProduceSnExtDb(); + + 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()); + produceSnExtDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(produceSnExtDb).convertBean(produceSnExtDb); + + params.produceSnExtDb(produceSnExtRepository.save(produceSnExtDb)); + + } + + @Override + public void execFinalInspectionMarkRepair(JxProdBusiStrategyParamsBuilder params) { + + saveProduceSn4MarkRepair(params); + + saveProduceSnMcRecord4MarkRepair(params); + + insertProduceSnTravel(params); + + } + + private void saveProduceSn4MarkRepair(JxProdBusiStrategyParamsBuilder params) { + + if (StringUtils.isEmpty(params.getSerialNumber()) && StringUtils.isEmpty(params.getProductSn())) return; + + queryProduceSnInfo(params); + + MesProduceSnExt produceSnExtDb = params.getProduceSnExtDb(); + + produceSnExtDb.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue()); + produceSnExtDb.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue()); + ConvertBean.serviceModelUpdate(produceSnExtDb, params.getUserInfo()); + produceSnExtDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(produceSnExtDb).convertBean(produceSnExtDb); + + params.produceSnExtDb(produceSnExtRepository.save(produceSnExtDb)); + + } + + private void saveProduceSnMcRecord4MarkRepair(JxProdBusiStrategyParamsBuilder params) { + + if (StringUtils.isEmpty(params.getManageCode()) || !params.getManageCode().contains(MesPcnExtConstWords.AND)) return; + + String[] manageCodeArr = params.getManageCode().split(MesPcnExtConstWords.AND); + + MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getById(Long.parseLong(manageCodeArr[1])); + + produceSnMcRecordDb.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue()); + + ConvertBean.serviceModelUpdate(produceSnMcRecordDb, params.getUserInfo()); + produceSnMcRecordDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + produceSnMcRecordRepository.save(produceSnMcRecordDb); + + } + } \ 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 8c1b374..49ee782 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 @@ -6,6 +6,7 @@ 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 @@ -44,4 +45,41 @@ public class JxProdBusiStrategyRepairService implements IJxProdBusiStrategyServi } + @Override + public StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params) { return StepResult.getSuccessComplete(); } + + @Override + public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { + + ((IJxProdBusiStrategyService) params.getStrategyService()).checkLineOn(params); + + StepResult stepResult = StepResult.getNonComplete(); + + if (null == params.getProduceSnExtDb()) return stepResult.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.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())); + + return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + + } + + @Override + public StepResult checkThirdPartyPs(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/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 abcf4c1..4894cf6 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 @@ -1,11 +1,35 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx; +import cn.estsh.i3plus.ext.mes.pcn.api.base.INumberRuleExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IPartExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProductEncodeCfgExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxNumberRuleCheckAttributeService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxNumberRulePackAttributeService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesNumberRuleExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesPartExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxProdBusiStrategyParamsBuilder; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnExtRepository; +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.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.busi.dispatch.cachedispatch.WorkCellDataCacheDispatch; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.StepResult; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.StringJoiner; /** * @Author: wangjie @@ -16,6 +40,27 @@ import org.springframework.stereotype.Service; @Service public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategyService { + @Autowired + private IPartExtService partExtService; + + @Autowired + private IProductEncodeCfgExtService productEncodeCfgExtService; + + @Autowired + private INumberRuleExtService numberRuleExtService; + + @Autowired + private ISxNumberRuleCheckAttributeService numberRuleCheckAttributeService; + + @Autowired + private ISxNumberRulePackAttributeService numberRulePackAttributeService; + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private MesProduceSnExtRepository produceSnExtRepository; + @Override public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) { @@ -69,6 +114,167 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer } + @Override + public StepResult execLineOnBindMc(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getNonComplete(); + + MesPartExt partDb = partExtService.getPartExt(params.getOrganizeCode(), params.getOrderModel().getPartNo()); + if (null == partDb) return stepResult.msg(String.format("工单号[%s]关联的物料编码[%s]信息不存在!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo())); + + String ruleCode; + try { + ruleCode = productEncodeCfgExtService.getRuleCodeByMatchType(params.getOrganizeCode(), MesPcnExtEnumUtil.ENCODE_CODE_TYPE.SERIAL_SN.getValue(), partDb, params.getWorkCenterCode()); + } catch (Exception e) { + return stepResult.msg(e.getMessage()); + } + + if (StringUtils.isEmpty(ruleCode)) return stepResult.msg(String.format("工单号[%s]关联的物料编码[%s]未配置有效的过程编码匹配规则!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo())); + + Map map = new HashMap<>(); + map.put(MesPcnExtConstWords.ORGANIZE_CODE, params.getOrganizeCode()); + map.put(MesPcnExtConstWords.RULE_CODE, ruleCode); + map.put(MesPcnExtConstWords.PART_EXT, partDb); + map.put(MesPcnExtConstWords.WORK_ORDER_NO, params.getOrderModel().getOrderNo()); + map.put(MesPcnExtConstWords.WORK_CENTER_CODE, params.getWorkCenterCode()); + GenSerialNoModel genSerialNoModel = numberRulePackAttributeService.doPackGenSerialNoModel(map); + + BaseResultBean baseResultBean = syncFuncService.syncSerialNo(genSerialNoModel, params.getUserInfo(), params.getOrganizeCode(), 1); + if (null == baseResultBean || (!baseResultBean.isSuccess() || CollectionUtils.isEmpty(baseResultBean.getResultList()))) + return stepResult.msg(String.format("工单号[%s]关联的物料编码[%s]配置的过程编码匹配规则编码[%s]生成过程条码失败:%s!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo(), ruleCode, null != baseResultBean ? baseResultBean.getErrorMsg() : null)); + + ((IJxProdBusiStrategyService) params.getStrategyService()).insertProduceSnMcRecord(params.serialNumber(baseResultBean.getResultList().get(0))); + + insertProduceSnExt(params); + + ((IJxProdBusiStrategyService) params.getStrategyService()).insertProduceSnTravel(params); + + return stepResult.isCompleted(true).data(params.getProduceSnMcRecordDb()); + + } + + private void insertProduceSnExt(JxProdBusiStrategyParamsBuilder params) { + MesProduceSnExt produceSnExt = new MesProduceSnExt(); + produceSnExt.setSerialNumber(params.getSerialNumber()); + produceSnExt.setWorkOrderNo(params.getOrderModel().getOrderNo()); + produceSnExt.setLastWorkOrderNo(params.getOrderModel().getOrderNo()); + produceSnExt.setPartNo(params.getOrderModel().getPartNo()); + produceSnExt.setPartNameRdd(params.getOrderModel().getPartNameRdd()); + produceSnExt.setPrintStatus(MesPcnExtEnumUtil.PRODUCE_SN_PRINT_STATUS.UNPRINT.getValue()); + produceSnExt.setPrintCount(0); + produceSnExt.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue()); + produceSnExt.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.STANDARD_SN.getValue()); + produceSnExt.setQty(1d); + produceSnExt.setWorkCenterCode(params.getWorkCenterCode()); + produceSnExt.setTrayNo(params.getManageCode()); + produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue()); + produceSnExt.setIfCompensate(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + produceSnExt.setOrganizeCode(params.getOrganizeCode()); + ConvertBean.serviceModelInitialize(produceSnExt, params.getUserInfo()); + produceSnExt.setInWorkCenterTime(produceSnExt.getCreateDatetime()); + produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(produceSnExt).convertBean(produceSnExt); + params.produceSnExtDb(produceSnExtRepository.insert(produceSnExt)); + } + + @Override + public StepResult checkFinalInspection(JxProdBusiStrategyParamsBuilder params) { + + ((IJxProdBusiStrategyService) params.getStrategyService()).checkLineOn(params); + + StepResult stepResult = StepResult.getNonComplete(); + + if (null == params.getProduceSnExtDb()) return stepResult.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.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 (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 (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())); + + return stepResult.isCompleted(true).msg(String.format("%s[%s]已匹配产品条码信息,验证成功!", params.getScanName(), params.getScanInfo())); + + } + + @Override + public StepResult checkThirdPartyPs(JxProdBusiStrategyParamsBuilder params) { + + StepResult stepResult = StepResult.getNonComplete(); + + if (!checkProduceSnIsScanOtherCell(params, stepResult)) return stepResult; + MesPartExt partDb = partExtService.getPartExt(params.getOrganizeCode(), params.getOrderModel().getPartNo()); + + if (null == partDb) return stepResult.msg(String.format("生产工单[%s]关联的物料编码[%s]对应的物料信息不存在!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo())); + + if (StringUtils.isEmpty(partDb.getProductMatchType())) + return stepResult.msg(String.format("生产工单[%s]关联的物料编码[%s]对应的物料信息未配置产品编码匹配类型!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo())); + + String ruleCode; + try { + ruleCode = productEncodeCfgExtService.getRuleCodeByMatchType( + params.getOrganizeCode(), MesPcnExtEnumUtil.ENCODE_CODE_TYPE.STANDARD_SERIAL_SN.getValue(), partDb, params.getOrderModel().getWorkCenterCode()); + } catch (Exception e) { + return stepResult.msg(String.format("生产工单[%s]关联的物料编码[%s]:[%s]!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo(), e.getMessage())); + } + + MesNumberRuleExt numberRuleDb = numberRuleExtService.getNumberRuleExtByRuleCode(params.getOrganizeCode(), ruleCode); + if (null == numberRuleDb || StringUtils.isEmpty(numberRuleDb.getNumberRule()) || + StringUtils.isEmpty(numberRuleDb.getRuleLengthSpilt()) || StringUtils.isEmpty(numberRuleDb.getMethodName())) + return stepResult.msg(String.format("生产工单[%s]关联的物料编码[%s]配置的编码规则代码[%s]无效!", params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo(), ruleCode)); + + Map map = new HashMap<>(); + map.put(MesPcnExtConstWords.SERIAL_NUMBER, params.getScanInfo()); + map.put(MesPcnExtConstWords.NUMBER_RULE_EXT, numberRuleDb); + map.put(MesPcnExtConstWords.PART_EXT, partDb); + if (!(Boolean) numberRuleCheckAttributeService.doCheckNumberRule(map).get(MesPcnExtConstWords.RESULT)) + return stepResult.msg(String.format("产品条码[%s]与生产工单[%s]关联的物料编码[%s]配置的编码规则不匹配,操作失败!", params.getScanInfo(), params.getOrderModel().getOrderNo(), params.getOrderModel().getPartNo())); + + ((IJxProdBusiStrategyService) params.getStrategyService()).queryProduceSnInfo(params.productSn(params.getScanInfo())); + + if (null != params.getProduceSnExtDb()) + return stepResult.msg(String.format("产品条码[%s]已绑定过生产工单[%s],操作失败!", params.getScanInfo(), params.getProduceSnExtDb().getWorkOrderNo())); + + return stepResult.isCompleted(true); + + } + + private synchronized Boolean checkProduceSnIsScanOtherCell(JxProdBusiStrategyParamsBuilder params, StepResult stepResult) { + + if (StringUtils.isEmpty(params.getLockContent())) return true; + + String key = new StringJoiner(MesPcnExtConstWords.COLON).add(params.getOrganizeCode()).add(MesPcnExtConstWords.JX_THIRD_PARTY_SN_LOCK).add(params.getLockContent()).toString(); + String curCell = new StringJoiner(MesPcnExtConstWords.COLON).add(params.getOrganizeCode()).add(params.getWorkCenterCode()).add(params.getWorkCellCode()).toString(); + + WorkCellDataCacheDispatch dispatch = new WorkCellDataCacheDispatch.builder().key(key).build().get(); + + if (!StringUtils.isEmpty(dispatch.getValue()) && !dispatch.getValue().equals(curCell)) + return stepResult.msg(String.format("产品条码[%s]已在生产线[%s]工位[%s]被扫描,请扫描其他条码或5秒后重试当前条码,操作失败!", + params.getLockContent(), dispatch.getValue().split(MesPcnExtConstWords.COLON)[1], dispatch.getValue().split(MesPcnExtConstWords.COLON)[2])).isCompleted(); + + new WorkCellDataCacheDispatch.builder().key(key).value(curCell).timeSecond(5).build().get(); + + return true; + + } } \ 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/station/jx/JxSnFinalInspectionModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnFinalInspectionModuleService.java new file mode 100644 index 0000000..2ebb6a3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnFinalInspectionModuleService.java @@ -0,0 +1,279 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxSnWorkCellScanModel; +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.api.iservice.busi.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.model.AttrBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.impp.framework.boot.util.ImppRedis; +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.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 展示组件:嘉兴条码终检 + * @Reference : + * @Author :wangjie + * @CreateDate : 2020-06-26 11:18 上午 + * @Modify: + **/ +@Slf4j +@Service("jxSnFinalInspectionModuleService") +public class JxSnFinalInspectionModuleService extends BaseModuleService { + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Autowired + private IProduceSnExtService produceSnExtService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) + private ImppRedis redisMesPcn; + + @Override + public void init(StationRequestBean reqBean) { + MesWorkOrderExt workOrderExt = getCurExecWorkOrder(reqBean); + doLoadData(reqBean, workOrderExt); + } + + @Override + public boolean execStateModule(StationRequestBean reqBean, List states, Map wcpcMap) { + String curExecWorkOrder = (String) doHandleCurExecWorkOrder(reqBean, 1, null); + if (StringUtils.isEmpty(curExecWorkOrder)) return true; + MesWorkOrderExt workOrderExtDb = getCachedWorkOrder(reqBean, curExecWorkOrder); + if (null == workOrderExtDb) return true; + doLoadData(reqBean, workOrderExtDb); + return true; + } + + private MesWorkOrderExt getCurExecWorkOrder(StationRequestBean reqBean) { + String curExecWorkOrder = (String) doHandleCurExecWorkOrder(reqBean, 1, null); + MesWorkOrderExt workOrderExtDb = StringUtils.isEmpty(curExecWorkOrder) ? null : getCachedWorkOrder(reqBean, curExecWorkOrder); + return workOrderExtDb; + } + + private String getDataKey(StationRequestBean reqBean) { + return new StringJoiner(MesPcnExtConstWords.COLON).add(reqBean.getOrganizeCode()) + .add(MesPcnExtConstWords.JX_SN_FQC_DATA).add(reqBean.getWorkCenterCode()).add(reqBean.getWorkCellCode()).toString(); + } + + private MesWorkOrderExt getCachedWorkOrder(StationRequestBean reqBean, String curExecWorkOrder) { + return workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrder); + } + + private List packDataAttrList() { + List attrBeanList = new ArrayList<>(); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.MANAGE_CODE, "(源)管理码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.STATUS, "终检状态"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.SERIAL_NUMBER, "过程条码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PRODUCT_SN, "产品条码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.CREATE_DATE_TIME, "操作时间"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.CREATE_USER, "操作人"); + return attrBeanList; + } + + private void doLoadData(StationRequestBean reqBean, MesWorkOrderExt workOrderExt) { + StationResultBean resultBean = new StationResultBean(); + + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); + resultBean.setCustomPageName(MesPcnExtConstWords.JX_SN_FQC_MODULE); + resultBean.setDataAttrList(packDataAttrList()); + resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + + if (null != workOrderExt) { + List produceSnList; + if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != workOrderExt.getWorkOrderType()) + produceSnList = produceSnExtService.getProduceSnExtListByOrderNo(reqBean.getOrganizeCode(), workOrderExt.getOrderNo()); + else + produceSnList = produceSnExtService.getProduceSnExtListByLastOrderNo(reqBean.getOrganizeCode(), workOrderExt.getOrderNo()); + + resultBean.setResultMap(packResultMap(workOrderExt, getCompleteQtyByType(reqBean, produceSnList))); + + resultBean.setResultList(packResultListByType(reqBean, produceSnList)); + } + + this.sendMessage(reqBean, resultBean); + + } + + private Integer getCompleteQtyByType(StationRequestBean reqBean, List produceSnList) { + List curProcessSnList = CollectionUtils.isEmpty(produceSnList) ? null : + produceSnList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProcessCode()) && o.getProcessCode().equals(reqBean.getProcessCode()))).collect(Collectors.toList()); + return CollectionUtils.isEmpty(curProcessSnList) ? MesPcnExtConstWords.ZERO : curProcessSnList.size(); + } + + private List packResultListByType(StationRequestBean reqBean, List produceSnList) { + List resultList = null; + + if (CollectionUtils.isEmpty(produceSnList)) return resultList; + + produceSnList = produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getModifyDatetime).reversed()).collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(produceSnList) && produceSnList.size() > 50) produceSnList = produceSnList.subList(0, 50); + + Integer index = 1; + for (MesProduceSnExt produceSnExt : produceSnList) { + if (null == produceSnExt) continue; + if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); + JxSnWorkCellScanModel result = new JxSnWorkCellScanModel(); + BeanUtils.copyProperties(produceSnExt, result); + if (!StringUtils.isEmpty(produceSnExt.getProcessCode()) && produceSnExt.getProcessCode().equals(reqBean.getProcessCode())) result.status("已终检").color(MesPcnExtConstWords.GREEN); + else if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == produceSnExt.getOperateType()) result.status("返修中"); + else result.status("未终检"); + resultList.add(result.manageCode(produceSnExt.getTrayNo()).index(index)); + index ++; + } + + return resultList; + } + + private Map packResultMap(MesWorkOrderExt workOrderExt, Integer completeQty) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.CUR_WORK_ORDER_NO, workOrderExt.getOrderNo()); + resultMap.put(MesPcnExtConstWords.PART_NO, workOrderExt.getPartNo()); + resultMap.put(MesPcnExtConstWords.PART_NAME_RDD, workOrderExt.getPartNameRdd()); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_TYPE, workOrderExt.getWorkOrderType()); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_TYPE_NAME, MesPcnExtEnumUtil.WORK_ORDER_TYPE.valueOfDescription(workOrderExt.getWorkOrderType())); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, workOrderExt.getWorkOrderStatus()); + resultMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS_NAME, MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus())); + resultMap.put(MesPcnExtConstWords.QTY, workOrderExt.getQty().intValue()); + resultMap.put(MesPcnExtConstWords.COMPLETE_QTY, completeQty); + return resultMap; + } + + @Override + public boolean doFunction(StationRequestBean reqBean) { + Boolean result = false; + Map dataMap = reqBean.getDataMap(); + String command = (String) dataMap.get(MesPcnExtConstWords.COMMAND); + Object value = dataMap.get(MesPcnExtConstWords.VALUE); + if (StringUtils.isEmpty(command)) { + this.sendMessage(reqBean, null, "后端未获取到业务功能指令", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + switch (command) { + case MesPcnExtConstWords.CMD_WORK_ORDER : + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "请选择启动状态的生产工单", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null); + if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result; + reqBean.setForceJumpProcess(true); + if (StringUtils.isEmpty(selectWorkOrderNo)) { + if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) result = true; + else { + this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + } + break; + case MesPcnExtConstWords.CMD_BUSI_FLAG : + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "请点击业务按钮", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + + String curBusiFlag = (String) doHandleBusiFlag(reqBean, 1, null); + if (!StringUtils.isEmpty(curBusiFlag) && curBusiFlag.equals(value)) return result; + reqBean.setTriggerAutoFsm(true); + if (StringUtils.isEmpty(curBusiFlag)) { + if ((Boolean) doHandleBusiFlag(reqBean, 2, value.toString())) result = true; + else { + this.sendMessage(reqBean, null, String.format("业务按钮[%s]缓存失败,请重试", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + } + break; + case MesPcnExtConstWords.CMD_FORCE_CENTER_PASS : + if (StringUtils.isEmpty(value)) { + this.sendMessage(reqBean, null, "入参缺少产线强制放行的工步代码", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return result; + } + reqBean.setForceSpecStepCode(value.toString()); + result = true; + break; + default: + break; + } + + if (!result) this.sendMessage(reqBean, null, "操作太频繁", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else { + //跳过工序 + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + } + return result; + } + + public synchronized Object doHandleCurExecWorkOrder(StationRequestBean reqBean, Integer flag, String curExecWorkOrder) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER, curExecWorkOrder, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CUR_EXEC_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleSelectWorkOrderNo(StationRequestBean reqBean, Integer flag, String selectWorkOrderNo) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER, selectWorkOrderNo, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_WORK_ORDER); + return true; + default: + return null; + } + } + + public synchronized Object doHandleBusiFlag(StationRequestBean reqBean, Integer flag, String busiFlag) { + switch (flag) { + case 1: + return redisMesPcn.getHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_BUSI_FLAG); + case 2: + return redisMesPcn.putHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_BUSI_FLAG, busiFlag, MesPcnEnumUtil.EXPIRE_TIME.NEVER.getValue()); + case 3: + redisMesPcn.deleteHash(getDataKey(reqBean), MesPcnExtConstWords.CMD_BUSI_FLAG); + return true; + default: + return null; + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnLineOnModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnLineOnModuleService.java index f1934ca..455fa63 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnLineOnModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/station/jx/JxSnLineOnModuleService.java @@ -6,7 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnMcRecordService; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnMcRecord; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxSnLineOnModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxSnWorkCellScanModel; 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.api.iservice.busi.IShippingDispatchService; @@ -92,7 +92,7 @@ public class JxSnLineOnModuleService extends BaseModuleService { List attrBeanList = new ArrayList<>(); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号"); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.MANAGE_CODE, "(源)管理码"); - PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.BIND_STATUS, "关键件绑定情况"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.STATUS, "上线状态"); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.SERIAL_NUMBER, "过程条码"); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PRODUCT_SN, "产品条码"); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.CREATE_DATE_TIME, "操作时间"); @@ -129,17 +129,27 @@ public class JxSnLineOnModuleService extends BaseModuleService { } private Integer getCompleteQtyByType(Integer workOrderType, List produceSnList, List produceSnMcRecordList) { - if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.ATTEMPT_ORDER.getValue() != workOrderType) return CollectionUtils.isEmpty(produceSnList) ? MesPcnExtConstWords.ZERO : produceSnList.size(); - else return CollectionUtils.isEmpty(produceSnMcRecordList) ? MesPcnExtConstWords.ZERO : produceSnMcRecordList.size(); + if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue() == workOrderType) return getListSize(produceSnList); + else if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderType) return getListSize(getLineOnSnList(produceSnList)); + else return getListSize(produceSnMcRecordList); } - private List packResultListByType(Integer workOrderType, List produceSnList, List produceSnMcRecordList) { + private List getLineOnSnList(List produceSnList) { + return CollectionUtils.isEmpty(produceSnList) ? null : + produceSnList.stream().filter(o -> (null != o && MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() == o.getSnStatus())).collect(Collectors.toList()); + } + + private Integer getListSize(List list) { + return CollectionUtils.isEmpty(list) ? MesPcnExtConstWords.ZERO : list.size(); + } + + private List packResultListByType(Integer workOrderType, List produceSnList, List produceSnMcRecordList) { if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.ATTEMPT_ORDER.getValue() != workOrderType) return packResultListByType1(produceSnList); else return packResultListByType2(produceSnMcRecordList); } - private List packResultListByType1(List produceSnList) { - List resultList = null; + private List packResultListByType1(List produceSnList) { + List resultList = null; if (CollectionUtils.isEmpty(produceSnList)) return resultList; @@ -150,22 +160,20 @@ public class JxSnLineOnModuleService extends BaseModuleService { Integer index = 1; for (MesProduceSnExt produceSnExt : produceSnList) { if (null == produceSnExt) continue; - JxSnLineOnModel result = new JxSnLineOnModel(); + if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); + JxSnWorkCellScanModel result = new JxSnWorkCellScanModel(); BeanUtils.copyProperties(produceSnExt, result); - result.setManageCode(produceSnExt.getTrayNo()); - result.setBindStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= produceSnExt.getSnStatus() ? "已完成" : "未完成"); - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= produceSnExt.getSnStatus()) result.setColor(MesPcnExtConstWords.GREEN); - result.setIndex(index); + if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= produceSnExt.getSnStatus()) result.status("已完成").color(MesPcnExtConstWords.GREEN); + else result.status("未完成"); + resultList.add(result.manageCode(produceSnExt.getTrayNo()).index(index)); index ++; - if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); - resultList.add(result); } return resultList; } - private List packResultListByType2(List produceSnMcRecordList) { - List resultList = null; + private List packResultListByType2(List produceSnMcRecordList) { + List resultList = null; if (CollectionUtils.isEmpty(produceSnMcRecordList)) return resultList; @@ -176,14 +184,13 @@ public class JxSnLineOnModuleService extends BaseModuleService { Integer index = 1; for (MesProduceSnMcRecord produceSnMcRecord : produceSnMcRecordList) { if (null == produceSnMcRecordList) continue; - JxSnLineOnModel result = new JxSnLineOnModel(); + if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); + JxSnWorkCellScanModel result = new JxSnWorkCellScanModel(); BeanUtils.copyProperties(produceSnMcRecord, result); - result.setBindStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() <= produceSnMcRecord.getLineOnStatus() ? "已完成" : "未完成"); - if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() <= produceSnMcRecord.getLineOnStatus()) result.setColor(MesPcnExtConstWords.GREEN); - result.setIndex(index); + if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() <= produceSnMcRecord.getLineOnStatus()) result.status("已完成").color(MesPcnExtConstWords.GREEN); + else result.status("未完成"); + resultList.add(result.index(index)); index ++; - if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); - resultList.add(result); } return resultList; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxBindKeyPartStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxBindKeyPartStepService.java index 68d9af1..072583d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxBindKeyPartStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxBindKeyPartStepService.java @@ -118,7 +118,7 @@ public class JxBindKeyPartStepService extends BaseStepService { doHandleBindKeyPartData(reqBean, resultBean, moduleService, method, 2, MesPcnExtConstWords.BIND_KEY_PART, JSONObject.toJSONString(pbList)); - this.refresh(reqBean, pbList); + this.refresh(reqBean, resultBean, pbList); log.info("工厂{}生产线{}工位{}: --- STEP INIT --- JxBindKeyPartStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); @@ -156,7 +156,7 @@ public class JxBindKeyPartStepService extends BaseStepService { if (null == data) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, checkIsJumpState(reqBean, resultBean, moduleService, method, appendItem, true), "没有需要绑定的清单,请维护!"); - List pbList = this.refresh(reqBean, JSONObject.parseArray((String) data, ProcessBomModel.class)); + List pbList = this.refresh(reqBean, resultBean, JSONObject.parseArray((String) data, ProcessBomModel.class)); List kpsnRuleList = getKpsnRuleList(reqBean, pbList); @@ -179,7 +179,7 @@ public class JxBindKeyPartStepService extends BaseStepService { overrideMatchPbData(processBomModel); - this.refresh(reqBean, pbList); + this.refresh(reqBean, resultBean, pbList); if (!checkPbListIsComplete(reqBean, resultBean, moduleService, method, appendItem, pbList, true)) execSendMsgAndThrowEx(reqBean, resultBean, String.format("关键件条码[%s]绑定%s成功,请继续扫描关键件!", reqBean.getScanInfo(), suffix)); @@ -296,7 +296,7 @@ public class JxBindKeyPartStepService extends BaseStepService { else return null; } - private List refresh(StationRequestBean reqBean, List pbList) { + private List refresh(StationRequestBean reqBean, StationResultBean resultBean, List pbList) { List attrBeanList = new ArrayList<>(); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ITEM_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原材料物料号")); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ITEM_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原材料物料名称")); @@ -305,7 +305,6 @@ public class JxBindKeyPartStepService extends BaseStepService { PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.BOUND_QTY, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "已绑数量")); PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.IS_BIND_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否绑定")); - StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()); resultBean.setResultList(pbList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionAspectCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionAspectCheckStepService.java new file mode 100644 index 0000000..7fea859 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionAspectCheckStepService.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnFinalInspectionModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonBean; +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.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 嘉兴条码终检外观检查工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("jxSnFinalInspectionAspectCheckStepService") +public class JxSnFinalInspectionAspectCheckStepService extends BaseStepService { + + @Autowired + private JxSnFinalInspectionModuleService snFinalInspectionModuleService; + + @Override + public StepResult init(StationRequestBean reqBean) { + clearStepContent(reqBean); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionAspectCheckStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StationResultBean resultBean = new StationResultBean(); + + String busiFlag = (String) snFinalInspectionModuleService.doHandleBusiFlag(reqBean, 1, null); + if (!StringUtils.isEmpty(busiFlag)) snFinalInspectionModuleService.doHandleBusiFlag(reqBean, 3, null); + + String suffix = StringUtils.isEmpty(reqBean.getProductSn()) ? "管理编码" : "产品条码"; + String suffixSn = StringUtils.isEmpty(reqBean.getProductSn()) ? getManageCode(reqBean.getTray(), 1) : reqBean.getProductSn(); + + if (StringUtils.isEmpty(busiFlag)) execSendAspectCheckBusiFlag(reqBean, resultBean, suffix, suffixSn); + + StepResult stepResult = StepResult.getSuccessComplete(); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionAspectCheckStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + if (busiFlag.equals(BUSI_FLAG.QUALIFIED.getValue())) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s[%s]外观检查[合格]!", suffix, suffixSn)); + + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s[%s]外观检查[不合格]!即将进行返修状态标记!", suffix, suffixSn)); + + } + + private void execSendAspectCheckBusiFlag(StationRequestBean reqBean, StationResultBean resultBean, String suffix, String suffixSn) { + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.BUTTON.getValue()); + List buttonBeanList = new ArrayList<>(); + buttonBeanList.add(ButtonBean.builder().buttonCode(BUSI_FLAG.QUALIFIED.value).buttonName(BUSI_FLAG.QUALIFIED.description).methodContent(suffixSn).buttonDesc(BUSI_FLAG.QUALIFIED.description).build()); + buttonBeanList.add(ButtonBean.builder().buttonCode(BUSI_FLAG.REPAIR.value).buttonName(BUSI_FLAG.REPAIR.description).methodContent(suffixSn).buttonDesc(BUSI_FLAG.REPAIR.description).build()); + resultBean.setResultList(buttonBeanList); + this.sendMessage(reqBean, resultBean); + this.sendMessage(reqBean, resultBean, String.format("请对当前产品:%s[%s]进行外观检查!", suffix, suffixSn), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + execSendGuideAndThrowEx(reqBean, resultBean, "请点击业务按钮!"); + } + + private String getManageCode(String manageCode, Integer length) { + if (StringUtils.isEmpty(manageCode)) return null; + String[] manageCodeArr = manageCode.split(MesPcnExtConstWords.AND); + if (manageCodeArr.length >= length) return manageCodeArr[length - 1]; + else return null; + } + + enum BUSI_FLAG { + QUALIFIED("QUALIFIED", "检查合格"), + REPAIR("REPAIR", "返工返修"); + + private String value; + private String description; + + BUSI_FLAG(String value, String description) { + this.value = value; + this.description = description; + } + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionBindPsStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionBindPsStepService.java new file mode 100644 index 0000000..81010f0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionBindPsStepService.java @@ -0,0 +1,133 @@ +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.JxSnFinalInspectionModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; +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("jxSnFinalInspectionBindPsStepService") +public class JxSnFinalInspectionBindPsStepService extends BaseStepService { + + @Autowired + private JxSnFinalInspectionModuleService snFinalInspectionModuleService; + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionBindPsStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StationResultBean resultBean = new StationResultBean(); + + if (StringUtils.isEmpty(reqBean.getProductSn()) && StringUtils.isEmpty(reqBean.getScanInfo())) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描产品条码!"); + + String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean); + + WorkOrderExtModel orderModel = getWorkOrderExtModel(reqBean, resultBean, curExecWorkOrderNo); + + StepResult stepResult = StepResult.getSuccessComplete(); + + if (StringUtils.isEmpty(reqBean.getProductSn())) checkScanInfoIsValid(reqBean, resultBean, stepResult, orderModel); + else reqBean.setScanInfo(null); + + String suffix = StringUtils.isEmpty(reqBean.getProductSn()) ? String.format("管理编码[%s]", getManageCode(reqBean.getTray(), 1)) : String.format("产品条码[%s]", reqBean.getProductSn()); + + execFinalInspectionBindPs(reqBean, stepResult, orderModel); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionBindPsStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, String.format("%s%s终检完成!", suffix, !StringUtils.isEmpty(reqBean.getScanInfo()) ? String.format("已绑定产品条码[%s]!", reqBean.getScanInfo()) : MesPcnExtConstWords.EMPTY)); + } + + private String getCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean) { + String curExecWorkOrderNo = (String) snFinalInspectionModuleService.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 String getManageCode(String manageCode, Integer length) { + if (StringUtils.isEmpty(manageCode)) return null; + String[] manageCodeArr = manageCode.split(MesPcnExtConstWords.AND); + if (manageCodeArr.length >= length) return manageCodeArr[length - 1]; + else return null; + } + + private void 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()) + .orderModel(orderModel) + .lockContent(reqBean.getScanInfo()) + .strategyService(SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .build(); + + StepResult result = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.valueOfClazz(orderModel.getWorkOrderType()))).checkThirdPartyPs(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); + + if (!result.isCompleted()) execSendGuideAndThrowEx(reqBean, resultBean, "请扫描产品条码!"); + + if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.ATTEMPT_ORDER.getValue() == orderModel.getWorkOrderType()) stepResult.setData(params.getProduceSnExtDb()); + + } + + private void execFinalInspectionBindPs(StationRequestBean reqBean, StepResult stepResult, WorkOrderExtModel orderModel) { + ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .execFinalInspectionBindPs(new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .userInfo(reqBean.getUserInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .orderModel(orderModel) + .serialNumber(reqBean.getSerialNumber()) + .productSn(reqBean.getProductSn()) + .scanInfo(reqBean.getScanInfo()) + .manageCode(reqBean.getTray()) + .produceSnExtDb(null != stepResult.getData() ? (MesProduceSnExt) stepResult.getData() : null) + .obj(reqBean) + .build()); + } + +} 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 new file mode 100644 index 0000000..9049c8d --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionCheckMcOrPsStepService.java @@ -0,0 +1,124 @@ +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.JxSnFinalInspectionModuleService; +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("jxSnFinalInspectionCheckMcOrPsStepService") +public class JxSnFinalInspectionCheckMcOrPsStepService extends BaseStepService { + + @Autowired + private JxSnFinalInspectionModuleService snFinalInspectionModuleService; + + @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); + reqBean.setTray(null); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionCheckMcOrPsStepService --- 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 --- JxSnFinalInspectionCheckMcOrPsStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return stepResult; + } + + private String getCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean) { + String curExecWorkOrderNo = (String) snFinalInspectionModuleService.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) + .strategyService(SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .build(); + + StepResult result = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.valueOfClazz(orderModel.getWorkOrderType()))).checkFinalInspection(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()); + reqBean.setTray(null == params.getProduceSnMcRecordDb() ? params.getManageCode() : new StringJoiner(MesPcnExtConstWords.AND).add(params.getProduceSnMcRecordDb().getManageCode()).add(params.getProduceSnMcRecordDb().getId().toString()).toString()); + + 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/JxSnFinalInspectionDataReviewStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionDataReviewStepService.java new file mode 100644 index 0000000..f427cdb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionDataReviewStepService.java @@ -0,0 +1,121 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnFinalInspectionModuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProductData; +import cn.estsh.i3plus.pojo.mes.model.ButtonBean; +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.i3plus.pojo.mes.repository.MesProductDataRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 嘉兴条码终检数据复核工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("jxSnFinalInspectionDataReviewStepService") +public class JxSnFinalInspectionDataReviewStepService extends BaseStepService { + + @Autowired + private JxSnFinalInspectionModuleService snFinalInspectionModuleService; + + @Autowired + private MesProductDataRepository productDataRepository; + + @Override + public StepResult init(StationRequestBean reqBean) { + clearStepContent(reqBean); + return super.init(reqBean); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionDataReviewStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StationResultBean resultBean = new StationResultBean(); + + String busiFlag = (String) snFinalInspectionModuleService.doHandleBusiFlag(reqBean, 1, null); + if (!StringUtils.isEmpty(busiFlag)) snFinalInspectionModuleService.doHandleBusiFlag(reqBean, 3, null); + + String suffix = StringUtils.isEmpty(reqBean.getProductSn()) ? "管理编码" : "产品条码"; + String suffixSn = StringUtils.isEmpty(reqBean.getProductSn()) ? getManageCode(reqBean.getTray(), 1) : reqBean.getProductSn(); + + if (!StringUtils.isEmpty(busiFlag) && busiFlag.equals(BUSI_FLAG.ASPECT_CHECK.getValue())) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, String.format("%s[%s]已跳过数据复核进入外观检查!", suffix, suffixSn)); + + StepResult stepResult = StepResult.getSuccessComplete(); + + if (!StringUtils.isEmpty(busiFlag) && busiFlag.equals(BUSI_FLAG.REPAIR.getValue())) + return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.nextTriggerEvent(MesPcnExtConstWords.STATE_REPAIR), String.format("%s[%s]已跳过数据复核!即将进行返修状态标记!", suffix, suffixSn)); + + MesProductData productData = getProductData(reqBean, suffixSn); + + if (null == productData) execSendDataReviewBusiFlag(reqBean, resultBean, suffix, suffixSn); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionDataReviewStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("%s数据复核验证成功!", suffix)); + } + + private MesProductData getProductData(StationRequestBean reqBean, String suffixSn) { + return productDataRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SERIAL_NUMBER}, + new Object[]{reqBean.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), suffixSn}); + } + + private void execSendDataReviewBusiFlag(StationRequestBean reqBean, StationResultBean resultBean, String suffix, String suffixSn) { + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CONTENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.BUTTON.getValue()); + List buttonBeanList = new ArrayList<>(); + buttonBeanList.add(ButtonBean.builder().buttonCode(BUSI_FLAG.ASPECT_CHECK.value).buttonName(BUSI_FLAG.ASPECT_CHECK.description).methodContent(suffixSn).buttonDesc(BUSI_FLAG.ASPECT_CHECK.description).build()); + buttonBeanList.add(ButtonBean.builder().buttonCode(BUSI_FLAG.REPAIR.value).buttonName(BUSI_FLAG.REPAIR.description).methodContent(suffixSn).buttonDesc(BUSI_FLAG.REPAIR.description).build()); + resultBean.setResultList(buttonBeanList); + this.sendMessage(reqBean, resultBean); + this.sendMessage(reqBean, resultBean, String.format("%s[%s]数据复核验证失败!", suffix, suffixSn), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + execSendGuideAndThrowEx(reqBean, resultBean, "请点击业务按钮!"); + } + + private String getManageCode(String manageCode, Integer length) { + if (StringUtils.isEmpty(manageCode)) return null; + String[] manageCodeArr = manageCode.split(MesPcnExtConstWords.AND); + if (manageCodeArr.length >= length) return manageCodeArr[length - 1]; + else return null; + } + + enum BUSI_FLAG { + ASPECT_CHECK("ASPECT_CHECK", "外观检查"), + REPAIR("REPAIR", "返工返修"); + + private String value; + private String description; + + BUSI_FLAG(String value, String description) { + this.value = value; + this.description = description; + } + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java new file mode 100644 index 0000000..bb0af27 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionInitOrderStepService.java @@ -0,0 +1,107 @@ +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.apiservice.serviceimpl.busi.station.jx.JxSnFinalInspectionModuleService; +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.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.platform.common.tool.MathOperation; +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 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("jxSnFinalInspectionInitOrderStepService") +public class JxSnFinalInspectionInitOrderStepService extends BaseStepService { + + @Autowired + private JxSnFinalInspectionModuleService snFinalInspectionModuleService; + + @Autowired + private ISxWorkOrderExtService workOrderExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionInitOrderStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StepResult stepResult = StepResult.getSuccessComplete(); + + StationResultBean resultBean = new StationResultBean(); + + String selectWorkOrderNo = (String) snFinalInspectionModuleService.doHandleSelectWorkOrderNo(reqBean, 1, null); + String curExecWorkOrderNo = (String) snFinalInspectionModuleService.doHandleCurExecWorkOrder(reqBean, 1, null); + + if (!StringUtils.isEmpty(selectWorkOrderNo)) snFinalInspectionModuleService.doHandleSelectWorkOrderNo(reqBean, 3, null); + if (!StringUtils.isEmpty(selectWorkOrderNo) && !StringUtils.isEmpty(curExecWorkOrderNo)) { + if (selectWorkOrderNo.equals(curExecWorkOrderNo)) selectWorkOrderNo = null; + else curExecWorkOrderNo = null; + } + + MesWorkOrderExt workOrderExt = null; + + if (!StringUtils.isEmpty(selectWorkOrderNo)) { + workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), selectWorkOrderNo); + checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("选择的工单号[%s]", selectWorkOrderNo), true); + doCacheCurExecWorkOrderNo(reqBean, resultBean, stepResult, selectWorkOrderNo); + } + + if (!StringUtils.isEmpty(curExecWorkOrderNo)) { + workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(reqBean.getOrganizeCode(), curExecWorkOrderNo); + checkWorkOrderExtIsValid(reqBean, resultBean, stepResult, workOrderExt, String.format("此前操作的工单号[%s]", curExecWorkOrderNo), false); + } + + if (null == workOrderExt || !stepResult.isCompleted()) execSendGuideAndThrowEx(reqBean, resultBean, "请选择启动状态的生产工单!"); + + cacheOrderModel(reqBean, workOrderExt); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionInitOrderStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return stepResult; + } + + private void doCacheCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, String selectWorkOrderNo) { + Boolean flag = (Boolean) snFinalInspectionModuleService.doHandleCurExecWorkOrder(reqBean, 2, selectWorkOrderNo); + if (!flag) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("选择的工单号[%s]初始化失败!", selectWorkOrderNo)); + else { + snFinalInspectionModuleService.execStateModule(reqBean, null, null); + if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean, String.format("选择的工单号[%s]初始化成功!", selectWorkOrderNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + } + } + + private void checkWorkOrderExtIsValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkOrderExt workOrderExt, String suffix, Boolean flag) { + + if (null == workOrderExt) execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s对应的工单信息不存在!", suffix)); + + if (stepResult.isCompleted() && MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() != workOrderExt.getWorkOrderStatus()) + execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s状态[%s],不支持在此工位操作!", suffix, MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))); + + if (stepResult.isCompleted() && MathOperation.compareTo(workOrderExt.getQty(), new Double(0)) <= 0) + execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s计划数量为[0],不支持在此工位操作!", suffix)); + + if (!stepResult.isCompleted()) return; + + } + + private void cacheOrderModel(StationRequestBean reqBean, MesWorkOrderExt workOrderExt) { + WorkOrderExtModel orderModel = new WorkOrderExtModel(); + BeanUtils.copyProperties(workOrderExt, orderModel, MesPcnExtConstWords.ID); + reqBean.getDataMap().put(MesPcnExtConstWords.WORK_ORDER, orderModel); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionMarkRepairStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionMarkRepairStepService.java new file mode 100644 index 0000000..b912802 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnFinalInspectionMarkRepairStepService.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.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.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.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 lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 嘉兴条码终检标记返修工步 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-07-11 + * @Modify: + **/ +@Slf4j +@Service("jxSnFinalInspectionMarkRepairStepService") +public class JxSnFinalInspectionMarkRepairStepService extends BaseStepService { + + @Override + public StepResult execute(StationRequestBean reqBean) { + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionMarkRepairStepService --- START --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + StationResultBean resultBean = new StationResultBean(); + + String suffix = StringUtils.isEmpty(reqBean.getProductSn()) ? String.format("管理编码[%s]", getManageCode(reqBean.getTray(), 1)) : String.format("产品条码[%s]", reqBean.getProductSn()); + + execFinalInspectionMarkRepair(reqBean); + + log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnFinalInspectionMarkRepairStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, String.format("%s标记返修完成!", suffix)); + } + + private String getManageCode(String manageCode, Integer length) { + if (StringUtils.isEmpty(manageCode)) return null; + String[] manageCodeArr = manageCode.split(MesPcnExtConstWords.AND); + if (manageCodeArr.length >= length) return manageCodeArr[length - 1]; + else return null; + } + + private void execFinalInspectionMarkRepair(StationRequestBean reqBean) { + ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .execFinalInspectionMarkRepair(new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .userInfo(reqBean.getUserInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .serialNumber(reqBean.getSerialNumber()) + .productSn(reqBean.getProductSn()) + .manageCode(reqBean.getTray()) + .build()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java index e483135..6029226 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnBindMcStepService.java @@ -1,39 +1,26 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IPartExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProductEncodeCfgExtService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxNumberRulePackAttributeService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnLineOnModuleService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesPartExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnMcRecord; 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.repository.MesProduceSnExtRepository; -import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnMcRecordRepository; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.ConvertBeanExt; +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.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; 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.apache.commons.collections.CollectionUtils; 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.HashMap; -import java.util.Map; import java.util.StringJoiner; /** @@ -53,24 +40,6 @@ public class JxSnLineOnBindMcStepService extends BaseStepService { @Autowired private ISxWorkOrderExtService workOrderExtService; - @Autowired - private IProductEncodeCfgExtService productEncodeCfgExtService; - - @Autowired - private IPartExtService partExtService; - - @Autowired - private ISxNumberRulePackAttributeService numberRulePackAttributeService; - - @Autowired - private ISyncFuncService syncFuncService; - - @Autowired - private MesProduceSnMcRecordRepository produceSnMcRecordRepository; - - @Autowired - private MesProduceSnExtRepository produceSnExtRepository; - @Override public StepResult guide(StationRequestBean reqBean) { return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean(), "请扫描管理编码或产品条码!"); @@ -91,21 +60,17 @@ public class JxSnLineOnBindMcStepService extends BaseStepService { if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == orderModel.getWorkOrderType()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, "返工工单已跳过管理编码绑定!"); - MesPartExt partDb = partExtService.getPartExt(reqBean.getOrganizeCode(), orderModel.getPartNo()); - if (null == partDb) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]关联的物料编码[%s]信息不存在!", orderModel.getOrderNo(), orderModel.getPartNo())); + StepResult stepResult = execLineOnBindMc(reqBean, resultBean, orderModel); - String serialNumber = null; - if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue() == orderModel.getWorkOrderType()) serialNumber = execSerialNumber(reqBean, resultBean, orderModel, partDb); + MesProduceSnMcRecord produceSnMcRecord = (MesProduceSnMcRecord) stepResult.getData(); - MesProduceSnMcRecord produceSnMcRecord = insertMcAndSn(reqBean, orderModel, serialNumber); - - reqBean.setSerialNumber(serialNumber); + reqBean.setSerialNumber(produceSnMcRecord.getSerialNumber()); reqBean.setTray(new StringJoiner(MesPcnExtConstWords.AND).add(produceSnMcRecord.getManageCode()).add(produceSnMcRecord.getId().toString()).toString()); log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnBindMcStepService --- SUCCESS --- MesProduceSnMcRecord:{} ---", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), JSONObject.toJSONString(produceSnMcRecord)); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, String.format("管理编码[%s]%s绑定生产工单[%s]成功!", - produceSnMcRecord.getManageCode(), !StringUtils.isEmpty(serialNumber) ? String.format("关联过程条码[%s]", serialNumber) : MesPcnExtConstWords.EMPTY, orderModel.getOrderNo())); + produceSnMcRecord.getManageCode(), !StringUtils.isEmpty(reqBean.getSerialNumber()) ? String.format("关联过程条码[%s]", reqBean.getSerialNumber()) : MesPcnExtConstWords.EMPTY, orderModel.getOrderNo())); } private String getCurExecWorkOrderNo(StationRequestBean reqBean, StationResultBean resultBean) { @@ -128,79 +93,20 @@ public class JxSnLineOnBindMcStepService extends BaseStepService { return orderModel; } - private String execSerialNumber(StationRequestBean reqBean, StationResultBean resultBean, WorkOrderExtModel orderModel, MesPartExt partDb) { - - String ruleCode = null; - try { - ruleCode = productEncodeCfgExtService.getRuleCodeByMatchType(reqBean.getOrganizeCode(), MesPcnExtEnumUtil.ENCODE_CODE_TYPE.SERIAL_SN.getValue(), partDb, orderModel.getWorkCenterCode()); - } catch (Exception e) { - execExpSendMsgAndThrowEx(reqBean, resultBean, e.getMessage()); - } - - if (StringUtils.isEmpty(ruleCode)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]关联的物料编码[%s]未配置有效的过程编码匹配规则!", orderModel.getOrderNo(), orderModel.getPartNo())); - - Map map = new HashMap<>(); - map.put(MesPcnExtConstWords.ORGANIZE_CODE, reqBean.getOrganizeCode()); - map.put(MesPcnExtConstWords.RULE_CODE, ruleCode); - map.put(MesPcnExtConstWords.PART_EXT, partDb); - map.put(MesPcnExtConstWords.WORK_ORDER_NO, orderModel.getOrderNo()); - map.put(MesPcnExtConstWords.WORK_CENTER_CODE, orderModel.getWorkCenterCode()); - GenSerialNoModel genSerialNoModel = numberRulePackAttributeService.doPackGenSerialNoModel(map); - - BaseResultBean baseResultBean = syncFuncService.syncSerialNo(genSerialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1); - if (null == baseResultBean || (!baseResultBean.isSuccess() || CollectionUtils.isEmpty(baseResultBean.getResultList()))) - execExpSendMsgAndThrowEx(reqBean, resultBean, String.format( - "工单号[%s]关联的物料编码[%s]配置的过程编码匹配规则编码[%s]生成过程条码失败:%s!", orderModel.getOrderNo(), orderModel.getPartNo(), ruleCode, null != baseResultBean ? baseResultBean.getErrorMsg() : null)); + private StepResult execLineOnBindMc(StationRequestBean reqBean, StationResultBean resultBean, WorkOrderExtModel orderModel) { - return baseResultBean.getResultList().get(0); - } - - private MesProduceSnMcRecord insertMcAndSn(StationRequestBean reqBean, WorkOrderExtModel orderModel, String serialNumber) { - MesProduceSnMcRecord produceSnMcRecord = insertProduceSnMcRecord(reqBean, orderModel, serialNumber); - if (!StringUtils.isEmpty(serialNumber)) insertProduceSnExt(reqBean, orderModel, serialNumber); - return produceSnMcRecord; - } - - private MesProduceSnMcRecord insertProduceSnMcRecord(StationRequestBean reqBean, WorkOrderExtModel orderModel, String serialNumber) { - MesProduceSnMcRecord produceSnMcRecord = new MesProduceSnMcRecord(); - produceSnMcRecord.setManageCode(reqBean.getTray()); - produceSnMcRecord.setSerialNumber(serialNumber); - produceSnMcRecord.setPartNo(orderModel.getPartNo()); - produceSnMcRecord.setPartNameRdd(orderModel.getPartNameRdd()); - produceSnMcRecord.setWorkCenterCode(orderModel.getWorkCenterCode()); - produceSnMcRecord.setWorkOrderNo(orderModel.getOrderNo()); - produceSnMcRecord.setSnStatus(MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.LINE_ON.getValue()); - produceSnMcRecord.setLineOnStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.FALSE.getValue()); - produceSnMcRecord.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.TRUE.getValue()); - produceSnMcRecord.setOrganizeCode(reqBean.getOrganizeCode()); - produceSnMcRecord.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - ConvertBean.serviceModelInitialize(produceSnMcRecord, reqBean.getUserInfo()); - return produceSnMcRecordRepository.insert(produceSnMcRecord); - } + StepResult stepResult = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.valueOfClazz(orderModel.getWorkOrderType()))) + .execLineOnBindMc(new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .userInfo(reqBean.getUserInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .orderModel(orderModel) + .manageCode(reqBean.getTray()) + .strategyService(SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .build()); + if (!stepResult.isCompleted()) execExpSendMsgAndThrowEx(reqBean, resultBean, stepResult.getMsg()); - private void insertProduceSnExt(StationRequestBean reqBean, WorkOrderExtModel orderModel, String serialNumber) { - MesProduceSnExt produceSnExt = new MesProduceSnExt(); - produceSnExt.setSerialNumber(serialNumber); - produceSnExt.setWorkOrderNo(orderModel.getOrderNo()); - produceSnExt.setLastWorkOrderNo(orderModel.getOrderNo()); - produceSnExt.setPartNo(orderModel.getPartNo()); - produceSnExt.setPartNameRdd(orderModel.getPartNameRdd()); - produceSnExt.setPrintStatus(MesPcnExtEnumUtil.PRODUCE_SN_PRINT_STATUS.UNPRINT.getValue()); - produceSnExt.setPrintCount(0); - produceSnExt.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); - produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue()); - produceSnExt.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.STANDARD_SN.getValue()); - produceSnExt.setQty(1d); - produceSnExt.setWorkCenterCode(orderModel.getWorkCenterCode()); - produceSnExt.setTrayNo(reqBean.getTray()); - produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue()); - produceSnExt.setIfCompensate(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - produceSnExt.setOrganizeCode(orderModel.getOrganizeCode()); - ConvertBean.serviceModelInitialize(produceSnExt, reqBean.getUserInfo()); - produceSnExt.setInWorkCenterTime(produceSnExt.getCreateDatetime()); - produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - new ConvertBeanExt(produceSnExt).convertBean(produceSnExt); - produceSnExtRepository.insert(produceSnExt); + 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/JxSnLineOnCheckMcOrPsStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java index 66f1779..f5a6fde 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCheckMcOrPsStepService.java @@ -70,9 +70,7 @@ public class JxSnLineOnCheckMcOrPsStepService extends BaseStepService { WorkOrderExtModel orderModel = getWorkOrderExtModel(reqBean, resultBean, curExecWorkOrderNo); - if (!checkScanInfoIsValid(reqBean, resultBean, stepResult, orderModel).isCompleted()) return stepResult; - - this.sendMessage(reqBean, resultBean, stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + checkScanInfoIsValid(reqBean, resultBean, stepResult, orderModel); log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnCheckMcOrPsStepService --- SUCCESS --- ", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCompleteStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCompleteStepService.java index ad51d44..72e6794 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCompleteStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/jx/JxSnLineOnCompleteStepService.java @@ -1,21 +1,15 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.step.jx; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.station.jx.JxSnLineOnModuleService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnMcRecord; -import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnExtRepository; -import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnMcRecordRepository; -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.model.jx.JxProdBusiStrategyParamsBuilder; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; import cn.estsh.i3plus.mes.pcn.serviceimpl.base.BaseStepService; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; 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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,18 +29,6 @@ public class JxSnLineOnCompleteStepService extends BaseStepService { @Autowired private JxSnLineOnModuleService snLineOnModuleService; - @Autowired - private IJxProduceSnExtService produceSnExtService; - - @Autowired - private MesProduceSnMcRecordRepository produceSnMcRecordRepository; - - @Autowired - private MesProduceSnExtRepository produceSnExtRepository; - - @Autowired - private IProduceSnTravelExtService produceSnTravelExtService; - @Override public StepResult execute(StationRequestBean reqBean) { @@ -58,15 +40,11 @@ public class JxSnLineOnCompleteStepService extends BaseStepService { String curExecWorkOrderNo = getCurExecWorkOrderNo(reqBean, resultBean); - MesProduceSnExt produceSnExtDb = saveProduceSn(reqBean, resultBean); - - saveProduceSnMcRecord(reqBean, resultBean); - - insertProduceSnTravel(produceSnExtDb); + StepResult stepResult = execLineOnComplete(reqBean, resultBean); log.info("工厂{}生产线{}工位{}: --- STEP EXECUTE --- JxSnLineOnCompleteStepService --- SUCCESS ---", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); - return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, StepResult.getSuccessComplete(), true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("管理编码[%s]过程条码[%s]产品条码[%s]关联生产工单[%s]上线完成!", reqBean.getTray(), reqBean.getSerialNumber(), reqBean.getProductSn(), curExecWorkOrderNo)); } @@ -76,40 +54,19 @@ public class JxSnLineOnCompleteStepService extends BaseStepService { return curExecWorkOrderNo; } - private MesProduceSnExt saveProduceSn(StationRequestBean reqBean, StationResultBean resultBean) { - if (StringUtils.isEmpty(reqBean.getSerialNumber()) && StringUtils.isEmpty(reqBean.getProductSn())) return null; - MesProduceSnExt produceSnExtDb = produceSnExtService.getProduceSnExtDb(reqBean.getOrganizeCode(), reqBean.getSerialNumber(), reqBean.getProductSn()); - - if (null == produceSnExtDb) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("过程条码[%s]产品条码[%s]对应的信息不存在!", reqBean.getSerialNumber(), reqBean.getProductSn())); - - if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == produceSnExtDb.getOperateType()) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("过程条码[%s]产品条码[%s]对应的信息当前业务状态[返修]!", reqBean.getSerialNumber(), reqBean.getProductSn())); - - if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= produceSnExtDb.getSnStatus()) return produceSnExtDb; - - produceSnExtDb.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()); - produceSnExtService.doPackSnExtProcess(reqBean, produceSnExtDb); - ConvertBean.serviceModelUpdate(produceSnExtDb, reqBean.getUserInfo()); - produceSnExtDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - new ConvertBeanExt(produceSnExtDb).convertBean(produceSnExtDb); - return produceSnExtRepository.save(produceSnExtDb); - } - - private void saveProduceSnMcRecord(StationRequestBean reqBean, StationResultBean resultBean) { - if (StringUtils.isEmpty(reqBean.getTray()) || !reqBean.getTray().contains(MesPcnExtConstWords.AND)) return; - String[] manageCodeArr = reqBean.getTray().split(MesPcnExtConstWords.AND); - MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getById(Long.parseLong(manageCodeArr[1])); - if (null == produceSnMcRecordDb) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("管理编码[%s]ID[%s]对应的管理编码与工单条码关系信息不存在!", manageCodeArr[0], manageCodeArr[1])); - if (MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue() == produceSnMcRecordDb.getQcStatus()) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("管理编码[%s]ID[%s]对应的管理编码与工单条码关系信息当前业务状态[返修]!", manageCodeArr[0], manageCodeArr[1])); - if (MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue() == produceSnMcRecordDb.getLineOnStatus()) return; - produceSnMcRecordDb.setLineOnStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.TRUE.getValue()); - ConvertBean.serviceModelUpdate(produceSnMcRecordDb, reqBean.getUserInfo()); - produceSnMcRecordDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - produceSnMcRecordRepository.save(produceSnMcRecordDb); - } - - private void insertProduceSnTravel(MesProduceSnExt produceSnExtDb) { - if (null == produceSnExtDb) return; - produceSnTravelExtService.insertProduceSnTravelExt(produceSnExtDb); + private StepResult execLineOnComplete(StationRequestBean reqBean, StationResultBean resultBean) { + StepResult stepResult = ((IJxProdBusiStrategyService) SpringContextsUtil.getBean(MesPcnExtEnumUtil.JX_PROD_BUSI_STRATEGY.COMMON.getClazz())) + .execLineOnComplete(new JxProdBusiStrategyParamsBuilder.builder() + .organizeCode(reqBean.getOrganizeCode()) + .userInfo(reqBean.getUserInfo()) + .location(reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()) + .manageCode(reqBean.getTray()) + .serialNumber(reqBean.getSerialNumber()) + .productSn(reqBean.getProductSn()) + .obj(reqBean) + .build()); + if (!stepResult.isCompleted()) execExpSendMsgAndThrowEx(reqBean, resultBean, stepResult.getMsg()); + return stepResult; } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxProdBusiStrategyParamsBuilder.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxProdBusiStrategyParamsBuilder.java index 9c4747d..e25a291 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxProdBusiStrategyParamsBuilder.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxProdBusiStrategyParamsBuilder.java @@ -53,6 +53,14 @@ public class JxProdBusiStrategyParamsBuilder implements Serializable { private Object strategyService; + private String routeCode; + + private String processCode; + + private String lockContent; + + private Object obj; + public static class builder { JxProdBusiStrategyParamsBuilder params = new JxProdBusiStrategyParamsBuilder(); @@ -113,6 +121,27 @@ public class JxProdBusiStrategyParamsBuilder implements Serializable { return this; } + public builder routeProcess(String routeCode, String processCode) { + params.routeCode = routeCode; + params.processCode = processCode; + return this; + } + + public builder lockContent(String lockContent) { + params.lockContent = lockContent; + return this; + } + + public builder produceSnExtDb(MesProduceSnExt produceSnExtDb) { + params.produceSnExtDb = produceSnExtDb; + return this; + } + + public builder obj(Object obj) { + params.obj = obj; + return this; + } + public JxProdBusiStrategyParamsBuilder build() { return params; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnLineOnModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnWorkCellScanModel.java similarity index 54% rename from modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnLineOnModel.java rename to modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnWorkCellScanModel.java index 27d3a4f..60fb1e3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnLineOnModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxSnWorkCellScanModel.java @@ -12,8 +12,8 @@ import java.io.Serializable; * @date 2021/1/15 15:32 **/ @Data -@ApiModel("嘉兴松下条码上线 MODEL") -public class JxSnLineOnModel implements Serializable { +@ApiModel("嘉兴松下工位扫描 MODEL") +public class JxSnWorkCellScanModel implements Serializable { private static final long serialVersionUID = 8683799945479864228L; @@ -35,10 +35,30 @@ public class JxSnLineOnModel implements Serializable { @ApiParam("产品条码") private String productSn; - @ApiParam("关键件绑定情况") - private String bindStatus; + @ApiParam("状态") + private String status; @ApiParam("颜色") private String color; + public JxSnWorkCellScanModel index(Integer index) { + this.index = index; + return this; + } + + public JxSnWorkCellScanModel manageCode(String manageCode) { + this.manageCode = manageCode; + return this; + } + + public JxSnWorkCellScanModel status(String status) { + this.status = status; + return this; + } + + public JxSnWorkCellScanModel color(String color) { + this.color = color; + return this; + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 5227607..6d432b3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -889,4 +889,12 @@ public class MesPcnExtConstWords { public static final Integer ZERO = 0; public static final String THIRD_PARTY_PID = "thirdPartyPid"; + + public static final String JX_SN_FQC_MODULE = "JX_SN_FQC_MODULE"; + public static final String JX_SN_FQC_DATA = "JX_SN_FQC_DATA"; + public static final String CMD_BUSI_FLAG = "CMD_BUSI_FLAG"; + public static final String STATE_REPAIR = "STATE_REPAIR"; + public static final String JX_THIRD_PARTY_SN_LOCK = "JX_THIRD_PARTY_SN_LOCK"; + + }