From 83e8ad2a9c69d06396a6cf5fe954b550f82ec510 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 30 Jan 2026 16:20:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(mat):=20=E5=AE=9E=E7=8E=B0=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E6=93=8D=E4=BD=9C=E7=9A=84=E5=BA=93=E5=AD=98=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=B0=83=E6=95=B4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在新增配料出库时自动扣减对应物料库存 - 在删除配料出库时自动恢复对应物料库存 - 添加insertByBoWithInventoryAdjustment方法处理带库存调整的出库 - 添加deleteWithValidByIdsWithInventoryAdjustment方法处理带库存恢复的删除 - 实现reduceInventory和restoreInventory私有方法管理库存变更 - 更新控制器调用新的带库存调整的业务方法 --- .../controller/MatMaterialOutController.java | 4 +- .../mat/service/IMatMaterialOutService.java | 10 ++ .../impl/MatMaterialOutServiceImpl.java | 94 +++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialOutController.java b/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialOutController.java index a95e20d..a53f0d5 100644 --- a/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialOutController.java +++ b/gear-mat/src/main/java/com/gear/mat/controller/MatMaterialOutController.java @@ -75,7 +75,7 @@ public class MatMaterialOutController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody MatMaterialOutBo bo) { - return toAjax(iMatMaterialOutService.insertByBo(bo)); + return toAjax(iMatMaterialOutService.insertByBoWithInventoryAdjustment(bo)); } /** @@ -97,6 +97,6 @@ public class MatMaterialOutController extends BaseController { @DeleteMapping("/{outIds}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] outIds) { - return toAjax(iMatMaterialOutService.deleteWithValidByIds(Arrays.asList(outIds), true)); + return toAjax(iMatMaterialOutService.deleteWithValidByIdsWithInventoryAdjustment(Arrays.asList(outIds), true)); } } diff --git a/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialOutService.java b/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialOutService.java index 24f31a2..6f8f50d 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialOutService.java +++ b/gear-mat/src/main/java/com/gear/mat/service/IMatMaterialOutService.java @@ -37,6 +37,11 @@ public interface IMatMaterialOutService { */ Boolean insertByBo(MatMaterialOutBo bo); + /** + * 新增配料出库并更新库存 + */ + Boolean insertByBoWithInventoryAdjustment(MatMaterialOutBo bo); + /** * 修改配料出库 */ @@ -46,4 +51,9 @@ public interface IMatMaterialOutService { * 校验并批量删除配料出库信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 校验并批量删除配料出库信息,并恢复库存 + */ + Boolean deleteWithValidByIdsWithInventoryAdjustment(Collection ids, Boolean isValid); } diff --git a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialOutServiceImpl.java b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialOutServiceImpl.java index d0f7756..38a3ada 100644 --- a/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialOutServiceImpl.java +++ b/gear-mat/src/main/java/com/gear/mat/service/impl/MatMaterialOutServiceImpl.java @@ -15,11 +15,19 @@ import com.gear.mat.domain.vo.MatMaterialOutVo; import com.gear.mat.domain.MatMaterialOut; import com.gear.mat.mapper.MatMaterialOutMapper; import com.gear.mat.service.IMatMaterialOutService; +import com.gear.mat.service.IMatMaterialService; +import com.gear.mat.domain.vo.MatMaterialVo; +import com.gear.mat.domain.bo.MatMaterialBo; import java.util.List; import java.util.Map; import java.util.Collection; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.Arrays; + /** * 配料出库Service业务层处理 * @@ -31,6 +39,7 @@ import java.util.Collection; public class MatMaterialOutServiceImpl implements IMatMaterialOutService { private final MatMaterialOutMapper baseMapper; + private final IMatMaterialService matMaterialService; /** * 查询配料出库 @@ -99,6 +108,91 @@ public class MatMaterialOutServiceImpl implements IMatMaterialOutService { } return flag; } + + @Override + public Boolean insertByBoWithInventoryAdjustment(MatMaterialOutBo bo) { + boolean success = insertByBo(bo); + + if (success && bo.getMaterialId() != null && bo.getOutNum() != null) { + // 扣减库存数量 + reduceInventory(bo.getMaterialId(), bo.getOutNum()); + } + + return success; + } + + @Override + public Boolean deleteWithValidByIdsWithInventoryAdjustment(Collection ids, Boolean isValid) { + // 获取待删除的出库记录信息,以便后续恢复库存 + List recordsToDelete = new ArrayList<>(); + for (Long outId : ids) { + MatMaterialOutVo record = queryById(outId); + if (record != null) { + recordsToDelete.add(record); + } + } + + boolean success = deleteWithValidByIds(ids, isValid); + + if (success) { + // 对于每个被删除的出库记录,恢复库存 + for (MatMaterialOutVo record : recordsToDelete) { + // 恢复库存数量 + restoreInventory(record.getMaterialId(), record.getOutNum()); + } + } + + return success; + } + + /** + * 扣减库存数量 + */ + private void reduceInventory(Long materialId, BigDecimal quantity) { + MatMaterialVo material = matMaterialService.queryById(materialId); + if (material != null) { + MatMaterialBo materialBo = new MatMaterialBo(); + materialBo.setMaterialId(materialId); + materialBo.setMaterialName(material.getMaterialName()); + materialBo.setSpec(material.getSpec()); + materialBo.setModel(material.getModel()); + materialBo.setFactory(material.getFactory()); + materialBo.setUnit(material.getUnit()); + + // 计算扣减后的库存数量 + BigDecimal newStock = material.getCurrentStock().subtract(quantity); + if (newStock.compareTo(BigDecimal.ZERO) < 0) { + newStock = BigDecimal.ZERO; // 库存不能为负数 + } + materialBo.setCurrentStock(newStock); + + materialBo.setRemark(material.getRemark()); + matMaterialService.updateByBo(materialBo); + } + } + + /** + * 恢复库存数量(增加库存) + */ + private void restoreInventory(Long materialId, BigDecimal quantity) { + MatMaterialVo material = matMaterialService.queryById(materialId); + if (material != null) { + MatMaterialBo materialBo = new MatMaterialBo(); + materialBo.setMaterialId(materialId); + materialBo.setMaterialName(material.getMaterialName()); + materialBo.setSpec(material.getSpec()); + materialBo.setModel(material.getModel()); + materialBo.setFactory(material.getFactory()); + materialBo.setUnit(material.getUnit()); + + // 计算恢复后的库存数量(加上本次出库的数量) + BigDecimal newStock = material.getCurrentStock().add(quantity); + materialBo.setCurrentStock(newStock); + + materialBo.setRemark(material.getRemark()); + matMaterialService.updateByBo(materialBo); + } + } /** * 修改配料出库