From 5bd24cec66f03b8f8acff014d9137212c4a2346e Mon Sep 17 00:00:00 2001 From: "liang.chao" <1360241448@qq.com> Date: Mon, 7 Jul 2025 10:06:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysDeptServiceImpl.java | 246 +++++++++--------- .../material/equipment/SysDeptMapper.xml | 41 +-- 2 files changed, 146 insertions(+), 141 deletions(-) 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 44a886f..eb9f197 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 @@ -25,7 +25,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.function.Function; import javax.annotation.Resource; import java.util.stream.Collectors; @@ -75,164 +74,164 @@ 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(); - System.err.println("初始化的key:" + key+"-----------"+device.toString()); - 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); - 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"); + 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); } - } 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(); - System.err.println( company); - 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(config.getDeptName()); - 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()); + // 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; + 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; + List devices = entry.getValue(); + if (devices == null || devices.isEmpty()) continue; - Ownerdomin first = devices.get(0); - Long companyId = first.getCompanyId(); - String maName = first.getMaName(); + 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(); + // 从 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); - d.setCompanyName(companyName); - d.setValueA(BigDecimal.ZERO); - d.setValueB(BigDecimal.ZERO); - d.setValueC(BigDecimal.ZERO); - return d; - }); + 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); + 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)); - } + // 默认作为线路设备记入 valueA,或根据 maName 判断类型再分类(可拓展) + BigDecimal score = computeScoreByMaName(BigDecimal.ZERO, devices, null); + dto.setValueA(dto.getValueA().add(score)); + } - // 6. 返回汇总结果 - return new ArrayList<>(companyMap.values()); + // 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 if("1".equals(own.getType())) { - 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) { @@ -356,4 +355,3 @@ public class SysDeptServiceImpl implements ISysDeptService { 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 eeeccab..58e0865 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 @@ -43,9 +43,7 @@ - + +