Explorar o código

BUG修复 截面积计算优化

qinguocai hai 1 ano
pai
achega
01c9e63201

+ 36 - 27
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AchievementServiceImpl.java

@@ -100,20 +100,20 @@ public class AchievementServiceImpl implements AchievementService {
         try {
             //查询resultId结果
             TaskResult taskResult = taskResultMapper.queryById(resultId);
-            if (taskResult == null){
+            if (taskResult == null) {
                 throw new BaseException("该结果不存在");
             }
-            if (taskResult.getStatus() != 2){
+            if (taskResult.getStatus() != 2) {
                 throw new BaseException("结果未完成,不支持导出");
             }
             //查询站点信息
             SiteInfo siteInfo = siteInfoMapper.queryById(taskResult.getSiteId());
-            if (siteInfo == null){
+            if (siteInfo == null) {
                 throw new BaseException("该站点不存在");
             }
             //查站点详情
             SiteConfig siteConfig = siteService.queryConfig(siteInfo.getSiteId());
-            if (siteConfig ==  null){
+            if (siteConfig == null) {
                 throw new BaseException("该站点配置不存在");
             }
             //拿断面数据
@@ -123,16 +123,16 @@ public class AchievementServiceImpl implements AchievementService {
 //            }
             //拿停泊点数据
             BerthingPointConfig berthingPointConfig = berthingPointConfigMapper.queryById(taskResult.getStopId());
-            if (berthingPointConfig == null){
+            if (berthingPointConfig == null) {
                 throw new BaseException("停泊点配置不存在");
             }
 
             //拿有水位的启点距和高程
             List<BigDecimal> positionsList = JSONUtil.toList(taskResult.getPositions(), BigDecimal.class);
             List<BigDecimal> elevationsList = JSONUtil.toList(taskResult.getElevations(), BigDecimal.class);
-            if (positionsList.size() < 5){
+            if (positionsList.size() < 5) {
                 throw new BaseException("启点距少于5个不支持导出");
-            } else if (positionsList.size() > 50){
+            } else if (positionsList.size() > 50) {
                 throw new BaseException("启点距大于50个点暂不支持导出");
             }
 
@@ -149,26 +149,26 @@ public class AchievementServiceImpl implements AchievementService {
             map.put("endTime", taskResult.getEndtime());
             map.put("flowsum", taskResult.getFlowsum());
             map.put("width", taskResult.getWidth());
-            map.put("waterlevel",taskResult.getWaterlevel());
-            map.put("acreagesum",taskResult.getAcreagesum());
+            map.put("waterlevel", taskResult.getWaterlevel());
+            map.put("acreagesum", taskResult.getAcreagesum());
             List<Double> WspeedsList = JSONUtil.parseArray(taskResult.getWspeeds()).toList(Double.class);
             double averageWspeed = WspeedsList.stream().mapToDouble(d -> d).average().orElse(Double.NaN);
-            if (Double.isNaN(averageWspeed)){
+            if (Double.isNaN(averageWspeed)) {
                 averageWspeed = 0.0;
             }
             BigDecimal averageWspeedBigDecimal = new BigDecimal(averageWspeed).setScale(2, RoundingMode.HALF_UP);
             Double maxWspeed = WspeedsList.stream().max(Double::compareTo).orElse(Double.NaN);
             List<Double> waterlevelList = JSONUtil.parseArray(taskResult.getWaterlevels()).toList(Double.class);
             double averageWaterlevel = waterlevelList.stream().mapToDouble(d -> d).average().orElse(Double.NaN);
-            if (Double.isNaN(averageWaterlevel)){
+            if (Double.isNaN(averageWaterlevel)) {
                 averageWaterlevel = 0.0;
             }
             BigDecimal averageWaterlevelBigDecimal = new BigDecimal(averageWaterlevel).setScale(2, RoundingMode.HALF_UP);
             Double maxWaterlevel = waterlevelList.stream().max(Double::compareTo).orElse(Double.NaN);
-            map.put("agWaterlevels",averageWaterlevelBigDecimal.toString());
-            map.put("maxWaterlevels",String.valueOf(maxWaterlevel));
-            map.put("agWspeeds",averageWspeedBigDecimal.toString());
-            map.put("maxWspeeds",String.valueOf(maxWspeed));
+            map.put("agWaterlevels", averageWaterlevelBigDecimal.toString());
+            map.put("maxWaterlevels", String.valueOf(maxWaterlevel));
+            map.put("agWspeeds", averageWspeedBigDecimal.toString());
+            map.put("maxWspeeds", String.valueOf(maxWspeed));
             excelWriter.fill(map, writeSheet);
 
             //拿断面数据
@@ -185,7 +185,7 @@ public class AchievementServiceImpl implements AchievementService {
             List<String> taskFlows = JSONUtil.toList(taskResult.getFlows(), String.class);
 
             //查询任务时间
-            List<MeasureUpload> measureUploadList = measureUploadMapper.queryBySiteIdTime(taskResult.getSiteId(), null , taskResult.getTaskid());
+            List<MeasureUpload> measureUploadList = measureUploadMapper.queryBySiteIdTime(taskResult.getSiteId(), null, taskResult.getTaskid());
 
             int pnIndex = 0;
             for (int i = 0; i < positionsList.size(); i++) {
@@ -201,8 +201,8 @@ public class AchievementServiceImpl implements AchievementService {
                 }
                 data.put("x", positionsList.get(i).toString());
                 data.put("y", elevationsList.get(i).toString());
-                data.put("waterlevel",taskResult.getWaterlevel());
-                data.put("subWlevel",BigDecimal.valueOf(taskResult.getWaterlevel()).subtract(elevationsList.get(i)));
+                data.put("waterlevel", taskResult.getWaterlevel());
+                data.put("subWlevel", BigDecimal.valueOf(taskResult.getWaterlevel()).subtract(elevationsList.get(i)));
 
                 if (pnIndex < berthingPointList.size()) {
                     BigDecimal position = positionsList.get(i).setScale(4, RoundingMode.HALF_UP);
@@ -229,6 +229,11 @@ public class AchievementServiceImpl implements AchievementService {
                         } else {
                             data.put("partwspeeds", "");
                         }
+                        if (pnIndex < taskStopwspeeds.size()) {
+                            data.put("stopwspeeds", taskStopwspeeds.get(pnIndex));
+                        } else {
+                            data.put("stopwspeeds", "");
+                        }
                         pnIndex = pnIndex + 1;
                     } else {
                         data.put("speed", "");
@@ -247,6 +252,8 @@ public class AchievementServiceImpl implements AchievementService {
                 dataList.add(data);
             }
             pnIndex = 0;
+            int oldIndex = 0;
+            BigDecimal add = new BigDecimal("0");
             //新循环
             for (int i = 0; i < positionsList.size(); i++) {
                 Map<String, Object> pgData = MapUtils.newHashMap();
@@ -260,15 +267,17 @@ public class AchievementServiceImpl implements AchievementService {
                             } else {
                                 pgData.put("partwspeeds", "");
                             }
-                            if (i < 2) {
-                                pgData.put("add", acreages.get(0));//部分
-                            } else {
-                                BigDecimal bd1 = new BigDecimal(acreages.get(i));
-                                BigDecimal bd2 = new BigDecimal(acreages.get(i - 1));
-                                BigDecimal add = bd1.add(bd2);
-                                pgData.put("add", add.toString());
+                            for (int j = oldIndex; j < acreages.size(); j++) {
+                                if (j <= i ) {
+                                    add = add.add(new BigDecimal(acreages.get(j)));
+                                } else {
+                                    break;
+                                }
                             }
-//                            pgData.put("flows", taskFlows.get(pnIndex));//部分流量
+                            pgData.put("add", add.toString());//部分
+                            oldIndex = i + 1  ;
+                            add = new BigDecimal("0");
+//                          pgData.put("flows", taskFlows.get(pnIndex));//部分流量
                             pnIndex = pnIndex + 1;
                         } else {
                             pgData.put("partwspeeds", "");
@@ -297,7 +306,7 @@ public class AchievementServiceImpl implements AchievementService {
                     pgData.put("subx", subx.toString()); //间距
                     if (i <= acreages.size() - 1) {
                         pgData.put("acreages", acreages.get(i));
-                    }  else {
+                    } else {
                         pgData.put("acreages", "");
                     }//垂线间
                     pgList.add(pgData);