diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java index 3f93913..6a1b4d1 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java @@ -4,7 +4,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionInputModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionViewModel; import cn.estsh.i3plus.pojo.mes.bean.MesPartTypeDefect; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -20,14 +19,14 @@ public interface IMesInputDefectRecordService { @ApiOperation(value = "查询页面信息") - MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel model, String org); + MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel model); @ApiOperation(value = "零件类型缺陷类型对应关系信息") List queryPartTypeDefect(String serialNumber, String defectLocation, boolean flg, Integer frontBack, String org); @ApiOperation(value = "完成质检") - void savePartInspection(MesPartInspectionInputModel model, String org); + void savePartInspection(MesPartInspectionInputModel model); @ApiOperation(value = "客退品") MesProduceSn customerBack(String organizeCode, String sn, String userName); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java index 8472b8e..93df197 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java @@ -20,21 +20,19 @@ import java.util.List; **/ public interface IMesNcProcessingService { - @ApiOperation(value = "查询NC-零件检测-单据") - public ListPager queryPartInspectionByPager(MesPartInspection partInspection, Pager pager); + ListPager queryPartInspectionByPager(MesPartInspection partInspection, Pager pager); @ApiOperation(value = "查询NC-零件检测-单据") - public MesNcProcessingModel queryPartInspection(MesPartInspection partInspection); + MesNcProcessingModel queryPartInspection(MesPartInspection partInspection); @ApiOperation(value = "查询责任人") - public List queryPerson(String org); + List queryPerson(String org); @ApiOperation(value = "查询标记不良的物料及批次") - public ListPager queryPartLot(String partNo, String lot, String org, Pager pager); + ListPager queryPartLot(String partNo, String lot, String org, Pager pager); @ApiOperation(value = "NC处理") - public void saveNc(MesNcProcessingInputModel model, String org, boolean isOrder); - + void saveNc(MesNcProcessingInputModel model, String org, boolean isOrder); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java index 2d41c6f..6891cd8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java @@ -7,7 +7,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionInputModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionViewModel; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -35,8 +34,8 @@ public class MesInputDefectRecordController { public ResultBean queryPartInspection(@RequestBody MesPartInspectionInputModel model) { try { - String organizeCode = !StringUtils.isEmpty(model.getOrganizeCode()) ? model.getOrganizeCode() : AuthUtil.getOrganize().getOrganizeCode(); - MesPartInspectionViewModel result = inputDefectRecordService.queryPartInspection(model, organizeCode); + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂不能为空"); + MesPartInspectionViewModel result = inputDefectRecordService.queryPartInspection(model); String msg = "查询成功"; if (!StringUtils.isEmpty(model.getFrontBack()) && model.getFrontBack().compareTo(10) == 0 && (Objects.isNull(result.getPartTypePicture()) || StringUtils.isEmpty(result.getPartTypePicture().getFrontPictureName()))) msg = "A面图片未维护"; if (!StringUtils.isEmpty(model.getFrontBack()) && model.getFrontBack().compareTo(20) == 0 && (Objects.isNull(result.getPartTypePicture()) || StringUtils.isEmpty(result.getPartTypePicture().getBackPictureName()))) msg = "B面图片未维护"; @@ -50,16 +49,14 @@ public class MesInputDefectRecordController { @GetMapping("/query-part-type-defect") @ApiOperation(value = "查询零件类型缺陷类型对应关系") - public ResultBean queryPartTypeDefect(String partNo, String defectLocation, boolean flg, Integer frontBack,String organizeCode) { + public ResultBean queryPartTypeDefect(String partNo, String defectLocation, boolean flg, Integer frontBack, String organizeCode) { try { - // 数据校验 ValidatorBean.checkNotNull(partNo, "物料号不能为空"); ValidatorBean.checkNotNull(defectLocation, "位置不能为空"); ValidatorBean.checkNotNull(frontBack, "正反面不能为空"); - -// return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocationCode, flg, frontBack, "2031")); - return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocation, flg, frontBack,!StringUtils.isEmpty(organizeCode)?organizeCode:AuthUtil.getOrganizeCode())); + ValidatorBean.checkNotNull(organizeCode, "工厂不能为空"); + return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocation, flg, frontBack, organizeCode)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { @@ -72,15 +69,14 @@ public class MesInputDefectRecordController { public ResultBean savePartInspection(@RequestBody MesPartInspectionInputModel model) { try { - + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂不能为空"); + ValidatorBean.checkNotNull(model.getUserInfo(), "操作人不能为空"); if (StringUtils.isEmpty(model.getSn()) && (StringUtils.isEmpty(model.getPartNo()) || StringUtils.isEmpty(model.getLotNo()) || StringUtils.isEmpty(model.getQty()) || MathOperation.compareTo(model.getQty(), new Double(0)) == 0)) { - throw new ImppBusiException("条码为空或零件号+批次+数量为空"); } -// inputDefectRecordService.savePartInspection(model, "CK01"); - inputDefectRecordService.savePartInspection(model, !StringUtils.isEmpty(model.getOrganizeCode())?model.getOrganizeCode():AuthUtil.getOrganizeCode()); + inputDefectRecordService.savePartInspection(model); return ResultBean.success("质检已完成,请继续"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -94,7 +90,6 @@ public class MesInputDefectRecordController { public ResultBean customerBack(@RequestBody MesPartInspectionInputModel model) { try { -// inputDefectRecordService.savePartInspection(model, "CK01"); MesProduceSn mesProduceSn = inputDefectRecordService.customerBack(model.getOrganizeCode(), model.getSn(), model.getUserInfo()); return ResultBean.success("客退品已完成,请继续").setResultObject(mesProduceSn); } catch (ImppBusiException imppException) { @@ -109,7 +104,6 @@ public class MesInputDefectRecordController { public ResultBean customerBackCommit(@RequestBody MesPartInspectionInputModel model) { try { -// inputDefectRecordService.savePartInspection(model, "CK01"); inputDefectRecordService.customerBackCommit(model.getOrganizeCode(), model.getSn(), model.getUserInfo()); return ResultBean.success("客退品提交已完成,请继续"); } catch (ImppBusiException imppException) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java index cdf87d5..6e6d121 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java @@ -8,7 +8,6 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -36,7 +35,7 @@ public class MesNcProcessingController { public ResultBean queryPartInspectionByPager(MesPartInspection partInspection, Pager pager) { try { - + ValidatorBean.checkNotNull(partInspection.getOrganizeCode(), "工厂不能为空"); partInspection.setOrganizeCode(partInspection.getOrganizeCode()); ListPager partInspectionListPager = ncProcessingService.queryPartInspectionByPager(partInspection, pager); return ResultBean.success("查询成功").setListPager(partInspectionListPager); @@ -52,8 +51,7 @@ public class MesNcProcessingController { public ResultBean queryPartInspection(MesPartInspection partInspection) { try { - - partInspection.setOrganizeCode(!StringUtils.isEmpty(partInspection.getOrganizeCode())?partInspection.getOrganizeCode():AuthUtil.getOrganizeCode()); + ValidatorBean.checkNotNull(partInspection.getOrganizeCode(), "工厂不能为空"); return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryPartInspection(partInspection)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -67,8 +65,8 @@ public class MesNcProcessingController { public ResultBean queryPerson(String organizeCode) { try { - - return ResultBean.success("查询成功").setResultList(ncProcessingService.queryPerson(!StringUtils.isEmpty(organizeCode)?organizeCode:AuthUtil.getOrganizeCode())); + ValidatorBean.checkNotNull(organizeCode, "工厂不能为空"); + return ResultBean.success("查询成功").setResultList(ncProcessingService.queryPerson(organizeCode)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { @@ -82,7 +80,8 @@ public class MesNcProcessingController { public ResultBean saveNc(@RequestBody MesNcProcessingInputModel model) { try { - // 数据校验 + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂不能为空"); + ValidatorBean.checkNotNull(model.getUserName(), "操作人不能为空"); ValidatorBean.checkNotNull(model.getPartInspection(), "单据不能为空"); ValidatorBean.checkNotNull(model.getPartInspectionDetailList(), "单据明细不能为空"); if (model.getType() == MesExtEnumUtil.NC_TYPE.REWORK.getValue() @@ -102,7 +101,7 @@ public class MesNcProcessingController { if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) { throw new ImppBusiException("不存在可疑信息,请检查数据"); } - ncProcessingService.saveNc(model, !StringUtils.isEmpty(model.getOrganizeCode())? model.getOrganizeCode() : AuthUtil.getOrganizeCode(), false); + ncProcessingService.saveNc(model, model.getOrganizeCode(), false); return ResultBean.success("NC处理成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java index ea8f679..b463e6a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; @@ -142,6 +143,18 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { @Autowired private MesProductVersionRepository productVersionRepository; + @Autowired + private MesProductionRecordRepository productionRecordRepository; + + @Autowired + private IMesMoveRuleRepository mesMoveRuleRepository; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + + @Autowired + private MesPartProdGroupRepository mesPartProdGroupRao; + @Override public ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); @@ -297,6 +310,65 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { // ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName()); mesPartInspectionRepository.update(mesPartInspection); } + // 是否头零件模式 + boolean headModel = true; + if (!StringUtil.isEmpty(requestModel.getSn())) { + // 判断是头零件还是散件 查询加工记录 + DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "productSn", productionPackBean); + DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean); + MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean); + if (record != null) { + headModel = false; + } + } + // 如果是散件模式,需要查询出对应明细 + List mesPartModels = new ArrayList<>(); + if (!headModel) { + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "workOrderNo", partPackBean); + List workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(workOrderParts)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPartInspection.getWorkCenterCode(), "workCenterCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), mesReworkTask.getOrganizeCode()); + String esd = partInfo.getEsd(); + + // 查询移库规则 + DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean); + List moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean); + if (!CollectionUtils.isEmpty(moveRules)) { + MesPartModel mesPartModel = new MesPartModel(); + mesPartModel.setPartNo(workOrderPart.getPartNo()); + mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo()); + mesPartModels.add(mesPartModel); + } + } + } + } + + + + String target = mesConfigService.getCfgValue(requestModel.getOrganizeCode(), "UMLGO"); + String workCenterCode = ""; + if (mesPartInspection != null) { + workCenterCode = mesPartInspection.getWorkCenterCode(); + } + if (MesExtEnumUtil.NC_TYPE.REWORK.getValue() == requestModel.getType()) { + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + String destLocateNo = getDestLocateNo(requestModel.getOrganizeCode(), mesPartInspection.getId()); + for (MesPartModel mesPartModel : mesPartModels) { + doCreateReworkMove(requestModel,destLocateNo, target, workCenterCode, mesPartModel.getPartNo(), mesPartInspection.getId()); + } + } else { + doCreateReworkMove(requestModel, getDestLocateNo(requestModel.getOrganizeCode(), mesPartInspection.getId()), target, workCenterCode, mesReworkTask.getPartNo(), mesPartInspection.getId()); + } + } } if (MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue() == mesReworkTask.getType()) { mesReworkTask.setReworkedQty(requestModel.getReworkedQty()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index 67aa103..eec6574 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionInputModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartInspectionViewModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -27,7 +28,6 @@ import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -42,7 +42,6 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * @Description : @@ -117,55 +116,67 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService @Autowired private MesWorkCenterPartRelationRepository workCenterPartRelationRepository; + @Autowired + private MesProductionRecordRepository productionRecordRepository; + + @Autowired + private IMesMoveRuleRepository mesMoveRuleRepository; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + + @Autowired + private MesPartProdGroupRepository mesPartProdGroupRao; + @Override - public MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel inputModel, String org) { + public MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel model) { //检查物料 MesPart part; //获取NC-零件检测-单据 MesPartInspection partInspection = null; - Integer sourceType = null; - if (!StringUtils.isEmpty(inputModel.getSn())) { + Integer sourceType; + if (!StringUtils.isEmpty(model.getSn())) { // 数据校验 - ValidatorBean.checkNotNull(inputModel.getFrontBack(), "正反面不能为空"); + ValidatorBean.checkNotNull(model.getFrontBack(), "正反面不能为空"); //检查条码 - MesProduceSn produceSn = checkProduceSn(inputModel.getSn(), org); + MesProduceSn produceSn = checkProduceSn(model.getSn(), model.getOrganizeCode()); //获取NC-零件检测-单据 - partInspection = getPartInspection(produceSn,inputModel, org); + partInspection = getPartInspection(produceSn, model, model.getOrganizeCode()); //检查物料 - part = checkPart(produceSn, org); + part = checkPart(produceSn, model.getOrganizeCode()); sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue(); } else { // 数据校验 - ValidatorBean.checkNotNull(inputModel.getPartNo(), "物料不能为空"); - ValidatorBean.checkNotNull(inputModel.getLotNo(), "批次不能为空"); - ValidatorBean.checkNotNull(inputModel.getFrontBack(), "正反面不能为空"); - ValidatorBean.checkNotNull(inputModel.getQty(), "数量不能为空"); + ValidatorBean.checkNotNull(model.getPartNo(), "物料不能为空"); + ValidatorBean.checkNotNull(model.getLotNo(), "批次不能为空"); + ValidatorBean.checkNotNull(model.getFrontBack(), "正反面不能为空"); + ValidatorBean.checkNotNull(model.getQty(), "数量不能为空"); //检查物料 - part = checkPartByPartNo(inputModel.getPartNo(), org); + part = checkPartByPartNo(model.getPartNo(), model.getOrganizeCode()); //获取NC-零件检测-单据 - if(!Objects.isNull(inputModel.getId())){ - partInspection = getPartInspectionByPartAndLot(inputModel, org); + if(!Objects.isNull(model.getId())){ + partInspection = getPartInspectionByPartAndLot(model, model.getOrganizeCode()); } sourceType = MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue(); } //检查零件类型与图片对应关系 - MesPartTypePicture partTypePicture = checkPartTypePicture(part, org); + MesPartTypePicture partTypePicture = checkPartTypePicture(part, model.getOrganizeCode()); //构造返回信息 - MesPartInspectionViewModel model = getModel(partInspection, part, partTypePicture, inputModel, sourceType, org); - model.setSourceType(sourceType); - model.setTransferFlg(inputModel.isTransferFlg()); + MesPartInspectionViewModel result = getModel(partInspection, part, partTypePicture, model, sourceType); + result.setSourceType(sourceType); + result.setTransferFlg(model.isTransferFlg()); - return model; + return result; } /** @@ -222,12 +233,11 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService * 完成质检-保存不良记录 * * @param model - * @param org */ @Override - public void savePartInspection(MesPartInspectionInputModel model, String org) { + public void savePartInspection(MesPartInspectionInputModel model) { - MesProduceSn produceSn = getProduceSn(model.getSn(), org); + MesProduceSn produceSn = getProduceSn(model.getSn(), model.getOrganizeCode()); if (null != produceSn && StringUtils.isEmpty(model.getPartNo())) model.setPartNo(produceSn.getPartNo()); //武汉 会输入客户条码 boolean isWorkOrderQcStatus=false; @@ -235,7 +245,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService model.setCustSn(produceSn.getCustSn()); model.setSn(produceSn.getProductSn()); //排序产线 更新工单的 qcStatus - MesWorkCenter centerDb = prodOrgExtService.getWorkCenterDb(org, produceSn.getWorkCenterCode()); + MesWorkCenter centerDb = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), produceSn.getWorkCenterCode()); if (!StringUtil.isEmpty(centerDb)){ isWorkOrderQcStatus= centerDb.getCenterType() == MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue(); } @@ -245,8 +255,52 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); } if(!Objects.isNull(model.getPart())){ - model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), org)); + model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), model.getOrganizeCode())); } + + // 是否头零件模式 + boolean headModel = true; + if (!StringUtil.isEmpty(model.getSn())) { + // 判断是头零件还是散件 查询加工记录 + DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", productionPackBean); + DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean); + MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean); + if (record != null) { + headModel = false; + } + } + // 如果是散件模式,需要查询出对应明细 + List mesPartModels = new ArrayList<>(); + if (!headModel) { + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "workOrderNo", partPackBean); + List workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(workOrderParts)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(produceSn.getWorkCenterCode(), "workCenterCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), model.getOrganizeCode()); + String esd = partInfo.getEsd(); + + // 查询移库规则 + DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean); + List moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean); + if (!CollectionUtils.isEmpty(moveRules)) { + MesPartModel mesPartModel = new MesPartModel(); + mesPartModel.setPartNo(workOrderPart.getPartNo()); + mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo()); + mesPartModels.add(mesPartModel); + } + } + } + } + + //零件检测详情为空,则代表本次校验为合格。 if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) { MesPartInspection partInspection = null; @@ -257,23 +311,45 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService //若检验单为空,则生成新的单据并合格 if (StringUtils.isEmpty(model.getPartInspection())) { - partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue(), org); + partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue(), model.getOrganizeCode()); if (model.getOptType() != null && model.getOptType() == 2) { partInspection.setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); } partInspection = partInspectionRepository.save(partInspection); if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { + //已创建返修单 + DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean); + + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, reworkPackBean); + int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean); + if (count > 0) { + // 如果是批次还需要移库 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); + MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); + String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); + if (version != null) { + srcNo = version.getReceiveInventoryPoint(); + } + String destLocateNo = getDestLocateNo(model, model.getOrganizeCode()); + if(!model.isTransferFlg() && !Objects.equals(srcNo, destLocateNo)) { + throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); + } + } + checkProduceSn(produceSn, model.getSn()); produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo()); produceSnExtService.update(produceSn); //更新工单对应qcStatus if(isWorkOrderQcStatus){ - MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo()); + MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo()); if (!StringUtil.isEmpty(workOrder)){ workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo()); workOrderRepository.update(workOrder); } } @@ -284,7 +360,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService //原单据不合格 现合格 if (model.getPartInspection().getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()) { model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()); - ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo()); if (model.getOptType() != null && model.getOptType() == 2) { model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); @@ -292,13 +368,13 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService partInspectionRepository.save(model.getPartInspection()); //查询当前单据明细 - List resultDetailList = queryResultDetailList(model, org); + List resultDetailList = queryResultDetailList(model, model.getOrganizeCode()); List defectTypeNoExitList = new ArrayList<>(); for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) { //根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据 - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean); MesDefectType defectType = defectTypeRepository.getByProperty(packBean); @@ -310,10 +386,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService detail.setDefectTypeId(defectType.getId()); detail.setId(null); - detail.setOrganizeCode(org); + detail.setOrganizeCode(model.getOrganizeCode()); detail.setPid(model.getPartInspection().getId()); setSystemSyncStatus(detail); - ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(detail, model.getUserInfo()); } if (!CollectionUtils.isEmpty(defectTypeNoExitList)) { @@ -326,38 +402,48 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { checkProduceSn(produceSn, model.getSn()); produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo()); produceSnExtService.update(produceSn); //更新工单对应qcStatus if(isWorkOrderQcStatus){ - MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo()); + MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo()); if (!StringUtil.isEmpty(workOrder)){ workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo()); workOrderRepository.update(workOrder); } } } //移库 String srcLocate; - MesMove mesMove = getMesMove(model, org); + MesMove mesMove = getMesMove(model, model.getOrganizeCode()); if(!Objects.isNull(mesMove)){ srcLocate = mesMove.getUmlgo(); }else{ - srcLocate= configService.getCfgValue(org, "UMLGO"); + srcLocate= configService.getCfgValue(model.getOrganizeCode(), "UMLGO"); } if (model.getOptType() != 2) { - //移库 - MesMove move = createMove(model, srcLocate, configService.getCfgValue(org, "LGORT"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + for (MesPartModel mesPartModel : mesPartModels) { + //移库 + MesMove move = createMove(model, srcLocate, mesPartModel.getLocateNo(), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(),mesPartModel.getPartNo()); + moveRepository.save(move); + } + } else { + //移库 + MesMove move = createMove(model, srcLocate, configService.getCfgValue(model.getOrganizeCode(), "LGORT"), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } + } } } if (model.isTransferFlg() && model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { //电子化检验 - String target = configService.getCfgValue(org, "LGORT"); + String target = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); @@ -368,9 +454,16 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (partInspection != null) { model.setPartInspection(partInspection); } - MesMove move = createMove(model, getDestLocateNo(model, org), target, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); - + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + String locateNo = getDestLocateNo(model, model.getOrganizeCode()); + for (MesPartModel mesPartModel : mesPartModels) { + MesMove move = createMove(model,locateNo , mesPartModel.getLocateNo(), model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(), mesPartModel.getPartNo()); + moveRepository.save(move); + } + } else { + MesMove move = createMove(model, getDestLocateNo(model, model.getOrganizeCode()), target, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } } } else { //零件检测详情不为空,则代表本次校验为不合格。 @@ -380,7 +473,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (StringUtils.isEmpty(model.getPartInspection())) { - partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), org); + partInspection = createPartInspection(model, MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), model.getOrganizeCode()); if (model.getOptType() != null && model.getOptType() == 2) { partInspection.setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); @@ -392,7 +485,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) { //根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据 - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean); MesDefectType defectType = defectTypeRepository.getByProperty(packBean); @@ -404,10 +497,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService detail.setDefectTypeId(defectType.getId()); detail.setId(null); - detail.setOrganizeCode(org); + detail.setOrganizeCode(model.getOrganizeCode()); detail.setPid(partInspection.getId()); setSystemSyncStatus(detail); - ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(detail, model.getUserInfo()); } if (!CollectionUtils.isEmpty(defectTypeNoExitList)) { @@ -420,7 +513,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService //若是扫描条码 则判定条码可疑 if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { //已创建返修单 - DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean); @@ -428,14 +521,17 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean); if (count > 0) { // 如果是批次还需要移库 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); - String srcNo = configService.getCfgValue(org, "LGORT"); + String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); if (version != null) { srcNo = version.getReceiveInventoryPoint(); } - String destLocateNo = getDestLocateNo(model, org); + if (!headModel) { + srcNo = mesPartModels.get(0).getLocateNo(); + } + String destLocateNo = getDestLocateNo(model, model.getOrganizeCode()); if(!Objects.equals(srcNo, destLocateNo)) { throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); } @@ -443,14 +539,14 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService checkProduceSn(produceSn, model.getSn()); produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); - ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo()); produceSnExtService.update(produceSn); //更新工单对应qcStatus if(isWorkOrderQcStatus){ - MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo()); + MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo()); if (!StringUtil.isEmpty(workOrder)){ workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); - ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo()); workOrderRepository.update(workOrder); } } @@ -459,9 +555,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService // srcLocateNo = getDestLocateNo(model, org); } if (Objects.isNull(srcLocateNo)) { - srcLocateNo = configService.getCfgValue(org, "LGORT"); + srcLocateNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); @@ -472,7 +568,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService String workCenterCode; if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { if (null == produceSn || StringUtils.isEmpty(produceSn.getProcessCode())) { - List workCenterPartRelationList = getWorkCenterPartRelation(org, model.getPartNo()); + List workCenterPartRelationList = getWorkCenterPartRelation(model.getOrganizeCode(), model.getPartNo()); if (CollectionUtils.isEmpty(workCenterPartRelationList) || workCenterPartRelationList.size() > 1 || StringUtils.isEmpty(workCenterPartRelationList.get(0).getWorkCenterCode())) { throw new ImppBusiException(String.format("条码[%s]未查询到有效的来源库位!", model.getSn())); } @@ -484,7 +580,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService workCenterCode = model.getWorkCenterCode(); } - MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(org, workCenterCode); + MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), workCenterCode); if (null == workCenter) throw new ImppBusiException(String.format("条码[%s]查询来源库位时获取的生产线代码[%s]信息不存在!", model.getSn(), workCenterCode)); if (StringUtils.isEmpty(workCenter.getRawLocate())) throw new ImppBusiException(String.format("条码[%s]查询来源库位时获取的生产线代码[%s]信息未维护[材料库位]!", model.getSn(), workCenterCode)); srcLocateNo = workCenter.getRawLocate(); @@ -494,33 +590,41 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (model.getOptType() != 2) { //移库 //移库 - String dest = configService.getCfgValue(org, "UMLGO"); + String dest = configService.getCfgValue(model.getOrganizeCode(), "UMLGO"); if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()){ - String destLocateNo = getDestLocateNo(model, org); + String destLocateNo = getDestLocateNo(model, model.getOrganizeCode()); if (!StringUtils.isEmpty(destLocateNo) && Objects.equals(dest, destLocateNo)) { return; } } - MesMove move = createMove(model, srcLocateNo, dest, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + for (MesPartModel mesPartModel : mesPartModels) { + MesMove move = createMove(model, mesPartModel.getLocateNo(), dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(), mesPartModel.getPartNo()); + moveRepository.save(move); + } + } else{ + MesMove move = createMove(model, srcLocateNo, dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } + } } else { model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()); - ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo()); if (model.getOptType() != null && model.getOptType() == 2) { model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); } partInspectionRepository.save(model.getPartInspection()); //查询当前单据明细 - List resultDetailList = queryResultDetailList(model, org); + List resultDetailList = queryResultDetailList(model, model.getOrganizeCode()); List defectTypeNoExitList = new ArrayList<>(); for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) { //根据页面上选择的位置 查询位置,若不存在则提示 位置不存在,请检查数据 - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(detail.getDefectLocation(), "defectTypeCode", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.POSITION.getValue(), "defectType", packBean); MesDefectType defectType = defectTypeRepository.getByProperty(packBean); @@ -532,10 +636,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService detail.setDefectTypeId(defectType.getId()); detail.setId(null); - detail.setOrganizeCode(org); + detail.setOrganizeCode(model.getOrganizeCode()); detail.setPid(model.getPartInspection().getId()); setSystemSyncStatus(detail); - ConvertBean.serviceModelInitialize(detail, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(detail, model.getUserInfo()); } if (!CollectionUtils.isEmpty(defectTypeNoExitList)) { @@ -546,7 +650,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { //已创建返修单 - DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean reworkPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getSn(), "sn", reworkPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue(), "status", reworkPackBean); @@ -554,29 +658,29 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean); if (count > 0) { // 如果是批次还需要移库 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); - String srcNo = configService.getCfgValue(org, "LGORT"); + String srcNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); if (version != null) { srcNo = version.getReceiveInventoryPoint(); } - String destLocateNo = getDestLocateNo(model, org); - if(!Objects.equals(srcNo, destLocateNo)) { + String destLocateNo = getDestLocateNo(model, model.getOrganizeCode()); + if (!Objects.equals(srcNo, destLocateNo)) { throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); } } checkProduceSn(produceSn, model.getSn()); produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); - ConvertBean.serviceModelInitialize(produceSn, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(produceSn, model.getUserInfo()); produceSnExtService.update(produceSn); //更新工单对应qcStatus if(isWorkOrderQcStatus){ - MesWorkOrder workOrder = getWorkOrder(org,produceSn.getWorkOrderNo()); + MesWorkOrder workOrder = getWorkOrder(model.getOrganizeCode(), produceSn.getWorkOrderNo()); if (!StringUtil.isEmpty(workOrder)){ workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); - ConvertBean.serviceModelUpdate(workOrder, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(workOrder, model.getUserInfo()); workOrderRepository.update(workOrder); } } @@ -586,9 +690,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService //移库 if (model.getOptType() != 2) { - String srcLocateNo = configService.getCfgValue(org, "LGORT"); + String srcLocateNo = configService.getCfgValue(model.getOrganizeCode(), "LGORT"); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); @@ -596,15 +700,24 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService srcLocateNo = version.getReceiveInventoryPoint(); } //移库 - String dest = configService.getCfgValue(org, "UMLGO"); + String dest = configService.getCfgValue(model.getOrganizeCode(), "UMLGO"); if (model.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()){ - String destLocateNo = getDestLocateNo(model, org); + String destLocateNo = getDestLocateNo(model, model.getOrganizeCode()); if (!StringUtils.isEmpty(destLocateNo) && Objects.equals(dest, destLocateNo)) { return; } } - MesMove move = createMove(model, srcLocateNo, dest, org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); - moveRepository.save(move); + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + for (MesPartModel mesPartModel : mesPartModels) { + //移库 + MesMove move = createMove(model, mesPartModel.getLocateNo(), dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode(),mesPartModel.getPartNo()); + moveRepository.save(move); + } + } else{ + MesMove move = createMove(model, srcLocateNo, dest, model.getOrganizeCode(), null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); + moveRepository.save(move); + } + } } @@ -706,7 +819,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService resultDetailList.forEach(k -> { k.setIsDeleted(MesCommonConstant.TRUE_INTEGER); setSystemSyncStatus(k); - ConvertBean.serviceModelUpdate(model.getPartInspection(), AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserInfo()); }); return resultDetailList; @@ -853,10 +966,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService partInspection.setWorkCenterCode(model.getWorkCenterCode()); partInspection.setShiftCode(model.getShiftCode()); partInspection.setSourceType(model.getSourceType()); -// ConvertBean.serviceModelInitialize(partInspection, AuthUtil.getSessionUser().getUserName()); //42984 初检创建时修改人和修改时间不能赋值 partInspection.setCreateDatetime(TimeTool.getNowTime(true)); - partInspection.setCreateUser(AuthUtil.getSessionUser().getUserName()); + partInspection.setCreateUser(model.getUserInfo()); partInspection.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); partInspection.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); return partInspection; @@ -900,6 +1012,43 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService return move; } + /** + * 移库 + * + * @param model + * @param source 来源 + * @param target 目标 + * @param org + * @return + */ + private MesMove createMove(MesPartInspectionInputModel model, String source, String target, String org, String workCenterCode, String partNo) { + if (StringUtils.isEmpty(model.getUserInfo())) model.setUserInfo("系统"); + GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM"); + serialNoModel.setPartNo(partNo); + ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getUserInfo(), org, 1); + String zrsum = ""; + if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { + zrsum = (rb.getResultList().get(0)).toString(); + } + + MesMove move = new MesMove(); + move.setMatnr(partNo); + move.setOrganizeCode(org); + move.setFactoryCode(org); + move.setLgort(source); + move.setUmlgo(target); + move.setMenge(model.getQty()); + move.setMeins(model.getPart().getUnit()); + move.setZrsum(zrsum); + move.setPostDate(TimeTool.getToday()); + move.setPostTime(TimeTool.getTimeShortWithColon()); + move.setPartInspectionId(Objects.isNull(model.getPartInspection()) ? 0 : model.getPartInspection().getId()); + move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SUSPICIOUS_MOVE.getValue()); + move.setProductSn(model.getSn()); + move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode)); + ConvertBean.serviceModelInitialize(move, model.getUserInfo()); + return move; + } private MesPart checkPart(MesProduceSn produceSn, String org) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); @@ -995,29 +1144,28 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService return alarmConfigList; } - private MesPartInspectionViewModel getModel(MesPartInspection partInspection, MesPart part,MesPartTypePicture partTypePicture, MesPartInspectionInputModel inputModel , - Integer sourceType, String org) { + private MesPartInspectionViewModel getModel(MesPartInspection partInspection, MesPart part, MesPartTypePicture partTypePicture, MesPartInspectionInputModel model, Integer sourceType) { - Integer frontBack = inputModel.getFrontBack(); + Integer frontBack = model.getFrontBack(); List detailList = new ArrayList<>(); if (!StringUtils.isEmpty(partInspection) && partInspection.getInspectionStatus() != MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()) { - detailList = checkPartInspectionDetail(partInspection, org); + detailList = checkPartInspectionDetail(partInspection, model.getOrganizeCode()); if(!CollectionUtils.isEmpty(detailList)){ //判断是否返工完成 - checkReworkFinished(org, detailList); + checkReworkFinished(model.getOrganizeCode(), detailList); } } //位置 - List locationConfigList = checkLocationConfig(org); + List locationConfigList = checkLocationConfig(model.getOrganizeCode()); List locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocation()).collect(Collectors.toList()); //查询零件类型缺陷类型对应关系 - List partTypeDefectList = checkPartTypeDefect(part, org); + List partTypeDefectList = checkPartTypeDefect(part, model.getOrganizeCode()); List partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectTypeCode()).collect(Collectors.toList()); //查询预警数量 - List alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, frontBack, locationCodeList, partTypeDefectCodeList, org); + List alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, frontBack, locationCodeList, partTypeDefectCodeList, model.getOrganizeCode()); //根据不良类型+位置 若有数据,则表示需要标黄 Map> alarmConfigMap = alarmConfigList.stream().collect(Collectors.groupingBy(MesDefectWarnConfig::getDefectLocation)); @@ -1039,17 +1187,17 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService } }); - MesPartInspectionViewModel model = new MesPartInspectionViewModel(); - model.setPart(part); + MesPartInspectionViewModel result = new MesPartInspectionViewModel(); + result.setPart(part); if (!StringUtils.isEmpty(partInspection) && partInspection.getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue() && partInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()) { - model.setPartInspectionDetailList(detailList); - model.setPartInspection(partInspection); + result.setPartInspectionDetailList(detailList); + result.setPartInspection(partInspection); } - model.setPartTypePicture(partTypePicture); - model.setLocationConfigList(locationConfigList); - model.setMesDefectWarnConfigList(alarmConfigList); - return model; + result.setPartTypePicture(partTypePicture); + result.setLocationConfigList(locationConfigList); + result.setMesDefectWarnConfigList(alarmConfigList); + return result; } @@ -1141,9 +1289,64 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if (null != workCenter && !StringUtils.isEmpty(workCenter.getRawLocate())) source = workCenter.getRawLocate(); } - if (StringUtils.isEmpty(source)) MesPcnException.throwBusiException("未找到来源库位!"); - MesMove move = createMove(model, source, target, org, model.getWorkCenterCode()); - moveRepository.insert(move); + + // 是否头零件模式 + boolean headModel = true; + if (!StringUtil.isEmpty(model.getSn())) { + + // 判断是头零件还是散件 查询加工记录 + DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", productionPackBean); + DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean); + MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean); + if (record != null) { + headModel = false; + } + } + // 如果是散件模式,需要查询出对应明细 + List mesPartModels = new ArrayList<>(); + if (!headModel) { + MesProduceSn produceSn = getProduceSn(model.getSn(), org); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getSn(), "workOrderNo", partPackBean); + List workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(workOrderParts)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(produceSn.getWorkCenterCode(), "workCenterCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), org); + String esd = partInfo.getEsd(); + + // 查询移库规则 + DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean); + List moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean); + if (!CollectionUtils.isEmpty(moveRules)) { + MesPartModel mesPartModel = new MesPartModel(); + mesPartModel.setPartNo(workOrderPart.getPartNo()); + mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo()); + mesPartModels.add(mesPartModel); + } + } + } + } + + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + for (MesPartModel mesPartModel : mesPartModels) { + //移库 + MesMove move = createMove(model, mesPartModel.getLocateNo(),target, org, model.getWorkCenterCode()); + moveRepository.save(move); + } + } else { + //移库 + if (StringUtils.isEmpty(source)) MesPcnException.throwBusiException("未找到来源库位!"); + MesMove move = createMove(model, source, target, org, model.getWorkCenterCode()); + moveRepository.save(move); + } } @ApiOperation(value = "客退品查询") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index 624991e..e754a9f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -2,14 +2,12 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesNcProcessingDao; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingPartAndLotModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesPartModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -115,7 +113,20 @@ public class MesNcProcessingService implements IMesNcProcessingService { private MesWorkOrderRepository workOrderRepository; @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + + @Autowired + private MesPartProdGroupRepository mesPartProdGroupRao; + + @Autowired + private MesProductionRecordRepository productionRecordRepository; + + @Autowired private IMesPartService mesPartService; + + @Autowired + private IMesMoveRuleRepository mesMoveRuleRepository; + @Override public ListPager queryPartInspectionByPager(MesPartInspection partInspection, Pager pager) { @@ -351,7 +362,48 @@ public class MesNcProcessingService implements IMesNcProcessingService { isWorkOrderQcStatus= centerDb.getCenterType() == MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue(); } } + // 是否头零件模式 + boolean headModel = true; + if (!StringUtil.isEmpty(model.getSn())) { + // 判断是头零件还是散件 查询加工记录 + DdlPackBean productionPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", productionPackBean); + DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue(), "reportStatus", productionPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue(), "reportType", productionPackBean); + MesProductionRecord record = productionRecordRepository.getByProperty(productionPackBean); + if (record != null) { + headModel = false; + } + } + // 如果是散件模式,需要查询出对应明细 + List mesPartModels = new ArrayList<>(); + if (!headModel) { + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getSn(), "workOrderNo", partPackBean); + List workOrderParts = workOrderPartRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(workOrderParts)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(sn.getWorkCenterCode(), "workCenterCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + MesPart partInfo = mesPartService.getMesPartByPartNo(workOrderPart.getPartNo(), org); + String esd = partInfo.getEsd(); + + // 查询移库规则 + DdlPackBean movePackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(esd, "srcType", movePackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupList.get(0).getPartProdGroupCode(), "code", movePackBean); + List moveRules = mesMoveRuleRepository.findByHqlWhere(movePackBean); + if (!CollectionUtils.isEmpty(moveRules)) { + MesPartModel mesPartModel = new MesPartModel(); + mesPartModel.setPartNo(workOrderPart.getPartNo()); + mesPartModel.setLocateNo(moveRules.get(0).getErpDestLocateNo()); + mesPartModels.add(mesPartModel); + } + } + } + } String source = configService.getCfgValue(org, "LGORT"); String refundSource = configService.getCfgValue(org, "REFUND"); if (!StringUtils.isEmpty(model.getProductVersion())) { @@ -411,10 +463,24 @@ public class MesNcProcessingService implements IMesNcProcessingService { target = version.getReceiveInventoryPoint(); } - //移库 转正常、放行:8000移至2000 - MesMove move = createMove(model, sourceValue, target, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); - ConvertBean.serviceModelInitialize(move,model.getUserName()); - moveRepository.save(move); + + + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + List moveList = new ArrayList<>(); + for (MesPartModel mesPartModel : mesPartModels) { + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, mesPartModel.getLocateNo(), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE, mesPartModel.getPartNo()); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveList.add(move); + } + moveRepository.saveAll(moveList); + + } else { + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, target, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + } } else if (type == MesExtEnumUtil.NC_TYPE.REWORK.getValue()) { @@ -471,11 +537,19 @@ public class MesNcProcessingService implements IMesNcProcessingService { } partInspectionRepository.save(model.getPartInspection()); - - - MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE); - ConvertBean.serviceModelInitialize(move,model.getUserName()); - moveRepository.save(move); + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + List moveList = new ArrayList<>(); + for (MesPartModel mesPartModel : mesPartModels) { + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE, mesPartModel.getPartNo()); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveList.add(move); + } + moveRepository.saveAll(moveList); + } else { + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + } } else if (type == MesExtEnumUtil.NC_TYPE.SCRAP.getValue()) { //批次不需要校验条码 @@ -518,18 +592,45 @@ public class MesNcProcessingService implements IMesNcProcessingService { sourceValue = refundSource; } - MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "SCRAP"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); - ConvertBean.serviceModelInitialize(move,model.getUserName()); - moveRepository.save(move); + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + List moveList = new ArrayList<>(); + + for (MesPartModel mesPartModel : mesPartModels) { + MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "SCRAP"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE,mesPartModel.getPartNo()); + ConvertBean.serviceModelInitialize(move,model.getUserName()); + moveList.add(move); + } + moveRepository.saveAll(moveList); + } else { + MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "SCRAP"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); + ConvertBean.serviceModelInitialize(move,model.getUserName()); + moveRepository.save(move); + } + } else { String sourceValue = configService.getCfgValue(org, "UMLGO"); if (model.getOptType() == 2) { sourceValue = refundSource; } - //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) - MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); - ConvertBean.serviceModelInitialize(move,model.getUserName()); - moveRepository.save(move); + if (!headModel) { + if (!CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + List moveList = new ArrayList<>(); + + for (MesPartModel mesPartModel : mesPartModels) { + //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE, mesPartModel.getPartNo()); + ConvertBean.serviceModelInitialize(move,model.getUserName()); + moveList.add(move); + } + moveRepository.saveAll(moveList); + + } + } else { + //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) + MesMove move = createMove(model, sourceValue, areaCode, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); + ConvertBean.serviceModelInitialize(move,model.getUserName()); + moveRepository.save(move); + } } } else if (type == MesExtEnumUtil.NC_TYPE.RELEASE.getValue()) { @@ -576,13 +677,24 @@ public class MesNcProcessingService implements IMesNcProcessingService { target = version.getReceiveInventoryPoint(); } - //移库 转正常、放行:8000移至2000 - MesMove move = createMove(model, sourceValue, target, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); - ConvertBean.serviceModelInitialize(move,model.getUserName()); - moveRepository.save(move); + if (!headModel && !CollectionUtils.isEmpty(mesPartModels) && mesPartModels.size() > 0) { + List moveList = new ArrayList<>(); - } + for (MesPartModel mesPartModel : mesPartModels) { + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, mesPartModel.getLocateNo(), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE, mesPartModel.getPartNo()); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveList.add(move); + } + moveRepository.saveAll(moveList); + } else { + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, target, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + } + } } public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null; @@ -674,4 +786,31 @@ public class MesNcProcessingService implements IMesNcProcessingService { move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode)); return move; } + + private MesMove createMove(MesNcProcessingInputModel model, String source, String target, String org, String workCenterCode, MesExtEnumUtil.MOVE_TYPE moveType, String partNo) { + GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM"); + serialNoModel.setPartNo(partNo); + ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getPartInspection().getModifyUser(), org, 1); + String zrsum = ""; + if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { + zrsum = (rb.getResultList().get(0)).toString(); + } + + MesMove move = new MesMove(); + move.setMatnr(partNo); + move.setOrganizeCode(org); + move.setFactoryCode(org); + move.setLgort(source); + move.setUmlgo(target); + move.setMenge(model.getPartInspection().getQty()); + move.setMeins(model.getPart().getUnit()); + move.setZrsum(zrsum); + move.setPostDate(TimeTool.getToday()); + move.setPostTime(TimeTool.getTimeShortWithColon()); + move.setMoveType(moveType.getValue()); + move.setPartInspectionId(model.getPartInspection().getId()); + move.setProductSn(model.getSn()); + move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode)); + return move; + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartModel.java new file mode 100644 index 0000000..ae847db --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesPartModel.java @@ -0,0 +1,11 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import lombok.Data; + +@Data +public class MesPartModel { + + private String partNo; + + private String locateNo; +}