feat(wms): 添加第二个表格统计功能

- 在 IWmsRawMaterialService 中新增 queryStatistics 方法用于统计原材料数据
- 在 WmsRawMaterialController 中添加 /statistics 接口端点
- 在 WmsRawMaterialMapper 中新增 selectStatistics 查询方法
- 在 XML 映射文件中实现统计查询的 SQL 语句
- 在服务实现类中完成统计逻辑,按厂家、材质、规格分组计算钢卷件数和重量
- 新增 ManufacturerStatisticsVo、MaterialStatisticsVo、SpecificationStatisticsVo 和 WmsRawMaterialStatisticsVo 数据传输对象
- 实现多层级数据聚合统计功能,包括厂家、材质、规格维度的数据汇总
This commit is contained in:
2026-03-03 15:24:50 +08:00
parent d927aa8647
commit 2df0bab257
9 changed files with 158 additions and 8 deletions

View File

@@ -7,22 +7,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsProduct;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsRawMaterialBo;
import com.klp.domain.vo.WmsRawMaterialVo;
import com.klp.domain.vo.dashboard.WmsRawMaterialStatisticsVo;
import com.klp.domain.vo.dashboard.ManufacturerStatisticsVo;
import com.klp.domain.vo.dashboard.MaterialStatisticsVo;
import com.klp.domain.vo.dashboard.SpecificationStatisticsVo;
import com.klp.domain.WmsRawMaterial;
import com.klp.mapper.WmsRawMaterialMapper;
import com.klp.service.IWmsRawMaterialService;
import com.klp.service.IWmsStockService;
import com.klp.service.IWmsOrderDetailService;
import com.klp.service.IWmsOrderService;
import com.klp.domain.bo.WmsOrderDetailBo;
import com.klp.domain.vo.WmsOrderDetailVo;
import com.klp.domain.vo.WmsOrderVo;
import com.klp.service.IWmsBomService;
import com.klp.service.IWmsBomItemService;
import com.klp.domain.bo.WmsBomBo;
@@ -35,6 +33,8 @@ import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.ArrayList;
/**
* 原材料Service业务层处理
@@ -365,4 +365,65 @@ public class WmsRawMaterialServiceImpl implements IWmsRawMaterialService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 统计原材料按厂家、材质、规格的钢卷件数和重量
*/
@Override
public List<ManufacturerStatisticsVo> queryStatistics() {
List<WmsRawMaterialStatisticsVo> flatList = baseMapper.selectStatistics();
Map<String, List<WmsRawMaterialStatisticsVo>> byManufacturer = flatList.stream()
.collect(Collectors.groupingBy(s -> s.getManufacturer() == null ? "空置" : s.getManufacturer()));
List<ManufacturerStatisticsVo> result = new ArrayList<>();
for (Map.Entry<String, List<WmsRawMaterialStatisticsVo>> manuEntry : byManufacturer.entrySet()) {
ManufacturerStatisticsVo manuVo = new ManufacturerStatisticsVo();
manuVo.setManufacturer(manuEntry.getKey());
List<WmsRawMaterialStatisticsVo> manuList = manuEntry.getValue();
Map<String, List<WmsRawMaterialStatisticsVo>> byMaterial = manuList.stream()
.collect(Collectors.groupingBy(s -> s.getMaterial() == null ? "空置" : s.getMaterial()));
List<MaterialStatisticsVo> materialVoList = new ArrayList<>();
int totalCoilCount = 0;
BigDecimal totalWeight = BigDecimal.ZERO;
for (Map.Entry<String, List<WmsRawMaterialStatisticsVo>> matEntry : byMaterial.entrySet()) {
MaterialStatisticsVo matVo = new MaterialStatisticsVo();
matVo.setMaterial(matEntry.getKey());
List<SpecificationStatisticsVo> specVoList = new ArrayList<>();
int matCoilCount = 0;
BigDecimal matWeight = BigDecimal.ZERO;
for (WmsRawMaterialStatisticsVo item : matEntry.getValue()) {
SpecificationStatisticsVo specVo = new SpecificationStatisticsVo();
specVo.setSpecification(item.getSpecification() == null ? "空置" : item.getSpecification());
specVo.setCoilCount(item.getCoilCount() == null ? 0 : item.getCoilCount());
specVo.setTotalWeight(item.getTotalWeight() == null ? BigDecimal.ZERO : item.getTotalWeight());
specVoList.add(specVo);
matCoilCount += item.getCoilCount() == null ? 0 : item.getCoilCount();
matWeight = matWeight.add(item.getTotalWeight() == null ? BigDecimal.ZERO : item.getTotalWeight());
}
matVo.setSpecifications(specVoList);
matVo.setTotalCoilCount(matCoilCount);
matVo.setTotalWeight(matWeight);
materialVoList.add(matVo);
totalCoilCount += matCoilCount;
totalWeight = totalWeight.add(matWeight);
}
manuVo.setMaterials(materialVoList);
manuVo.setTotalCoilCount(totalCoilCount);
manuVo.setTotalWeight(totalWeight);
result.add(manuVo);
}
return result;
}
}