feat(wms): 添加钢卷物料统计数据接口

- 在 IWmsMaterialCoilService 中新增 getStatistics 方法用于汇总统计
- 在 WmsMaterialCoilController 中添加 /statisticsList 接口
- 在 WmsMaterialCoilMapper 中新增 selectStatistics 查询方法
- 在 WmsMaterialCoilMapper.xml 中实现统计 SQL 查询
- 在 WmsMaterialCoilServiceImpl 中实现统计业务逻辑
- 支持按筛选条件统计总毛重、总净重和总数
- 采用高性能查询方式只查询 sum/count 聚合数据
- 独立统计接口不影响原有分页查询功能
This commit is contained in:
2026-04-16 13:54:12 +08:00
parent c31dc4948e
commit 54d426984b
5 changed files with 78 additions and 0 deletions

View File

@@ -68,6 +68,15 @@ public class WmsMaterialCoilController extends BaseController {
return iWmsMaterialCoilService.queryPageListWithBindInfo(bo, pageQuery); return iWmsMaterialCoilService.queryPageListWithBindInfo(bo, pageQuery);
} }
/**
* 统计筛选条件下的全量汇总数据
* 独立的统计接口,使用与分页列表相同的查询条件
*/
@GetMapping("/statisticsList")
public R<Map<String, java.math.BigDecimal>> getStatistics(WmsMaterialCoilBo bo) {
return R.ok(iWmsMaterialCoilService.getStatistics(bo));
}
/** /**
* 原料钢卷库位分布查询(先库位,再钢卷映射) * 原料钢卷库位分布查询(先库位,再钢卷映射)
*/ */

View File

@@ -97,5 +97,12 @@ List<WmsMaterialCoilDeliveryExportVo> selectDeliveryExportListByCoilIds(@Param("
* @return 不匹配的钢卷列表 * @return 不匹配的钢卷列表
*/ */
List<WmsMaterialCoil> selectMismatchedItemCoils(); List<WmsMaterialCoil> selectMismatchedItemCoils();
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
* @param qw 查询条件只使用WHERE和JOIN部分
* @return 统计结果Map包含totalGrossWeight, totalNetWeight
*/
Map<String, Object> selectStatistics(@Param("ew") QueryWrapper<WmsMaterialCoil> qw);
} }

View File

@@ -42,6 +42,12 @@ public interface IWmsMaterialCoilService {
*/ */
List<WmsMaterialCoilVo> queryList(WmsMaterialCoilBo bo); List<WmsMaterialCoilVo> queryList(WmsMaterialCoilBo bo);
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
* 独立的统计接口,不影响分页查询
*/
Map<String, java.math.BigDecimal> getStatistics(WmsMaterialCoilBo bo);
/** /**
* 新增钢卷物料表 * 新增钢卷物料表
*/ */

View File

@@ -342,6 +342,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return TableDataInfo.build(bindResult); return TableDataInfo.build(bindResult);
} }
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
* 独立的统计接口,不影响分页查询
*/
@Override
public Map<String, BigDecimal> getStatistics(WmsMaterialCoilBo bo) {
QueryWrapper<WmsMaterialCoil> qw = buildQueryWrapperPlus(bo);
return selectMaterialCoilStatistics(qw);
}
private Page<WmsMaterialCoilVo> queryMaterialCoilPage(WmsMaterialCoilBo bo, PageQuery pageQuery) { private Page<WmsMaterialCoilVo> queryMaterialCoilPage(WmsMaterialCoilBo bo, PageQuery pageQuery) {
QueryWrapper<WmsMaterialCoil> qw = buildQueryWrapperPlus(bo); QueryWrapper<WmsMaterialCoil> qw = buildQueryWrapperPlus(bo);
Page<WmsMaterialCoilVo> result; Page<WmsMaterialCoilVo> result;
@@ -380,6 +390,30 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
} }
} }
/**
* 统计筛选条件下的全量汇总数据高性能只查sum/count
*/
private Map<String, BigDecimal> selectMaterialCoilStatistics(QueryWrapper<WmsMaterialCoil> qw) {
Map<String, BigDecimal> result = new HashMap<>();
result.put("total_gross_weight", BigDecimal.ZERO);
result.put("total_net_weight", BigDecimal.ZERO);
result.put("total_count", BigDecimal.ZERO);
try {
Map<String, Object> stats = baseMapper.selectStatistics(qw);
if (stats != null) {
Object grossWeight = stats.get("total_gross_weight");
Object netWeight = stats.get("total_net_weight");
result.put("total_gross_weight", grossWeight != null ? new BigDecimal(grossWeight.toString()) : BigDecimal.ZERO);
result.put("total_net_weight", netWeight != null ? new BigDecimal(netWeight.toString()) : BigDecimal.ZERO);
}
} catch (Exception e) {
log.warn("统计查询失败: {}", e.getMessage());
}
return result;
}
private void fillBindInfoForPage(List<WmsMaterialCoilBindVo> records) { private void fillBindInfoForPage(List<WmsMaterialCoilBindVo> records) {
// 绑定信息仅用于专用接口,避免污染通用分页结构 // 绑定信息仅用于专用接口,避免污染通用分页结构
try { try {

View File

@@ -902,5 +902,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) )
</select> </select>
<!-- 统计筛选条件下的全量汇总数据高性能只查sum/count -->
<select id="selectStatistics" resultType="java.util.Map">
SELECT
IFNULL(SUM(mc.gross_weight), 0) AS total_gross_weight,
IFNULL(SUM(mc.net_weight), 0) AS total_net_weight,
COUNT(mc.coil_id) AS total_count
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_warehouse nw ON mc.next_warehouse_id = nw.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN sys_user su ON mc.sale_id = su.user_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN (
SELECT coil_id, COUNT(*) AS abnormal_count
FROM wms_coil_abnormal
WHERE del_flag = 0
GROUP BY coil_id
) ca ON mc.coil_id = ca.coil_id
${ew.customSqlSegment}
</select>
</mapper> </mapper>