Преглед изворни кода

【情报二期】数据域服务 - kafka数据消费业务代码调整

peifj пре 3 месеци
родитељ
комит
d41ddac825

+ 15 - 7
src/main/java/com/hhwy/qbeqsjy/APP.java

@@ -2,6 +2,7 @@ package com.hhwy.qbeqsjy;
 
 import com.alibaba.fastjson.JSONArray;
 import com.hhwy.qbeqsjy.common.CommonUtil;
+import com.hhwy.qbeqsjy.common.SnowflakeIdGenerator;
 import org.locationtech.jts.geom.Coordinate;
 
 import java.util.ArrayList;
@@ -28,13 +29,20 @@ public class APP {
         // 0,1   1,2   2,3   3,6
 
         // 定义多边形的经纬度坐标
-        List<Coordinate> coordinates = new ArrayList<>();
-        coordinates.add(new Coordinate(116.397128, 39.916527));
-        coordinates.add(new Coordinate(116.397928, 39.916527));
-        coordinates.add(new Coordinate(116.397928, 39.917327));
-        coordinates.add(new Coordinate(116.397128, 39.917327));
-        boolean inArea = CommonUtil.isInArea(coordinates, new Coordinate(117.3975, 39.917));
-        System.out.println(inArea);
+//        List<Coordinate> coordinates = new ArrayList<>();
+//        coordinates.add(new Coordinate(116.397128, 39.916527));
+//        coordinates.add(new Coordinate(116.397928, 39.916527));
+//        coordinates.add(new Coordinate(116.397928, 39.917327));
+//        coordinates.add(new Coordinate(116.397128, 39.917327));
+//        boolean inArea = CommonUtil.isInArea(coordinates, new Coordinate(117.3975, 39.917));
+//        System.out.println(inArea);
+        SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+        String warningMsgId = String.valueOf(generator.nextId());
+        String warningMsgId2 = String.valueOf(generator.nextId());
+        String warningMsgId3 = String.valueOf(generator.nextId());
+        System.out.println(warningMsgId);
+        System.out.println(warningMsgId2);
+        System.out.println(warningMsgId3);
 
     }
 }

+ 0 - 22
src/main/java/com/hhwy/qbeqsjy/common/CommonUtil.java

@@ -20,7 +20,6 @@ import java.util.*;
 public class CommonUtil {
 
   private static ResourceBundle bundle;
-  private static GeometryFactory geometryFactory = new GeometryFactory();
 
   static {
     bundle = ResourceBundle.getBundle("application");
@@ -228,25 +227,4 @@ public class CommonUtil {
     }
   }
 
-
-  /**
-   * 判断某个点的经纬度坐标是否在某个多边形区域内
-   * @param coordinates   多边形区域的顶点经纬度坐标集合
-   * @param coordinate    待判断的点经纬度坐标
-   * @return
-   */
-  public static boolean isInArea(List<Coordinate> coordinates, Coordinate coordinate){
-    if(coordinates != null && coordinates.size() >= 3){
-      // 连接第一个点,封闭多边形
-      coordinates.add(coordinates.get(0));
-      Coordinate[] coordinateArray = coordinates.toArray(new Coordinate[0]);
-      Polygon polygon = geometryFactory.createPolygon(coordinateArray);
-      // 待判断的点
-      Point point = geometryFactory.createPoint(coordinate);
-      // 判断点是否在多边形内
-      return polygon.contains(point);
-    }
-    return false;
-  }
-
 }

+ 91 - 0
src/main/java/com/hhwy/qbeqsjy/common/GeoUtils.java

