Browse Source

综合治理

459242451@qq.com 3 years ago
parent
commit
461610b0fc

+ 40 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlCommonController.java

@@ -9,14 +9,19 @@ import cn.hutool.json.JSONUtil;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.qdtl.domain.MonitorStatic;
 import com.ruoyi.qdtl.domain.TlArea;
 import com.ruoyi.qdtl.domain.TlInspectionDeviceTrail;
 import com.ruoyi.qdtl.domain.TlInspectionLocation;
+import com.ruoyi.qdtl.domain.TlInspectionLocationLog;
 import com.ruoyi.qdtl.service.ITlAreaService;
 import com.ruoyi.qdtl.service.ITlInspectionDeviceTrailService;
+import com.ruoyi.qdtl.service.ITlInspectionLocationLogService;
 import com.ruoyi.qdtl.service.ITlInspectionLocationService;
+import com.ruoyi.qdtl.service.ITlMonitorService;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -40,18 +45,17 @@ import java.util.stream.Collectors;
 @RestController
 @RequestMapping("/qdtl/common")
 @Slf4j
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
 public class TlCommonController extends BaseController {
 
-    @Autowired
-    private RedisCache redisCache;
-    @Autowired
-    private ISysConfigService sysConfigService;
-    @Autowired
-    private ITlAreaService tlAreaService;
-    @Autowired
-    private ITlInspectionLocationService tlInspectionLocationService;
-    @Autowired
-    private ITlInspectionDeviceTrailService tlInspectionDeviceTrailService;
+    private final RedisCache redisCache;
+    private final ISysConfigService sysConfigService;
+    private final ITlAreaService tlAreaService;
+    private final ITlInspectionLocationService tlInspectionLocationService;
+    private final ITlInspectionDeviceTrailService tlInspectionDeviceTrailService;
+    private final ITlInspectionLocationLogService tlInspectionLocationLogService;
+    private final ITlMonitorService tlMonitorService;
+
 
     /**
      * 查询监控设备管理列表
@@ -116,10 +120,35 @@ public class TlCommonController extends BaseController {
         // 对轨迹按照设备编码分组
         Map<String, List<TlInspectionDeviceTrail>> deviceTrail = deviceTrails.stream().collect(Collectors.groupingBy(TlInspectionDeviceTrail::getDeviceCode));
         map.put("deviceTrail", deviceTrail);
-        
+
         // 铁路沿线
         List<SysConfig> railway = sysConfigService.selectConfigByLeftKey("tl.railway.");
         map.put("railway", railway);
         return AjaxResult.success(map);
     }
+
+    /**
+     * 治理态势统计
+     *
+     * @param date
+     * @return
+     */
+    @GetMapping("/govern")
+    public AjaxResult govern(@RequestParam(required = false) String date) {
+        Map<String, Object> map = new HashMap<>(8);
+        if (StrUtil.isBlank(date)) {
+            date = DateUtil.today();
+        }
+        // 巡检里程
+        double xunTotalDistance = tlInspectionDeviceTrailService.queryDistance(date, "");
+        map.put("xunTotalDistance", xunTotalDistance);
+        // 巡检打卡数
+        List<TlInspectionLocationLog> locationLogList = tlInspectionLocationLogService.queryByCondition(date, "", "");
+        map.put("checkPointLogNum", locationLogList.size());
+        // 视频资源统计
+        List<MonitorStatic> cameraslist = tlMonitorService.queryMonitorStatic();
+        map.put("cameraslist", cameraslist);
+
+        return AjaxResult.success(map);
+    }
 }

+ 7 - 1
ruoyi-common/pom.xml

@@ -52,7 +52,7 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
-  
+
         <!-- JSON工具类 -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -135,6 +135,12 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.gavaghan</groupId>
+            <artifactId>geodesy</artifactId>
+            <version>1.1.3</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 17 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/CameraData.java

@@ -0,0 +1,17 @@
+package com.ruoyi.qdtl.domain;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/3/24
+ * @Version V1.0
+ */
+@Data
+public class CameraData {
+    private String cameraIndexCode;
+    private String name;
+    private String unitIndexCode;
+    private String statusName;
+}

+ 19 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/MonitorStatic.java

@@ -0,0 +1,19 @@
+package com.ruoyi.qdtl.domain;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/3/24
+ * @Version V1.0
+ */
+@Data
+public class MonitorStatic {
+    // 区域id
+    private String indexCode;
+    // 区域名称
+    private String name;
+    // 视频资源数量
+    private Long num;
+}

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlInspectionLocationLogMapper.java

@@ -1,6 +1,7 @@
 package com.ruoyi.qdtl.mapper;
 
 import com.ruoyi.qdtl.domain.TlInspectionLocationLog;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
 import java.util.List;
