src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @TableName("product_model") public class ProductModel { @@ -51,4 +53,13 @@ @ApiModelProperty(value = "租户ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @TableField(exist = false) @Excel(name = "入库数量") private BigDecimal inboundNum; @TableField(exist = false) @Excel(name = "出库数量") private BigDecimal outboundNum; @TableField(exist = false) @Excel(name = "剩余库存") private BigDecimal stockQuantity; } src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; @@ -226,5 +227,10 @@ util.exportExcel(response, customStorages, "入库台账"); } @GetMapping("/listPageProductionStock") @Log(title = "库存管理-成品库存", businessType = BusinessType.OTHER) public AjaxResult listPageProductionStock(Page page) { IPage<ProductModel> result = procurementRecordService.listPageProductionStock(page); return AjaxResult.success(result); } } src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.dto.*; import com.ruoyi.procurementrecord.pojo.CustomStorage; @@ -58,4 +59,6 @@ BigDecimal getProcurementAmount(Long salesProductId); InventoryInformationDto getReportList(); IPage<ProductModel> listPageProductionStock(Page page); } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -17,6 +19,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -48,6 +51,8 @@ private final ProcurementRecordOutMapper procurementRecordOutMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; private final StockUtils stockUtils; private final ProductModelMapper productModelMapper; @Override public List<ProcurementDto> listProcurementBySalesLedgerId(ProcurementDto procurementDto) { @@ -872,5 +877,16 @@ } return procurementPageDtoCopyIPage; } @Override public IPage<ProductModel> listPageProductionStock(Page page) { ProductModel productModel = new ProductModel(); IPage<ProductModel> iPage = productModelMapper.listPageProductModel(page, productModel); iPage.getRecords().forEach(item -> { item.setInboundNum(stockUtils.getStockQuantity(item.getId()).get("inboundNum")); item.setOutboundNum(stockUtils.getStockQuantity(item.getId()).get("outboundNum")); item.setStockQuantity(stockUtils.getStockQuantity(item.getId()).get("stockQuantity")); }); return iPage; } } src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -6,6 +6,8 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; @Component @RequiredArgsConstructor @@ -13,12 +15,18 @@ private final ProcurementRecordOutMapper procurementRecordOutMapper; private final ProcurementRecordMapper procurementRecordMapper; // 获取商品剩余库存 public BigDecimal getStockQuantity(Long productModelId) { // 获取商品入库数量,出库数量,剩余库存 public Map<String, BigDecimal> getStockQuantity(Long productModelId) { // 入库数量 BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId); // 出库数量 BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId); return outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity); // 剩余库存 BigDecimal stockQuantity = outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity); Map<String, BigDecimal> stockMap = new HashMap<>(); stockMap.put("inboundNum", sumQuantity); stockMap.put("outboundNum", outQuantity); stockMap.put("stockQuantity", stockQuantity); return stockMap; } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -189,7 +189,7 @@ for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException("库存不足"); }