@@ -0,0 +1,91 @@
+package com.hhwy.qbeqsjy.common;
+
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class GeoUtils {
+
+    // 地球半径,单位:米
+    private static final double EARTH_RADIUS = 6371000;
+    private static final GeometryFactory GEOMETRY_FACTORY = new GeometryFactory();
+
+
+    /**
+     * 将经纬度转换为平面坐标
+     * @param lat 纬度
+     * @param lon 经度
+     * @return 平面坐标
+     */
+    public static Coordinate latLonToXY(double lat, double lon) {
+        double x = EARTH_RADIUS * Math.toRadians(lon);
+        double y = EARTH_RADIUS * Math.log(Math.tan(Math.PI / 4 + Math.toRadians(lat) / 2));
+        return new Coordinate(x, y);
+    }
+
+
+    /**
+     * 创建圆形区域
+     * @param centerLat 圆心纬度
+     * @param centerLon 圆心经度
+     * @param radius 半径,单位:米
+     * @return 圆形区域的多边形对象
+     */
+    public static Polygon createCircle(double centerLat, double centerLon, double radius) {
+        Coordinate center = latLonToXY(centerLat, centerLon);
+        // 圆形的分段数
+        int numPoints = 32;
+        List<Coordinate> coordinates = new ArrayList<>();
+        for (int i = 0; i < numPoints; i++) {
+            double angle = 2 * Math.PI * i / numPoints;
+            double x = center.x + radius * Math.cos(angle);
+            double y = center.y + radius * Math.sin(angle);
+            coordinates.add(new Coordinate(x, y));
+        }
+        coordinates.add(coordinates.get(0)); // 闭合多边形
+        Coordinate[] coordinateArray = coordinates.toArray(new Coordinate[0]);
+        return GEOMETRY_FACTORY.createPolygon(coordinateArray);
+    }
+
+    /**
+     * 判断经纬度点是否在圆形区域内
+     * @param lat 待判断点的纬度
+     * @param lon 待判断点的经度
+     * @param centerLat 圆心纬度
+     * @param centerLon 圆心经度
+     * @param radius 半径,单位:米
+     * @return 是否在圆形区域内
+     */
+    public static boolean isPointInCircle(double lat, double lon, double centerLat, double centerLon, double radius) {
+        Polygon circle = createCircle(centerLat, centerLon, radius);
+        Coordinate pointCoord = latLonToXY(lat, lon);
+        Point point = GEOMETRY_FACTORY.createPoint(pointCoord);
+        return circle.contains(point);
+    }
+
+
+    /**
+     * 判断某个点的经纬度坐标是否在某个多边形区域内
+     * @param coordinates   多边形区域的顶点经纬度坐标集合
+     * @param coordinate    待判断的点经纬度坐标
+     * @return
+     */
+    public static boolean isPointInPolygon(List<Coordinate> coordinates, Coordinate coordinate){
+        if(coordinates != null && coordinates.size() >= 3){
+            // 连接第一个点,封闭多边形
+            coordinates.add(coordinates.get(0));
+            Coordinate[] coordinateArray = coordinates.toArray(new Coordinate[0]);
+            Polygon polygon = GEOMETRY_FACTORY.createPolygon(coordinateArray);
+            // 待判断的点
+            Point point = GEOMETRY_FACTORY.createPoint(coordinate);
+            // 判断点是否在多边形内
+            return polygon.contains(point);
+        }
+        return false;
+    }
+
+}

+ 54 - 0
src/main/java/com/hhwy/qbeqsjy/common/SnowflakeIdGenerator.java