@@ -61,4 +62,6 @@ public interface TlInspectionLocationLogMapper {
     public int deleteTlInspectionLocationLogByIds(Long[] ids);
 
     Date queryMaxDate();
+
+    List<TlInspectionLocationLog> queryByCondition(@Param("date") String date, @Param("checkpointCard") String checkpointCard, @Param("deviceId") String deviceId);
 }

+ 9 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlInspectionDeviceTrailService.java

@@ -60,4 +60,13 @@ public interface ITlInspectionDeviceTrailService {
     public int deleteTlInspectionDeviceTrailById(Long id);
 
     List<TlInspectionDeviceTrail> selectListByDate(String date);
+
+    /**
+     * 查询巡检里程数
+     *
+     * @param date     日期
+     * @param deviceId 设备id
+     * @return
+     */
+    double queryDistance(String date, String deviceId);
 }

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlInspectionLocationLogService.java

@@ -61,4 +61,7 @@ public interface ITlInspectionLocationLogService {
     public int deleteTlInspectionLocationLogById(Long id);
 
     Date queryMaxDate();
+
+    List<TlInspectionLocationLog> queryByCondition(String date, String checkpointCard, String deviceId);
+
 }

+ 13 - 10
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlMonitorService.java

@@ -1,19 +1,20 @@
 package com.ruoyi.qdtl.service;
 
-import java.util.List;
+import com.ruoyi.qdtl.domain.MonitorStatic;
 import com.ruoyi.qdtl.domain.TlMonitor;
 
+import java.util.List;
+
 /**
  * 监控设备管理Service接口
- * 
+ *
  * @author ruoyi
  * @date 2022-03-02
  */
-public interface ITlMonitorService 
-{
+public interface ITlMonitorService {
     /**
      * 查询监控设备管理
-     * 
+     *
      * @param id 监控设备管理主键
      * @return 监控设备管理
      */
@@ -21,7 +22,7 @@ public interface ITlMonitorService
 
     /**
      * 查询监控设备管理列表
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 监控设备管理集合
      */
@@ -29,7 +30,7 @@ public interface ITlMonitorService
 
     /**
      * 新增监控设备管理
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 结果
      */
@@ -37,7 +38,7 @@ public interface ITlMonitorService
 
     /**
      * 修改监控设备管理
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 结果
      */
@@ -45,7 +46,7 @@ public interface ITlMonitorService
 
     /**
      * 批量删除监控设备管理
-     * 
+     *
      * @param ids 需要删除的监控设备管理主键集合
      * @return 结果
      */
@@ -53,9 +54,11 @@ public interface ITlMonitorService
 
     /**
      * 删除监控设备管理信息
-     * 
+     *
      * @param id 监控设备管理主键
      * @return 结果
      */
     public int deleteTlMonitorById(Long id);
+
+    List<MonitorStatic> queryMonitorStatic();
 }

+ 38 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlInspectionDeviceTrailServiceImpl.java

@@ -1,14 +1,22 @@
 package com.ruoyi.qdtl.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.qdtl.domain.TlInspectionDeviceTrail;
 import com.ruoyi.qdtl.mapper.TlInspectionDeviceTrailMapper;
 import com.ruoyi.qdtl.service.ITlInspectionDeviceTrailService;
+import org.gavaghan.geodesy.Ellipsoid;
+import org.gavaghan.geodesy.GeodeticCalculator;
+import org.gavaghan.geodesy.GlobalCoordinates;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 设备轨迹Service业务层处理
@@ -94,4 +102,34 @@ public class TlInspectionDeviceTrailServiceImpl implements ITlInspectionDeviceTr
     public List<TlInspectionDeviceTrail> selectListByDate(String date) {
         return tlInspectionDeviceTrailMapper.selectListByDate(date);
     }
+
+    @Override
+    public double queryDistance(String date, String deviceId) {
+        List<TlInspectionDeviceTrail> deviceTrails = this.selectListByDate(date);
+        // 对轨迹按照设备编码分组
+        Map<String, List<TlInspectionDeviceTrail>> deviceTrail = deviceTrails.stream().collect(Collectors.groupingBy(TlInspectionDeviceTrail::getDeviceCode));
+        // 对每一个设备循环累计里程
+        double distance = 0;
+        for (Map.Entry<String, List<TlInspectionDeviceTrail>> stringListEntry : deviceTrail.entrySet()) {
+            List<TlInspectionDeviceTrail> origin = stringListEntry.getValue();
+            if (origin.size() < 2) {
+                continue;
+            }
+            // 对原始list分成2组list,一个去掉头节点,一个去掉尾节点
+            List<TlInspectionDeviceTrail> subPre = CollUtil.sub(origin, 0, origin.size() - 1);
+            List<TlInspectionDeviceTrail> subAfter = CollUtil.sub(origin, 1, origin.size());
+            for (int i = 0; i < subPre.size(); i++) {
+                String fencePre = subPre.get(i).getFence();
+                String fenceAfter = subAfter.get(i).getFence();
+                // 计算2点之间距离
+                GlobalCoordinates source = new GlobalCoordinates(Convert.toDouble(fencePre.split(",")[1]), Convert.toDouble(fencePre.split(",")[0]));
+                GlobalCoordinates target = new GlobalCoordinates(Convert.toDouble(fenceAfter.split(",")[1]), Convert.toDouble(fenceAfter.split(",")[0]));
+                // 创建GeodeticCalculator,调用计算方法
+                double ellipsoidalDistance = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
+                distance = NumberUtil.add(distance, ellipsoidalDistance);
+            }
+        }
+        return NumberUtil.div(distance, 1000, 3);
+    }
+    
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlInspectionLocationLogServiceImpl.java

@@ -95,4 +95,9 @@ public class TlInspectionLocationLogServiceImpl implements ITlInspectionLocation
     public Date queryMaxDate() {
         return tlInspectionLocationLogMapper.queryMaxDate();
     }
+
+    @Override
+    public List<TlInspectionLocationLog> queryByCondition(String date, String checkpointCard, String deviceId) {
+        return tlInspectionLocationLogMapper.queryByCondition(date, checkpointCard, deviceId);
+    }
 }

