From 690b21b224ba3270b0fdc03175667f5b83af5669 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Thu, 17 Apr 2025 09:13:08 +0800 Subject: [PATCH] =?UTF-8?q?45858=20MES=EF=BC=9A=E7=94=B5=E5=AD=90=E5=8C=96?= =?UTF-8?q?=E6=A3=80=E9=AA=8C=E5=88=9D=E5=88=A4=E5=92=8C=E7=BB=88=E5=88=A4?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/MesNcProcessingController.java | 31 ++++ .../serviceimpl/busi/MesNcProcessingService.java | 203 ++++++++++++++++++++- .../ext/mes/pcn/pojo/model/MesNcPersonModel.java | 37 ++++ .../pcn/pojo/model/MesNcProcessingInputModel.java | 3 + 4 files changed, 266 insertions(+), 8 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcPersonModel.java 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 c0383ab..ba014c1 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 @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcPersonModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingInputModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -110,6 +111,36 @@ public class MesNcProcessingController { } } + @PostMapping("/save-nc-lt") + @ApiOperation(value = "NC处理") + public ResultBean lotSaveNc(@RequestBody MesNcProcessingInputModel model) { + + try { + ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂不能为空"); + ValidatorBean.checkNotNull(model.getUserName(), "操作人不能为空"); + ValidatorBean.checkNotNull(model.getPartInspection(), "单据不能为空"); + ValidatorBean.checkNotNull(model.getPartInspectionDetailList(), "单据明细不能为空"); + if (CollectionUtils.isEmpty(model.getPersonModelList())) { + throw new ImppBusiException("责任人信息不能为空"); + } + for (MesNcPersonModel mesNcPersonModel : model.getPersonModelList()) { + if (mesNcPersonModel.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue() + || mesNcPersonModel.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()) { + ValidatorBean.checkNotNull(mesNcPersonModel.getOnlyPerson(), "责任人不能为空"); + } + } + if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) { + throw new ImppBusiException("不存在可疑信息,请检查数据"); + } + ncProcessingService.saveNc(model, model.getOrganizeCode(), false); + return ResultBean.success("NC处理成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @GetMapping("/query-part-inspection-create-user") @ApiOperation(value = "查询检验人(NC-零件检测-单据 表的createUser)") public ResultBean queryPartInspectionCreateUser(String organizeCode) { 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 e6e40e8..1e5c81e 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 @@ -4,10 +4,7 @@ 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.*; 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.model.*; 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; @@ -22,6 +19,7 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionPerson; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; @@ -124,6 +122,10 @@ public class MesNcProcessingService implements IMesNcProcessingService { @Autowired private IMesMoveRuleRepository mesMoveRuleRepository; + @Autowired + private MesPartInspectionPersonRepository mesPartInspectionPersonRepository; + + @Override public ListPager queryPartInspectionByPager(MesPartInspection partInspection, Pager pager) { @@ -204,11 +206,8 @@ public class MesNcProcessingService implements IMesNcProcessingService { //保存数据 saveDate(model, model.getPart(), type, person, org,model.getInventoryLocationCode(),isOrder); } else { - - Integer type = model.getType(); - MesDefectType person = StringUtil.isEmpty(model.getPerson())?new MesDefectType():model.getPerson(); //保存数据 - saveDate(model, model.getPart(), type, person, org,model.getInventoryLocationCode(), isOrder); + saveLotDate(model, model.getPart(), org, isOrder); } } @@ -698,6 +697,194 @@ public class MesNcProcessingService implements IMesNcProcessingService { } } } + + /** + * 保存数据 + * + * @param part + * @param model + * @param org + */ + private void saveLotDate(MesNcProcessingInputModel model, MesPartSap part,String org, boolean isOrder) { + String workCenterCode = null == model.getPartInspection() ? null : model.getPartInspection().getWorkCenterCode(); + assert model.getPartInspection() != null; + model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + String refundSource = configService.getCfgValue(org, "REFUND"); + List personList = new ArrayList<>(); + for (MesNcPersonModel mesNcPersonModel : model.getPersonModelList()) { + Integer type = mesNcPersonModel.getNcStatus(); + + if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.NORMAL.getValue()) { + + model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()); + model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.NORMAL.getValue()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); + String sourceValue = configService.getCfgValue(org, "UMLGO"); + + if (model.getOptType() == 2) { + sourceValue = refundSource; + model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + partInspectionRepository.save(model.getPartInspection()); + + String target = configService.getCfgValue(org, "LGORT"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean); + + MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); + if (version != null) { + target = version.getReceiveInventoryPoint(); + } + + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, target, org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + } + else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) { + + //生成返工单 根据责任方库区对应关系,选择哪个责任方,就移动到哪个库区(8000移至8002/8003); + GenSerialNoModel serialNoModel = new GenSerialNoModel("NC_REWORK"); + serialNoModel.setPartNo(part.getPartNo()); + ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getPartInspection().getModifyUser(), org, 1); + String rework = ""; + if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { + rework = (rb.getResultList().get(0)).toString(); + } + MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson(); + mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty())); + mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus()); + mesPartInspectionPerson.setSn(model.getPartInspection().getSn()); + + DdlPackBean partyPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(mesNcPersonModel.getOnlyPerson(), "responsibleParty", partyPackBean); + MesOrg mesOrg = mesOrgRDao.getByProperty(partyPackBean); + + mesPartInspectionPerson.setResponsibleParty(mesOrg.getResponsibleParty()); + ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName()); + personList.add(mesPartInspectionPerson); + + MesReworkTask reworkTask = new MesReworkTask(); + reworkTask.setQty(model.getPartInspection().getQty()); + reworkTask.setSn(model.getPartInspection().getSn()); + reworkTask.setReworkOrder(rework); + reworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue()); + reworkTask.setPartNo(model.getPartInspection().getPartNo()); + reworkTask.setPartName(model.getPartInspection().getPartName()); + reworkTask.setPartInspectionId(model.getPartInspection().getId()); + reworkTask.setOrganizeCode(org); + reworkTask.setResponsibleParty(model.getOnlyPerson()); + reworkTask.setDisassembleType(MesPcnExtConstWords.ZERO); + reworkTask.setLotNo(model.getPartInspection().getLotNo()); + reworkTask.setType(model.getPartInspection().getSourceType()); + ConvertBean.serviceModelInitialize(reworkTask, model.getUserName()); + reworkTaskRepository.insert(reworkTask); + + //生成返工单明细 + List taskDetailList = new ArrayList<>(); + for (MesPartInspectionDetail detail : model.getPartInspectionDetailList()) { + + MesReworkTaskDetail taskDetail = new MesReworkTaskDetail(); + taskDetail.setPid(reworkTask.getId()); + taskDetail.setStatus(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_10.getValue()); + taskDetail.setPartInspectionDetailId(detail.getId()); + taskDetail.setOrganizeCode(org); + ConvertBean.serviceModelInitialize(taskDetail, model.getUserName()); + taskDetailList.add(taskDetail); + + } + + reworkTaskDetailRepository.saveAll(taskDetailList); + + //model.getPartInspection().setDefectTypeId(person.getId()); + model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()); + model.getPartInspection().setReworkTaskId(reworkTask.getId()); + ConvertBean.serviceModelUpdate(model.getPartInspection(),model.getUserName()); + String sourceValue = configService.getCfgValue(org, "UMLGO"); + + if (model.getOptType() == 2) { + sourceValue = refundSource; + model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + partInspectionRepository.save(model.getPartInspection()); + + MesMove move = createMove(model, sourceValue, mesNcPersonModel.getInventoryLocationCode(), org,workCenterCode, MesExtEnumUtil.MOVE_TYPE.RETURN_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + + } else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()) { + //报废时设置责任人 + model.getPartInspection().setResponsibleParty(model.getOnlyPerson()); + //model.getPartInspection().setDefectTypeId(person.getId()); + model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue()); + model.getPartInspection().setRejectQty(model.getPartInspection().getQty()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); + + if (model.getOptType() == 2) { + model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + partInspectionRepository.save(model.getPartInspection()); + + MesPartInspectionPerson mesPartInspectionPerson = new MesPartInspectionPerson(); + mesPartInspectionPerson.setQty(Double.valueOf(mesNcPersonModel.getQty())); + mesPartInspectionPerson.setNcStatus(mesNcPersonModel.getNcStatus()); + mesPartInspectionPerson.setSn(model.getPartInspection().getSn()); + + DdlPackBean partyPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(mesNcPersonModel.getOnlyPerson(), "responsibleParty", partyPackBean); + MesOrg mesOrg = mesOrgRDao.getByProperty(partyPackBean); + + mesPartInspectionPerson.setResponsibleParty(mesOrg.getResponsibleParty()); + ConvertBean.serviceModelInitialize(mesPartInspectionPerson, model.getUserName()); + personList.add(mesPartInspectionPerson); + + String sourceValue = configService.getCfgValue(org, "UMLGO"); + if (model.getOptType() == 2) { + sourceValue = refundSource; + } + //移库 转报废 根据责任方库区对应关系的主数据,选择哪个责任方,就移动到哪个库区(8000移至8002/8003) + MesMove move = createMove(model, sourceValue, mesNcPersonModel.getInventoryLocationCode(), org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.SCRAP_MOVE); + ConvertBean.serviceModelInitialize(move,model.getUserName()); + moveRepository.save(move); + } else if (type == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.RELEASE.getValue()) { + //更新检验单 + /* if (model.getType() != 10 && model.getType() != 40) { + model.getPartInspection().setDefectTypeId(person.getId()); + }*/ + model.getPartInspection().setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()); + model.getPartInspection().setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.RELEASE.getValue()); + ConvertBean.serviceModelUpdate(model.getPartInspection(), model.getUserName()); + String sourceValue = configService.getCfgValue(org, "UMLGO"); + + if (model.getOptType() == 2) { + sourceValue = refundSource; + model.getPartInspection().setRefundFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + partInspectionRepository.save(model.getPartInspection()); + + String target = configService.getCfgValue(org, "LGORT"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean); + + MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); + if (version != null) { + target = version.getReceiveInventoryPoint(); + } + //移库 转正常、放行:8000移至2000 + MesMove move = createMove(model, sourceValue, target, org, workCenterCode, MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); + ConvertBean.serviceModelInitialize(move, model.getUserName()); + moveRepository.save(move); + + } + } + mesPartInspectionPersonRepository.saveAll(personList); + } + + + public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null; return workOrderRepository.getByProperty( diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcPersonModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcPersonModel.java new file mode 100644 index 0000000..af06004 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcPersonModel.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesDefectType; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.hibernate.annotations.ColumnDefault; + +import javax.persistence.Column; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 18:08 + * @Modify: + **/ +@Data +public class MesNcPersonModel { + + + @ApiParam("责任人") + private String onlyPerson; + + @ApiParam("区域代码") + private String inventoryLocationCode; + + @ApiParam("数量") + private Double qty; + + @ApiParam("nc状态-转正常等等 枚举") + private Integer ncStatus; +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java index b6345a9..4c60d14 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingInputModel.java @@ -58,4 +58,7 @@ public class MesNcProcessingInputModel { @ApiModelProperty("操作人") private String userName; + + @ApiParam("批次责任人信息") + private List personModelList; }