diff --git a/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java b/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java index 4ede3ec9..fb4e3b85 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsRawMaterialController.java @@ -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 addWithBom(@Validated(AddGroup.class) @RequestBody WmsRawMaterialBo bo) { return R.ok(iWmsRawMaterialService.insertByBo(bo)); } + + /** + * 统计原材料按厂家、材质、规格的钢卷件数和重量 + */ + @GetMapping("/statistics") + public R> statistics() { + return R.ok(iWmsRawMaterialService.queryStatistics()); + } } diff --git a/klp-wms/src/main/java/com/klp/domain/vo/dashboard/ManufacturerStatisticsVo.java b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/ManufacturerStatisticsVo.java new file mode 100644 index 00000000..e9dc9226 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/ManufacturerStatisticsVo.java @@ -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 materials; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/dashboard/MaterialStatisticsVo.java b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/MaterialStatisticsVo.java new file mode 100644 index 00000000..92a632f4 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/MaterialStatisticsVo.java @@ -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 specifications; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/dashboard/SpecificationStatisticsVo.java b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/SpecificationStatisticsVo.java new file mode 100644 index 00000000..a1bfaf53 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/SpecificationStatisticsVo.java @@ -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; +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/dashboard/WmsRawMaterialStatisticsVo.java b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/WmsRawMaterialStatisticsVo.java new file mode 100644 index 00000000..5007723b --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/dashboard/WmsRawMaterialStatisticsVo.java @@ -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; +} diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsRawMaterialMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsRawMaterialMapper.java index 24d39c0e..37e19b37 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsRawMaterialMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsRawMaterialMapper.java @@ -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 { + List selectStatistics(); } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsRawMaterialService.java b/klp-wms/src/main/java/com/klp/service/IWmsRawMaterialService.java index 66e1a0ab..d3ad383a 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsRawMaterialService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsRawMaterialService.java @@ -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 queryPageListWithBom(WmsRawMaterialBo bo, PageQuery pageQuery); + + /** + * 统计原材料按厂家、材质、规格的钢卷件数和重量 + */ + List queryStatistics(); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java index 9e8cfbac..c7762cb1 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsRawMaterialServiceImpl.java @@ -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 queryStatistics() { + List flatList = baseMapper.selectStatistics(); + + Map> byManufacturer = flatList.stream() + .collect(Collectors.groupingBy(s -> s.getManufacturer() == null ? "空置" : s.getManufacturer())); + + List result = new ArrayList<>(); + + for (Map.Entry> manuEntry : byManufacturer.entrySet()) { + ManufacturerStatisticsVo manuVo = new ManufacturerStatisticsVo(); + manuVo.setManufacturer(manuEntry.getKey()); + + List manuList = manuEntry.getValue(); + Map> byMaterial = manuList.stream() + .collect(Collectors.groupingBy(s -> s.getMaterial() == null ? "空置" : s.getMaterial())); + + List materialVoList = new ArrayList<>(); + int totalCoilCount = 0; + BigDecimal totalWeight = BigDecimal.ZERO; + + for (Map.Entry> matEntry : byMaterial.entrySet()) { + MaterialStatisticsVo matVo = new MaterialStatisticsVo(); + matVo.setMaterial(matEntry.getKey()); + + List 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; + } } diff --git a/klp-wms/src/main/resources/mapper/klp/WmsRawMaterialMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsRawMaterialMapper.xml index 1098c31c..c3f87291 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsRawMaterialMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsRawMaterialMapper.xml @@ -43,4 +43,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + +