Jelajahi Sumber

大数据中台,数字资源日常巡护,永久基本农田

zhaozhan 1 tahun lalu
induk
melakukan
56fba8dbed

+ 12 - 0
src/main/java/com/sooka/sponest/data/digitalresource/controller/ResourceBigDataController.java

@@ -6,6 +6,7 @@ import com.sooka.sponest.data.app.domain.VisuForestCloudMapVO;
 import com.sooka.sponest.data.digitalforest.domain.CenterdataTForestGrid;
 import com.sooka.sponest.data.digitalresource.domain.*;
 import com.sooka.sponest.data.digitalresource.service.IResourceBigDataService;
+import com.sooka.sponest.data.digitalwater.domain.CenterdataTHydraulicPatrolTask;
 import com.sooka.sponest.data.other.land.domain.CenterdataTResourcesLand;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.io.IOException;
+
 /**
  * 数字资源大屏统一Controller
  */
@@ -146,4 +149,13 @@ public class ResourceBigDataController extends BaseController {
     public R getResourcesGeologicHazard() {
         return R.ok(resourceBigDataService.selectResourcesGeologicHazard(new CenterdataTResourcesGeologicHazard()));
     }
+    /**
+     * 日常巡护
+     * @return
+     */
+    @ApiOperation("远端调用查询日常巡护")
+    @PostMapping("/getHydraulicPatrolTask")
+    public R getHydraulicPatrolTask(CenterdataTHydraulicPatrolTask centerdataTHydraulicPatrolTask) throws IOException {
+        return R.ok(resourceBigDataService.selectHydraulicPatrolTask(centerdataTHydraulicPatrolTask));
+    }
 }

+ 11 - 1
src/main/java/com/sooka/sponest/data/digitalresource/mapper/DigitalResourcesBigDataMapper.java

@@ -4,6 +4,7 @@ import com.sooka.sponest.data.app.domain.VisuForestCloudMapVO;
 import com.sooka.sponest.data.digitalforest.domain.CenterdataTForestGrid;
 import com.sooka.sponest.data.digitalforest.domain.bo.VisuForestCloudEventTypeBO;
 import com.sooka.sponest.data.digitalresource.domain.*;
+import com.sooka.sponest.data.digitalwater.domain.CenterdataTHydraulicPatrolTask;
 import com.sooka.sponest.data.other.land.domain.CenterdataTResourcesLand;
 
 import java.util.List;
@@ -74,9 +75,18 @@ public interface DigitalResourcesBigDataMapper {
     List<Map<String, Object>> selectResourcesLandInfoCount(CenterdataTResourcesLandInfo centerdataTResourcesLandInfo);
 
     /**
-     * 地质灾害易发区
+     * 永久基本农田
      * @param centerdataTFarmBasicFarmland
      * @return
      */
+
     List<Map<String, Object>> selectFarmBasicFarmlandCount(CenterdataTFarmBasicFarmland centerdataTFarmBasicFarmland);
+    List<Map<String, Object>> selectDept(CenterdataTFarmBasicFarmland centerdataTFarmBasicFarmland);
+
+    /**
+     * 日常巡护
+     * @param centerdataTHydraulicPatrolTask
+     * @return
+     */
+    List<Map<String,Object>> getHydraulicPatrolTask(CenterdataTHydraulicPatrolTask centerdataTHydraulicPatrolTask);
 }

+ 10 - 0
src/main/java/com/sooka/sponest/data/digitalresource/service/IResourceBigDataService.java

@@ -5,8 +5,10 @@ import com.sooka.sponest.data.base.service.IBaseService;
 import com.sooka.sponest.data.digitalforest.domain.CenterdataTForestGrid;
 import com.sooka.sponest.data.digitalforest.domain.bo.VisuForestCloudEventTypeBO;
 import com.sooka.sponest.data.digitalresource.domain.*;
+import com.sooka.sponest.data.digitalwater.domain.CenterdataTHydraulicPatrolTask;
 import com.sooka.sponest.data.other.land.domain.CenterdataTResourcesLand;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -90,4 +92,12 @@ public interface IResourceBigDataService extends IBaseService {
      * @return
      */
     List<Map<String, Object>> selectResourcesGeologicHazard(CenterdataTResourcesGeologicHazard centerdataTResourcesGeologicHazard);
+
+    /**
+     * 日常巡护
+     * @param centerdataTHydraulicPatrolTask
+     * @return
+     */
+    List<Map<String,Object>> selectHydraulicPatrolTask(CenterdataTHydraulicPatrolTask centerdataTHydraulicPatrolTask) throws IOException;
+
 }

