diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java index ef09a6ec..f0301b7e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java @@ -54,6 +54,9 @@ public class MaterialBatchPageReqVO extends PageParam { @Schema(description = "分配部门名称") private String assignDepartmentName; + @Schema(description = "提交状态,0-未提交,1-已提交", example = "1") + private Integer submitStatus; + @Schema(description = "验收状态", example = "1") private String acceptanceStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java index 323c76fa..921e1cf4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java @@ -49,6 +49,10 @@ public class MaterialBatchRespVO { @ExcelProperty("批次编号") private String batchNo; + @Schema(description = "初始总数量") + @ExcelProperty("初始总数量") + private BigDecimal initialQuantity; + @Schema(description = "总数量") @ExcelProperty("总数量") private BigDecimal inboundQuantity; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java index 417a4330..a756352b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java @@ -89,6 +89,22 @@ public class MaterialLifecycleDetailRespVO { @ExcelProperty("物料实例id") private Long infomationId; + @Schema(description = "物料实例编号") + @ExcelProperty("物料实例编号") + private String infomationCode; + + @Schema(description = "物料实例名称") + @ExcelProperty("物料实例名称") + private String infomationName; + + @Schema(description = "物料实例规格") + @ExcelProperty("物料实例规格") + private String infomationModelNo; + + @Schema(description = "物料实例单位") + @ExcelProperty("物料实例单位") + private String infomationUnit; + @Schema(description = "影响数量", example = "15772") @ExcelProperty("影响数量") private String influenceCount; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialBatchDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialBatchDO.java index f0cfed59..2ffa652b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialBatchDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialBatchDO.java @@ -47,6 +47,11 @@ public class MaterialBatchDO extends BusinessBaseDO { */ @TableField("BAT_NO") private String batchNo; + /** + * 初始总数量 + */ + @TableField("INIT_QTY") + private BigDecimal initialQuantity; /** * 总数量 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java index 96972a6a..c4634773 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java @@ -58,6 +58,7 @@ public interface MaterialBatchMapper extends BaseMapperX { .eq(MaterialBatchDO::getParentId, 0) .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) + .eqIfExists(MaterialBatchDO::getSubmitStatus, reqVO.getSubmitStatus()) .likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) .likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation()) .likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java index a9cbc23f..c49f8038 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java @@ -47,15 +47,21 @@ public interface MaterialLifecycleDetailMapper extends BaseMapperX selectListWithPdtBatInfo(Long id){ MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(MaterialLifecycleDetailDO.class) - .selectAs(MaterialProductDO::getName, MaterialLifecycleDetailRespVO::getProductName) - .selectAs(MaterialProductDO::getCode, MaterialLifecycleDetailRespVO::getProductCode) - .selectAs(MaterialProductDO::getModelNo, MaterialLifecycleDetailRespVO::getProductModelNo) - .selectAs(MaterialProductDO::getUnit, MaterialLifecycleDetailRespVO::getUnit) + .selectAs("product.NAME", MaterialLifecycleDetailRespVO::getProductName) + .selectAs("product.CD", MaterialLifecycleDetailRespVO::getProductCode) + .selectAs("product.MDL_NO", MaterialLifecycleDetailRespVO::getProductModelNo) + .selectAs("product.UNT", MaterialLifecycleDetailRespVO::getUnit) .selectAs("batch.BAT_NO", MaterialLifecycleDetailRespVO::getBatchNo) .selectAs("gongduan.INB_QTY", MaterialLifecycleDetailRespVO::getInfluenceCount) - .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialLifecycleDetailDO::getProductId) + .selectAs(MaterialInfomationDO::getCode, MaterialLifecycleDetailRespVO::getInfomationCode) + .selectAs("product_infomation.NAME", MaterialLifecycleDetailRespVO::getInfomationName) + .selectAs("product_infomation.MDL_NO", MaterialLifecycleDetailRespVO::getInfomationModelNo) + .selectAs("product_infomation.UNT", MaterialLifecycleDetailRespVO::getInfomationUnit) + .leftJoin(MaterialProductDO.class, "product", MaterialProductDO::getId, MaterialLifecycleDetailDO::getProductId) .leftJoin(MaterialBatchDO.class, "batch", MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchId) .leftJoin(MaterialBatchDO.class, "gongduan", MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchGongduanId) + .leftJoin(MaterialInfomationDO.class, MaterialInfomationDO::getId, MaterialLifecycleDetailDO::getInfomationId) + .leftJoin(MaterialProductDO.class, "product_infomation", MaterialProductDO::getId, MaterialInfomationDO::getProductId) .eq(MaterialLifecycleDetailDO::getLifecycleId, id); return selectJoinList(MaterialLifecycleDetailRespVO.class, wrapper); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java index e39d53be..6e211f5e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; +import cn.hutool.core.util.StrUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -7,6 +8,9 @@ import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleP import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO; import org.apache.ibatis.annotations.Mapper; +import java.util.Arrays; +import java.util.List; + /** * 物料通用流程,物料验收、退换货 Mapper * @@ -16,9 +20,10 @@ import org.apache.ibatis.annotations.Mapper; public interface MaterialLifecycleMapper extends BaseMapperX { default PageResult selectPage(MaterialLifecyclePageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() + String businessType = reqVO.getBusinessType(); + + LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX() .likeIfPresent(MaterialLifecycleDO::getTitle, reqVO.getTitle()) - .eqIfPresent(MaterialLifecycleDO::getBusinessType, reqVO.getBusinessType()) .eqIfPresent(MaterialLifecycleDO::getBusinessTypeCode, reqVO.getBusinessTypeCode()) .likeIfPresent(MaterialLifecycleDO::getApplyUser, reqVO.getApplyUser()) .eqIfPresent(MaterialLifecycleDO::getApplyUserId, reqVO.getApplyUserId()) @@ -32,7 +37,15 @@ public interface MaterialLifecycleMapper extends BaseMapperX gongEts = createReqVOs.stream().map(batAsn -> { MaterialBatchDO bean = BeanUtils.toBean(batAsn, MaterialBatchDO.class); bean.setProductId(mtrlBat.getProductId()).setBatchNo(mtrlBat.getBatchNo()) + .setInitialQuantity(bean.getInboundQuantity()) .setAcceptanceStatus(MaterialAcceptStatus.notAccepted.name()); return bean; }).toList(); @@ -338,44 +339,57 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { List batIds = batches.stream().map(MaterialLifecycleDetailDO::getBatchId).toList(); List batchDOS = getBatchListByBatchIds(batIds); Map lifecycleDetailDOMapByBatchId = batches.stream().collect(Collectors.toMap(MaterialLifecycleDetailDO::getBatchId, Function.identity())); - for (MaterialBatchDO batchDO : batchDOS) { - MaterialLifecycleDetailDO detailDO = lifecycleDetailDOMapByBatchId.get(batchDO.getId()); - String businessType = detailDO.getBusinessType(); - BigDecimal influenceCount = detailDO.getInfluenceCount(); - if (MaterialFlowType.return_material.getName().equals(businessType)) { - BigDecimal returnQuantity = adjustType == AdjustType.add ? batchDO.getReturnQuantity().add(influenceCount) - : batchDO.getReturnQuantity().subtract(influenceCount); - batchDO.setReturnQuantity(returnQuantity); - } else if (MaterialFlowType.exchange_material.getName().equals(businessType)) { - BigDecimal replaceQuantity = adjustType == AdjustType.add ? batchDO.getReplaceQuantity().add(influenceCount) - : batchDO.getReplaceQuantity().subtract(influenceCount); - batchDO.setReplaceQuantity(replaceQuantity); - } - - } + adjustBatchOrGongReturnExchangeCount(adjustType, batchDOS, lifecycleDetailDOMapByBatchId); materialBatchMapper.updateBatch(batchDOS); } @Override public void updateGongduanReturnExchangeCount(List gongs, AdjustType adjustType) { - List gongIds = gongs.stream().map(MaterialLifecycleDetailDO::getBatchId).toList(); + List gongIds = gongs.stream().map(MaterialLifecycleDetailDO::getBatchGongduanId).toList(); List gongDOS = getGongduanListByGongIds(gongIds); Map lifecycleDetailDOMapByGongId = gongs.stream().collect(Collectors.toMap(MaterialLifecycleDetailDO::getBatchGongduanId, Function.identity())); - for (MaterialBatchDO gongDO : gongDOS) { - MaterialLifecycleDetailDO detailDO = lifecycleDetailDOMapByGongId.get(gongDO.getId()); + // 调整工段退换货数量 + adjustBatchOrGongReturnExchangeCount(adjustType, gongDOS, lifecycleDetailDOMapByGongId); + materialBatchMapper.updateBatch(gongDOS); + // 调整批次的退换货数量 + List batIds = gongDOS.stream().map(MaterialBatchDO::getParentId).toList(); + List batDOS = getBatchListByBatchIds(batIds); + if (CollUtil.isEmpty(batDOS)) return; + Map batIdMapByGongId = gongDOS.stream().collect(Collectors.toMap(MaterialBatchDO::getId, MaterialBatchDO::getParentId)); + for (MaterialLifecycleDetailDO gong : gongs) { + gong.setBatchId(batIdMapByGongId.get(gong.getId())); + } + Map> detailGroupByBatId = gongs.stream().collect(Collectors.groupingBy(MaterialLifecycleDetailDO::getBatchId)); + List batches = batIds.stream().map(batId -> { + List detailDOS = detailGroupByBatId.get(batId); + BigDecimal influenceCount = detailDOS.stream().map(MaterialLifecycleDetailDO::getInfluenceCount).reduce(BigDecimal.ZERO, BigDecimal::add); + return new MaterialLifecycleDetailDO().setBatchId(batId).setInfluenceCount(influenceCount); + }).toList(); + Map lifecycleDetailDOMapByBatId = batches.stream().collect(Collectors.toMap(MaterialLifecycleDetailDO::getBatchId, Function.identity())); + adjustBatchOrGongReturnExchangeCount(adjustType, batDOS, lifecycleDetailDOMapByBatId); + materialBatchMapper.updateBatch(batDOS); + + } + + private void adjustBatchOrGongReturnExchangeCount(AdjustType adjustType, List batchOrGongDOS, Map lifecycleDetailDOMapByGongId) { + for (MaterialBatchDO batOrGong : batchOrGongDOS) { + MaterialLifecycleDetailDO detailDO = lifecycleDetailDOMapByGongId.get(batOrGong.getId()); String businessType = detailDO.getBusinessType(); BigDecimal influenceCount = detailDO.getInfluenceCount(); if (MaterialFlowType.return_material.getName().equals(businessType)) { - BigDecimal returnQuantity = adjustType == AdjustType.add ? gongDO.getReturnQuantity().add(influenceCount) - : gongDO.getReturnQuantity().subtract(influenceCount); - gongDO.setReturnQuantity(returnQuantity); + BigDecimal returnQuantity = adjustType == AdjustType.add ? batOrGong.getReturnQuantity().add(influenceCount) + : batOrGong.getReturnQuantity().subtract(influenceCount); + batOrGong.setReturnQuantity(returnQuantity); } else if (MaterialFlowType.exchange_material.getName().equals(businessType)) { - BigDecimal replaceQuantity = adjustType == AdjustType.add ? gongDO.getReplaceQuantity().add(influenceCount) - : gongDO.getReplaceQuantity().subtract(influenceCount); - gongDO.setReplaceQuantity(replaceQuantity); + BigDecimal replaceQuantity = adjustType == AdjustType.add ? batOrGong.getReplaceQuantity().add(influenceCount) + : batOrGong.getReplaceQuantity().subtract(influenceCount); + batOrGong.setReplaceQuantity(replaceQuantity); + batOrGong.setInboundQuantity(batOrGong.getInboundQuantity().subtract(replaceQuantity)); } + BigDecimal inboundQuantity = adjustType == AdjustType.add ? batOrGong.getInboundQuantity().subtract(influenceCount) + : batOrGong.getInboundQuantity().add(influenceCount); + batOrGong.setInboundQuantity(inboundQuantity); } - materialBatchMapper.updateBatch(gongDOS); } /** diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java index 257412ed..523d2343 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java @@ -262,6 +262,7 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService } } this.updateBatch(infomationDOS); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java index fbde4c84..4af35403 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java @@ -137,4 +137,12 @@ public interface MaterialLifecycleDetailService { * @return map */ Map getMadeCountMapByDetailIds(List detailIds); + + /** + * 根据流程ids 获取流程明细数据 + * + * @param lfcIds ids + * @return 明细列表 + */ + List getDetailListByLfcIds(List lfcIds); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java index 5c380040..c15ca25a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java @@ -160,4 +160,10 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta return materialLifecycleDetailMapper.getMadeCountMapByDetailIds(detailIds); } + @Override + public List getDetailListByLfcIds(List lfcIds) { + return materialLifecycleDetailMapper.selectList(Wrappers.lambdaQuery(MaterialLifecycleDetailDO.class) + .in(MaterialLifecycleDetailDO::getLifecycleId, lfcIds)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java index 80811772..a4dcd2ee 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java @@ -137,6 +137,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , } if (CollUtil.isNotEmpty(infomations)) { materialInfomationService.updateInfomationInbOrOutbStatus(infomations, adjustType); + // TODO 添加出入库记录 } } @@ -185,17 +186,14 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , // 删除原来的明细 materialLifecycleDetailService.deleteLifecycleDetailListByLfcId(reqId); List oriDetailList = materialLifecycleDetailService.getDetailListByLfcId(reqId); - if (MaterialFlowType.return_material.getName().equals(mtrlLfc.getBusinessType()) - || MaterialFlowType.exchange_material.getName().equals(mtrlLfc.getBusinessType())) { + boolean isReturnExchangeMaterial = MaterialFlowType.return_material.getName().equals(mtrlLfc.getBusinessType()) + || MaterialFlowType.exchange_material.getName().equals(mtrlLfc.getBusinessType()); + if (isReturnExchangeMaterial) updateReturnExchangeCount(oriDetailList, AdjustType.subtract); - } List detailDOS = getLifecycleDetailDOSByBusinessType(detailList, mtrlLfc); // 保存新的明细 materialLifecycleDetailService.saveBatch(detailDOS); - if (MaterialFlowType.return_material.getName().equals(mtrlLfc.getBusinessType()) - || MaterialFlowType.exchange_material.getName().equals(mtrlLfc.getBusinessType())) { - updateReturnExchangeCount(detailDOS, AdjustType.add); - } + if (isReturnExchangeMaterial) updateReturnExchangeCount(detailDOS, AdjustType.add); materialLifecycleMapper.updateById(mtrlLfc); } @@ -287,6 +285,13 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , List gongs = materialBatchService.getGongduanListByGongIds(gongIds); if (CollUtil.isEmpty(gongs) || gongs.size() != gongIds.size()) throw new ServiceException(1_032_160_000, "工段不存在或与传入的工段数量不匹配"); + + // 未提交的工段不可退换货 + for (MaterialBatchDO gong : gongs) { + if (gong.getSubmitStatus() != 1) + throw new ServiceException(1_032_160_000, String.format("工段【%s-%s】未提交,不可退换货", gong.getBatchNo(), gong.getAssignDepartmentName())); + } + // 退换货量不大于剩余量 Map gongsMapById = gongs.stream().collect(Collectors.toMap(MaterialBatchDO::getId, Function.identity())); for (MaterialLifecycleDetailSaveReqVO reqGong : reqGongs) { @@ -313,7 +318,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , List batches = materialBatchService.getBatchListByBatchIds(batchIds); if (CollUtil.isEmpty(batches) || batches.size() != batchIds.size()) throw new ServiceException(1_032_160_000, "批次不存在或与传入的批次数量不匹配"); - // 已拆分的批次不可退换货 + /*// 已拆分的批次不可退换货 List gongs = materialBatchService.getGongduanListByBatIds(batchIds); if (CollUtil.isNotEmpty(gongs)) { Map> gongsMapByBatId = gongs.stream().collect(Collectors.groupingBy(MaterialBatchDO::getParentId)); @@ -321,6 +326,11 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , if (gongsMapByBatId.containsKey(batch.getId())) throw new ServiceException(1_032_160_000, String.format("批次【%s】已拆分,不可退换货", batch.getBatchNo())); } + }*/ + // 已提交的批次不可退换货 + for (MaterialBatchDO batch : batches) { + if (batch.getSubmitStatus() == 1) + throw new ServiceException(1_032_160_000, String.format("批次【%s】已提交,不可退换货", batch.getBatchNo())); } Map batchesMapById = batches.stream().collect(Collectors.toMap(MaterialBatchDO::getId, Function.identity())); for (MaterialLifecycleDetailSaveReqVO reqBatch : reqBatches) { @@ -354,6 +364,13 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , if (lifecycleDO.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "流程已提交,不可删除"); // 删除明细 materialLifecycleDetailService.deleteLifecycleDetailListByLfcId(id); + boolean isReturnExchangeMaterial = MaterialFlowType.return_material.getName().equals(lifecycleDO.getBusinessType()) + || MaterialFlowType.exchange_material.getName().equals(lifecycleDO.getBusinessType()); + if (isReturnExchangeMaterial) { + List detailList = materialLifecycleDetailService.getDetailListByLfcId(id); + this.updateReturnExchangeCount(detailList, AdjustType.subtract); + } + // 删除流程 materialLifecycleMapper.deleteById(id); } @@ -372,6 +389,14 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , } // 删除明细 materialLifecycleDetailService.deleteLifecycleDetailListByLfcIds(ids); + List rtnRepLifecycleDOS = list.stream().filter(lifecycleDO -> + MaterialFlowType.return_material.getName().equals(lifecycleDO.getBusinessType()) + || MaterialFlowType.exchange_material.getName().equals(lifecycleDO.getBusinessType())).toList(); + if (CollUtil.isNotEmpty(rtnRepLifecycleDOS)) { + List rtnRepIds = rtnRepLifecycleDOS.stream().map(MaterialLifecycleDO::getId).toList(); + List detailList = materialLifecycleDetailService.getDetailListByLfcIds(rtnRepIds); + this.updateReturnExchangeCount(detailList, AdjustType.subtract); + } // 删除流程 materialLifecycleMapper.deleteByIds(ids); } @@ -501,6 +526,13 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , variables.put("applyDepartmentId", loginUser.getVisitDeptId()); variables.put("applyTime", sdf.format(new Date())); variables.put(BPM_CALLBACK_BEAN_NAME, "materialLifecycleService"); + List detailList = materialLifecycleDetailService.getDetailListByLfcId(lifecycleDO.getId()); + for (MaterialLifecycleDetailDO detailDO : detailList) { + if (detailDO.getAssayFlag() == 1) { + variables.put("assayFlag", 1); + break; + } + } BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); reqDTO.setBusinessKey(String.valueOf(lifecycleDO.getId())) .setVariables(variables); @@ -534,6 +566,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , log.debug("物料流程回调信息:{}", reqDTO.toString()); JSONObject variables = reqDTO.getVariables(); + log.debug("流程变量:{}", variables.toString()); String processInsId = reqDTO.getProcessInstanceId(); String currentActivityInsId = variables.getString(QmsBpmConstant.BPM_CUR_ACTIVITY_INS_ID); String returnFlag = variables.getString(QmsBpmConstant.BPM_REJECT_TO_FIRST_FLAG); @@ -572,6 +605,8 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , } } } + // 走到检化验节点时需要发起检化验流程 + // 根据流程状态处理业务数据 if(("1").equals(returnFlag)){ // 驳回。流程需要配置退回到发起节点