@@ -0,0 +1,54 @@
+package com.hhwy.qbeqsjy.common;
+
+/**
+ * 雪花ID生成器
+ */
+public class SnowflakeIdGenerator {
+
+    private final long epoch = 1288834974657L; // 自定义的起始时间戳
+    private final long machineIdBits = 5L; // 机器ID位数
+    private final long sequenceBits = 12L; // 序列号位数
+
+    private final long maxMachineId = -1L ^ (-1L << machineIdBits); // 最大机器ID
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits); // 最大序列号
+
+    private long machineId; // 机器ID
+    private long sequence = 0L; // 当前序列号
+    private long lastTimestamp = -1L; // 上次时间戳
+
+    public SnowflakeIdGenerator(long machineId) {
+        if (machineId > maxMachineId || machineId < 0) {
+            throw new IllegalArgumentException("Machine ID must be between 0 and " + maxMachineId);
+        }
+        this.machineId = machineId;
+    }
+
+    public synchronized long nextId() {
+        long timestamp = System.currentTimeMillis();
+        if (timestamp < lastTimestamp) {
+            throw new RuntimeException("Clock moved backwards. Refusing to generate id");
+        }
+        if (timestamp == lastTimestamp) {
+            sequence = (sequence + 1) & sequenceMask;
+            if (sequence == 0) {
+                timestamp = waitForNextMillis(lastTimestamp);
+            }
+        } else {
+            sequence = 0;
+        }
+        lastTimestamp = timestamp;
+        return ((timestamp - epoch) << (machineIdBits + sequenceBits))
+                | (machineId << sequenceBits)
+                | sequence;
+    }
+
+    private long waitForNextMillis(long lastTimestamp) {
+        long timestamp = System.currentTimeMillis();
+        while (timestamp <= lastTimestamp) {
+            timestamp = System.currentTimeMillis();
+        }
+        return timestamp;
+    }
+
+
+}

+ 29 - 7
src/main/java/com/hhwy/qbeqsjy/controller/CtrlController.java

@@ -32,16 +32,26 @@ public class CtrlController {
      * 请求参数:
      * {
      *     "taskId":"59275350793392128",
+     *     "taskName":"",
      *     "endCtrlTime":"2025-03-20 00:00:00",
      *     "resourceIdList":["aaaa","bbbb","cccc"],
      *     "areaIdList":["dddd","eeee"],
      *     "clueList":[
      *         {
-     *             "clue":"xxxxxxxxxxx",
-     *             "clueType":"D201005"
+     *             "clue":"",90
+     *             "clueType":"D201005",
      *         },
      *         ......
-     *     ]
+     *     ],
+     *     --- 因为用户域需保存一份来自数据域的预警结果数据,此处参数用作数据回填,避免在用户域出现预警结果值大量关联查询原始线索信息的情况
+     *     "yhyTaskInfo":{   --- 用户域布控任务信息
+     *        "yjry_xm":"",
+     *        "yjry_sfzh":"",
+     *        "yjry_sjh":"",
+     *        "rwmc":"",
+     *        "":"",
+     *     }
+     *
      * }
      */
     @PostMapping("/ctrl")