+ 62 - 3
src/main/java/com/sooka/sponest/data/digitalresource/service/impl/ResourceBigDataServiceImpl.java

@@ -1,7 +1,6 @@
 package com.sooka.sponest.data.digitalresource.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
-import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.datascope.annotation.DataScopeMutiDept;
 import com.sooka.sponest.data.app.domain.VisuForestCloudMapVO;
 import com.sooka.sponest.data.base.service.impl.BaseServiceImpl;
@@ -13,10 +12,12 @@ import com.sooka.sponest.data.digitalresource.service.IResourceBigDataService;
 import com.sooka.sponest.data.digitalwater.domain.CenterdataTHydraulicOutletSewage;
 import com.sooka.sponest.data.digitalwater.domain.CenterdataTHydraulicPatrolTask;
 import com.sooka.sponest.data.other.land.domain.CenterdataTResourcesLand;
+import com.sooka.sponest.data.utils.DeptLevelUtil;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -28,6 +29,9 @@ public class ResourceBigDataServiceImpl extends BaseServiceImpl implements IReso
     @Autowired
     private DigitalResourcesBigDataMapper digitalResourcesBigDataMapper;
 
+    @Autowired
+    private DeptLevelUtil deptLevelUtil;
+
     private static final String VALUE = "value";
 
     /**
@@ -151,7 +155,19 @@ public class ResourceBigDataServiceImpl extends BaseServiceImpl implements IReso
     @Override
     public List<Map<String, Object>> selectFarmBasicFarmlandCount(CenterdataTFarmBasicFarmland centerdataTFarmBasicFarmland) {
         setSookaDataBase(centerdataTFarmBasicFarmland);
-        return digitalResourcesBigDataMapper.selectFarmBasicFarmlandCount(centerdataTFarmBasicFarmland);
+        List<Map<String, Object>> listMap=new ArrayList<>();
+        digitalResourcesBigDataMapper.selectDept(centerdataTFarmBasicFarmland).forEach(item ->{
+            CenterdataTFarmBasicFarmland farmBasicFarmland = new CenterdataTFarmBasicFarmland();
+            farmBasicFarmland.setDeptId(Long.parseLong(String.valueOf(item.get("dept_id"))));
+            setSookaDataBase(farmBasicFarmland);
+            Map<String, Object> map = new HashMap<>();
+            map.put("deptName",item.get("dept_name"));
+            digitalResourcesBigDataMapper.selectFarmBasicFarmlandCount(farmBasicFarmland).forEach(items ->{
+                map.put(String.valueOf(items.get("name")),items.get("value")) ;
+            });
+            listMap.add(map);
+        });
+        return listMap;
     }
     /**
      * 地质灾害易发区
@@ -164,4 +180,47 @@ public class ResourceBigDataServiceImpl extends BaseServiceImpl implements IReso
         return digitalResourcesBigDataMapper.getHazardResources(centerdataTResourcesGeologicHazard);
     }
 
+    /**
+     * 日常巡护
+     * @param centerdataTHydraulicPatrolTask
+     * @return
+     */
+    @DataScopeMutiDept(deptAlias = "d")
+    @Override
+    public List<Map<String,Object>> selectHydraulicPatrolTask(CenterdataTHydraulicPatrolTask centerdataTHydraulicPatrolTask) throws IOException {
+        setSookaDataBase(centerdataTHydraulicPatrolTask);
+        List<Map<String,Object>> hydraulicPatrolTask = digitalResourcesBigDataMapper.getHydraulicPatrolTask(centerdataTHydraulicPatrolTask);
+        for (Map<String, Object> stringObjectMap : hydraulicPatrolTask) {
+            stringObjectMap.put("patrolTrajectory",getPlanLength(MapUtils.getString(stringObjectMap,"patrolTrajectory")));
+        }
+        return deptLevelUtil.getDeptLevel(hydraulicPatrolTask);
+
+    }
+    private String getPlanLength(String patrolTrajectory) {
+        double juli = 0.0;
+        JSONArray jsonArray = JSONArray.parseArray(patrolTrajectory);
+        for (int i = 0; i < jsonArray.size(); i++) {
+            if (i == 0) {
+                continue;
+            }
+            // 纬度
+            double lat1 = Math.toRadians(jsonArray.getJSONObject(i - 1).getDouble("lat"));
+            double lat2 = Math.toRadians(jsonArray.getJSONObject(i).getDouble("lat"));
+            // 经度
+            double lng1 = Math.toRadians(jsonArray.getJSONObject(i - 1).getDouble("lng"));
+            double lng2 = Math.toRadians(jsonArray.getJSONObject(i).getDouble("lng"));
+            // 纬度之差
+            double a = lat1 - lat2;
+            // 经度之差
+            double b = lng1 - lng2;
+            // 计算两点距离的公式
+            double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
+                    Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
+            // 弧长乘地球半径, 返回单位: 千米
+            juli += s * 6378.137;
+        }
+        return String.format("%.2f", juli);
+    }
+
+
 }

