浏览代码

统计定时任务,bug更新

minghao-chen 2 年之前
父节点
当前提交
33a640879e

+ 4 - 1
beidou-admin/src/main/java/cn/com/taiji/beidou/web/controller/ship/FocusShipController.java

@@ -48,7 +48,10 @@ public class FocusShipController extends BaseController {
     @GetMapping("/delFocusShip")
     public R delFocusShip(Long focusId){
         try{
-            focusShipService.deleteFocusShip(focusId);
+            int i = focusShipService.deleteFocusShip(focusId);
+            if(i<1){
+                R.fail("取消关注失败");
+            }
             return R.ok();
         }catch (Exception e){
             return R.fail(e.getMessage());

+ 5 - 8
beidou-admin/src/main/java/cn/com/taiji/beidou/web/controller/ship/ShipWarningRecordController.java

@@ -9,10 +9,7 @@ import cn.com.taiji.beidou.common.utils.StringUtils;
 import cn.com.taiji.beidou.common.utils.file.FileUtils;
 import cn.com.taiji.beidou.common.utils.poi.ExcelUtil;
 import cn.com.taiji.beidou.ship.archives.domain.ShipDisposeData;
-import cn.com.taiji.beidou.ship.warning.record.domain.WarningRecordExcel;
-import cn.com.taiji.beidou.ship.warning.record.domain.WarningRecordExcelReq;
-import cn.com.taiji.beidou.ship.warning.record.domain.WarningRecordIdReq;
-import cn.com.taiji.beidou.ship.warning.record.domain.WarningRecordReq;
+import cn.com.taiji.beidou.ship.warning.record.domain.*;
 import cn.com.taiji.beidou.ship.warning.record.mapper.WarningRecordMapper;
 import cn.com.taiji.beidou.ship.warning.record.service.WarningRecordService;
 import io.swagger.annotations.Api;
@@ -38,9 +35,9 @@ public class ShipWarningRecordController extends BaseController {
     private WarningRecordService warningRecordService;
 
     @ApiOperation(value = "按预警类型统计",notes = "简化为预警规则")
-    @GetMapping("/statisticsByRule")
-    public R statisticsByRule(){
-        return R.ok(warningRecordService.statisticsByRule());
+    @PostMapping("/statisticsByRule")
+    public R statisticsByRule(@RequestBody WarningRecordTotalReq req){
+        return R.ok(warningRecordService.statisticsByRule(req.getDeptId(),req.getStartTime(),req.getEndTime()));
     }
 
     @ApiOperation(value = "预警记录列表",notes = "预警记录列表,默认为最近一天的预警记录")
@@ -54,7 +51,7 @@ public class ShipWarningRecordController extends BaseController {
     @PostMapping("/getWarningByDeviceId")
     public TableDataInfo getWarningByDeviceId(@RequestBody WarningRecordIdReq req){
         startPage(req.getPageNum(),req.getPageSize());
-        return getDataTable(warningRecordService.getWarningRecordByDeviceId(req.getDevideNo(),req.getRuleId()));
+        return getDataTable(warningRecordService.getWarningRecordByDeviceId(req.getDevideNo(),req.getRuleId(),req.getStartTime(),req.getEndTime()));
     }
 
     @ApiOperation(value = "导出预警记录",notes = "参照北斗系统的导出,默认导出最新一天的预警记录")

+ 12 - 13
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/archives/service/impl/ShipArchivesServiceImpl.java

@@ -8,6 +8,7 @@ import cn.com.taiji.beidou.ship.archives.domain.*;
 import cn.com.taiji.beidou.ship.archives.mapper.ShipArchivesMapper;
 import cn.com.taiji.beidou.ship.archives.service.ShipArchivesService;
 import cn.com.taiji.beidou.ship.warning.record.mapper.WarningRecordMapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.token.TokenService;
 import org.springframework.stereotype.Service;
@@ -67,20 +68,18 @@ public class ShipArchivesServiceImpl implements ShipArchivesService {
     public ShipArchivesTotal getShipTotal(String deptId){
 
         ShipArchivesTotal total = shipArchivesMapper.getShipTotal(deptId);
-
         int shipTotal = Integer.parseInt(total.getShipTotal());
-        int online = Integer.parseInt(total.getOnlineTotal());
-        int mark = Integer.parseInt(total.getMark());
-
-        //int offline = shipTotal - (online + mark);
-        //total.setOfflineTotal(String.valueOf(offline));
-
-        total.setOnlineTotalRate(MathUtils.getHalfUp((double)online/shipTotal*100,2));
-        total.setOfflineTotalRate(MathUtils.getHalfUp(Double.parseDouble(total.getOfflineTotal())/shipTotal*100,2));
-        total.setInPortRate(MathUtils.getHalfUp(Double.parseDouble(total.getInPort())/shipTotal*100,2));
-        total.setOffPortRate(MathUtils.getHalfUp(Double.parseDouble(total.getOffPort())/shipTotal*100,2));
-        total.setMarkRate(MathUtils.getHalfUp((double)mark/shipTotal*100,2));
-
+        Integer online = Integer.parseInt(total.getOnlineTotal());
+
+        if(shipTotal > 0){
+            double onlineRate = MathUtils.getHalfUp((double) online / shipTotal * 100, 2);
+            double offlineRate = MathUtils.getHalfUp(Double.parseDouble(total.getOfflineTotal()) / shipTotal * 100, 2);
+            total.setOnlineTotalRate(onlineRate);
+            total.setOfflineTotalRate(offlineRate);
+            total.setInPortRate(MathUtils.getHalfUp(Double.parseDouble(total.getInPort())/shipTotal*100,2));
+            total.setOffPortRate(MathUtils.getHalfUp(Double.parseDouble(total.getOffPort())/shipTotal*100,2));
+            total.setMarkRate(MathUtils.getHalfUp(100-onlineRate-offlineRate,2));
+        }
         return total;
     }
 

+ 2 - 2
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/focus/service/impl/FocusShipServiceImpl.java

@@ -28,8 +28,8 @@ public class FocusShipServiceImpl implements FocusShipService {
 
     @Override
     public int insertFocusShip(FocusShipData focusShipData) {
-        int count = focusShipMapper.selectByDevideNoUserId(focusShipData.getDevideNo(), focusShipData.getUserId());
-        if(count>0){
+
+        if(focusShipMapper.selectByDevideNoUserId(focusShipData.getDevideNo(), focusShipData.getUserId())>0){
             throw new GlobalException("该船舶你已关注!");
         }
         return focusShipMapper.insertFocusShip(focusShipData);

+ 34 - 0
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/task/ShipSchedulersTask.java

@@ -0,0 +1,34 @@
+package cn.com.taiji.beidou.ship.task;
+
+import cn.com.taiji.beidou.common.core.redis.RedisCache;
+import cn.com.taiji.beidou.ship.archives.domain.ShipArchivesTotal;
+import cn.com.taiji.beidou.ship.archives.service.ShipArchivesService;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 定时任务
+ * @Author CHEN
+ * @Date 2023/1/6 10:45
+ */
+@Component
+public class ShipSchedulersTask {
+
+    @Resource
+    private RedisCache redisCache;
+
+    @Resource
+    private ShipArchivesService shipArchivesService;
+
+    /**
+     * 每十秒更新一次
+     */
+    @Scheduled(cron = "1/10 * * * * ?")
+    public void setShipTotalToRedis(){
+        ShipArchivesTotal shipTotal = shipArchivesService.getShipTotal(null);
+        redisCache.setCacheObject("SHIP_TOTAL_4635",shipTotal);
+    }
+}

+ 4 - 0
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/warning/record/domain/WarningRecordIdReq.java

@@ -15,4 +15,8 @@ public class WarningRecordIdReq {
     private String ruleId;
     private Integer pageNum;
     private Integer pageSize;
+    @ApiModelProperty(value = "预警时间")
+    private String startTime;
+    @ApiModelProperty(value = "预警时间")
+    private String endTime;
 }

+ 17 - 0
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/warning/record/domain/WarningRecordTotalReq.java

@@ -0,0 +1,17 @@
+package cn.com.taiji.beidou.ship.warning.record.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author CHEN
+ * @Date 2023/1/13 17:09
+ */
+@Data
+public class WarningRecordTotalReq {
+    private String deptId;
+    @ApiModelProperty(value = "预警时间")
+    private String startTime;
+    @ApiModelProperty(value = "预警时间")
+    private String endTime;
+}

+ 9 - 2
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/warning/record/mapper/WarningRecordMapper.java

@@ -18,9 +18,14 @@ public interface WarningRecordMapper {
 
     /**
      * 根据预警记录类型 统计
+     * @param deptId
+     * @param startTime
+     * @param endTime
      * @return
      */
-    List<StatisticsByRuleResult> statisticsByRule();
+    List<StatisticsByRuleResult> statisticsByRule(@Param("deptId") String deptId,
+                                                  @Param("startTime") String startTime,
+                                                  @Param("endTime") String endTime);
 
     /**
      * 预警记录列表
@@ -38,7 +43,9 @@ public interface WarningRecordMapper {
                                                     @Param("endTime") String endTime);
 
     List<SimpleWarningRecordResult> getWarningRecordByDeviceId(@Param("devideNo") String devideNo,
-                                                               @Param("ruleId") String ruleId);
+                                                               @Param("ruleId") String ruleId,
+                                                               @Param("startTime") String startTime,
+                                                               @Param("endTime") String endTime);
 
     /**
      * 导出接口

+ 2 - 2
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/warning/record/service/WarningRecordService.java

@@ -13,7 +13,7 @@ import java.util.Map;
  */
 public interface WarningRecordService {
 
-    List<StatisticsByRuleResult> statisticsByRule();
+    List<StatisticsByRuleResult> statisticsByRule(String deptId,String startTime,String endTime);
 
     /**
      * 预警记录列表
@@ -27,7 +27,7 @@ public interface WarningRecordService {
      * @param devideNo
      * @return
      */
-    List<SimpleWarningRecordResult> getWarningRecordByDeviceId(String devideNo,String ruleId);
+    List<SimpleWarningRecordResult> getWarningRecordByDeviceId(String devideNo,String ruleId,String startTime,String endTime);
 
     /**
      * 导出接口

+ 4 - 4
beidou-ship/src/main/java/cn/com/taiji/beidou/ship/warning/record/service/impl/WarningRecordServiceImpl.java

@@ -31,8 +31,8 @@ public class WarningRecordServiceImpl implements WarningRecordService {
 
 
     @Override
-    public List<StatisticsByRuleResult> statisticsByRule() {
-        return warningRecordMapper.statisticsByRule();
+    public List<StatisticsByRuleResult> statisticsByRule(String deptId,String startTime,String endTime) {
+        return warningRecordMapper.statisticsByRule(deptId,startTime,endTime);
     }
 
     @Override
@@ -41,8 +41,8 @@ public class WarningRecordServiceImpl implements WarningRecordService {
     }
 
     @Override
-    public List<SimpleWarningRecordResult> getWarningRecordByDeviceId(String devideNo,String ruleId) {
-        return warningRecordMapper.getWarningRecordByDeviceId(devideNo,ruleId);
+    public List<SimpleWarningRecordResult> getWarningRecordByDeviceId(String devideNo,String ruleId,String startTime,String endTime) {
+        return warningRecordMapper.getWarningRecordByDeviceId(devideNo,ruleId,startTime,endTime);
     }
 
     @Override

+ 1 - 1
beidou-ship/src/main/resources/mapper/FocusShipMapper.xml

@@ -83,7 +83,7 @@
         <if test="userId != null and userId != ''">and focus.user_id=#{userId}</if>
         <if test="sortField != null and sortField != ''">ORDER BY ${sortField} </if>
         <if test="sortType != null and sortType != ''">${sortType}</if>
-        <if test="sortField == null and sortField == ''">ORDER BY  focus.create_time DESC</if>
+        <if test="sortField == null or sortField == ''">ORDER BY  focus.create_time DESC</if>
     </select>
 
     <select id="selectByDevideNoUserId" parameterType="string" resultType="integer">

+ 7 - 6
beidou-ship/src/main/resources/mapper/ShipArchivesMapper.xml

@@ -129,6 +129,7 @@
         <if test="shipType != null and shipType != ''">and archives.ship_type = #{shipType}</if>
         <if test="online != null and online != ''">and sta.is_online = #{online}</if>
         <if test="inPort != null and inPort != ''">and sta.is_inport = #{inPort}</if>
+        ORDER BY devide_no ASC
     </select>
 
 
@@ -149,12 +150,12 @@
 
     <select id="getShipTotal" parameterType="string" resultType="shipArchivesTotal">
         select COUNT(*) as shipTotal,
-            SUM(CASE sta.is_online WHEN 'MARK' THEN 1 ELSE 0 END ) as mark,
-            SUM(CASE sta.is_online WHEN 'ONLINE' THEN 1 ELSE 0 END ) as onlineTotal,
-            SUM(CASE sta.is_online WHEN 'OFFLINE' THEN 1 ELSE 0 END ) as offlineTotal,
-            SUM(CASE sta.is_inport WHEN 'TRUE' THEN 1 ELSE 0 END)  as inport,
-            SUM(CASE sta.is_inport WHEN 'FALSE' THEN 1 ELSE 0 END)  as offport
-            from ax_beidou_ship_archives archives
+            IFNULL(SUM(CASE sta.is_online WHEN 'MARK' THEN 1 ELSE 0 END ),0) as mark,
+            IFNULL(SUM(CASE sta.is_online WHEN 'ONLINE' THEN 1 ELSE 0 END ),0) as onlineTotal,
+            IFNULL(SUM(CASE sta.is_online WHEN 'OFFLINE' THEN 1 ELSE 0 END ),0) as offlineTotal,
+            IFNULL(SUM(CASE sta.is_inport WHEN 'TRUE' THEN 1 ELSE 0 END),0) as inport,
+            IFNULL(SUM(CASE sta.is_inport WHEN 'FALSE' THEN 1 ELSE 0 END),0) as offport
+        from ax_beidou_ship_archives archives
             INNER JOIN ax_beidou_dept dept ON archives.police_station_id = dept.pscbh
             LEFT JOIN ax_beidou_ship_status sta ON archives.devide_no = sta.device_id
             where 1=1

+ 4 - 3
beidou-ship/src/main/resources/mapper/ShipStatusMapper.xml

@@ -119,7 +119,7 @@
         </if>
         <if test="sortField != null and sortField != ''">ORDER BY ${sortField} </if>
         <if test="sortType != null and sortType != ''">${sortType}</if>
-        <if test="sortField == null and sortField == ''">ORDER BY  st.online_change_time DESC</if>
+        <if test="sortField == null or sortField == ''">ORDER BY  st.online_change_time DESC</if>
     </select>
 
     <select id="stasisShipTotal" parameterType="string" resultType="stasisShipStatistics">
@@ -145,7 +145,7 @@
         SUM(CASE  WHEN st.online_change_time BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE_SUB(NOW(),INTERVAL 8 DAY) THEN 1 ELSE 0 END) as middleDay,
         SUM(CASE  WHEN st.online_change_time &lt; DATE_SUB(NOW(),INTERVAL 30 DAY) THEN 1 ELSE 0 END) as largeDay
         from ax_beidou_ship_status st
-        inner join ax_beidou_ship_archives archives on st.device_id = archives.devide_no
+        RIGHT join ax_beidou_ship_archives archives on st.device_id = archives.devide_no
         <if test="deptId != null and deptId != ''">
         inner join ax_beidou_dept dept on archives.police_station_id = dept.pscbh
         </if>
@@ -155,7 +155,8 @@
     </select>
 
     <update id="updateMark" parameterType="string">
-        update ax_beidou_ship_status set is_online = #{mark} where device_id = #{devideNo}
+        update ax_beidou_ship_status set is_online = #{mark}, online_change_time = NOW()
+        where device_id = #{devideNo}
     </update>
 
 </mapper>

+ 25 - 7
beidou-ship/src/main/resources/mapper/WarningRecordMapper.xml

@@ -10,12 +10,24 @@
         <result property="count" column="count_num"/>
     </resultMap>
 
-    <select id="statisticsByRule" resultMap="byRule">
-        select rule.id as rule_id,rule.`name` as rule_name,count(record.id) as count_num
+    <select id="statisticsByRule" parameterType="string" resultMap="byRule">
+        SELECT t.id as rule_id,t.`name` as rule_name,IFNULL(temp.count_num,'0') as count_num
+        from ax_beidou_warning_rule t
+        LEFT JOIN
+        (select rule.id as rule_id,rule.`name` as rule_name,count(record.id) as count_num
         from ax_beidou_warning_rule rule
         LEFT JOIN ax_beidou_warning_record record on record.rule_id = rule.id
-        where rule.del_flag = '0'
-        GROUP BY rule.id,rule_name ORDER BY rule.id
+        LEFT JOIN ax_beidou_ship_archives archives ON archives.devide_no = record.device_id
+        LEFT JOIN ax_beidou_dept dept ON archives.police_station_id = dept.pscbh
+        where rule.del_flag = '0' and (record.`start` is null or record.`start` != 'false')
+        <if test="deptId != null and deptId != ''">
+            and dept.xw_dept_id like concat('%',#{deptId},'%')
+        </if>
+        <if test="startTime != null and startTime != ''">and record.warning_time &gt; #{startTime}</if>
+        <if test="endTime != null and endTime != ''">and record.warning_time &lt; #{endTime}</if>
+        GROUP BY rule.id,rule_name) as temp ON t.id = temp.rule_id
+        where t.del_flag = '0'
+        ORDER BY t.id
     </select>
 
     <select id="warningRecordList" parameterType="string" resultType="warningRecordListResult">
@@ -25,12 +37,12 @@
         record.warning_time AS warningTime, dis.id AS disposeId ,temp.num as num,
         location.location
         FROM ax_beidou_warning_record record
-        INNER JOIN (select rec.device_id,MAX(rec.id) as id,count(rec.device_id) AS num
+        INNER JOIN (select rec.device_id,MAX(UNIX_TIMESTAMP(rec.warning_time)) as `time`,count(rec.device_id) AS num
                     from ax_beidou_warning_record rec
                     where rec.rule_id = #{ruleId}
                     <if test="startTime != null and startTime != ''">and rec.warning_time &gt; #{startTime}</if>
                     <if test="endTime != null and endTime != ''">and rec.warning_time &lt; #{endTime}</if>
-                     GROUP BY rec.device_id) as temp on record.id = temp.id
+                     GROUP BY rec.device_id) as temp on UNIX_TIMESTAMP(record.warning_time) = temp.time and record.device_id = temp.device_id
         INNER JOIN ax_beidou_ship_archives archives ON archives.devide_no = record.device_id
         LEFT JOIN ax_beidou_ship_dispose dis ON record.id = dis.warning_id
         LEFT JOIN ax_beidou_warning_area area ON area.id = record.area_id
@@ -57,16 +69,22 @@
        select record.id,warning_time as warningTime,dis.id as disposeId
         from ax_beidou_warning_record record
         LEFT JOIN ax_beidou_ship_dispose dis ON dis.warning_id = record.id
-        where record.device_id = #{devideNo} and record.rule_id = #{ruleId} and (record.`start` is null or record.`start` != 'false') ORDER BY warning_time DESC
+        where record.device_id = #{devideNo} and record.rule_id = #{ruleId}
+            and (record.`start` is null or record.`start` != 'false')
+        <if test="startTime != null and startTime != ''">and record.warning_time &gt; #{startTime}</if>
+        <if test="endTime != null and endTime != ''">and record.warning_time &lt; #{endTime}</if>
+        ORDER BY warning_time DESC
     </select>
 
     <select id="warningRecordExcel" parameterType="string" resultType="warningRecordExcel">
         select archives.devide_no as devideNo,archives.ship_id as shipId,archives.owner_name as ownerName,archives.owner_tel_no as ownerTelNo,
+        area.name as warningDetail,
         record.warning_time as warningTime,location.longitude,location.latitude,dept.xw_dept_name as deptName
         from ax_beidou_warning_record record
         INNER JOIN ax_beidou_ship_archives archives ON archives.devide_no = record.device_id
         INNER JOIN ax_beidou_dept dept ON archives.police_station_id = dept.pscbh
         LEFT JOIN ax_beidou_ship_location location ON location.device_id = record.device_id
+        LEFT JOIN ax_beidou_warning_area area ON area.id = record.area_id
         <where>
             record.rule_id = #{ruleId} and (record.`start` is null or record.`start` != 'false')
             <if test="deptId != null and deptId != ''">