diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/domain/DeptConfigRateSummary.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/domain/DeptConfigRateSummary.java index 5563ac0..a9fea56 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/domain/DeptConfigRateSummary.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/domain/DeptConfigRateSummary.java @@ -27,7 +27,7 @@ public class DeptConfigRateSummary extends BaseEntity { /** 配置类型D的装备配置率累计值 新型装备 */ private BigDecimal valueD; private BigDecimal configType; - private BigDecimal companyId; + private Long companyId; private BigDecimal configValue; //装备配置率赋值 private BigDecimal configRate; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/service/impl/SysDeptServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/service/impl/SysDeptServiceImpl.java index 87c4e29..1d72134 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/service/impl/SysDeptServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/service/impl/SysDeptServiceImpl.java @@ -74,45 +74,64 @@ public class SysDeptServiceImpl implements ISysDeptService { } @Override - public List selectDeptConfigRatePivot(DeptConfigRateSummary entity){ + public List selectDeptConfigRatePivot(DeptConfigRateSummary entity) + { // 1. 获取配置率数据(包含公司、设备类型、满分值、基本配置数量、设备名称) List configList = mapper.selectDeptConfigRatePivot(entity); // 2. 获取所有设备数据(包含设备名称、来源、自有数量) + List ownList = ownerMapper.list(null); - // 3. 构建索引:设备名称 → List<设备记录> - Map> ownIndex = ownList.stream() - .collect(Collectors.groupingBy(Ownerdomin::getMaName)); + // 3. 构建索引:公司ID + 设备名称 → 设备记录 + Map> ownIndex = new HashMap<>(); + for (Ownerdomin device : ownList) { + String key = device.getCompanyId() + "_" + device.getMaName(); + ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(device); + } // 4. 构建公司 → 汇总结果 Map Map companyMap = new LinkedHashMap<>(); for (DeptConfigRateSummary config : configList) { String company = config.getCompanyName(); - String type = config.getConfigType().toPlainString(); + String type = config.getConfigType().toPlainString(); // 0:线路 1:电缆 2:变电 String maName = config.getDeptName(); BigDecimal orderCount = config.getOrderCount(); - // 获取所有匹配该设备名称的记录 - List matchedDevices = ownIndex.getOrDefault(maName, Collections.emptyList()); + Long configCompanyId = config.getCompanyId(); // 当前配置项的公司ID - // 计算评分 - BigDecimal score = computeScoreByMaName(orderCount,matchedDevices, config); + // 构建唯一键:公司ID + 设备名称 + String key = configCompanyId + "_" + maName; - // 获取或创建该公司对应的评分对象 + // 获取匹配的设备列表 + List sameCompanyDevices = ownIndex.getOrDefault(key, Collections.emptyList()); + + // 计算当前这一项的得分 - 使用同公司设备 + BigDecimal score = computeScoreByMaName(orderCount, sameCompanyDevices, config); + + // 获取或创建公司维度的统计对象 DeptConfigRateSummary dto = companyMap.computeIfAbsent(company, k -> { DeptConfigRateSummary d = new DeptConfigRateSummary(); d.setDeptName(company); d.setCompanyId(config.getCompanyId()); d.setCompanyName(company); + d.setValueA(BigDecimal.ZERO); + d.setValueB(BigDecimal.ZERO); + d.setValueC(BigDecimal.ZERO); return d; }); - // 设置对应类型得分字段 + // 根据 type 累加对应字段的分数 switch (type) { - case "0": dto.setValueA(score); break; // 线路 - case "1": dto.setValueB(score); break; // 电缆 - case "2": dto.setValueC(score); break; // 变电 + case "0": // 线路 + dto.setValueA(dto.getValueA().add(score)); + break; + case "1": // 电缆 + dto.setValueB(dto.getValueB().add(score)); + break; + case "2": // 变电 + dto.setValueC(dto.getValueC().add(score)); + break; } } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/equipment/SysDeptMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/equipment/SysDeptMapper.xml index d03d1c3..cb63fd3 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/equipment/SysDeptMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/equipment/SysDeptMapper.xml @@ -134,7 +134,7 @@ ON order_stat.dept_id = mdc.dept_id AND order_stat.parent_type_id = mdc.type_id - WHERE 1 = 1; + WHERE 1 = 1 @@ -184,14 +184,14 @@ LEFT JOIN ( SELECT ma_name, SUM(ma_num) AS own_count FROM ma_own_manage - WHERE type = '2' AND is_active = '0' + WHERE type = '2' AND is_active = '0' and company_id=#{companyId} GROUP BY ma_name ) own ON CAST(d.type_id AS CHAR) = own.ma_name LEFT JOIN ( SELECT ma_name, SUM(ma_num) AS rent_count FROM ma_own_manage - WHERE type = '1' AND is_active = '0' + WHERE type = '1' AND is_active = '0' and company_id=#{companyId} GROUP BY ma_name ) rent ON CAST(d.type_id AS CHAR) = rent.ma_name diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/owner/OwnerMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/owner/OwnerMapper.xml index 7eb3249..e921f5b 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/owner/OwnerMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/owner/OwnerMapper.xml @@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" m.id, m.type, t.type_id as maNameId, + m.company_id as companyId, m.ma_type AS maType, t.type_name AS maName, m.model_id AS modelId, @@ -54,6 +55,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and ma_name like concat('%', #{maName}, '%') + + and m.company_id = #{companyId} +