From 60483b2e9a5e597c0dec6aa30037e62356dd52af Mon Sep 17 00:00:00 2001
From: shenyijian <1178253012@qq.com>
Date: Fri, 21 Jun 2024 17:27:34 +0800
Subject: [PATCH] 湖北水库:施工:项目进度查询计算百分比

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java |   45 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
index 163d8e1..a92a866 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -50,6 +50,7 @@
 		Map<Long, List<SgProjectInfoVO>> projectMap = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
 		List<SgProjectInfoDO> result = new ArrayList<>();
 		for (Map.Entry<Long, List<SgProjectInfoVO>> entry : projectMap.entrySet()) {
+			List<SgDeviceDO> allDevice = new ArrayList<>();
 			Long porId = entry.getKey();
 			List<SgProjectInfoVO> value = entry.getValue();
 			if (CollectionUtils.isEmpty(value)){
@@ -77,13 +78,36 @@
 					sgDeviceDO.setId(dId);
 					sgDeviceDO.setDeviceName(deList.get(0).getDeviceName());
 					sgDeviceDO.setStatus(	deList.get(0).getDeviceStatus());
-					sgDeviceDO.setStepDOList(deList.stream().map(s->SgGxStepDO.builder().id(s.getReportId()).gxStepNum(s.getGxStepNum()).gxStepName(s.getGxStepName()).deviceId(s.getDId()).approvalStatus(s.getReportStatus()).build()).collect(Collectors.toList()));
+					List<SgGxStepDO> stepDOS = deList.stream().map(s -> SgGxStepDO.builder().id(s.getStepId()).gxStepNum(s.getGxStepNum()).gxStepName(s.getGxStepName()).deviceId(s.getDId()).approvalStatus(s.getReportStatus()).build()).collect(Collectors.toList());
+					List<SgGxStepDO> stepOver = stepDOS.stream().filter(s -> s.getApprovalStatus() != null && s.getApprovalStatus() == 2).collect(Collectors.toList());
+					BigDecimal stepSize = BigDecimal.valueOf(stepDOS.size());
+					BigDecimal stepOverSize = BigDecimal.ZERO;
+					if (!stepOver.isEmpty()){
+						stepOverSize = BigDecimal.valueOf(stepOver.size());
+					}
+					BigDecimal divide = stepOverSize.divide(stepSize, 2, RoundingMode.HALF_UP);
+					sgDeviceDO.setProgress(divide.toString());
+					sgDeviceDO.setDeviceProgress(getBigDecimalPercent(divide));
+					sgDeviceDO.setStepDOList(stepDOS);
 					deviceDOS.add(sgDeviceDO);
+					allDevice.add(sgDeviceDO);
 				}
+				BigDecimal deviceSize = BigDecimal.valueOf(deviceDOS.size());
+				double sum = deviceDOS.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum();
+				BigDecimal deviceOver = BigDecimal.valueOf(sum);
+				BigDecimal divideDevice = deviceOver.divide(deviceSize, 2, RoundingMode.HALF_UP);
 				typeVO.setDeviceDOS(deviceDOS);
+				typeVO.setTypeProgress(getBigDecimalPercent(divideDevice));
 				sgGxDOS.add(typeVO);
 			}
-			sgProjectInfoDO.setSgGxDOS(sgGxDOS);
+			BigDecimal allDeviceSize = BigDecimal.valueOf(allDevice.size());
+			if (!allDeviceSize.equals(BigDecimal.ZERO)){
+				double sum = allDevice.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum();
+				BigDecimal allDeviceOver = BigDecimal.valueOf(sum);
+				BigDecimal allDivideDevice = allDeviceOver.divide(allDeviceSize, 2, RoundingMode.HALF_UP);
+				sgProjectInfoDO.setSgGxDOS(sgGxDOS);
+				sgProjectInfoDO.setProjectProgress( getBigDecimalPercent(allDivideDevice));
+			}
 			result.add(sgProjectInfoDO);
 		}
 		return result;
@@ -108,15 +132,24 @@
 				v1 = BigDecimal.valueOf(overList.size());
 			}
 			BigDecimal v2 = BigDecimal.valueOf(deviceList.size());
-			BigDecimal percentage = v1.divide(v2,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
-			// 如果不需要保留小数位,可以设置一个scale为0
-			BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP);
-			sgProjectInfoVO.setProgressName(percentageRounded+"%");
+			sgProjectInfoVO.setProgressName(getBigDecimalPercent( v1.divide(v2,2,BigDecimal.ROUND_HALF_UP)));
 			result.add(sgProjectInfoVO);
 		}
 		return result;
 	}
 
+	/**
+	 * 获取百分比
+	 * @param bigDecimal
+	 * @return
+	 */
+	private  String getBigDecimalPercent(BigDecimal bigDecimal) {
+		BigDecimal percentage = bigDecimal.multiply(new BigDecimal("100"));
+		// 如果不需要保留小数位,可以设置一个scale为0
+		BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP);
+		return percentageRounded+"%";
+	}
+
 	@Override
 	public Map<String, Long> projectCount(ProjectSearchDTO searchDTO) {
 		Map<String, Long> map  = new HashMap<>();

--
Gitblit v1.9.3