feat(wms): 添加第二个表格统计功能
- 在 IWmsRawMaterialService 中新增 queryStatistics 方法用于统计原材料数据 - 在 WmsRawMaterialController 中添加 /statistics 接口端点 - 在 WmsRawMaterialMapper 中新增 selectStatistics 查询方法 - 在 XML 映射文件中实现统计查询的 SQL 语句 - 在服务实现类中完成统计逻辑,按厂家、材质、规格分组计算钢卷件数和重量 - 新增 ManufacturerStatisticsVo、MaterialStatisticsVo、SpecificationStatisticsVo 和 WmsRawMaterialStatisticsVo 数据传输对象 - 实现多层级数据聚合统计功能,包括厂家、材质、规格维度的数据汇总
This commit is contained in:
@@ -6,7 +6,7 @@ import java.util.Arrays;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
@@ -19,6 +19,7 @@ import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.domain.vo.WmsRawMaterialVo;
|
||||
import com.klp.domain.vo.dashboard.ManufacturerStatisticsVo;
|
||||
import com.klp.domain.bo.WmsRawMaterialBo;
|
||||
import com.klp.service.IWmsRawMaterialService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
@@ -127,4 +128,12 @@ public class WmsRawMaterialController extends BaseController {
|
||||
public R<WmsRawMaterialBo> addWithBom(@Validated(AddGroup.class) @RequestBody WmsRawMaterialBo bo) {
|
||||
return R.ok(iWmsRawMaterialService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计原材料按厂家、材质、规格的钢卷件数和重量
|
||||
*/
|
||||
@GetMapping("/statistics")
|
||||
public R<List<ManufacturerStatisticsVo>> statistics() {
|
||||
return R.ok(iWmsRawMaterialService.queryStatistics());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.klp.domain.vo.dashboard;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ManufacturerStatisticsVo {
|
||||
private String manufacturer;
|
||||
private Integer totalCoilCount;
|
||||
private BigDecimal totalWeight;
|
||||
private List<MaterialStatisticsVo> materials;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.klp.domain.vo.dashboard;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MaterialStatisticsVo {
|
||||
private String material;
|
||||
private Integer totalCoilCount;
|
||||
private BigDecimal totalWeight;
|
||||
private List<SpecificationStatisticsVo> specifications;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.klp.domain.vo.dashboard;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class SpecificationStatisticsVo {
|
||||
private String specification;
|
||||
private Integer coilCount;
|
||||
private BigDecimal totalWeight;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.klp.domain.vo.dashboard;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class WmsRawMaterialStatisticsVo {
|
||||
|
||||
private String manufacturer;
|
||||
|
||||
private String material;
|
||||
|
||||
private String specification;
|
||||
|
||||
private Integer coilCount;
|
||||
|
||||
private BigDecimal totalWeight;
|
||||
}
|
||||
@@ -2,8 +2,11 @@ package com.klp.mapper;
|
||||
|
||||
import com.klp.domain.WmsRawMaterial;
|
||||
import com.klp.domain.vo.WmsRawMaterialVo;
|
||||
import com.klp.domain.vo.dashboard.WmsRawMaterialStatisticsVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 原材料Mapper接口
|
||||
*
|
||||
@@ -12,4 +15,5 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
*/
|
||||
public interface WmsRawMaterialMapper extends BaseMapperPlus<WmsRawMaterialMapper, WmsRawMaterial, WmsRawMaterialVo> {
|
||||
|
||||
List<WmsRawMaterialStatisticsVo> selectStatistics();
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.klp.service;
|
||||
|
||||
import com.klp.domain.WmsRawMaterial;
|
||||
import com.klp.domain.vo.WmsRawMaterialVo;
|
||||
import com.klp.domain.bo.WmsRawMaterialBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.domain.vo.dashboard.ManufacturerStatisticsVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -56,4 +56,9 @@ public interface IWmsRawMaterialService {
|
||||
* 查询原材料列表(带BOM信息)
|
||||
*/
|
||||
TableDataInfo<WmsRawMaterialVo> queryPageListWithBom(WmsRawMaterialBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 统计原材料按厂家、材质、规格的钢卷件数和重量
|
||||
*/
|
||||
List<ManufacturerStatisticsVo> queryStatistics();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,4 +43,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="zincLayer" column="zinc_layer"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectStatistics" resultType="com.klp.domain.vo.dashboard.WmsRawMaterialStatisticsVo">
|
||||
SELECT
|
||||
rm.manufacturer,
|
||||
rm.material,
|
||||
rm.specification,
|
||||
COUNT(mc.coil_id) AS coilCount,
|
||||
COALESCE(SUM(mc.net_weight), 0) AS totalWeight
|
||||
FROM wms_raw_material rm
|
||||
LEFT JOIN wms_material_coil mc ON rm.raw_material_id = mc.item_id
|
||||
AND mc.item_type = 'raw_material'
|
||||
AND mc.del_flag = 0
|
||||
WHERE rm.del_flag = 0
|
||||
GROUP BY rm.manufacturer, rm.material, rm.specification
|
||||
ORDER BY rm.manufacturer, rm.material, rm.specification
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user