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); + } + } /** * 修改配料出库