| src/main/java/com/ruoyi/purchase/pojo/ProductRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/controller/StockInventoryController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/StockInventoryService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/stock/StockInventoryMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/purchase/pojo/ProductRecord.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -16,7 +17,7 @@ */ @Data @TableName("product_record") public class ProductRecord { public class ProductRecord implements Serializable { private static final long serialVersionUID = 1L; /** src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -51,6 +51,19 @@ return R.ok(stockInventoryDtoIPage); } /** * 查询对应批号和数量 * @param page * @param stockInventoryDto * @return */ @GetMapping("/getBatchNoQty") @Operation(summary = "查询对应批号和数量") public R getBatchNoQty(Page page, StockInventoryDto stockInventoryDto) { IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.getBatchNoQty(page, stockInventoryDto); return R.ok(stockInventoryDtoIPage); } @PostMapping("/addstockInventory") @Operation(summary = "新增库存") public R addstockInventory(@RequestBody StockInventoryDto stockInventoryDto) { @@ -85,7 +98,7 @@ } @PostMapping("importStockInventory") @PostMapping("/importStockInventory") @Operation(summary = "导入库存") public R importStockInventory(MultipartFile file) { return stockInventoryService.importStockInventory(file); @@ -105,13 +118,13 @@ stockInventoryService.exportStockInventory(response, stockInventoryDto); } @GetMapping("stockInventoryPage") @GetMapping("/stockInventoryPage") @Operation(summary = "库存报表查询") public R stockInventoryPage(Page page, StockInventoryDto stockInventoryDto) { return R.ok(stockInventoryService.stockInventoryPage(stockInventoryDto,page)); } @GetMapping("stockInAndOutRecord") @GetMapping("/stockInAndOutRecord") @Operation(summary = "统计各个产品的入库和出库记录") public R stockInAndOutRecord(StockInventoryDto stockInventoryDto,Page page) { return R.ok(stockInventoryService.stockInAndOutRecord(stockInventoryDto,page)); @@ -128,7 +141,6 @@ public R thawStock(@RequestBody StockInventoryDto stockInventoryDto) { return R.ok(stockInventoryService.thawStock(stockInventoryDto)); } @GetMapping("/getByModelId") @Operation(summary = "根据产品规格ID获取入库记录") src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -76,4 +76,7 @@ @Schema(description = "不合格库存ID") private Long unQualifiedId; @Schema(description = "产品id") private Long productId; } src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
@@ -56,4 +56,6 @@ List<StockInventory> listSelectableBatchNoByProductModelIds(@Param("productModelIds") List<Long> productModelIds); List<StockInventory> getByModelId(@Param("productModelId") Long productModelId); IPage<StockInventoryDto> getBatchNoQty(Page page, @Param("ew") StockInventoryDto stockInventoryDto); } src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -47,4 +47,6 @@ Boolean thawStock(StockInventoryDto stockInventoryDto); List<StockInventory> getByModelId(Long modelId); IPage<StockInventoryDto> getBatchNoQty(Page page, StockInventoryDto stockInventoryDto); } src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -29,7 +29,7 @@ import com.ruoyi.stock.service.StockOutRecordService; import com.ruoyi.stock.service.StockUninventoryService; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -51,15 +51,16 @@ * @since 2026-01-21 04:16:36 */ @Service @AllArgsConstructor @RequiredArgsConstructor public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService { private StockInventoryMapper stockInventoryMapper; private StockInRecordService stockInRecordService; private StockOutRecordService stockOutRecordService; private StockUninventoryService stockUninventoryService; private SalesLedgerProductMapper salesLedgerProductMapper; private ProductModelMapper productModelMapper; private final StockInventoryMapper stockInventoryMapper; private final StockInRecordService stockInRecordService; private final StockOutRecordService stockOutRecordService; private final StockUninventoryService stockUninventoryService; private final SalesLedgerProductMapper salesLedgerProductMapper; private final ProductModelMapper productModelMapper; @Override public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) { return stockInventoryMapper.pagestockInventory(page, stockInventoryDto); @@ -336,7 +337,7 @@ } stockInventoryDto.setProductModelId(matchedProduct.getProductModelId()); this.addstockInventory(stockInventoryDto); this.addStockInRecordOnly(stockInventoryDto); successCount++; } @@ -433,4 +434,9 @@ public List<StockInventory> getByModelId(Long modelId) { return stockInventoryMapper.getByModelId(modelId); } @Override public IPage<StockInventoryDto> getBatchNoQty(Page page, StockInventoryDto stockInventoryDto) { return stockInventoryMapper.getBatchNoQty(page, stockInventoryDto); } } src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -99,7 +99,7 @@ INNER JOIN product_tree pt ON p.parent_id = pt.id ) select batch_no, GROUP_CONCAT(DISTINCT batch_no ORDER BY batch_no SEPARATOR ',') as batch_no, MAX(qualifiedId) as qualifiedId, MAX(unQualifiedId) as unQualifiedId, SUM(qualifiedQuantity) as qualifiedQuantity, @@ -146,11 +146,14 @@ select IFNULL(SUM(sor.stock_out_num), 0) from stock_out_record sor where sor.product_model_id = si.product_model_id and (si.batch_no is null and sor.batch_no is null or si.batch_no = sor.batch_no) and ( (si.batch_no is null and sor.batch_no is null) or si.batch_no = sor.batch_no ) and sor.type = '0' and sor.approval_status = 0 ) as qualifiedPendingOut, 0 as unqualifiedPendingOut 0 as unQualifiedPendingOut from stock_inventory si left join product_model pm on si.product_model_id = pm.id left join product p on pm.product_id = p.id @@ -182,10 +185,13 @@ select IFNULL(SUM(sor.stock_out_num), 0) from stock_out_record sor where sor.product_model_id = su.product_model_id and (su.batch_no is null and sor.batch_no is null or su.batch_no = sor.batch_no) and ( (su.batch_no is null and sor.batch_no is null) or su.batch_no = sor.batch_no ) and sor.type = '1' and sor.approval_status = 0 ) as unqualifiedPendingOut ) as unQualifiedPendingOut from stock_uninventory su left join product_model pm on su.product_model_id = pm.id left join product p on pm.product_id = p.id @@ -196,14 +202,20 @@ select distinct p.product_name from product p left join product_model pm on p.id = pm.product_id where p.product_name like concat('%',#{ew.productName},'%') or pm.model like concat('%',#{ew.productName},'%') where p.product_name like concat('%',#{ew.productName},'%') or pm.model like concat('%',#{ew.productName},'%') ) </if> <if test="ew.topParentProductId != null and ew.topParentProductId > 0"> and combined.product_id in (select id from product_tree) </if> </where> group by batch_no, product_model_id, model, unit, product_name, product_id group by product_model_id, model, unit, product_name, product_id </select> <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData"> @@ -476,4 +488,138 @@ where si.product_model_id = #{productModelId} </select> <select id="getBatchNoQty" resultType="com.ruoyi.stock.dto.StockInventoryDto"> select batch_no, MAX(qualifiedId) as qualifiedId, MAX(unQualifiedId) as unQualifiedId, SUM(qualifiedQuantity) as qualifiedQuantity, SUM(unQualifiedQuantity) as unQualifiedQuantity, SUM(qualifiedLockedQuantity) as qualifiedLockedQuantity, SUM(unQualifiedLockedQuantity) as unQualifiedLockedQuantity, SUM(IFNULL(qualifiedPendingOut, 0)) as qualifiedPendingOutQuantity, SUM(IFNULL(unQualifiedPendingOut, 0)) as unQualifiedPendingOutQuantity, SUM(qualifiedQuantity - qualifiedLockedQuantity - IFNULL(qualifiedPendingOut, 0)) as qualifiedUnLockedQuantity, SUM(unQualifiedQuantity - unQualifiedLockedQuantity - IFNULL(unQualifiedPendingOut, 0)) as unQualifiedUnLockedQuantity, product_model_id, model, unit, product_name, product_id, MAX(create_time) as create_time, MAX(update_time) as update_time, MAX(warn_num) as warn_num, MAX(version) as version, MAX(remark) as remark, 'combined' as stockType from ( select si.batch_no, si.id as qualifiedId, null as unQualifiedId, si.qualitity as qualifiedQuantity, 0 as unQualifiedQuantity, COALESCE(si.locked_quantity, 0) as qualifiedLockedQuantity, 0 as unQualifiedLockedQuantity, si.product_model_id, pm.model, pm.unit, p.product_name, p.id as product_id, si.create_time, si.update_time, COALESCE(si.warn_num, 0) as warn_num, si.version, si.remark, ( select IFNULL(SUM(sor.stock_out_num), 0) from stock_out_record sor where sor.product_model_id = si.product_model_id and ( (si.batch_no is null and sor.batch_no is null) or si.batch_no = sor.batch_no ) and sor.type = '0' and sor.approval_status = 0 ) as qualifiedPendingOut, 0 as unQualifiedPendingOut from stock_inventory si left join product_model pm on si.product_model_id = pm.id left join product p on pm.product_id = p.id union all select su.batch_no, null as qualifiedId, su.id as unQualifiedId, 0 as qualifiedQuantity, su.qualitity as unQualifiedQuantity, 0 as qualifiedLockedQuantity, COALESCE(su.locked_quantity, 0) as unQualifiedLockedQuantity, su.product_model_id, pm.model, pm.unit, p.product_name, p.id as product_id, su.create_time, su.update_time, 0 as warn_num, su.version, su.remark, 0 as qualifiedPendingOut, ( select IFNULL(SUM(sor.stock_out_num), 0) from stock_out_record sor where sor.product_model_id = su.product_model_id and ( (su.batch_no is null and sor.batch_no is null) or su.batch_no = sor.batch_no ) and sor.type = '1' and sor.approval_status = 0 ) as unQualifiedPendingOut from stock_uninventory su left join product_model pm on su.product_model_id = pm.id left join product p on pm.product_id = p.id ) as combined <where> <if test="ew.productModelId != null and ew.productModelId > 0"> and combined.product_model_id = #{ew.productModelId} </if> <if test="ew.productId != null and ew.productId > 0"> and combined.product_id = #{ew.productId} </if> </where> group by batch_no, product_model_id, model, unit, product_name, product_id order by batch_no </select> </mapper>