product stock total for page

This commit is contained in:
Timi
2026-10-15 10:43:34 +08:00
parent ce2a0d2995
commit dbf7cb8b0f
7 changed files with 74 additions and 5 deletions
@@ -12,6 +12,7 @@ import com.imyeyu.api.modules.gao.vo.GaoProductStockChangeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualInBatchRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualRevokeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPage;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPageResult;
import com.imyeyu.api.modules.gao.vo.GaoProductStockProductView;
import com.imyeyu.api.modules.gao.vo.GaoProductStockRecordPage;
import com.imyeyu.java.bean.timi.TimiException;
@@ -40,11 +41,14 @@ public class GaoProductStockController {
private final GaoProductStockRecordService recordService;
private final GaoStoreScopeService storeScopeService;
/// 分页查询产品库存;指定 SKU 时附带基础单位库存统计
/// @param page 分页与筛选条件
/// @return 库存分页结果,指定 SKU 时包含基础单位库存统计
@AOPLog
@RequestRateLimit
@RequireGaoPermission(GaoPermissionCode.PRODUCT_STOCK_READ)
@PostMapping("/list")
public PageResult<GaoProductStock> list(@RequestBody GaoProductStockPage page) {
public GaoProductStockPageResult list(@RequestBody GaoProductStockPage page) {
TimiException.required(page, "not found stock page");
page.setStoreId(storeScopeService.resolveStoreId(page.getStoreId()));
return stockService.pageByQuery(page);
@@ -2,6 +2,7 @@ package com.imyeyu.api.modules.gao.mapper;
import com.imyeyu.api.modules.gao.entity.GaoProductStock;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPage;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPageResult;
import com.imyeyu.api.modules.gao.vo.GaoProductStockProductView;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@@ -23,6 +24,11 @@ public interface GaoProductStockMapper extends BaseMapper<GaoProductStock, Strin
/// 按条件查询库存余额
List<GaoProductStock> selectByQuery(GaoProductStockPage page);
/// 按条件统计基础单位库存数量
/// @param page 库存分页查询条件
/// @return 匹配 SKU 的库存数量汇总,数量均为基础单位
GaoProductStockPageResult selectQuantitySummaryByQuery(GaoProductStockPage page);
/// 按产品汇总库存数量
long countProductByQuery(GaoProductStockPage page);
@@ -7,6 +7,7 @@ import com.imyeyu.api.modules.gao.vo.GaoProductStockChangeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualInBatchRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualRevokeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPage;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPageResult;
import com.imyeyu.api.modules.gao.vo.GaoProductStockProductView;
import com.imyeyu.api.modules.gao.vo.GaoStockChangeItem;
import com.imyeyu.java.bean.timi.TimiException;
@@ -20,8 +21,10 @@ import java.util.List;
/// @since 2026-09-02
public interface GaoProductStockService {
/// 查询库存余额
PageResult<GaoProductStock> pageByQuery(GaoProductStockPage page);
/// 分页查询库存余额;指定 SKU 时附带基础单位库存统计
/// @param page 分页与筛选条件
/// @return 库存分页结果,指定 SKU 时包含基础单位库存统计
GaoProductStockPageResult pageByQuery(GaoProductStockPage page);
/// 按产品汇总查询库存
PageResult<GaoProductStockProductView> pageProductByQuery(GaoProductStockPage page);
@@ -19,6 +19,7 @@ import com.imyeyu.api.modules.gao.vo.GaoProductStockChangeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualInBatchRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockManualRevokeRequest;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPage;
import com.imyeyu.api.modules.gao.vo.GaoProductStockPageResult;
import com.imyeyu.api.modules.gao.vo.GaoProductStockProductView;
import com.imyeyu.api.modules.gao.vo.GaoStockChangeItem;
import com.imyeyu.api.modules.system.audit.AuditOperation;
@@ -62,10 +63,16 @@ public class GaoProductStockServiceImplement implements GaoProductStockService {
private final UserLoginService userLoginService;
@Override
public PageResult<GaoProductStock> pageByQuery(GaoProductStockPage page) {
public GaoProductStockPageResult pageByQuery(GaoProductStockPage page) {
TimiException.required(page, "not found stock page");
PageResult<GaoProductStock> result = new PageResult<>();
GaoProductStockPageResult result = new GaoProductStockPageResult();
result.setTotal(stockMapper.countByQuery(page));
if (page.getSkuId() != null && !page.getSkuId().isBlank()) {
GaoProductStockPageResult summary = stockMapper.selectQuantitySummaryByQuery(page);
result.setOnHandQuantityTotal(summary.getOnHandQuantityTotal());
result.setReservedQuantityTotal(summary.getReservedQuantityTotal());
result.setAvailableQuantityTotal(summary.getAvailableQuantityTotal());
}
List<GaoProductStock> list = stockMapper.selectByQuery(page);
Map<String, Attachment> photoMap = attachmentService.mapFirstImageByIdList(
Attachment.BizType.GAO_PRODUCT_SKU,
@@ -18,6 +18,9 @@ public class GaoProductStockPage extends BasePage {
/// 产品 ID
private String productId;
/// SKU ID
private String skuId;
/// 产品或 SKU 名称、拼音、编码、规格摘要关键词
private String keyword;
}
@@ -0,0 +1,26 @@
package com.imyeyu.api.modules.gao.vo;
import com.imyeyu.api.modules.gao.entity.GaoProductStock;
import com.imyeyu.spring.bean.PageResult;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/// GAO 产品库存分页查询结果
///
/// @author Codex
/// @since 2026-10-14
@Data
@EqualsAndHashCode(callSuper = true)
public class GaoProductStockPageResult extends PageResult<GaoProductStock> {
/// SKU 筛选条件下的实际库存合计,基础单位
private BigDecimal onHandQuantityTotal;
/// SKU 筛选条件下的已预占库存合计,基础单位
private BigDecimal reservedQuantityTotal;
/// SKU 筛选条件下的可用库存合计,基础单位
private BigDecimal availableQuantityTotal;
}