+ 59 - 25
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlMonitorServiceImpl.java

@@ -1,96 +1,130 @@
 package com.ruoyi.qdtl.service.impl;
 
-import java.util.List;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.qdtl.mapper.TlMonitorMapper;
+import com.ruoyi.qdtl.domain.CameraData;
+import com.ruoyi.qdtl.domain.MonitorStatic;
 import com.ruoyi.qdtl.domain.TlMonitor;
+import com.ruoyi.qdtl.mapper.TlMonitorMapper;
 import com.ruoyi.qdtl.service.ITlMonitorService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 监控设备管理Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2022-03-02
  */
 @Service
-public class TlMonitorServiceImpl implements ITlMonitorService 
-{
+public class TlMonitorServiceImpl implements ITlMonitorService {
     @Autowired
     private TlMonitorMapper tlMonitorMapper;
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 查询监控设备管理
-     * 
+     *
      * @param id 监控设备管理主键
      * @return 监控设备管理
      */
     @Override
-    public TlMonitor selectTlMonitorById(Long id)
-    {
+    public TlMonitor selectTlMonitorById(Long id) {
         return tlMonitorMapper.selectTlMonitorById(id);
     }
 
     /**
      * 查询监控设备管理列表
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 监控设备管理
      */
     @Override
-    public List<TlMonitor> selectTlMonitorList(TlMonitor tlMonitor)
-    {
+    public List<TlMonitor> selectTlMonitorList(TlMonitor tlMonitor) {
         return tlMonitorMapper.selectTlMonitorList(tlMonitor);
     }
 
     /**
      * 新增监控设备管理
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 结果
      */
     @Override
-    public int insertTlMonitor(TlMonitor tlMonitor)
-    {
+    public int insertTlMonitor(TlMonitor tlMonitor) {
         tlMonitor.setCreateTime(DateUtils.getNowDate());
         return tlMonitorMapper.insertTlMonitor(tlMonitor);
     }
 
     /**
      * 修改监控设备管理
-     * 
+     *
      * @param tlMonitor 监控设备管理
      * @return 结果
      */
     @Override
-    public int updateTlMonitor(TlMonitor tlMonitor)
-    {
+    public int updateTlMonitor(TlMonitor tlMonitor) {
         tlMonitor.setUpdateTime(DateUtils.getNowDate());
         return tlMonitorMapper.updateTlMonitor(tlMonitor);
     }
 
     /**
      * 批量删除监控设备管理
-     * 
+     *
      * @param ids 需要删除的监控设备管理主键
      * @return 结果
      */
     @Override
-    public int deleteTlMonitorByIds(Long[] ids)
-    {
+    public int deleteTlMonitorByIds(Long[] ids) {
         return tlMonitorMapper.deleteTlMonitorByIds(ids);
     }
 
     /**
      * 删除监控设备管理信息
-     * 
+     *
      * @param id 监控设备管理主键
      * @return 结果
      */
     @Override
-    public int deleteTlMonitorById(Long id)
-    {
+    public int deleteTlMonitorById(Long id) {
         return tlMonitorMapper.deleteTlMonitorById(id);
     }
+
+    @Override
+    public List<MonitorStatic> queryMonitorStatic() {
+        // 获取区域的数据
+        String regionsCache = redisCache.getCacheObject("tl:http:/api/resource/v1/regions");
+        List<MonitorStatic> list = new ArrayList<>();
+        if (StrUtil.isNotBlank(regionsCache)) {
+            JSONArray regionsArray = JSONUtil.parseObj(regionsCache).getJSONObject("data").getJSONArray("list");
+            for (Object o : regionsArray) {
+                MonitorStatic monitorStatic = new MonitorStatic();
+                JSONObject jsonObject = JSONUtil.parseObj(o);
+                if (StrUtil.contains(jsonObject.getStr("name"), "镇")) {
+                    monitorStatic.setIndexCode(jsonObject.getStr("indexCode"));
+                    monitorStatic.setName(jsonObject.getStr("name"));
+                    list.add(monitorStatic);
+                }
+            }
+            // 获取摄像头数据
+            String camerasCache = redisCache.getCacheObject("tl:http:/api/resource/v1/cameras");
+            List<CameraData> cameraData = JSONUtil.toList(JSONUtil.parseObj(camerasCache).getJSONObject("data").getJSONArray("list"), CameraData.class);
+            Map<String, Long> collect = cameraData.stream().collect(Collectors.groupingBy(CameraData::getUnitIndexCode, Collectors.counting()));
+            for (MonitorStatic monitorStatic : list) {
+                monitorStatic.setNum(collect.getOrDefault(monitorStatic.getIndexCode(), 0L));
+            }
+        }
+        return list;
+    }
+
 }

+ 15 - 0
ruoyi-system/src/main/resources/mapper/qdtl/TlInspectionLocationLogMapper.xml

@@ -64,6 +64,21 @@
         from tl_inspection_location_log
     </select>
 
+    <select id="queryByCondition" resultMap="TlInspectionLocationLogResult">
+        <include refid="selectTlInspectionLocationLogVo"/>
+        <where>
+            <if test="date != null and date != ''">
+                and date_format(create_time,'%Y-%m-%d') = #{date}
+            </if>
+            <if test="checkpointCard != null and checkpointCard != ''">
+                and checkpoint_card = #{checkpointCard}
+            </if>
+            <if test="deviceId != null and deviceId != ''">
+                and device_id = #{deviceId}
+            </if>
+        </where>
+    </select>
+
     <insert id="insertTlInspectionLocationLog" parameterType="TlInspectionLocationLog" useGeneratedKeys="true" keyProperty="id">
         insert into tl_inspection_location_log
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 42 - 2
sql/ry_20210908.sql

@@ -945,14 +945,54 @@ create table gen_table_column
 
 alter table tl_inspection_device
     add third_id varchar(20) null comment '第三方id';
--- 已同步
+
 alter table tl_inspection_location
-    add version int null comment '同步版本号';
+    add version int default 0 comment '同步版本号';
 
 alter table tl_inspection_location
     add third_id varchar(20) null comment '第三方id';
 
+alter table tl_inspection_device
+    add version int default 0 comment '同步版本号';
 
+drop table if exists tl_inspection_location_log;
+create table tl_inspection_location_log
+(
+    id              bigint(20) not null auto_increment comment 'id',
+    checkpoint_id   varchar(20) comment '巡检点id',
+    checkpoint_name varchar(50) comment '巡检点名称',
+    checkpoint_card varchar(40) comment '巡检点卡号',
+    patrolman_id    varchar(100) comment '巡检员ID',
+    patrolman_name  varchar(100) comment '巡检员名称',
+    patrolman_card  varchar(100) comment '巡检员卡号',
+    create_time     datetime comment '生成时间',
+    device_id       varchar(20) comment '巡检器id',
+    device_name     varchar(50) comment '巡检器名称',
+    device_code     varchar(40) comment '巡检器卡号',
+    area_id         varchar(20) comment '组织ID(与巡检点所在的组织一致)',
+    area_name       varchar(50) comment '组织名称',
+    primary key (id),
+    index           `idx_checkpoint_id` (`checkpoint_id`),
+    index           `idx_device_id` (`device_id`)
+) engine = innodb
+  auto_increment = 100000 comment = '巡检记录管理';
+
+create table tl_inspection_device_trail
+(
+    id              bigint(20) not null auto_increment comment 'id',
+    device_id       varchar(20) comment '巡检器id',
+    device_name     varchar(50) comment '巡检器名称',
+    device_code     varchar(40) comment '巡检器卡号',
+    checkpoint_id   varchar(20) comment '巡检点id',
+    checkpoint_name varchar(50) comment '巡检点名称',
+    checkpoint_card varchar(40) comment '巡检点卡号',
+    fence           varchar(100) comment '经纬度',
+    create_time     datetime comment '轨迹时间',
+    primary key (id),
+    index           `idx_device_id` (`device_id`)
+) engine = innodb
+  auto_increment = 100000 comment = '设备轨迹';
 
+-- 已同步