@@ -96,7 +106,7 @@ public class CtrlController {
 
 
     /**
-     * 保存用户域提交的布控任务对应区域信息
+     * 保存用户域提交的布控任务对应区域信息
      * @param reqBody
      * @return
      *
@@ -107,9 +117,10 @@ public class CtrlController {
      *         {
      *             "areaId":"xxx",
      *             "areaName":"xxx",
+     *             "areaGeoType":1,   --- 0:圆形,1:一般多边形
      *             "location":[
-     * 			                    {
-     * 				    "lon":"xxx",
+     * 			    {
+     * 				    "lon":"xxx",   --- 顶点坐标
      * 					"lat":"xxx"
      * 				},
      * 				{
@@ -118,6 +129,17 @@ public class CtrlController {
      * 				}
      * 				......
      * 			  ]
+     * 			  或者
+     * 			   "areaId":"xxx",
+     *             "areaName":"xxx",
+     * 			   "areaGeoType":0,
+     * 			   "location":[
+     * 			    {
+     * 			         "lon":"xxx",   --- 圆心点坐标
+     * 			         "lat":"xxx",
+     * 			         "radius":"100"   --- 半径,单位:米
+     * 			    }
+     * 			  ]
      *         }
      *     ]
      * }
@@ -146,7 +168,7 @@ public class CtrlController {
     @PostMapping("/getWarningInfo")
     public AjaxResult getWarningInfo(@RequestBody QueryDTO queryDTO){
         try{
-            return AjaxResult.success(ctrlService.getWarningInfoList(queryDTO));
+            return AjaxResult.success(ctrlService.getWarningInfo(queryDTO));
         } catch (Exception e){
             log.error("查询布控任务预警结果数据发生异常", e);
         }

+ 56 - 19
src/main/java/com/hhwy/qbeqsjy/dao/CtrlDao.java

@@ -56,13 +56,31 @@ public class CtrlDao {
     }
 
 
+    /**
+     * 插入布控任务信息
+     * 同步用户域布控任务原始信息,为后期预警结果数据作关联使用(烽火布控服务返回的预警结果数据不包含任务信息),关联后的结果经数据域代理接口同步至用户域业务库,供用户域界面查询
+     * @param taskInfo
+     * @return
+     */
+    public boolean insertTaskInfo(Object[] taskInfo){
+        String sql = "insert into t_ctrl_task_info (task_id, warning_msg_id, clue_person_name, clue_person_idCard, clue_person_phone, clue_person_type, clue_person_label, ctrl_level, task_obj_name, receive_unit_code, receive_unit_name, receive_dept_code, receive_dept_name, apply_user_name, apply_user_idCrad, apply_user_policeNo, apply_user_unit_code, apply_user_unit_name, business_source) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+        try {
+            int insertRows = gaussDBJdbcTemplate.update(sql, taskInfo);
+            return insertRows > 0;
+        } catch (Exception e){
+            log.error("【插入布控任务信息发生异常】 异常信息:", e);
+        }
+        return false;
+    }
+
+
     /**
      * 批量插入布控任务对应区域信息
      * @param ctrlAreaInfoList
      * @return
      */
     public boolean batchInsertCtrlAreaInfo(List<Object[]> ctrlAreaInfoList){
-        String sql = "insert into t_ctrl_area_info (task_id, area_id, area_name, location, create_time) values (?, ?, ?, ?, ?)";
+        String sql = "insert into t_ctrl_area_info (task_id, area_id, area_name, area_geo_type, location, create_time) values (?, ?, ?, ?, ?, ?)";
         try {
             int[] insertRows = gaussDBJdbcTemplate.batchUpdate(sql, ctrlAreaInfoList);
             return insertRows.length == ctrlAreaInfoList.size();
@@ -73,6 +91,23 @@ public class CtrlDao {
     }
 
 
+    /**
+     * 根据 任务编号 查询布控任务对应的区域信息
+     * @param taskId
+     * @return
+     */
+    public List<Map<String, Object>> queryCtrlAreaInfo(String taskId){
+        List<Map<String, Object>> ctrlAreaInfoList = new ArrayList<>();
+        String sql = "select area_geo_type, location from t_ctrl_area_info where taskId = ?";
+        try {
+            ctrlAreaInfoList = gaussDBJdbcTemplate.queryForList(sql, taskId);
+        } catch (Exception e){
+            log.error("【查询布控任务对应区域信息发生异常】 异常信息:", e);
+        }
+        return ctrlAreaInfoList;
+    }
+
+
     /**
      * 批量插入布控任务预警结果数据
      * @param warningInfoList
@@ -95,37 +130,38 @@ public class CtrlDao {
      * @param queryDTO
      * @return
      */
-    public List<Map<String, Object>> queryWarningInfoList(QueryDTO queryDTO){
+    public List<Map<String, Object>> queryWarningInfo(QueryDTO queryDTO){
         String taskId = queryDTO.getTaskId();
         String startTime = queryDTO.getStartTime();
         String endTime = queryDTO.getEndTime();
         Integer pageNum = queryDTO.getPageNum() == null ? Constants.NUM_1 : queryDTO.getPageNum();
         Integer pageSize = queryDTO.getPageSize() == null ? queryMaxCount : queryDTO.getPageSize();
         List<Map<String, Object>> warningInfoList = new ArrayList<>();
-        StringBuilder sb = new StringBuilder("select task_id, clue, clue_type, warning_msg, capture_time from t_ctrl_warning_info where 1 = 1");
+        StringBuilder sql = new StringBuilder("select task_id, clue, clue_type, warning_msg, capture_time from t_ctrl_warning_info where 1 = 1");
         // 1.根据任务ID过滤
         if(StringUtils.isNotBlank(taskId)){
-            sb.append(" and task_id = '");
-            sb.append(taskId);
-            sb.append("'");
+            sql.append(" and task_id = '");
+            sql.append(taskId);
+            sql.append("'");
         }
         // 2.根据查询时间段过滤
         if(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)){
-            sb.append(" and capture_time >= '");
-            sb.append(startTime);
-            sb.append("'");
-            sb.append(" and capture_time <= '");
-            sb.append(endTime);
-            sb.append("'");
+            sql.append(" and capture_time >= '");
+            sql.append(startTime);
+            sql.append("'");
+            sql.append(" and capture_time <= '");
+            sql.append(endTime);
+            sql.append("'");
         }
-        // 3.根据截获时间降序排列
-        sb.append(" order by capture_time desc");
-        sb.append(" limit ");
-        sb.append(pageSize);
-        sb.append(" offset ");
-        sb.append(pageNum);
+        // 3.根据 截获时间 降序排列
+        sql.append(" order by capture_time desc");
+        sql.append(" limit ");
+        sql.append(pageSize);
+        sql.append(" offset ");
+        sql.append((pageNum - Constants.NUM_1) * pageSize);
         try {
-            warningInfoList = gaussDBJdbcTemplate.queryForList(sb.toString());
+            warningInfoList = gaussDBJdbcTemplate.queryForList(sql.toString());
+            log.info("【查询布控任务预警结果数据成功】 数据量:{}", warningInfoList.size());
         } catch (Exception e){
             log.error("【查询布控任务预警结果数据发生异常】 异常信息:", e);
         }
@@ -166,6 +202,7 @@ public class CtrlDao {
 
 
 
+
 
 
 }

+ 64 - 11
src/main/java/com/hhwy/qbeqsjy/kafka/service/ConsumeService.java

@@ -1,13 +1,19 @@
 package com.hhwy.qbeqsjy.kafka.service;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.hhwy.qbeqsjy.common.Constants;
+import com.hhwy.qbeqsjy.common.GeoUtils;
+import com.hhwy.qbeqsjy.common.SnowflakeIdGenerator;
 import com.hhwy.qbeqsjy.common.TimeTool;
 import com.hhwy.qbeqsjy.dao.CtrlDao;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.clients.consumer.ConsumerRecords;
 import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.locationtech.jts.geom.Coordinate;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
@@ -18,6 +24,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 布控命中数据处理
@@ -29,10 +36,14 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
 
     @Value("${topic.name}")
     private String topic;
+    @Value("${clue.code.phone}")
+    private String clueCodePhone;
+    @Value("${clue.code.idCard}")
+    private String clueCodeIdCard;
     @Resource
     private CtrlDao ctrlDao;
-    //默认发送1000条消息
-    public static final int messageNumToSend = 1000;
+    private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+
 
     // IOC容器刷新完成后就会发布ContextRefreshedEvent事件
     @Override
@@ -78,7 +89,7 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
         while (true) {
             // 间隔30秒拉取一次数据
             ConsumerRecords<Integer, String> records = consumer.poll(Constants.WAIT_TIME);
-            // 数据解析、入库
+            // 数据解析、处理、入库
             if (records != null && records.count() > 0) {
                 for (ConsumerRecord<Integer, String> record : records) {
                     JSONObject message = JSONObject.parseObject(record.value());
@@ -89,22 +100,64 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                     String warningInfoJSONStr = oriField.toJSONString();
                     // 解析[UNICTRL]节点,该节点数据为统一格式,与布控资源表无关
                     JSONObject uniCtrl = message.getJSONObject("UNICTRL");
-                    // 样例:clueId = 120000_59275350793392128_D201005_13502082832
-                    String clueId = uniCtrl.getString("U_CLUEID");
+                    String clueId = uniCtrl.getString("U_CLUEID");     // 样例:clueId:120000_59275350793392128_D201005_13502082832
                     String[] clueIdStrArr = clueId.split("_");
                     String taskId = clueIdStrArr[Constants.NUM_1];
                     String clueType = clueIdStrArr[Constants.NUM_2];
                     String clue = clueIdStrArr[Constants.NUM_3];
+                    String resourceId = uniCtrl.getString("U_RESID");
+                    // 如果线索类型是手机号
+                    if(clueCodePhone.equals(clueType) && "134B102".equals(resourceId)){
+                        String baseStationId = oriField.getString("BASE_STATION_ID");
+                        // 1. ========================= 过滤基站号为空的数据 =========================
+                        if(StringUtils.isBlank(baseStationId)){
+                            continue;
+                        }
+                        List<Map<String, Object>> ctrlAreaInfoList = ctrlDao.queryCtrlAreaInfo(taskId);
+                        if(ctrlAreaInfoList.size() > 0){
+                            String lon = oriField.getString("LONGITUDE");
+                            String lat = oriField.getString("LATITUDE");
+                            // 2. ========================= 过滤不在布控区域范围的数据 =========================
+                            // 不采用原始预警数据中的"截获时间",而使用当前时间作为"截获时间"
+                            String captureTime = TimeTool.timeStampToDateString(TimeTool.getNowTimeStamp());
+                            for (Map<String, Object> ctrlAreaInfo : ctrlAreaInfoList) {
+                                Integer areaGeoType = (Integer) ctrlAreaInfo.get("area_geo_type");
+                                JSONArray location = JSON.parseArray((String) ctrlAreaInfo.get("location"));
+                                // ****** 说明:如果出现布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存一份数据
+                                // 布控区域是圆形
+                                if(Constants.NUM_0 == areaGeoType){
+                                    JSONObject loc = location.getJSONObject(0);
+                                    String centerLon = loc.getString("lon");
+                                    String centerLat = loc.getString("lat");
+                                    String radius = loc.getString("radius");
+                                    if(GeoUtils.isPointInCircle(Double.valueOf(lat), Double.valueOf(lon), Double.valueOf(centerLat), Double.valueOf(centerLon), Double.valueOf(radius))){
+                                        warningInfoList.add(new Object[]{taskId, clue, clueType, warningInfoJSONStr, captureTime});
+                                        break;
+                                    }
+                                } else {   // 布控区域是一般多边形
+                                    List<Coordinate> coordinates = new ArrayList<>();
+                                    for (Object obj : location) {
+                                        JSONObject loc = (JSONObject) obj;
+                                        String vertexLon = loc.getString("lon");
+                                        String vertexLat = loc.getString("lat");
+                                        coordinates.add(new Coordinate(Double.valueOf(vertexLon), Double.valueOf(vertexLat)));
+                                    }
+                                    if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lon), Double.valueOf(lat)))){
+                                        warningInfoList.add(new Object[]{taskId, clue, clueType, warningInfoJSONStr, captureTime});
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
                     // 原始预警数据中的"截获时间"
 //                    String captureTime = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
-                    // 不采用原始预警数据中的"截获时间",而使用当前时间作为"截获时间"
-                    String captureTime = TimeTool.timeStampToDateString(TimeTool.getNowTimeStamp());
-                    Object[] warningInfo = new Object[]{taskId, clue, clueType, warningInfoJSONStr, captureTime};
-                    warningInfoList.add(warningInfo);
+                    // 生成预警信息编号
+                    String warningMsgId = String.valueOf(generator.nextId());
                 }
-                //====================== 预警数据批量入库 ======================
+                // ========================= 3.批量入库符合判断条件的预警数据 =========================
                 ctrlDao.batchInsertWarningInfo(warningInfoList);
-                log.info("【QBEQSJYCTRL - 消费者服务】 当次消费的数据量:{}", warningInfoList.size());
+                log.info("【QBEQSJYCTRL - 消费者服务】 当次消费的数据量:{},符合条件的数据量:{}", records.count(), warningInfoList.size());
                 warningInfoList.clear();
             }
         }

+ 5 - 12
src/main/java/com/hhwy/qbeqsjy/service/CtrlService.java

@@ -2,10 +2,7 @@ package com.hhwy.qbeqsjy.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.hhwy.qbeqsjy.common.CommonUtil;
-import com.hhwy.qbeqsjy.common.Constants;
-import com.hhwy.qbeqsjy.common.HttpClient;
-import com.hhwy.qbeqsjy.common.TimeTool;
+import com.hhwy.qbeqsjy.common.*;
 import com.hhwy.qbeqsjy.dao.CtrlDao;
 import com.hhwy.qbeqsjy.domain.AjaxResult;
 import com.hhwy.qbeqsjy.dto.CtrlDTO;
@@ -74,11 +71,6 @@ public class CtrlService {
         if(!Constants.MULTI_THREAD_ENABLED_FLAG.equals(multiThreadEnabled)){
             ExecutorService executorService = Executors.newFixedThreadPool(Constants.NUM_1);
             executorService.execute(() -> {
-                // 1.如果线索是手机号,且任务信息中包含布控区域,则下发区域布控(区域范围预警);如果不包含布控区域,则下发账号布控(全天津市范围预警)
-                // 2.如果线索是身份证号,则不考虑布控区域的因素,只下发账号布控(全天津市登记类数据预警:如宾馆、网吧等)
-
-                // - todo
-
                 Date createTime = new Date();
                 List<Object[]> ctrlErrorList = new ArrayList<>();
                 int ctrlNum = 0;
@@ -501,8 +493,9 @@ public class CtrlService {
             if(!areaObj.isEmpty()){
                 String areaId = areaObj.getString("areaId");
                 String areaName = areaObj.getString("areaName");
+                Integer areaGeoType = areaObj.getInteger("areaGeoType");
                 JSONArray location = areaObj.getJSONArray("location");
-                Object[] ctrlAreaInfo = new Object[]{taskId, areaId, areaName, location, createTime};
+                Object[] ctrlAreaInfo = new Object[]{taskId, areaId, areaName, areaGeoType, location, createTime};
                 ctrlAreaInfoList.add(ctrlAreaInfo);
             }
         }
@@ -515,8 +508,8 @@ public class CtrlService {
      * @param queryDTO
      * @return
      */
-    public List<Map<String, Object>> getWarningInfoList(QueryDTO queryDTO){
-        return ctrlDao.queryWarningInfoList(queryDTO);
+    public List<Map<String, Object>> getWarningInfo(QueryDTO queryDTO){
+        return ctrlDao.queryWarningInfo(queryDTO);
     }
 
 

+ 5 - 2
src/main/resources/application.properties

@@ -13,8 +13,11 @@ spring.datasource.username=dcuc
 spring.datasource.password=123
 
 # \u4E1A\u52A1\u914D\u7F6E
-# \u7EBF\u7D22\u7C7B\u578B\u7F16\u7801\u5217\u8868 - \u624B\u673A\u53F7,\u8EAB\u4EFD\u8BC1\u53F7\uFF08\u591A\u503C\u9017\u53F7\u5206\u9694\uFF09
-clue.type.list=D201005,D310111
+# \u7EBF\u7D22\u7C7B\u578B\u7F16\u7801\u5217\u8868
+# \u624B\u673A\u53F7
+clue.code.phone=D201005
+# \u8EAB\u4EFD\u8BC1\u53F7
+clue.code.idCard=D310111
 # \u70FD\u706B - \u3010\u7EDF\u4E00\u5E03\u63A7\u3011\u670D\u52A1\u914D\u7F6E
 # \u6388\u6743\u4E1A\u52A1\u7CFB\u7EDFID
 sys.id=QBEQSJYCTRL