From 8cef863bae907fb197deeafdec6ac7fcbd1f8fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Thu, 6 Jun 2024 18:47:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=B7=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesReworkTaskService.java | 2 + .../controller/busi/MesReworkTaskController.java | 3 +- .../serviceimpl/base/MesReworkTaskServiceImpl.java | 137 ++++++++++++++++----- .../pcn/pojo/model/MesReworkTaskRequestModel.java | 6 + 4 files changed, 118 insertions(+), 30 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java index 012a7aa..8e72c9a 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java @@ -33,6 +33,8 @@ public interface IMesReworkTaskService { List assemblyQuery(MesReworkTaskRequestModel requestModel); + boolean validateSn(MesReworkTaskRequestModel requestModel); + void assemblySnRepeat(MesReworkTaskRequestModel requestModel); void reworkSuccess(MesReworkTaskRequestModel requestModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java index ff10713..7253ad4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java @@ -103,10 +103,11 @@ public class MesReworkTaskController { try { // 数据校验 ValidatorBean.checkNotNull(requestModel.getCustSn(), "客户条码不能为空"); - /*ValidatorBean.checkNotNull(requestModel.getPartNo(), "零件号不能为空");*/ + ValidatorBean.checkNotNull(requestModel.getAssemblyIds(), "替换装配件id不能为空"); ValidatorBean.checkNotNull(requestModel.getSn(), "替换条码不能为空"); ValidatorBean.checkNotNull(requestModel.getDetailIds(), "缺陷位置id不能为空"); + //mesReworkTaskService.validateSn(requestModel); mesReworkTaskService.assemblySnRepeat(requestModel); 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/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 3160b01..d77485b 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 @@ -32,9 +32,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** @@ -153,6 +154,8 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { public List assemblyQuery(MesReworkTaskRequestModel requestModel) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(requestModel.getCustSn(), "custSn", packBean); + DdlPreparedPack.getNumEqualPack(requestModel.getIsOrigSn(), "isOrigSn", packBean); + //DdlPreparedPack.getStringEqualPack(requestModel.getPartNo(), "partNo", packBean); if (!StringUtils.isEmpty(requestModel.getAssemblyPartNo())) { DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean); @@ -161,8 +164,6 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { DdlPreparedPack.getNumEqualPack(requestModel.getAssemblyPartStatus(), "assemblyStatus", packBean); } - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"assemblyStatus"}, packBean); - List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesProductionAssemblies)) { MesPcnException.throwFlowException("装配件信息不存在"); @@ -186,37 +187,114 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { } @Override + public boolean validateSn(MesReworkTaskRequestModel requestModel) { + // + List snList = Arrays.asList(requestModel.getSn().split(",")); + List idList = Arrays.asList(requestModel.getAssemblyIds().split(",")); + // 判断数量是否一致 + if (snList.size() != idList.size()) MesPcnException.throwFlowException("选中的装配件个数和输入的个数不一致"); + // 判断顺序是否一致 + Map map = IntStream.range(0, snList.size()).boxed().collect(Collectors.toMap(idList::get, snList::get, (a, b) -> b)); + List idLonglist = idList.stream().map(str -> Long.parseLong(str)).collect(Collectors.toList()); + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(idLonglist, "id", ddlPackBean); + List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesProductionAssemblies)) { + MesPcnException.throwFlowException("装配件记录不存在"); + } + Map mapProduction = mesProductionAssemblies.stream().collect(Collectors.toMap(mesProductionAssembly -> mesProductionAssembly.getId(), mesProductionAssembly -> mesProductionAssembly.getPartNo())); + map.forEach((k, v) -> { + MesProductionAssembly mesProductionAssembly = mesProductionAssemblyRepository.getById(Long.parseLong(k)); + if (!Objects.equals(mapProduction.get(k), mesProductionAssembly.getPartNo())) { + MesPcnException.throwFlowException(String.format("装配件记录不匹配id=【%s】,sn=【%s】", k, v)); + } + }); + + return false; + } + + /** + * map id和sn对应关系 + * mapProductionAssemble id 和物料对应关系 + * mapProduceSn 物料和条码对应关系 + * + * 根据mapProductionAssemble id找map的sn + * 根据mapProductionAssemble 物料找mmapProduceSn的sn + * 两者必须一致才允许 + * + * @param requestModel + */ + @Override public void assemblySnRepeat(MesReworkTaskRequestModel requestModel) { try { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "productSn", packBean); - MesProduceSn mesProduceSn = mesProduceSnRepository.getByProperty(packBean); - if (mesProduceSn == null) { - MesPcnException.throwFlowException("条码信息不存在"); - } - requestModel.setAssemblyPartNo(mesProduceSn.getPartNo()); - requestModel.setAssemblyPartStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); - List mesProductionAssemblies = assemblyQuery(requestModel); + // + List snList = Arrays.asList(requestModel.getSn().split(",")); + List idList = Arrays.asList(requestModel.getAssemblyIds().split(",")); + // 判断数量是否一致 + if (snList.size() != idList.size()) MesPcnException.throwFlowException("选中的装配件个数和输入的个数不一致"); + // 判断顺序是否一致 key = id, value = sn + Map map = IntStream.range(0, snList.size()).boxed().collect(Collectors.toMap(idList::get, snList::get, (a, b) -> b)); + List idLonglist = idList.stream().map(str -> Long.parseLong(str)).collect(Collectors.toList()); + + // 获取装配件记录列表 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(idLonglist, "id", ddlPackBean); + List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(ddlPackBean); if (CollectionUtils.isEmpty(mesProductionAssemblies)) { - MesPcnException.throwFlowException("未匹配到该条码的零件号"); + MesPcnException.throwFlowException("装配件记录不存在"); } - // 需要变更之前的记录 - MesProductionAssembly mesProductionAssembly = mesProductionAssemblies.get(0); - mesProductionAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue()); - - - // 需要新增一条替换条码的记录 - MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly(); - BeanUtils.copyProperties(mesProductionAssembly, mesProductionRepeatAssembly); - mesProductionRepeatAssembly.setAssemblySn(requestModel.getSn()); - mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); - mesProductionRepeatAssembly.setId(null); + Map mapProductionAssemble = mesProductionAssemblies.stream().collect(Collectors.toMap(mesProductionAssembly -> mesProductionAssembly.getId(), mesProductionAssembly -> mesProductionAssembly.getAssemblyPartNo())); - mesProductionAssembly.setRepeatAssemblySn(requestModel.getSn()); - mesProductionAssemblyRepository.update(mesProductionAssembly); - - mesProductionAssemblyRepository.save(mesProductionRepeatAssembly); + // 获取替换条码信息列表 + DdlPackBean snDdlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(snList, "productSn", snDdlPackBean); + List mesProduceSns = mesProduceSnRepository.findByHqlWhere(snDdlPackBean); + if (CollectionUtils.isEmpty(mesProductionAssemblies)) { + MesPcnException.throwFlowException("零件条码不存在"); + } + Map mapProduceSn = mesProduceSns.stream().collect(Collectors.toMap(mesProduceSn -> mesProduceSn.getPartNo(), mesProduceSn -> mesProduceSn.getProductSn())); + + mapProductionAssemble.forEach((k, v) -> { + String sn = map.get(k + ""); + String newSn = mapProduceSn.get(v); + if (!Objects.equals(sn, newSn)) { + MesPcnException.throwFlowException(String.format("装配件记录不匹配id=【%s】,sn=【%s】", k, sn)); + } + }); + + for (String sn : snList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(sn, "productSn", packBean); + MesProduceSn mesProduceSn = mesProduceSnRepository.getByProperty(packBean); + if (mesProduceSn == null) { + MesPcnException.throwFlowException("条码信息不存在"); + } + requestModel.setAssemblyPartNo(mesProduceSn.getPartNo()); + requestModel.setAssemblyPartStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); + List mesProductionAssemblieList = assemblyQuery(requestModel); + if (CollectionUtils.isEmpty(mesProductionAssemblieList)) { + MesPcnException.throwFlowException("未匹配到该条码的零件号"); + } + // 需要变更之前的记录 + MesProductionAssembly mesProductionAssembly = mesProductionAssemblieList.get(0); + mesProductionAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue()); + + + // 需要新增一条替换条码的记录 + MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(mesProductionAssembly, mesProductionRepeatAssembly); + mesProductionRepeatAssembly.setAssemblySn(sn); + mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); + mesProductionRepeatAssembly.setId(null); + mesProductionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + mesProductionAssembly.setRepeatAssemblySn(sn); + mesProductionAssemblyRepository.update(mesProductionAssembly); + + mesProductionAssemblyRepository.save(mesProductionRepeatAssembly); + } /** * 需要更新NC标记后进入的表明细状态为已处理 */ @@ -225,6 +303,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { } } catch (Exception e) { log.error("替换条码异常", e); + throw e; } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java index 310ba54..f37ea18 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java @@ -12,6 +12,10 @@ import java.util.List; public class MesReworkTaskRequestModel { /** + * 替换装配件id,逗号隔开 + */ + private String assemblyIds; + /** * 条码 */ private String sn; @@ -41,4 +45,6 @@ public class MesReworkTaskRequestModel { private String detailIds; + private Integer isOrigSn; + }