+ 42 - 8
src/main/resources/mapper/digitalresource/DigitalResourcesBigDataMapper.xml

@@ -297,17 +297,51 @@
         group by dict.dict_value
     </select>
 
+    <select id="selectDept" parameterType="CenterdataTFarmBasicFarmland" resultType="java.util.Map">
+        select d.dept_id,d.dept_name from ${database_system}.sys_dept d where dept_type="sys_dept_type_17"
+    </select>
     <select id="selectFarmBasicFarmlandCount" parameterType="CenterdataTFarmBasicFarmland" resultType="java.util.Map">
         select dict.dict_label name,IFNULL(sum(a.area),0) value from ${database_system}.sys_dict_data dict
-        left join(
-            select a.* from centerdata_t_farm_basic_farmland a  left join ${database_system}.sys_dept d on a.dept_id=d.dept_id
-            <where>
-                ${params.dataScope}
-            </where>
-            ) a on a.attribute = dict.dict_value
+            left join ( select a.* from centerdata_t_farm_basic_farmland a
+            left join ${database_system}.sys_dept d on  a.dept_id=d.dept_id
+            where (a.dept_id =#{deptId}  or FIND_IN_SET( #{deptId}, d.ancestors )) ${params.dataScope}
+            )a on a.attribute = dict.dict_value
+        where dict.dict_type = 'farm_field_attribute'
+        group by dict.dict_label
+    </select>
+
+    <select id="getHydraulicPatrolTask" parameterType="CenterdataTHydraulicPatrolTask" resultType="java.util.Map">
+        SELECT t1.deptId, t1.ancestors,t1.patrolTrajectory,ifnull(TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(t2.length/1000,2))),0) realLength FROM (
+        select a.id,a.create_time,a.dept_id deptId ,d.ancestors ancestors,
+        a.patrol_trajectory patrolTrajectory
+        from centerdata_t_hydraulic_patrol_task a
+        left join ${database_system}.sys_dept d on a.dept_id = d.dept_id
         <where>
-            dict.dict_type = 'farm_field_attribute'
+            <if test="type != null  and type != ''">and a.type = #{type}</if>
+            ${params.dataScope}
         </where>
-        group by dict.dict_value
+        ) t1
+        LEFT JOIN (
+        SELECT task_id, sum( c.juli ) length FROM (
+        SELECT a.task_id,
+        IFNULL( st_distance_sphere ( point ( a.longitude, a.latitude ), point ( b.longitude, b.latitude ) ), 0 ) AS juli
+        FROM (
+        SELECT a.*,(@i := @i + 1) AS xh FROM (
+        SELECT a.task_id,b.longitude,b.latitude
+        FROM centerdata_t_hydraulic_patrol_plan_record a
+        LEFT JOIN centerdata_t_hydraulic_patrol_track b ON b.record_id = a.id
+        ORDER BY b.create_time) a,(SELECT @i := 1) AS itable
+        ) a
+        LEFT JOIN (
+        SELECT a.*,(@j := @j + 1) AS xh FROM(
+        SELECT a.task_id,b.longitude,b.latitude
+        FROM centerdata_t_hydraulic_patrol_plan_record a
+        LEFT JOIN centerdata_t_hydraulic_patrol_track b ON b.record_id = a.id
+        ORDER BY b.create_time) a,(SELECT @j := 0) AS itable
+        ) b ON a.xh = b.xh AND a.task_id = b.task_id
+        ) c
+        GROUP BY task_id
+        ) t2 ON t2.task_id = t1.id
+        ORDER BY t1.create_time DESC
     </select>
 </mapper>