From abcd3f871efa285af854a9fcee47e0ac37c9337e Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 28 Jun 2024 16:21:44 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XzRiskPredictionController.java | 73 ++++++++----------- .../java/com/zhgd/xmgl/util/NumberUtils.java | 2 + 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java index 5015dd6b2..c81efe59a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRiskPredictionController.java @@ -648,10 +648,10 @@ public class XzRiskPredictionController { Map resultMap = new HashMap<>(); // 人员数量 List list = allWorkerList.stream().filter(a -> enterpriseIds.contains(a.getEnterpriseId())).collect(Collectors.toList()); - resultMap.put("total", new BigDecimal(list.size()).divide(new BigDecimal(allWorkerList.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("total", allWorkerList.size() == 0 ? null : new BigDecimal(list.size()).divide(new BigDecimal(allWorkerList.size()), 2, BigDecimal.ROUND_HALF_UP)); // 高龄人员 long ageCount = list.stream().filter(l -> StringUtils.isNotBlank(l.getBirthday()) && DateUtil.ageOfNow(l.getBirthday()) >= 50).count(); - resultMap.put("age", new BigDecimal(ageCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("age", list.size() == 0 ? null : new BigDecimal(ageCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); // 特殊工种人数 if (workerType != null) { List allTeamInfoList = teamInfoService.list(Wrappers.lambdaQuery() @@ -659,7 +659,7 @@ public class XzRiskPredictionController { List teamInfoList = allTeamInfoList.stream().filter(a -> enterpriseIds.contains(a.getEnterpriseId())).collect(Collectors.toList()); if (teamInfoList.size() > 0) { long workerTypeCount = list.stream().filter(l -> teamInfoList.stream().map(t -> t.getId()).collect(Collectors.toList()).contains(l.getTeamId())).count(); - resultMap.put("workerType", new BigDecimal(workerTypeCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("workerType", list.size() == 0 ? null : new BigDecimal(workerTypeCount).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("workerType", 0); } @@ -675,7 +675,7 @@ public class XzRiskPredictionController { e.getTrainId().toString().equals(record.getId().toString()) && enterpriseIds.contains(e.getEnterpriseId())).collect(Collectors.toList()); if (trainRecordList.size() > 0) { int pass = trainRecordList.stream().filter(t -> t.getIsPass() == 1).collect(Collectors.toList()).size(); - record.setPassRadio(new BigDecimal(pass).divide(new BigDecimal(trainRecordList.size()), 2, BigDecimal.ROUND_HALF_UP)); + record.setPassRadio(trainRecordList.size() == 0 ? null : new BigDecimal(pass).divide(new BigDecimal(trainRecordList.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { record.setPassRadio(new BigDecimal(0)); } @@ -683,14 +683,14 @@ public class XzRiskPredictionController { } // 教育培训 BigDecimal passRadio = examTrainList.stream().map(e -> e.getPassRadio()).reduce(BigDecimal.ZERO, BigDecimal::add); - resultMap.put("exam", new BigDecimal(1).subtract(passRadio.divide(new BigDecimal(examTrainList.size()), 2, BigDecimal.ROUND_HALF_UP))); + resultMap.put("exam", examTrainList.size() == 0 ? null : new BigDecimal(1).subtract(passRadio.divide(new BigDecimal(examTrainList.size()), 2, BigDecimal.ROUND_HALF_UP))); } else { resultMap.put("exam", 0); } // 安全评分 Double safeScore = list.stream().mapToDouble(e -> e.getSafeScore()).sum(); - BigDecimal subtract = new BigDecimal(1).subtract(new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); - resultMap.put("safe", subtract.setScale(2, BigDecimal.ROUND_HALF_UP)); + BigDecimal subtract = list.size() == 0 ? null : new BigDecimal(1).subtract(new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("safe", subtract == null ? null : subtract.setScale(2, BigDecimal.ROUND_HALF_UP)); // 安全检查隐患 List xzSecurityQualityInspectionRecords = allXzSecurityQualityInspectionRecords.stream() .filter(a -> enterpriseIds.contains(a.getEnterpriseId())).collect(Collectors.toList()); @@ -704,14 +704,8 @@ public class XzRiskPredictionController { resultMap.put("enterpriseId", enterpriseInfo.getId()); // 计算面积 - // 计算面积 - BigDecimal age = new BigDecimal(resultMap.get("age").toString()); - BigDecimal exam = new BigDecimal(resultMap.get("exam").toString()); - BigDecimal safe = new BigDecimal(resultMap.get("safe").toString()); - BigDecimal workerType1 = new BigDecimal(resultMap.get("workerType").toString()); - BigDecimal security = new BigDecimal(resultMap.get("security").toString()); - resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 6, Double.valueOf(1), age.doubleValue(), - exam.doubleValue(), safe.doubleValue(), workerType1.doubleValue(), security.doubleValue()), 2)); + resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 6, Double.valueOf(1), MapUtils.getDouble(resultMap, "age"), + MapUtils.getDouble(resultMap, "exam"), MapUtils.getDouble(resultMap, "safe"), MapUtils.getDouble(resultMap, "workerType"), MapUtils.getDouble(resultMap, "security")), 2)); resultList.add(resultMap); } return Result.success(resultList); @@ -726,41 +720,37 @@ public class XzRiskPredictionController { Map resultMap = new HashMap<>(); String projectSn = MapUtils.getString(param, "projectSn"); // 安全检查隐患 - List xzSecurityQualityInspectionRecords = xzSecurityQualityInspectionRecordService.list(Wrappers.lambdaQuery() + List records = xzSecurityQualityInspectionRecordService.list(Wrappers.lambdaQuery() .eq(XzSecurityQualityInspectionRecord::getRecordType, 1) .eq(XzSecurityQualityInspectionRecord::getProjectSn, projectSn) .ne(XzSecurityQualityInspectionRecord::getStatus, 6)); - if (xzSecurityQualityInspectionRecords.size() > 0) { - long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getStatus() != 5).count(); - resultMap.put("security", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + if (records.size() > 0) { + long inspectionCount = records.stream().filter(x -> x.getStatus() != 5).count(); + resultMap.put("security", records.size() == 0 ? null : new BigDecimal(inspectionCount).divide(new BigDecimal(records.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("security", 0); } // 安全评分 List list = workerInfoService.list(Wrappers.lambdaQuery().eq(WorkerInfo::getProjectSn, projectSn).eq(WorkerInfo::getInserviceType, 1)); Double safeScore = list.stream().mapToDouble(e -> e.getSafeScore()).sum(); - resultMap.put("safe", new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("safe", list.size() == 0 ? null : new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); // 一级二级分险占比 - if (xzSecurityQualityInspectionRecords.size() > 0) { - long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getLevel() == 1 || x.getLevel() == 2).count(); - resultMap.put("levelRisk", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + if (records.size() > 0) { + long inspectionCount = records.stream().filter(x -> x.getLevel() == 1 || x.getLevel() == 2).count(); + resultMap.put("levelRisk", new BigDecimal(inspectionCount).divide(new BigDecimal(records.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("levelRisk", 0); } // 超期未关闭 - if (xzSecurityQualityInspectionRecords.size() > 0) { - long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getStatus() != 5 && DateUtil.parseDate(x.getChangeLimitTime()).compareTo(new Date()) < 0).count(); - resultMap.put("limitTime", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + if (records.size() > 0) { + long inspectionCount = records.stream().filter(x -> x.getStatus() != 5 && DateUtil.parseDate(x.getChangeLimitTime()).compareTo(new Date()) < 0).count(); + resultMap.put("limitTime", new BigDecimal(inspectionCount).divide(new BigDecimal(records.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("limitTime", 0); } // 计算面积 - BigDecimal security = new BigDecimal(resultMap.get("security").toString()); - BigDecimal limitTime = new BigDecimal(resultMap.get("limitTime").toString()); - BigDecimal levelRisk = new BigDecimal(resultMap.get("levelRisk").toString()); - BigDecimal safe = new BigDecimal(resultMap.get("safe").toString()); - resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 4, security.doubleValue(), - limitTime.doubleValue(), levelRisk.doubleValue(), safe.doubleValue()), 2)); + resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 4, MapUtils.getDouble(resultMap, "security"), + MapUtils.getDouble(resultMap, "limitTime"), MapUtils.getDouble(resultMap, "levelRisk"), MapUtils.getDouble(resultMap, "safe")), 2)); return Result.success(resultMap); } @@ -796,9 +786,9 @@ public class XzRiskPredictionController { List xzSecurityQualityInspectionRecords = allXzSecurityQualityInspectionRecords.stream().filter(x -> enterpriseIds.contains(x.getEnterpriseId())).collect(Collectors.toList()); if (xzSecurityQualityInspectionRecords.size() > 0) { - resultMap.put("total", new BigDecimal(xzSecurityQualityInspectionRecords.size()).divide(new BigDecimal(allXzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("total", allXzSecurityQualityInspectionRecords.size() == 0 ? null : new BigDecimal(xzSecurityQualityInspectionRecords.size()).divide(new BigDecimal(allXzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getStatus() != 5).count(); - resultMap.put("security", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("security", xzSecurityQualityInspectionRecords.size() == 0 ? null : new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("security", 0); resultMap.put("total", 0); @@ -806,30 +796,25 @@ public class XzRiskPredictionController { // 安全评分 List list = allWorkerList.stream().filter(a -> enterpriseIds.contains(a.getEnterpriseId())).collect(Collectors.toList()); Double safeScore = list.stream().mapToDouble(e -> e.getSafeScore()).sum(); - resultMap.put("safe", new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("safe", list.size() == 0 ? null : new BigDecimal(safeScore).divide(new BigDecimal(100)).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)); // 一级二级分险占比 if (xzSecurityQualityInspectionRecords.size() > 0) { long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getLevel() == 1 || x.getLevel() == 2).count(); - resultMap.put("levelRisk", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("levelRisk", xzSecurityQualityInspectionRecords.size() == 0 ? null : new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("levelRisk", 0); } // 超期未关闭 if (xzSecurityQualityInspectionRecords.size() > 0) { long inspectionCount = xzSecurityQualityInspectionRecords.stream().filter(x -> x.getStatus() != 5 && DateUtil.parseDate(x.getChangeLimitTime()).compareTo(new Date()) < 0).count(); - resultMap.put("limitTime", new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); + resultMap.put("limitTime", xzSecurityQualityInspectionRecords.size() == 0 ? null : new BigDecimal(inspectionCount).divide(new BigDecimal(xzSecurityQualityInspectionRecords.size()), 2, BigDecimal.ROUND_HALF_UP)); } else { resultMap.put("limitTime", 0); } resultMap.put("enterpriseName", enterpriseInfo.getEnterpriseName()); // 计算面积 - BigDecimal security = new BigDecimal(resultMap.get("security").toString()); - BigDecimal limitTime = new BigDecimal(resultMap.get("limitTime").toString()); - BigDecimal levelRisk = new BigDecimal(resultMap.get("levelRisk").toString()); - BigDecimal safe = new BigDecimal(resultMap.get("safe").toString()); - BigDecimal total = new BigDecimal(resultMap.get("total").toString()); - resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 5, security.doubleValue(), - limitTime.doubleValue(), total.doubleValue(), levelRisk.doubleValue(), safe.doubleValue()), 2)); + resultMap.put("area", NumberUtils.percent(PolygonUtil.calRadioArea(1.0, 5, MapUtils.getDouble(resultMap, "security"), + MapUtils.getDouble(resultMap, "limitTime"), MapUtils.getDouble(resultMap, "total"), MapUtils.getDouble(resultMap, "levelRisk"), MapUtils.getDouble(resultMap, "safe")), 2)); resultList.add(resultMap); } return Result.success(resultList); diff --git a/src/main/java/com/zhgd/xmgl/util/NumberUtils.java b/src/main/java/com/zhgd/xmgl/util/NumberUtils.java index b8476c0b1..c511262d8 100644 --- a/src/main/java/com/zhgd/xmgl/util/NumberUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/NumberUtils.java @@ -157,9 +157,11 @@ public class NumberUtils { * @return */ public static boolean eq(Double b1, Double b2) { + //Math.abs(b1 - b2) < 1e-14f return b1 != null && b2 != null && b1.equals(b2); } + /** * 取余 *