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 f930ba1..44a886f 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 @@ -75,146 +75,108 @@ public class SysDeptServiceImpl implements ISysDeptService { @Override public List selectDeptConfigRatePivot(DeptConfigRateSummary entity) { - // 1. 查询配置率项(每条代表一个公司+设备+评分项) - List configList = mapper.selectDeptConfigRatePivot(entity); + // 1. 查询配置率项(每条代表一个公司+设备+评分项) + List configList = mapper.selectDeptConfigRatePivot(entity); - // 2. 查询 ma_own_manage 表中原始设备数据 - List ownListFromManage = ownerMapper.list(null); + // 2. 查询 ma_own_manage 表中原始设备数据 + List ownListFromManage = ownerMapper.list(null); - // 3. 查询 ma_dev_info 表中聚合后的设备数据(包含公司名) - List ownListFromDevInfo = ownerMapper.listGrouped(); + // 3. 查询 ma_dev_info 表中聚合后的设备数据(包含公司名) + List ownListFromDevInfo = ownerMapper.listGrouped(); - // 4. 构建设备索引 Map<公司ID_设备名, List> - Map> ownIndex = new HashMap<>(); + // 4. 构建设备索引 Map<公司ID_设备名, List> + Map> ownIndex = new HashMap<>(); - for (Ownerdomin device : ownListFromManage) { - String key = device.getCompanyId() + "_" + device.getMaName(); - ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(device); - } + for (Ownerdomin device : ownListFromManage) { + String key = device.getCompanyId() + "_" + device.getMaName(); + System.err.println("初始化的key:" + key+"-----------"+device.toString()); + ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(device); + } - for (NewOwnerdomin dev : ownListFromDevInfo) { - String key = dev.getCompanyId() + "_" + dev.getMaName(); - List existList = ownIndex.get(key); - - if (existList != null && !existList.isEmpty()) { - for (Ownerdomin device : existList) { - device.setMaNum(device.getMaNum() + dev.getMaNum()); - } - } else { - Ownerdomin newDevice = new Ownerdomin(); - newDevice.setCompanyId((long) dev.getCompanyId()); - newDevice.setMaName(dev.getMaName()); - newDevice.setMaNum(dev.getMaNum()); - ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(newDevice); + for (NewOwnerdomin dev : ownListFromDevInfo) { + String key = dev.getCompanyId() + "_" + dev.getMaName(); + List existList = ownIndex.get(key); + System.err.println("existList:" + existList); + System.err.println("key:" + key+"-----------"+dev.getCompanyName()); + if (existList != null && !existList.isEmpty()) { + for (Ownerdomin device : existList) { + /*是否需要累加 待验证*/ + device.setMaNum(device.getMaNum() ); + device.setType("2"); } + } else { + Ownerdomin newDevice = new Ownerdomin(); + newDevice.setCompanyId((long) dev.getCompanyId()); + newDevice.setMaName(dev.getMaName()); + newDevice.setType("2"); + newDevice.setMaNum(dev.getMaNum()); + ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(newDevice); } + } - // 5. 构建公司 → 汇总对象 Map - Map companyMap = new LinkedHashMap<>(); + // 5. 构建公司 → 汇总对象 Map + Map companyMap = new LinkedHashMap<>(); - for (DeptConfigRateSummary config : configList) { - String company = config.getCompanyName(); - String type = config.getConfigType().toPlainString(); // 0:线路 1:电缆 2:变电 - String maName = config.getDeptName(); - BigDecimal orderCount = config.getOrderCount(); - Long configCompanyId = config.getCompanyId(); + for (DeptConfigRateSummary config : configList) { + String company = config.getCompanyName(); + System.err.println( company); + String type = config.getConfigType().toPlainString(); // 0:线路 1:电缆 2:变电 + String maName = config.getDeptName(); + BigDecimal orderCount = config.getOrderCount(); + Long configCompanyId = config.getCompanyId(); - String key = configCompanyId + "_" + maName; - List sameCompanyDevices = ownIndex.getOrDefault(key, Collections.emptyList()); - BigDecimal score = computeScoreByMaName(orderCount, sameCompanyDevices, config); + 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(configCompanyId); - d.setCompanyName(company); - d.setValueA(BigDecimal.ZERO); - d.setValueB(BigDecimal.ZERO); - d.setValueC(BigDecimal.ZERO); - return d; - }); + DeptConfigRateSummary dto = companyMap.computeIfAbsent(company, k -> { + DeptConfigRateSummary d = new DeptConfigRateSummary(); + d.setDeptName(config.getDeptName()); + d.setCompanyId(configCompanyId); + d.setCompanyName(company); + d.setValueA(BigDecimal.ZERO); + d.setValueB(BigDecimal.ZERO); + d.setValueC(BigDecimal.ZERO); + return d; + }); - switch (type) { - 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; - } + switch (type) { + 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; } + } - // 5.x:补充未出现在 configList 的公司/设备项 - Set configKeys = configList.stream() - .map(c -> c.getCompanyId() + "_" + c.getDeptName()) - .collect(Collectors.toSet()); - - for (Map.Entry> entry : ownIndex.entrySet()) { - String key = entry.getKey(); - if (configKeys.contains(key)) continue; - - List devices = entry.getValue(); - if (devices == null || devices.isEmpty()) continue; - - Ownerdomin first = devices.get(0); - Long companyId = first.getCompanyId(); - String maName = first.getMaName(); - - // 从 devInfo 中找公司名称 - Optional matchDev = ownListFromDevInfo.stream() - .filter(d -> d.getCompanyId()==(new Long(companyId).intValue()) && d.getMaName().equals(maName)) - .findFirst(); - - String companyName = matchDev.map(NewOwnerdomin::getCompanyName).orElse("未知公司"); - - DeptConfigRateSummary dto = companyMap.computeIfAbsent(companyName, k -> { - DeptConfigRateSummary d = new DeptConfigRateSummary(); - d.setDeptName(companyName); - d.setCompanyId(companyId); - d.setCompanyName(companyName); - d.setValueA(BigDecimal.ZERO); - d.setValueB(BigDecimal.ZERO); - d.setValueC(BigDecimal.ZERO); - return d; - }); - - // 默认作为线路设备记入 valueA,或根据 maName 判断类型再分类(可拓展) - BigDecimal score = computeScoreByMaName(BigDecimal.ZERO, devices, null); - dto.setValueA(dto.getValueA().add(score)); - } - - // 6. 返回汇总结果 - return new ArrayList<>(companyMap.values()); - - } - - // ✅ 可选:添加没有配置项但有设备的公司 - private void addCompaniesWithoutConfig(List configList, - Map companyMap, - Map> ownIndex) { - // 获取所有配置表中出现的公司ID - Set configCompanyIds = configList.stream() - .map(DeptConfigRateSummary::getCompanyId) + // 5.x:补充未出现在 configList 的公司/设备项 + Set configKeys = configList.stream() + .map(c -> c.getCompanyId() + "_" + c.getDeptName()) .collect(Collectors.toSet()); - // 获取所有设备公司ID - Set deviceCompanyIds = ownIndex.keySet().stream() - .map(key -> Long.parseLong(key.split("_")[0])) - .collect(Collectors.toSet()); + for (Map.Entry> entry : ownIndex.entrySet()) { + String key = entry.getKey(); + if (configKeys.contains(key)) continue; - // 找出有设备但没配置的公司ID - Set missingCompanyIds = new HashSet<>(deviceCompanyIds); - missingCompanyIds.removeAll(configCompanyIds); + List devices = entry.getValue(); + if (devices == null || devices.isEmpty()) continue; - // 为这些公司创建空汇总对象 - for (Long companyId : missingCompanyIds) { - // 获取公司名称(需要查询或从设备中提取) - String companyName = "未知公司"; // 实际应从设备数据中获取 + Ownerdomin first = devices.get(0); + Long companyId = first.getCompanyId(); + String maName = first.getMaName(); - companyMap.computeIfAbsent(companyName, k -> { + // 从 devInfo 中找公司名称 + Optional matchDev = ownListFromDevInfo.stream() + .filter(d -> d.getCompanyId()==(new Long(companyId).intValue()) && d.getMaName().equals(maName)) + .findFirst(); + + String companyName = matchDev.map(NewOwnerdomin::getCompanyName).orElse("未知公司"); + System.err.println("有关问题公司查看 "+companyName); + DeptConfigRateSummary dto = companyMap.computeIfAbsent(companyName, k -> { DeptConfigRateSummary d = new DeptConfigRateSummary(); d.setDeptName(companyName); d.setCompanyId(companyId); @@ -224,45 +186,53 @@ public class SysDeptServiceImpl implements ISysDeptService { d.setValueC(BigDecimal.ZERO); return d; }); + + // 默认作为线路设备记入 valueA,或根据 maName 判断类型再分类(可拓展) + BigDecimal score = computeScoreByMaName(BigDecimal.ZERO, devices, null); + dto.setValueA(dto.getValueA().add(score)); } + + // 6. 返回汇总结果 + return new ArrayList<>(companyMap.values()); + } -private BigDecimal computeScoreByMaName(BigDecimal ordercount,List owns, DeptConfigRateSummary config) { - if (config == null || owns == null || owns.isEmpty()) return BigDecimal.ZERO; + private BigDecimal computeScoreByMaName(BigDecimal ordercount,List owns, DeptConfigRateSummary config) { + if (config == null || owns == null || owns.isEmpty()) return BigDecimal.ZERO; - BigDecimal ownedTotal = BigDecimal.ZERO; - BigDecimal leasedTotal = BigDecimal.ZERO; + BigDecimal ownedTotal = BigDecimal.ZERO; + BigDecimal leasedTotal = BigDecimal.ZERO; - for (Ownerdomin own : owns) { - BigDecimal num = new BigDecimal(own.getMaNum()); - if ("2".equals(own.getType())) { - ownedTotal = ownedTotal.add(num); // 自有 - } else { - leasedTotal = leasedTotal.add(num); // 租赁 + for (Ownerdomin own : owns) { + BigDecimal num = new BigDecimal(own.getMaNum()); + if ("2".equals(own.getType())) { + ownedTotal = ownedTotal.add(num); // 自有 + } else if("1".equals(own.getType())) { + leasedTotal = leasedTotal.add(num); // 租赁 + } } - } - BigDecimal base = config.getConfigValue(); // 基本配置数量 - BigDecimal score = config.getConfigRate(); // 满分值 + BigDecimal base = config.getConfigValue(); // 基本配置数量 + BigDecimal score = config.getConfigRate(); // 满分值 - if (base == null || base.compareTo(BigDecimal.ZERO) == 0) return BigDecimal.ZERO; + if (base == null || base.compareTo(BigDecimal.ZERO) == 0) return BigDecimal.ZERO; - // 计算比例 = (自有 + 租赁×0.6 + 订单×0.9) / 基本配置数 - BigDecimal rate = ownedTotal - .add(leasedTotal.multiply(new BigDecimal("0.6"))) - .add(ordercount.multiply(new BigDecimal("0.9"))) - .divide(base, 4, RoundingMode.HALF_UP); + // 计算比例 = (自有 + 租赁×0.6 + 订单×0.9) / 基本配置数 + BigDecimal rate = ownedTotal + .add(leasedTotal.multiply(new BigDecimal("0.6"))) + .add(ordercount.multiply(new BigDecimal("0.9"))) + .divide(base, 4, RoundingMode.HALF_UP); // 判断是否超过满分 - if (rate.compareTo(BigDecimal.ONE) > 0) { - return score.setScale(2, RoundingMode.HALF_UP); - } else { - return rate.multiply(score).setScale(2, RoundingMode.HALF_UP); + if (rate.compareTo(BigDecimal.ONE) > 0) { + return score.setScale(2, RoundingMode.HALF_UP); + } else { + return rate.multiply(score).setScale(2, RoundingMode.HALF_UP); + } } -} @Override public List selectDeptConfigTypeSummary(DeptConfigTypeSummary entity) { @@ -300,7 +270,7 @@ private BigDecimal computeScoreByMaName(BigDecimal ordercount,List o } } else { - // 不存在,新增一条 EquipmentDetail,赋值必要字段 + /* // 不存在,新增一条 EquipmentDetail,赋值必要字段 EquipmentDetail newItem = new EquipmentDetail(); newItem.setCompanyId(devItem.getCompanyId()); newItem.setName(devItem.getTypeName()); @@ -308,7 +278,7 @@ private BigDecimal computeScoreByMaName(BigDecimal ordercount,List o // 其他字段可根据业务决定是否赋默认值 newItem.setDesc("来自装备配置管理"); equipmentDetails.add(newItem); - indexMap.put(key, newItem); + indexMap.put(key, newItem);*/ } } @@ -386,3 +356,4 @@ private BigDecimal computeScoreByMaName(BigDecimal ordercount,List o return getChildList(list, t).size() > 0 ? true : false; } } + 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 a45b668..eeeccab 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 @@ -221,7 +221,7 @@ LEFT JOIN ma_type mt2 on mt.parent_id = mt2.type_id WHERE md.is_active = '1' - AND md.own_co = 221 + AND md.own_co = #{companyId} GROUP BY mt.type_id 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 82de6e7..151a26b 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 @@ -75,6 +75,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" md.is_active = '1' GROUP BY md.own_co, - mt.type_name + mt2.type_id