feat(wms): 添加第二个表格统计功能
- 在 IWmsRawMaterialService 中新增 queryStatistics 方法用于统计原材料数据 - 在 WmsRawMaterialController 中添加 /statistics 接口端点 - 在 WmsRawMaterialMapper 中新增 selectStatistics 查询方法 - 在 XML 映射文件中实现统计查询的 SQL 语句 - 在服务实现类中完成统计逻辑,按厂家、材质、规格分组计算钢卷件数和重量 - 新增 ManufacturerStatisticsVo、MaterialStatisticsVo、SpecificationStatisticsVo 和 WmsRawMaterialStatisticsVo 数据传输对象 - 实现多层级数据聚合统计功能,包括厂家、材质、规格维度的数据汇总
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user