瀏覽代碼

【情报二期】数据域服务 - 预警数据消费逻辑调整

peifj 1 月之前
父節點
當前提交
82dcd2eea1

+ 4 - 0
src/main/java/com/hhwy/qbeqsjy/common/Constants.java

@@ -11,6 +11,10 @@ import java.util.Locale;
  */
 public class Constants {
 
+    // 原始预警数据结果表名
+    public static final String ORI_TABLE_NAME = "t_ctrl_warning_info_ori";
+    // 处理后预警数据结果表名
+    public static final String PROCESS_TABLE_NAME = "t_ctrl_warning_info";
     // 单人预警-本市进京-客运乘车
     public static final String MODEL_CODE_BSJJ_KYCC = "DRYJ-BSJJ-KYCC";
     // 单人预警-外省来津-民航订票

+ 0 - 2
src/main/java/com/hhwy/qbeqsjy/controller/CtrlController.java

@@ -70,8 +70,6 @@ public class CtrlController {
         try {
             List<String> resourceCodeList = new ArrayList<>();
             // 将用户域传入的布控模型编号转换为烽火盘古平台数据资源编码
-            // 1.数据资源编码值为[yhybk]:代表该模型在用户域布控,不参与数据域布控
-            // 2.数据资源编码值为[deving]:代表该模型在数据域布控,但还在开发中,目前不参与实际布控
             Iterator<String> iterator = modelIdList.iterator();
             while (iterator.hasNext()){
                 String modelId = iterator.next();

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

@@ -235,18 +235,18 @@ public class CtrlDao {
 
 
     /**
-     * 根据 系统ID 获取预警数据查询记录表中对应的起始查询时间
-     * @param sysId
+     * 根据 目的表名 获取预警数据查询记录表中对应的起始查询时间
+     * @param tableName
      * @return
      */
-    public Timestamp getStartQueryTimeBySysId(String sysId){
-        String sql = "select start_query_time from t_ctrl_warning_query_info where sys_id = ?";
+    public Timestamp getStartQueryTimeByTableName(String tableName){
+        String sql = "select start_query_time from t_ctrl_warning_query_info where table_name = ?";
         try {
-            Timestamp startQueryTime = (Timestamp) gaussdbJdbcTemplate.queryForMap(sql, sysId).get("start_query_time");
-            log.info("【根据系统ID获取预警数据起始查询时间】 系统ID:{},起始查询时间:{}", sysId, startQueryTime);
+            Timestamp startQueryTime = (Timestamp) gaussdbJdbcTemplate.queryForMap(sql, tableName).get("start_query_time");
+            log.info("【根据目的表名获取预警数据起始查询时间】 目的表名:{},起始查询时间:{}", tableName, startQueryTime);
             return startQueryTime;
         } catch (Exception e){
-            log.error("【根据系统ID获取预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
+            log.error("【根据目的表名获取预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
         }
         return null;
     }
@@ -260,45 +260,81 @@ public class CtrlDao {
         String sql = "select max(cjsj) max_cjsj from t_ctrl_warning_info where cjsj > ?";
         try {
             Timestamp newMaxCreateTime = (Timestamp) gaussdbJdbcTemplate.queryForMap(sql, startQueryTime).get("max_cjsj");
-            log.info("【计算当前预警数据表中的最大入库时间】 最大入库时间:{}", newMaxCreateTime);
+            log.info("【计算处理后预警数据表中的最大入库时间】 最大入库时间:{}", newMaxCreateTime);
             return newMaxCreateTime;
         } catch (Exception e){
-            log.error("【基于起始查询时间,计算当前预警数据表中的最大入库时间发生异常】 异常信息:", e);
+            log.error("【基于起始查询时间,计算处理后预警数据表中的最大入库时间发生异常】 异常信息:", e);
         }
         return null;
     }
 
 
     /**
-     * 增量查询布控任务预警结果数据
+     * 基于起始查询时间,计算原始预警数据表中的最大创建(入库)时间   --- 尽量减少参与计算预警数据中最大入库时间的数据量
+     * @return
+     */
+    public Timestamp getNewMaxCreateTimeOri(Timestamp startQueryTime){
+        String sql = "select max(rksj) max_rksj from t_ctrl_warning_info_ori where rksj > ?";
+        try {
+            Timestamp newMaxCreateTime = (Timestamp) gaussdbJdbcTemplate.queryForMap(sql, startQueryTime).get("max_rksj");
+            log.info("【计算原始预警数据表中的最大入库时间】 最大入库时间:{}", newMaxCreateTime);
+            return newMaxCreateTime;
+        } catch (Exception e){
+            log.error("【基于起始查询时间,计算原始预警数据表中的最大入库时间发生异常】 异常信息:", e);
+        }
+        return null;
+    }
+
+
+    /**
+     * 增量查询布控任务处理后预警结果数据
      * @param startQueryTime
      * @return
      */
     public List<Map<String, Object>> queryWarningInfoByInc(Timestamp startQueryTime, Timestamp newMaxCreateTime){
         List<Map<String, Object>> warningInfoList = new ArrayList<>();
-        String sql = "select rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjry_xm, yjry_sfzh, yjry_sjh, yjxxsm, yjzt, yjztmc, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, zrdwmc, zrbmbm, zrbmmc, sqr_xm, sqr_sfzh, sqr_jh, sqr_dwbm, sqr_dwmc, yjry_lb, yjry_bq, gkjb, gkjbmc, ywly, jd, wd, cjsj, gxsj, yjglry_xm, yjglry_sfzh, yjglry_sjh, yjqymc, yjcsmc, yjlx, yjlxmc, yjry_zwh, yjglry_zwh from t_ctrl_warning_info where yjsj > ? and yjsj <= ? order by yjsj desc";
+//        String sql = "select rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjry_xm, yjry_sfzh, yjry_sjh, yjxxsm, yjzt, yjztmc, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, zrdwmc, zrbmbm, zrbmmc, sqr_xm, sqr_sfzh, sqr_jh, sqr_dwbm, sqr_dwmc, yjry_lb, yjry_bq, gkjb, gkjbmc, ywly, jd, wd, cjsj, gxsj, yjglry_xm, yjglry_sfzh, yjglry_sjh, yjqymc, yjcsmc, yjlx, yjlxmc, yjry_zwh, yjglry_zwh from t_ctrl_warning_info where yjsj > ? and yjsj <= ? order by yjsj desc";
+        String sql = "select rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjry_xm, yjry_sfzh, yjry_sjh, yjxxsm, yjzt, yjztmc, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, zrdwmc, zrbmbm, zrbmmc, sqr_xm, sqr_sfzh, sqr_jh, sqr_dwbm, sqr_dwmc, yjry_lb, yjry_bq, gkjb, gkjbmc, ywly, jd, wd, cjsj, gxsj, yjglry_xm, yjglry_sfzh, yjglry_sjh, yjqymc, yjcsmc, yjlx, yjlxmc, yjry_zwh, yjglry_zwh from t_ctrl_warning_info where cjsj > ? and cjsj <= ? order by cjsj desc";
         try {
             warningInfoList = gaussdbJdbcTemplate.queryForList(sql, startQueryTime, newMaxCreateTime);
-            log.info("【增量查询布控任务预警结果数据成功】 数据量:{}", warningInfoList.size());
+            log.info("【增量查询处理后预警结果数据成功】 数据量:{}", warningInfoList.size());
         } catch (Exception e){
-            log.error("【增量查询布控任务预警结果数据发生异常】 异常信息:", e);
+            log.error("【增量查询处理后预警结果数据发生异常】 异常信息:", e);
         }
         return warningInfoList;
     }
 
 
     /**
-     * 根据 系统ID 更新预警数据查询记录表中对应的起始查询时间
+     * 增量查询布控任务原始预警结果数据
+     * @param startQueryTime
+     * @return
+     */
+    public List<Map<String, Object>> queryWarningInfoByIncOri(Timestamp startQueryTime, Timestamp newMaxCreateTime){
+        List<Map<String, Object>> warningInfoListOri = new ArrayList<>();
+        String sql = "select unictrl, orifield from t_ctrl_warning_info_ori where rksj > ? and rksj <= ?";
+        try {
+            warningInfoListOri = gaussdbJdbcTemplate.queryForList(sql, startQueryTime, newMaxCreateTime);
+            log.info("【增量查询布控任务原始预警结果数据成功】 数据量:{}", warningInfoListOri.size());
+        } catch (Exception e){
+            log.error("【增量查询布控任务原始预警结果数据发生异常】 异常信息:", e);
+        }
+        return warningInfoListOri;
+    }
+
+
+    /**
+     * 根据 目的表名 更新预警数据查询记录表中对应的起始查询时间
      * @return
      */
-    public boolean updateStartQueryTimeBySysId(Timestamp newMaxCreateTime, String sysId){
-        String sql = "update t_ctrl_warning_query_info set start_query_time = ? where sys_id = ?";
+    public boolean updateStartQueryTimeByTableName(Timestamp newMaxCreateTime, String tableName){
+        String sql = "update t_ctrl_warning_query_info set start_query_time = ? where table_name = ?";
         try {
-            int updateRows = gaussdbJdbcTemplate.update(sql, newMaxCreateTime, sysId);
-            log.info("【根据系统ID更新预警数据的起始查询时间】 起始查询时间:{}", newMaxCreateTime);
+            int updateRows = gaussdbJdbcTemplate.update(sql, newMaxCreateTime, tableName);
+            log.info("【根据目的表名更新预警数据的起始查询时间】 目的表名:{},新的起始查询时间:{}", tableName, newMaxCreateTime);
             return updateRows > 0;
         } catch (Exception e){
-            log.error("【根据系统ID更新预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
+            log.error("【根据目的表名更新预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
         }
         return false;
     }

+ 4 - 15
src/main/java/com/hhwy/qbeqsjy/kafka/service/ConsumeService.java

@@ -31,7 +31,7 @@ import java.util.concurrent.Executors;
 @Slf4j
 @Service
 @EnableScheduling
-public class ConsumeService implements ApplicationListener<ContextRefreshedEvent> {
+public class ConsumeService /*implements ApplicationListener<ContextRefreshedEvent>*/ {
 
     @Value("${topic.name}")
     private String topic;
@@ -49,8 +49,6 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
     private String radiusTJZ;
     @Value("${res.code.auth}")
     private String resCodeAUTH;
-    /*@Value("${res.code.tldp}")
-    private String resCodeTldp;*/
     @Value("${res.code.mhdp}")
     private String resCodeMhdp;
     @Value("${res.code.jnryzs}")
@@ -71,8 +69,6 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
     private String resCodeDzwl;
     @Value("${res.code.rlgz}")
     private String resCodeRlgz;
-    @Value("${res.code.gmszy}")
-    private String resCodeGmszy;
     @Resource
     private CtrlDao ctrlDao;
     private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
@@ -80,20 +76,20 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
 
 
     // IOC容器刷新完成后就会发布ContextRefreshedEvent事件
-    @Override
+    /*@Override
     public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
         ExecutorService executor = Executors.newFixedThreadPool(1);
         executor.execute(() -> {
             if (contextRefreshedEvent.getApplicationContext().getParent() == null) {
                 try {
-//                    this.dataConsume();
+                    this.dataConsume();
                 } catch (Exception e) {
                     log.error("【QBEQSJYCTRL】 数据消费服务发生异常", e);
                 }
             }
         });
         executor.shutdown();
-    }
+    }*/
 
 
     public void dataConsume() {
@@ -1142,16 +1138,9 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                                                 }
                                             }
                                         }
-                                    } else {
-
                                     }
                                 }
                             }
-                        } else if (resCodeGmszy.equals(resourceCode)) {   // =========== 购买散装油
-                            // ------ todo
-
-
-
                         }
                     }
                 }

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

@@ -576,14 +576,14 @@ public class CtrlService {
      */
     public List<Map<String, Object>> getWarningInfoByInc(){
         // 1.获取预警数据查询记录表中的起始查询时间
-        Timestamp startQueryTime = ctrlDao.getStartQueryTimeBySysId(Constants.DEFAULT_SYSID);
-        // 2.基于起始查询时间,查询此刻预警结果表中最大的创建(入库)时间
+        Timestamp startQueryTime = ctrlDao.getStartQueryTimeByTableName(Constants.PROCESS_TABLE_NAME);
+        // 2.基于起始查询时间,查询此刻处理后预警结果表中最大的创建(入库)时间
         Timestamp newMaxCreateTime = ctrlDao.getNewMaxCreateTime(startQueryTime);
-        // 3.查询该时间段内的增量预警数据
+        // 3.查询该时间段内的处理后的增量预警数据
         if(startQueryTime != null && newMaxCreateTime != null){
             List<Map<String, Object>> warningInfoList = ctrlDao.queryWarningInfoByInc(startQueryTime, newMaxCreateTime);
             // 4.更新预警数据查询记录表中起始查询时间
-            ctrlDao.updateStartQueryTimeBySysId(newMaxCreateTime, Constants.DEFAULT_SYSID);
+            ctrlDao.updateStartQueryTimeByTableName(newMaxCreateTime, Constants.PROCESS_TABLE_NAME);
             return warningInfoList;
         }
         return new ArrayList<>(0);

+ 1121 - 0
src/main/java/com/hhwy/qbeqsjy/service/CustomConsumeService.java

@@ -0,0 +1,1121 @@
+package com.hhwy.qbeqsjy.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hhwy.qbeqsjy.common.*;
+import com.hhwy.qbeqsjy.dao.CtrlDao;
+import com.hhwy.qbeqsjy.kafka.service.AuthService;
+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;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+
+/**
+ * 布控命中数据处理
+ */
+@Slf4j
+@Service
+@EnableScheduling
+public class CustomConsumeService {
+
+    @Value("${address.query.url}")
+    private String addressQueryUrl;
+    @Value("${centerPoint.lon.tjz}")
+    private String centerPointLonTJZ;
+    @Value("${centerPoint.lat.tjz}")
+    private String centerPointLatTJZ;
+    @Value("${radius.tjz}")
+    private String radiusTJZ;
+    @Value("${res.code.auth}")
+    private String resCodeAUTH;
+    @Value("${res.code.mhdp}")
+    private String resCodeMhdp;
+    @Value("${res.code.jnryzs}")
+    private String resCodeJnryzs;
+    @Value("${res.code.wbsw}")
+    private String resCodeWbsw;
+    @Value("${res.code.ky}")
+    private String resCodeKy;
+    @Value("${res.code.dt}")
+    private String resCodeDt;
+    @Value("${res.code.sjrd}")
+    private String resCodeSjrd;
+    @Value("${res.code.xlpc}")
+    private String resCodeXlpc;
+    @Value("${res.code.zdjc}")
+    private String resCodeZdjc;
+    @Value("${res.code.dzwl}")
+    private String resCodeDzwl;
+    @Value("${res.code.rlgz}")
+    private String resCodeRlgz;
+    @Resource
+    private CtrlDao ctrlDao;
+    private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+    private HttpClient httpClient = new HttpClient();
+
+
+    /**
+     * 增量查询原始预警结果表数据,处理后批量入库,间隔10分钟执行一次
+     */
+    @Scheduled(cron = "0 */10 * * * ?")
+    public void processOriWarningData() {
+        // 1.获取原始预警数据查询记录表中的起始查询时间
+        Timestamp startQueryTime = ctrlDao.getStartQueryTimeByTableName(Constants.ORI_TABLE_NAME);
+        // 2.基于起始查询时间,查询此刻原始预警结果表中最大的创建(入库)时间
+        Timestamp newMaxCreateTime = ctrlDao.getNewMaxCreateTimeOri(startQueryTime);
+        // 3.查询该时间段内的原始增量预警数据
+        if(startQueryTime != null && newMaxCreateTime != null){
+            List<Map<String, Object>> warningInfoListOri = ctrlDao.queryWarningInfoByIncOri(startQueryTime, newMaxCreateTime);
+            // 4.更新预警数据查询记录表中起始查询时间
+            ctrlDao.updateStartQueryTimeByTableName(newMaxCreateTime, Constants.ORI_TABLE_NAME);
+
+            List<Object[]> warningInfoList = new ArrayList<>();
+            int batchSaveNum = 0;
+            if(warningInfoListOri != null && !warningInfoListOri.isEmpty()){
+                for (Map<String, Object> warningInfoMapOri : warningInfoListOri) {
+                    JSONObject unictrl = JSON.parseObject("{" + warningInfoMapOri.get("unictrl") + "}");
+                    JSONObject oriField = JSON.parseObject("{" + warningInfoMapOri.get("orifield") + "}");
+                    // 解析线索ID(其中包含任务编号,线索类型,线索值,烽火数据资源编码)
+                    String clueId = unictrl.getString("U_CLUEID");
+                    String[] clueIdStrArr = clueId.split("_");
+                    String rwbh = clueIdStrArr[Constants.NUM_1];
+                    String clueType = clueIdStrArr[Constants.NUM_2];
+                    String clue = clueIdStrArr[Constants.NUM_3];
+                    String resourceCode = unictrl.getString("U_RESID");
+                    // 生成预警信息编号
+                    String yjxxbh = String.valueOf(generator.nextId());
+                    // 预警状态默认为0(未读)
+                    Integer yjzt = 0;
+                    // 预警类型默认为1(单人预警)
+                    Integer yjlx = 1;
+                    Date currentTime = new Date();
+                    // 根据clueId中的任务编号、线索值、线索类型查询对应的布控任务相关信息(包含任务信息、数据资源信息、区域信息、线索信息)
+                    List<Map<String, Object>> ctrlTaskInfoList = ctrlDao.queryCtrlTaskInfo(rwbh, clue, clueType);
+                    if(!ctrlTaskInfoList.isEmpty()){
+                        Map<String, Object> ctrlTaskInfo = ctrlTaskInfoList.get(0);
+                        String rwmc = String.valueOf(ctrlTaskInfo.get("rwmc"));
+                        Integer rwlx = (Integer) ctrlTaskInfo.get("rwlx");
+                        String rwlxmc = String.valueOf(ctrlTaskInfo.get("rwlxmc"));
+                        String rwdxlxmc = String.valueOf(ctrlTaskInfo.get("rwdxlxmc"));
+                        String sqrXm = String.valueOf(ctrlTaskInfo.get("sqr_xm"));
+                        String sqrSfzh = String.valueOf(ctrlTaskInfo.get("sqr_sfzh"));
+                        String sqrJh = String.valueOf(ctrlTaskInfo.get("sqr_jh"));
+                        String sqrDwbm = String.valueOf(ctrlTaskInfo.get("sqr_dwbm"));
+                        String sqrDwmc = String.valueOf(ctrlTaskInfo.get("sqr_dwmc"));
+                        Date bkkssj = (Date) ctrlTaskInfo.get("bkkssj");
+                        Date bkjssj = (Date) ctrlTaskInfo.get("bkjssj");
+                        String bkqyxx = String.valueOf(ctrlTaskInfo.get("bkqyxx"));
+                        String yjryXm = String.valueOf(ctrlTaskInfo.get("ryxm"));
+                        String yjrySfzh = String.valueOf(ctrlTaskInfo.get("zjhm"));
+                        String yjrySjh = String.valueOf(ctrlTaskInfo.get("sjh"));
+                        String yjryLb = String.valueOf(ctrlTaskInfo.get("rylb"));
+                        String yjryBq = String.valueOf(ctrlTaskInfo.get("rybq"));
+                        String gkjb = String.valueOf(ctrlTaskInfo.get("gkjb"));
+                        String gkjbmc = String.valueOf(ctrlTaskInfo.get("gkjbmc"));
+                        String zrjz = String.valueOf(ctrlTaskInfo.get("zrjz"));
+                        String zrmjid = String.valueOf(ctrlTaskInfo.get("zrmjid"));
+                        String zrmjxm = String.valueOf(ctrlTaskInfo.get("zrmjxm"));
+                        String zrmjjh = String.valueOf(ctrlTaskInfo.get("zrmjjh"));
+                        String zrmjlxfs = String.valueOf(ctrlTaskInfo.get("zrmjlxfs"));
+                        String zrdwbm = String.valueOf(ctrlTaskInfo.get("zrdwbm"));
+                        String zrbmbm = String.valueOf(ctrlTaskInfo.get("zrbmbm"));
+                        // 根据任务编号查询对应的模型配置信息
+                        List<Map<String, Object>> modelInfoList = ctrlDao.queryCtrlTaskModelInfo(rwbh);
+
+                        if(resCodeAUTH.equals(resourceCode)){   // =========== AUTH认证数据
+                            // 1. ========================= 过滤基站号、经纬度为空的数据
+                            String baseStationId = oriField.getString("BASE_STATION_ID");
+                            String lonBD = oriField.getString("LONGITUDE");
+                            String latBD = oriField.getString("LATITUDE");
+                            if(StringUtils.isBlank(baseStationId) || StringUtils.isBlank(lonBD) || StringUtils.isBlank(latBD)){
+                                continue;
+                            }
+                            // 2. ========================= 调用烽火接口,根据命中点位经纬度(百度坐标系)查询对应的地址信息
+                            String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", lonBD).replace("y", latBD), null);
+                            JSONObject rspJSONObj = JSON.parseObject(rspStr);
+                            // 命中点位地址名称
+                            String addressName = rspJSONObj.getString("fullAddress");
+                            // 预警时间
+                            Long captureTime = Long.valueOf(oriField.getString("CAPTURE_TIME"));
+                            String captureTimeStr = TimeTool.timeStampToDateString(captureTime);
+                            Date captureTimeDateObj = new Date(captureTime * 1000);
+                            // 将烽火的百度坐标系经纬度值转换为84坐标系经纬度值
+                            double[] latAndLon84 = GpsCoordinateUtils.calBD09toWGS84(Double.valueOf(latBD), Double.valueOf(lonBD));
+                            String lat84 = String.valueOf(latAndLon84[0]);
+                            String lon84 = String.valueOf(latAndLon84[1]);
+                            // 3. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据
+                            JSONArray areaInfoList = JSON.parseArray(bkqyxx);
+                            if(areaInfoList != null && !areaInfoList.isEmpty()){
+                                for (Object obj : areaInfoList) {
+                                    JSONObject ctrlAreaInfo = (JSONObject) obj;
+                                    String areaCode = (String) ctrlAreaInfo.get("qybh");
+                                    String areaName = (String) ctrlAreaInfo.get("qymc");
+                                    Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx");
+                                    JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh")));
+                                    JSONArray locationSet = locationJSONObj.getJSONArray("location");
+                                    // ****** 说明:如果出现多个布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存命中第一个布控区域时的一份数据,不再继续判断
+                                    if(Constants.NUM_0 == geoType){   // 布控区域是圆形
+                                        JSONObject loc = locationSet.getJSONObject(0);
+                                        String centerLon84 = loc.getString("lon");
+                                        String centerLat84 = loc.getString("lat");
+                                        String radius = loc.getString("radius");
+                                        if(GeoUtils.isPointInCircle(Double.valueOf(lat84), Double.valueOf(lon84), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius)) && captureTimeDateObj.compareTo(bkkssj) >= 0 && captureTimeDateObj.compareTo(bkjssj) <= 0){
+                                            StringBuilder yjxxsm = new StringBuilder();
+                                            if(Constants.QYBH_TJS.equals(areaCode)){
+                                                yjxxsm.append("进入本地预警 - ");
+                                            } else {
+                                                yjxxsm.append("进入敏感区域 - ");
+                                            }
+                                            yjxxsm.append(yjryXm);
+                                            yjxxsm.append("于");
+                                            yjxxsm.append(captureTimeStr);
+                                            yjxxsm.append("出现在");
+                                            yjxxsm.append(addressName);
+                                            if(!Constants.QYBH_TJS.equals(areaCode)){
+                                                yjxxsm.append(",命中区域:");
+                                                yjxxsm.append(areaName);
+                                            }
+                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, areaName, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                            break;
+                                        }
+                                    } else {   // 布控区域是一般多边形
+                                        List<Coordinate> coordinates = new ArrayList<>();
+                                        for (Object item : locationSet) {
+                                            JSONObject loc = (JSONObject) item;
+                                            String vertexLon84 = loc.getString("lon");
+                                            String vertexLat84 = loc.getString("lat");
+                                            coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84)));
+                                        }
+                                        if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lon84), Double.valueOf(lat84)))  && captureTimeDateObj.compareTo(bkkssj) >= 0 && captureTimeDateObj.compareTo(bkjssj) <= 0){
+                                            StringBuilder yjxxsm = new StringBuilder();
+                                            if(Constants.QYBH_TJS.equals(areaCode)){
+                                                yjxxsm.append("进入本地预警 - ");
+                                            } else {
+                                                yjxxsm.append("进入敏感区域 - ");
+                                            }
+                                            yjxxsm.append(yjryXm);
+                                            yjxxsm.append("于");
+                                            yjxxsm.append(captureTimeStr);
+                                            yjxxsm.append("出现在");
+                                            yjxxsm.append(addressName);
+                                            if(!Constants.QYBH_TJS.equals(areaCode)){
+                                                yjxxsm.append(",命中区域:");
+                                                yjxxsm.append(areaName);
+                                            }
+                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, areaName, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                            break;
+                                        }
+                                    }
+                                }
+                            } else {   // 如果不存在布控区域,则默认布控区域范围为天津市
+                                if(captureTimeDateObj.compareTo(bkkssj) >= 0 && captureTimeDateObj.compareTo(bkjssj) <= 0){
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("进入本地预警 - ");
+                                    yjxxsm.append(yjryXm);
+                                    yjxxsm.append("于");
+                                    yjxxsm.append(captureTimeStr);
+                                    yjxxsm.append("出现在");
+                                    yjxxsm.append(addressName);
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, Constants.QYMC_TJS, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                }
+                            }
+                        } else if(resCodeKy.equals(resourceCode)){   // =========== 客运数据
+                            // 票号
+                            /*String trainTicNo = oriField.getString("TRAIN_TIC_NO");
+                            String ph = StringUtils.isNotBlank(trainTicNo)? trainTicNo : "暂无";*/
+                            // 旅客姓名
+                            String passName = oriField.getString("PASS_NAME");
+                            String lkXm = StringUtils.isNotBlank(passName)? passName : yjryXm;
+                            // 旅客身份证号
+                            String lkSfzh = oriField.getString("PASS_CRED_NUM");
+                            // 旅客手机
+                            String passMob = oriField.getString("PASS_MOB");
+                            String lkSjh = StringUtils.isNotBlank(passMob)? passMob : yjrySjh;
+                            // 检票时间   ---样例:20200929073509
+                            String cheticTime = oriField.getString("CHETIC_TIME");
+                            String jpsj = StringUtils.isNotBlank(cheticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(cheticTime)) : "暂无";
+                            // 检票车次号
+                            String cheticTrainNo = oriField.getString("CHETIC_TRAIN_NO");
+                            String jpcch = StringUtils.isNotBlank(cheticTrainNo)? cheticTrainNo : "暂无";
+                            // 座号
+                            String seatNo = oriField.getString("SEAT_NO");
+                            String zh = StringUtils.isNotBlank(seatNo)? seatNo : "暂无";
+                            // 车牌号
+                            String vehPlateNum = oriField.getString("VEH_PLATE_NUM");
+                            String cph = StringUtils.isNotBlank(vehPlateNum)? vehPlateNum : "暂无";
+                            // 始发地站点
+                            String depAddrStatiName = oriField.getString("DEP_ADDR_STATI_NAME");
+                            String sfdzdmc = (StringUtils.isNotBlank(depAddrStatiName) && !"0".equals(depAddrStatiName))? depAddrStatiName : "暂无";
+                            // 始发地行政区划代码
+                            String sfdxzqhdm = oriField.getString("DEP_ADDR_ADDI_CODE");
+                            // 目的地站点
+                            String destStatiName = oriField.getString("DEST_STATI_NAME");
+                            String mddzdmc = StringUtils.isNotBlank(destStatiName)? destStatiName : "暂无";
+                            // 目的地行政区划代码
+                            String mddxzqhdm = oriField.getString("DEST_ADDI_CODE");
+                            // 订票时间   ---样例:20200929061228
+                            String booticTime = oriField.getString("BOOTIC_TIME");
+                            String dpsjStr = StringUtils.isNotBlank(booticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(booticTime)) : "暂无";
+                            Date dpsjDateObj = StringUtils.isNotBlank(booticTime)? new Date(TimeTool.dateStringToTimeStamp3(booticTime) * 1000) : null;
+                            // 发车时间   ---样例:20200929061228
+                            String depTimeDtime = oriField.getString("DEP_TIME_DTIME");
+                            String fcsj = StringUtils.isNotBlank(depTimeDtime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(depTimeDtime)) : "暂无";
+                            /*String captureTimeKy = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));*/
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                if(Constants.MODEL_CODE_BSJJ_KYCC.equals(mxbh)){   // 单人预警-本市进京-客运乘车
+                                    if(StringUtils.isNotBlank(sfdxzqhdm) && StringUtils.isNotBlank(mddxzqhdm) && "12".equals(sfdxzqhdm.substring(0, 2)) && "11".equals(mddxzqhdm.substring(0, 2)) && dpsjDateObj.compareTo(bkkssj) >= 0 && dpsjDateObj.compareTo(bkjssj) <= 0){
+                                        // 业务需求:始发地:天津,目的地:北京
+                                        StringBuilder yjxxsm = new StringBuilder();
+                                        yjxxsm.append("客运数据 - 旅客姓名:");
+                                        yjxxsm.append(lkXm);
+                                        yjxxsm.append(",旅客身份证号:");
+                                        yjxxsm.append(lkSfzh);
+                                        yjxxsm.append(",旅客手机号:");
+                                        yjxxsm.append(lkSjh);
+                                        yjxxsm.append(",订票时间:");
+                                        yjxxsm.append(dpsjStr);
+                                        yjxxsm.append(",发车时间:");
+                                        yjxxsm.append(fcsj);
+                                        yjxxsm.append(",始发站:");
+                                        yjxxsm.append(sfdzdmc);
+                                        yjxxsm.append(",目的站:");
+                                        yjxxsm.append(mddzdmc);
+                                        yjxxsm.append(",检票时间:");
+                                        yjxxsm.append(jpsj);
+                                        yjxxsm.append(",检票车次号:");
+                                        yjxxsm.append(jpcch);
+                                        yjxxsm.append(",座号:");
+                                        yjxxsm.append(zh);
+                                        yjxxsm.append(",车牌号:");
+                                        yjxxsm.append(cph);
+                                        warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkXm, lkSfzh, lkSjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, dpsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, null, yjlx, Constants.YJLX_DRYJ, seatNo, null});
+                                        break;
+                                    }
+                                }
+                            }
+                        } else if (resCodeMhdp.equals(resourceCode)) {   // =========== 民航订票数据
+                            // 订座记录编号
+                            /*String ordseatRecoNo = oriField.getString("ORDSEAT_RECO_NO");
+                            String dzjlbh = StringUtils.isNotBlank(ordseatRecoNo)? ordseatRecoNo : "暂无";*/
+                            // 旅客中文名
+                            String passName = oriField.getString("PASS_NAME");
+                            String lkzwm = StringUtils.isNotBlank(passName)? passName : "暂无";
+                            // 旅客证件号码
+                            String credNum = oriField.getString("CRED_NUM");
+                            String zjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无";
+//                            String lklxdh = oriField.getString("PASS_CTCT_TEL");               // 旅客联系电话
+                            // 承运航空公司
+                            String carrOrgaAirlineName = oriField.getString("CARR_ORGA_AIRLINE_NAME");
+                            String cyhkgs = StringUtils.isNotBlank(carrOrgaAirlineName)? carrOrgaAirlineName : "暂无";
+                            // 责任航空公司
+                            /*String respUnitAirlineName = oriField.getString("RESP_UNIT_AIRLINE_NAME");
+                            String zrhkgs = StringUtils.isNotBlank(respUnitAirlineName)? respUnitAirlineName : "暂无";*/
+                            // 航班号
+                            String flinum = oriField.getString("FLINUM");
+                            String hbh = StringUtils.isNotBlank(flinum)? flinum : "暂无";
+                            // 起飞机场
+                            String flyInitNrtAirportName = oriField.getString("FLY_INIT_NRT_AIRPORT_NAME");
+                            String qfjcmc = StringUtils.isNotBlank(flyInitNrtAirportName)? flyInitNrtAirportName : "暂无";
+                            // 起飞机场代码
+                            String qfjcdm = oriField.getString("FLY_INIT_NRT_AIRPORT_CODE");
+//                            String qfzcs = oriField.getString("FLY_INIT_ADDR_CITY_NAME");      // 起飞站城市
+                            // 到达机场
+                            String ddjcmc = oriField.getString("ARR_AT_AIR_AIRPORT_NAME");
+                            // 到达机场代码
+                            String ddjcdm = oriField.getString("ARR_AT_AIR_AIRPORT_CODE");
+//                            String ddzcs = oriField.getString("ARR_ADDR_CITY_NAME");           // 到达站城市
+//                            String cfrq = oriField.getString("STAOFF_DATE");                   // 出发日期
+                            // 出发时间   ---样例:20200929061228
+                            String staoffTime = oriField.getString("STAOFF_TIME");
+                            String cfsj = StringUtils.isNotBlank(staoffTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(staoffTime)) : "暂无";
+//                            String ddrq = oriField.getString("ARR_DATE");                      // 到达日期
+                            // 到达时间
+                            String arrTime = oriField.getString("ARR_TIME");
+                            String ddsj = StringUtils.isNotBlank(arrTime)? arrTime : "暂无";
+//                            String kpzt = oriField.getString("ELE_TIC_STAT_NAME");             // 客票状态
+//                            String cw = oriField.getString("CHISHI_SEAT");                     // 舱位
+//                            String dpsj = oriField.getString("BOOTIC_TIME");                   // 订票时间
+                            // 截获时间   ---样例:20200929061228
+                            String captureTime = oriField.getString("CAPTURE_TIME");
+                            /*String captureTimeMhdp = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无";*/
+                            Date captureTimeMhdpDateObj = StringUtils.isNotBlank(captureTime)? new Date(TimeTool.dateStringToTimeStamp3(captureTime) * 1000) : null;
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                if(Constants.MODEL_CODE_WSLJ_MHDP.equals(mxbh)){   // 单人预警-外省来津-民航订票
+                                    if(StringUtils.isNotBlank(ddjcdm) && "TSN".equals(ddjcdm.trim()) && captureTimeMhdpDateObj.compareTo(bkkssj) >= 0 && captureTimeMhdpDateObj.compareTo(bkjssj) <= 0){
+                                        // 业务需求:到达机场代码为TSN(天津滨海国际机场)
+                                        StringBuilder yjxxsm = new StringBuilder();
+                                        yjxxsm.append("民航订票 - 旅客中文名:");
+                                        yjxxsm.append(lkzwm);
+                                        yjxxsm.append(",旅客证件号码:");
+                                        yjxxsm.append(zjhm);
+                                        yjxxsm.append(",承运航空公司:");
+                                        yjxxsm.append(cyhkgs);
+                                        yjxxsm.append(",航班号:");
+                                        yjxxsm.append(hbh);
+                                        yjxxsm.append(",起飞机场:");
+                                        yjxxsm.append(qfjcmc);
+                                        yjxxsm.append(",出发时间:");
+                                        yjxxsm.append(cfsj);
+                                        yjxxsm.append(",到达机场:");
+                                        yjxxsm.append(StringUtils.isNotBlank(ddjcmc)? ddjcmc : "暂无");
+                                        yjxxsm.append(",到达时间:");
+                                        yjxxsm.append(ddsj);
+                                        warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkzwm, zjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeMhdpDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, ddjcmc, yjlx, Constants.YJLX_DRYJ, null, null});
+                                        break;
+                                    }
+                                } else if (Constants.MODEL_CODE_KSGJ_MHDP.equals(mxbh)) {   // 单人预警-跨省轨迹-民航订票
+                                    String mddShi = (String) modelInfoMap.get("mdd_shi");
+                                    if(StringUtils.isNotBlank(qfjcdm) && StringUtils.isNotBlank(ddjcmc) && "TSN".equals(qfjcdm.trim()) && ddjcmc.trim().contains(mddShi) && captureTimeMhdpDateObj.compareTo(bkkssj) >= 0 && captureTimeMhdpDateObj.compareTo(bkjssj) <= 0){
+                                        // 业务需求:起飞机场代码为TSN(天津滨海国际机场),到达机场须属于当前任务所记录的目的地市
+                                        StringBuilder yjxxsm = new StringBuilder();
+                                        yjxxsm.append("民航订票 - 旅客中文名:");
+                                        yjxxsm.append(lkzwm);
+                                        yjxxsm.append(",旅客证件号码:");
+                                        yjxxsm.append(zjhm);
+                                        yjxxsm.append(",承运航空公司:");
+                                        yjxxsm.append(cyhkgs);
+                                        yjxxsm.append(",航班号:");
+                                        yjxxsm.append(hbh);
+                                        yjxxsm.append(",起飞机场:");
+                                        yjxxsm.append(qfjcmc);
+                                        yjxxsm.append(",出发时间:");
+                                        yjxxsm.append(cfsj);
+                                        yjxxsm.append(",到达机场:");
+                                        yjxxsm.append(StringUtils.isNotBlank(ddjcmc)? ddjcmc : "暂无");
+                                        yjxxsm.append(",到达时间:");
+                                        yjxxsm.append(ddsj);
+                                        warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkzwm, zjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeMhdpDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, ddjcmc, yjlx, Constants.YJLX_DRYJ, null, null});
+                                        break;
+                                    }
+                                }
+                            }
+                        } else if (resCodeJnryzs.equals(resourceCode)) {   // =========== 境内人员住宿数据
+                            // 旅馆编号
+                            String lgbh = oriField.getString("HOTEL_NO");
+                            String[] lgxxArr = CommonUtil.getConfValueByKeyHotel(lgbh).split("@");
+                            // 旅馆名称
+//                            String lgmc = oriField.getString("HOTE_NAME");
+                            // 旅馆地址
+//                            String lgdz = oriField.getString("HOTEL_ADDR_ADDR_NAME");
+                            // 旅馆经度
+//                            String lgjd = oriField.getString("HOTEL_LON");
+                            // 旅馆纬度
+//                            String lgwd = oriField.getString("HOTEL_LAT");
+                            String lgmc = lgxxArr[0];
+                            String lgdz = lgxxArr[1];
+                            String lgjd = lgxxArr[2];
+                            String lgwd = lgxxArr[3];
+//                            String lglx = oriField.getString("HOTE_TYPE_NAME");                 // 旅馆类型
+                            // 姓名
+                            String rzrXm = oriField.getString("NAME");
+                            // 身份证号
+                            String rzrSfzh = oriField.getString("CERT_NO");
+                            // 旅客联系电话
+                            String ctctTel = oriField.getString("CTCT_TEL");
+                            String rzrLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh;
+//                            String rylx = oriField.getString("PER_CLAS_NAME");                  // 人员类型
+//                            String gj = oriField.getString("NATION_NAME");                      // 国籍
+//                            String hjdz = oriField.getString("DOMIC_ADDR_NAME");                // 户籍地址
+                            // 入住时间   ---样例:20250329061228
+                            String admiTime = oriField.getString("ADMI_TIME");
+                            String rzsj = StringUtils.isNotBlank(admiTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(admiTime)) : "暂无";
+                            Date rzsjDateObj = StringUtils.isNotBlank(admiTime)? new Date(TimeTool.dateStringToTimeStamp3(admiTime) * 1000) : null;
+                            // 退房时间   ---样例:20250329061228
+                            String choutTime = oriField.getString("CHOUT_TIME");
+                            String tfsj = StringUtils.isNotBlank(choutTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(choutTime)) : "暂无";
+//                            String zsts = oriField.getString("LODG_DAY_NUM");                   // 住宿天数
+                            // 房间号
+                            String roomNo = oriField.getString("ROOM_NO");
+                            String fjh = StringUtils.isNotBlank(roomNo)? roomNo : "暂无";
+//                            String rzrs = oriField.getString("ADMISSION_PER_NUM");              // 入住人数
+//                            String ywsxcl = oriField.getString("THER_ACCO_VEHI_JUDGE_FLAG");    // 有无随行车辆
+//                            String sxclhp = oriField.getString("ACCO_VEH_VEH_PLATE_NUM");       // 随行车辆号牌
+//                            String wypt = oriField.getString("PLAT_NAME");                      // 网约平台
+//                            String ydrXm = oriField.getString("APPO_PER_NAME");                 // 预定人姓名
+//                            String ydrSfzh = oriField.getString("APPO_PER_CERT_NO");            // 预定人身份证号
+//                            String ydrSjh = oriField.getString("APPO_PER_CTCT_TEL");            // 预定人手机号
+//                            String rzr2Xm = oriField.getString("ADMIS_PER_TWO_NAME");           // 入住人2姓名
+//                            String rzr2Sfzh = oriField.getString("ADMIS_PER_TWO_CERT_NO");      // 入住人2身份证号
+//                            String rzr2Lxfs = oriField.getString("ADMIS_PER_TWO_CTCT_TEL");     // 入住人2联系方式
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                /*if("DRYJ-BSJJ-LKZD".equals(mxbh)){   // 单人预警-本市进京-旅客住店
+                                    // --- todo
+                                    // 用户域实现
+                                }
+                                else*/
+                                // 业务需求:线索人员所住旅馆位置须在当前任务所记录的布控区域范围内
+                                if(Constants.MODEL_CODE_BSMGQY_LKZD.equals(mxbh)){   // 单人预警-本市敏感区域-旅客住店
+                                    JSONArray areaInfoList = JSON.parseArray(bkqyxx);
+                                    for (Object obj : areaInfoList) {
+                                        JSONObject ctrlAreaInfo = (JSONObject) obj;
+                                        String qymc = (String) ctrlAreaInfo.get("qymc");
+                                        Integer qyjhlx = (Integer) ctrlAreaInfo.get("qyjhlx");
+                                        JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh")));
+                                        JSONArray locationSet = locationJSONObj.getJSONArray("location");
+                                        if(!"null".equals(lgjd) && !"null".equals(lgwd)){
+                                            if(Constants.NUM_0 == qyjhlx){   // 圆形区域
+                                                JSONObject loc = locationSet.getJSONObject(0);
+                                                String centerLon84 = loc.getString("lon");
+                                                String centerLat84 = loc.getString("lat");
+                                                String radius = loc.getString("radius");
+                                                if(GeoUtils.isPointInCircle(Double.valueOf(lgwd), Double.valueOf(lgjd), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius)) && rzsjDateObj.compareTo(bkkssj) >= 0 && rzsjDateObj.compareTo(bkjssj) <= 0){
+                                                    String captureTimeJnryzs = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+                                                    StringBuilder yjxxsm = new StringBuilder();
+                                                    yjxxsm.append("旅馆住宿 - 旅馆名称:");
+                                                    yjxxsm.append(lgmc);
+                                                    yjxxsm.append(",旅馆地址:");
+                                                    yjxxsm.append(lgdz);
+                                                    yjxxsm.append(",入住人姓名:");
+                                                    yjxxsm.append(rzrXm);
+                                                    yjxxsm.append(",入住人身份证号:");
+                                                    yjxxsm.append(rzrSfzh);
+                                                    yjxxsm.append(",入住人联系电话:");
+                                                    yjxxsm.append(rzrLxdh);
+                                                    yjxxsm.append(",入住时间:");
+                                                    yjxxsm.append(rzsj);
+                                                    yjxxsm.append(",退房时间:");
+                                                    yjxxsm.append(tfsj);
+                                                    yjxxsm.append(",房间号:");
+                                                    yjxxsm.append(fjh);
+                                                    yjxxsm.append(",命中区域:");
+                                                    yjxxsm.append(qymc);
+                                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, rzrXm, rzrSfzh, rzrLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, rzsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lgjd, lgwd, currentTime, currentTime, null, null, null, qymc, lgdz, yjlx, Constants.YJLX_DRYJ, null, null});
+                                                    break;
+                                                }
+                                            } else {   // 多边形区域
+                                                List<Coordinate> coordinates = new ArrayList<>();
+                                                for (Object item : locationSet) {
+                                                    JSONObject loc = (JSONObject) item;
+                                                    String vertexLon84 = loc.getString("lon");
+                                                    String vertexLat84 = loc.getString("lat");
+                                                    coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84)));
+                                                }
+                                                if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lgjd), Double.valueOf(lgwd))) && rzsjDateObj.compareTo(bkkssj) >= 0 && rzsjDateObj.compareTo(bkjssj) <= 0){
+                                                    String captureTimeJnryzs = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+                                                    StringBuilder yjxxsm = new StringBuilder();
+                                                    yjxxsm.append("旅馆住宿 - 旅馆名称:");
+                                                    yjxxsm.append(lgmc);
+                                                    yjxxsm.append(",旅馆地址:");
+                                                    yjxxsm.append(lgdz);
+                                                    yjxxsm.append(",入住人姓名:");
+                                                    yjxxsm.append(rzrXm);
+                                                    yjxxsm.append(",入住人身份证号:");
+                                                    yjxxsm.append(rzrSfzh);
+                                                    yjxxsm.append(",入住人联系电话:");
+                                                    yjxxsm.append(rzrLxdh);
+                                                    yjxxsm.append(",入住时间:");
+                                                    yjxxsm.append(rzsj);
+                                                    yjxxsm.append(",退房时间:");
+                                                    yjxxsm.append(tfsj);
+                                                    yjxxsm.append(",房间号:");
+                                                    yjxxsm.append(fjh);
+                                                    yjxxsm.append(",命中区域:");
+                                                    yjxxsm.append(qymc);
+                                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, rzrXm, rzrSfzh, rzrLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, rzsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lgjd, lgwd, currentTime, currentTime, null, null, null, qymc, lgdz, yjlx, Constants.YJLX_DRYJ, null, null});
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        } else if (resCodeWbsw.equals(resourceCode)) {   // =========== 网吧上网数据
+                            // 上网人员姓名
+                            String swryXm = oriField.getString("INTE_PER_NAME");
+                            // 上网人员身份证号
+                            String swrySfzh = oriField.getString("CRED_NUM");
+                            // 上网人员联系电话
+                            String ctctTel = oriField.getString("CTCT_TEL");
+                            String swryLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh;
+                            // 上网终端编号
+                            String intenetTermNo = oriField.getString("INTENET_TERM_NO");
+                            String swzdbh = StringUtils.isNotBlank(intenetTermNo)? intenetTermNo : "暂无";
+//                            String ip = oriField.getString("MAIENG_IP");                // IP地址
+//                            String zdmc = oriField.getString("TERM_DESIG");             // 终端名称
+//                            String zdmac = oriField.getString("TERM_MAC");              // 终端mac地址
+                            // 上网开始时间   ---样例:20250329061228
+                            String intenetStartTime = oriField.getString("INTENET_START_TIME");
+                            String swkssj = StringUtils.isNotBlank(intenetStartTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetStartTime)) : "暂无";
+                            Date swkssjDateObj = StringUtils.isNotBlank(intenetStartTime)? new Date(TimeTool.dateStringToTimeStamp3(intenetStartTime) * 1000) : null;
+                            // 上网结束时间   ---样例:20250329061228
+                            String intenetEndTime = oriField.getString("INTENET_END_TIME");
+                            String swjssj = StringUtils.isNotBlank(intenetEndTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetEndTime)) : "暂无";
+//                            String swsc = oriField.getString("INTENET_TIME_LENGTH");    // 上网时长
+                            // 营业场所编号
+                            /*String premNo = oriField.getString("PREM_NO");
+                            String yycsbh = StringUtils.isNotBlank(premNo)? premNo : "暂无";*/
+                            // 营业场所名称
+                            String premDesig = oriField.getString("PREM_DESIG");
+                            String yycsmc = StringUtils.isNotBlank(premDesig)? premDesig : "暂无";
+//                            String dzmc = oriField.getString("ADDR_NAME");              // 地址名称
+//                            String jd = oriField.getString("LON");                      // 经度
+//                            String wd = oriField.getString("LAT");                      // 纬度
+//                            String frXm = oriField.getString("LEGAL_NAME");             // 法人姓名
+//                            String frSfzh = oriField.getString("LEGAL_CRED_NUM");       // 法人身份证号
+//                            String frLxdh = oriField.getString("LEGAL_CTCT_TEL");       // 法人联系电话
+                            String captureTimeWbsw = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                // 单人预警-本市敏感区域-网吧上网
+                                if(Constants.MODEL_CODE_BSMGQY_WBSW.equals(mxbh) && swkssjDateObj.compareTo(bkkssj) >= 0 && swkssjDateObj.compareTo(bkjssj) <= 0){
+                                    // 表中无经、纬度数据,无法判断是否出现在布控区域
+                                    // 暂时不做过滤处理
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("网吧上网 - 上网人员姓名:");
+                                    yjxxsm.append(swryXm);
+                                    yjxxsm.append(",上网人员身份证号:");
+                                    yjxxsm.append(swrySfzh);
+                                    yjxxsm.append(",上网人员联系电话:");
+                                    yjxxsm.append(swryLxdh);
+                                    yjxxsm.append(",上网终端编号:");
+                                    yjxxsm.append(swzdbh);
+                                    yjxxsm.append(",上网开始时间:");
+                                    yjxxsm.append(swkssj);
+                                    yjxxsm.append(",上网结束时间:");
+                                    yjxxsm.append(swjssj);
+                                    yjxxsm.append(",营业场所名称:");
+                                    yjxxsm.append(yycsmc);
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, swryXm, swrySfzh, swryLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, swkssjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, yycsmc, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    break;
+                                }
+                            }
+                        } else if (resCodeDt.equals(resourceCode)) {   // =========== 地铁交易数据
+                            // 乘客姓名
+                            String ckXm = oriField.getString("XM");
+                            // 乘客身份证号
+                            String ckSfzh = oriField.getString("ZJHM");
+                            // 乘客联系电话
+                            String yddh = oriField.getString("YDDH");
+                            String ckLxdh = StringUtils.isNotBlank(yddh)? yddh : yjrySjh;
+                            // 刷卡卡号
+                            String khXxbh = oriField.getString("KH_XXBH");
+                            String skkh = StringUtils.isNotBlank(khXxbh)? khXxbh : "暂无";
+                            // 刷卡时间   ---样例:20250329061228
+                            String shkJdsj = oriField.getString("SHK_JDSJ");
+                            String sksj = StringUtils.isNotBlank(shkJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(shkJdsj)) : "暂无";
+                            Date sksjDateObj = StringUtils.isNotBlank(shkJdsj)? new Date(TimeTool.dateStringToTimeStamp3(shkJdsj) * 1000) : null;
+                            // 车站名称
+                            String czmMc = oriField.getString("CZM_MC");
+                            String czmc = StringUtils.isNotBlank(czmMc)? czmMc : "暂无";
+                            // 分类名称
+                            /*String flMc = oriField.getString("FL_MC");
+                            String flmc = StringUtils.isNotBlank(flMc)? flMc : "暂无";*/
+                            // 进出站标识名称
+                            String jczBsMc = oriField.getString("JCZ_BS_MC");
+                            String jczbsmc = StringUtils.isNotBlank(jczBsMc)? jczBsMc : "暂无";
+                            // 交易类型名称
+                            /*String jyLexMc = oriField.getString("JY_LEX_MC");
+                            String jylxmc = StringUtils.isNotBlank(jyLexMc)? jyLexMc : "暂无";*/
+                            // 闸机号
+                            String zhjhJyqk = oriField.getString("ZHJH_JYQK");
+                            String zjh = StringUtils.isNotBlank(zhjhJyqk)? zhjhJyqk : "暂无";
+                            // 地铁线路信息
+                            String dtXlxx = oriField.getString("DTXLXX");
+                            String dtxlxx = StringUtils.isNotBlank(dtXlxx)? dtXlxx : "暂无";
+                            String captureTimeDt = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                // 单人预警-本市敏感区域-地铁
+                                if(Constants.MODEL_CODE_BSMGQY_DT.equals(mxbh) && sksjDateObj.compareTo(bkkssj) >= 0 && sksjDateObj.compareTo(bkjssj) <= 0){
+                                    // 表中无经、纬度数据,无法判断是否出现在布控区域
+                                    // 暂时不做过滤处理
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("地铁数据 - 乘客姓名:");
+                                    yjxxsm.append(ckXm);
+                                    yjxxsm.append(",乘客身份证号:");
+                                    yjxxsm.append(ckSfzh);
+                                    yjxxsm.append(",乘客联系电话:");
+                                    yjxxsm.append(ckLxdh);
+                                    yjxxsm.append(",刷卡卡号:");
+                                    yjxxsm.append(skkh);
+                                    yjxxsm.append(",刷卡时间:");
+                                    yjxxsm.append(sksj);
+                                    yjxxsm.append(",车站名称:");
+                                    yjxxsm.append(czmc);
+                                    yjxxsm.append(",进出站标识名称:");
+                                    yjxxsm.append(jczbsmc);
+                                    yjxxsm.append(",闸机号:");
+                                    yjxxsm.append(zjh);
+                                    yjxxsm.append(",地铁线路信息:");
+                                    yjxxsm.append(dtxlxx);
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, ckXm, ckSfzh, ckLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, sksjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, czmc, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    break;
+                                }
+                            }
+                        } else if (resCodeSjrd.equals(resourceCode)) {   // =========== 手机热点
+                            // 移动电话
+                            String yddhSrc = oriField.getString("YDDH");
+                            String yddh = StringUtils.isNotBlank(yddhSrc)? yddhSrc : yjrySjh;
+                            // 城际设备信息编号
+                            /*String chjiSbeXxbh = oriField.getString("CHJI_SBE_XXBH");
+                            String cjsbxxbh = StringUtils.isNotBlank(chjiSbeXxbh)? chjiSbeXxbh : "暂无";*/
+                            // 国际移动用户识别码,IMSI
+                            String gjydyhsbm = oriField.getString("GJYDYHSBM");
+                            String imsi = StringUtils.isNotBlank(gjydyhsbm)? gjydyhsbm : "暂无";
+                            // 国际移动设备识别码,IMEI
+                            String gjydsbsfdm = oriField.getString("GJYDSBSFDM");
+                            String imei = StringUtils.isNotBlank(gjydsbsfdm)? gjydsbsfdm : "暂无";
+                            // 交换机信息编号
+                            /*String jhjXxbh = oriField.getString("JHJ_XXBH");
+                            String jhjxxbh = StringUtils.isNotBlank(jhjXxbh)? jhjXxbh : "暂无";*/
+                            // 位置区域信息编号
+                            String wzhQuyXxbh = oriField.getString("WZH_QUY_XXBH");
+                            String wzqyxxbh = StringUtils.isNotBlank(wzhQuyXxbh)? wzhQuyXxbh : "暂无";
+                            // 小区信息编号
+                            /*String xiqXxbh = oriField.getString("XIQ_XXBH");
+                            String xqxxbh = StringUtils.isNotBlank(xiqXxbh)? xiqXxbh : "暂无";*/
+                            // 经度
+                            String jd = oriField.getString("DQJD");
+                            // 纬度
+                            String wd = oriField.getString("DQWD");
+                            // 关联时间   ---样例:1745476573
+                            String jdsj = oriField.getString("JDSJ");
+                            String glsj = StringUtils.isNotBlank(jdsj)? TimeTool.timeStampToDateString(Long.valueOf(jdsj)) : "暂无";
+                            Date glsjDateObj = StringUtils.isNotBlank(jdsj)? new Date(Long.valueOf(jdsj) * 1000) : null;
+
+                            String captureTimeSjrd = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+                            String addressName = null;
+                            if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){
+                                double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd));
+                                String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
+                                JSONObject rspJSONObj = JSON.parseObject(rspStr);
+                                addressName = rspJSONObj.getString("fullAddress");
+                            }
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                // 单人预警-本市进京-手机热点
+                                if(Constants.MODEL_CODE_BSJJ_SJRD.equals(mxbh) && glsjDateObj.compareTo(bkkssj) >= 0 && glsjDateObj.compareTo(bkjssj) <= 0){
+                                    // 不做过滤处理
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("手机热点 - 移动电话:");
+                                    yjxxsm.append(yddh);
+                                    yjxxsm.append(",IMSI:");
+                                    yjxxsm.append(imsi);
+                                    yjxxsm.append(",IMEI:");
+                                    yjxxsm.append(imei);
+                                    yjxxsm.append(",位置区域信息编号:");
+                                    yjxxsm.append(wzqyxxbh);
+                                    yjxxsm.append(",关联时间:");
+                                    yjxxsm.append(glsj);
+                                    yjxxsm.append(",位置信息:");
+                                    yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无");
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yddh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, glsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, null, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    break;
+                                }
+                            }
+                        } else if (resCodeXlpc.equals(resourceCode)) {   // =========== 巡逻盘查(人员)
+                            // 卡口信息ID
+                            /*String kakXxId = oriField.getString("KAK_XXID");
+                            String kkxxId = StringUtils.isNotBlank(kakXxId)? kakXxId : "暂无";*/
+                            // 卡口名称
+                            String kakMc = oriField.getString("KAK_MC");
+                            String kkmc = StringUtils.isNotBlank(kakMc)? kakMc : "暂无";
+                            // 终端型号
+                            /*String zhdXh = oriField.getString("ZHD_XH");
+                            String zdxh = StringUtils.isNotBlank(zhdXh)? zhdXh : "暂无";*/
+                            // 终端串号简要情况
+                            String zhdChaJyqk = oriField.getString("ZHD_CHA_JYQK");
+                            String zdchjyqk = StringUtils.isNotBlank(zhdChaJyqk)? zhdChaJyqk : "暂无";
+                            // 盘查时间   ---样例:20250329061228
+                            String pacJdsj = oriField.getString("PAC_JDSJ");
+                            String pcsj = StringUtils.isNotBlank(pacJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(pacJdsj)) : "暂无";
+                            Date pcsjDateObj = StringUtils.isNotBlank(pacJdsj)? new Date(TimeTool.dateStringToTimeStamp3(pacJdsj) * 1000) : null;
+                            // 人员姓名
+                            String xmSrc = oriField.getString("XM");
+                            String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无";
+                            // 人员身份证号
+                            String gmsfhm = oriField.getString("GMSFHM");
+                            String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无";
+                            // 人员联系电话
+                            String lxdhSrc = oriField.getString("LXDH");
+                            String lxdh = StringUtils.isNotBlank(lxdhSrc)? lxdhSrc : yjrySjh;
+//                            String rybq = oriField.getString("REY_BQI_MC");                  // 人员标签
+                            // 籍贯
+                            String jgXzqhmc = oriField.getString("JG_XZQHMC");
+                            String jg = StringUtils.isNotBlank(jgXzqhmc)? jgXzqhmc : "暂无";
+                            // 民族
+                            String mzmzwz = oriField.getString("MZMZWZ");
+                            String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无";
+                            // 居住地区划内详细地址
+                            String jzdQhnxxdz = oriField.getString("JZD_QHNXXDZ");
+                            String jzdxxdz = StringUtils.isNotBlank(jzdQhnxxdz)? jzdQhnxxdz : "暂无";
+                            // 盘查民警姓名
+                            String pacMjXm = oriField.getString("PAC_MJ_XM");
+                            String pcmjXm = StringUtils.isNotBlank(pacMjXm)? pacMjXm : "暂无";
+                            // 盘查民警警号
+                            String pacMjJh = oriField.getString("PAC_MJ_JH");
+                            String pcmjJh = StringUtils.isNotBlank(pacMjJh)? pacMjJh : "暂无";
+                            // 盘查民警账号
+                            /*String pacMjZh = oriField.getString("PAC_MJ_ZH");
+                            String pcmjZh = StringUtils.isNotBlank(pacMjZh)? pacMjZh : "暂无";*/
+                            // 盘查民警所属单位名称
+                            String pacMjSsDwmc = oriField.getString("PAC_MJ_SS_DWMC");
+                            String pcmjSsdwmc = StringUtils.isNotBlank(pacMjSsDwmc)? pacMjSsDwmc : "暂无";
+                            // 盘查处理结果
+                            String pacChlJguMc = oriField.getString("PAC_CHL_JGU_MC");
+                            String pccljg = StringUtils.isNotBlank(pacChlJguMc)? pacChlJguMc : "暂无";
+                            // 盘查处理移交单位名称
+                            String pacChlYijDwmc = oriField.getString("PAC_CHL_YIJ_DWMC");
+                            String pcclyjdwmc = StringUtils.isNotBlank(pacChlYijDwmc)? pacChlYijDwmc : "暂无";
+                            // 业务类型名称
+                            String ywlxMc = oriField.getString("YWLX_MC");
+                            String ywlx = StringUtils.isNotBlank(ywlxMc)? ywlxMc : "暂无";
+                            // 盘查地经度
+                            String pcdJd = oriField.getString("PCD_DQJD");
+                            // 盘查地纬度
+                            String pcdWd = oriField.getString("PCD_DQWD");
+                            String captureTimeXlpc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+                            String addressName = null;
+                            if(StringUtils.isNotBlank(pcdWd) && StringUtils.isNotBlank(pcdJd)){
+                                double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(pcdWd), Double.valueOf(pcdJd));
+                                String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
+                                JSONObject rspJSONObj = JSON.parseObject(rspStr);
+                                addressName = rspJSONObj.getString("fullAddress");
+                            }
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                // 单人预警-本市进京-巡逻盘查
+                                if(Constants.MODEL_CODE_BSJJ_XLPC.equals(mxbh) && pcsjDateObj.compareTo(bkkssj) >= 0 && pcsjDateObj.compareTo(bkjssj) <= 0){
+                                    // 不做过滤处理
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("巡逻盘查 - 人员姓名:");
+                                    yjxxsm.append(xm);
+                                    yjxxsm.append(",人员身份证号:");
+                                    yjxxsm.append(sfzh);
+                                    yjxxsm.append(",人员联系电话:");
+                                    yjxxsm.append(lxdh);
+                                    yjxxsm.append(",籍贯:");
+                                    yjxxsm.append(jg);
+                                    yjxxsm.append(",民族:");
+                                    yjxxsm.append(mz);
+                                    yjxxsm.append(",居住地详细地址:");
+                                    yjxxsm.append(jzdxxdz);
+                                    yjxxsm.append(",盘查时间:");
+                                    yjxxsm.append(pcsj);
+                                    yjxxsm.append(",卡口名称:");
+                                    yjxxsm.append(kkmc);
+                                    yjxxsm.append(",终端串号:");
+                                    yjxxsm.append(zdchjyqk);
+                                    yjxxsm.append(",盘查民警姓名:");
+                                    yjxxsm.append(pcmjXm);
+                                    yjxxsm.append(",盘查民警警号:");
+                                    yjxxsm.append(pcmjJh);
+                                    yjxxsm.append(",盘查民警所属单位名称:");
+                                    yjxxsm.append(pcmjSsdwmc);
+                                    yjxxsm.append(",盘查处理结果:");
+                                    yjxxsm.append(pccljg);
+                                    yjxxsm.append(",盘查处理移交单位名称:");
+                                    yjxxsm.append(pcclyjdwmc);
+                                    yjxxsm.append(",业务类型名称:");
+                                    yjxxsm.append(ywlx);
+                                    yjxxsm.append(",盘查地位置信息:");
+                                    yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无");
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, xm, sfzh, lxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, pcsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, pcdJd, pcdWd, currentTime, currentTime, null, null, null, null, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    break;
+                                }
+                            }
+                        } else if (resCodeZdjc.equals(resourceCode)) {   // =========== 站点检查(人员)
+                            // 人员姓名
+                            String xmSrc = oriField.getString("XM");
+                            String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无";
+                            // 人员身份证号
+                            String gmsfhm = oriField.getString("GMSFHM");
+                            String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无";
+                            // 民族
+                            String mzmzwz = oriField.getString("MZMZWZ");
+                            String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无";
+                            // 地址
+                            String dzmc = oriField.getString("DZMC");
+                            String dz = StringUtils.isNotBlank(dzmc)? dzmc : "暂无";
+                            // 发证机关名称
+                            String fzjgMc = oriField.getString("FZJG_MC");
+                            String fzjg = StringUtils.isNotBlank(fzjgMc)? fzjgMc : "暂无";
+                            // 证件有效起始日期
+                            String zjyxqKsRq = oriField.getString("ZJYXQ_KS_RQ");
+                            String zjyxqsrq = StringUtils.isNotBlank(zjyxqKsRq)? zjyxqKsRq : "暂无";
+                            // 证件有效终止日期
+                            String zjyxqJshRq = oriField.getString("ZJYXQ_JSH_RQ");
+                            String zjyxzzrq = StringUtils.isNotBlank(zjyxqJshRq)? zjyxqJshRq : "暂无";
+                            // 警员编号
+                            String jyuBh = oriField.getString("JYU_BH");
+                            String jybh = StringUtils.isNotBlank(jyuBh)? jyuBh : "暂无";
+                            // 人员照片地址
+                            String ryzpWz = oriField.getString("RYZP_WZ");
+                            String ryzpUrl = StringUtils.isNotBlank(ryzpWz)? ryzpWz : "暂无";
+                            // 检查站名称
+                            String jiczMc = oriField.getString("JICZ_MC");
+                            String jczmc = StringUtils.isNotBlank(jiczMc)? jiczMc : "暂无";
+                            // 检查时间   ---样例:20250329061228
+                            String jicJdsj = oriField.getString("JIC_JDSJ");
+                            String jcsj = StringUtils.isNotBlank(jicJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(jicJdsj)) : "暂无";
+                            Date jcsjDateObj = StringUtils.isNotBlank(jicJdsj)? new Date(TimeTool.dateStringToTimeStamp3(jicJdsj) * 1000) : null;
+
+                            String captureTimeZdjc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                // 单人预警-本市进京-站点检查
+                                if(Constants.MODEL_CODE_BSJJ_ZDJC.equals(mxbh) && jcsjDateObj.compareTo(bkkssj) >= 0 && jcsjDateObj.compareTo(bkjssj) <= 0){
+                                    // 不做过滤处理
+                                    StringBuilder yjxxsm = new StringBuilder();
+                                    yjxxsm.append("站点检查 - 人员姓名:");
+                                    yjxxsm.append(xm);
+                                    yjxxsm.append(",人员身份证号:");
+                                    yjxxsm.append(sfzh);
+                                    yjxxsm.append(",人员照片:");
+                                    yjxxsm.append(ryzpUrl);
+                                    yjxxsm.append(",民族:");
+                                    yjxxsm.append(mz);
+                                    yjxxsm.append(",地址:");
+                                    yjxxsm.append(dz);
+                                    yjxxsm.append(",检查警员编号:");
+                                    yjxxsm.append(jybh);
+                                    yjxxsm.append(",检查时间:");
+                                    yjxxsm.append(jcsj);
+                                    yjxxsm.append(",检查站名称:");
+                                    yjxxsm.append(jczmc);
+                                    yjxxsm.append(",发证机关:");
+                                    yjxxsm.append(fzjg);
+                                    yjxxsm.append(",证件有效起始日期:");
+                                    yjxxsm.append(zjyxqsrq);
+                                    yjxxsm.append(",证件有效终止日期:");
+                                    yjxxsm.append(zjyxzzrq);
+                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, xm, sfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, jcsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, jczmc, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    break;
+                                }
+                            }
+                        } else if (resCodeDzwl.equals(resourceCode)) {   // =========== 电子围栏(火车站)
+                            // 移动电话
+                            String mob = oriField.getString("MOB");
+                            String yddh = StringUtils.isNotBlank(mob)? mob : yjrySjh;
+                            // 国际移动用户识别码
+                            String imsiSrc = oriField.getString("IMSI");
+                            String imsi = StringUtils.isNotBlank(imsiSrc)? imsiSrc : "暂无";
+                            // 国际移动设备识别码
+                            String imeiSrc = oriField.getString("IMEI");
+                            String imei = StringUtils.isNotBlank(imeiSrc)? imeiSrc : "暂无";
+                            // 手机MAC地址
+                            String mobphoMac = oriField.getString("MOBPHO_MAC");
+                            String sjMac = StringUtils.isNotBlank(mobphoMac)? mobphoMac : "暂无";
+                            // 运营商名称
+//                            String spName = oriField.getString("SP_NAME");
+//                            String yysmc = StringUtils.isNotBlank(spName)? spName : "暂无";
+                            // 设备编号
+                            /*String equipmentNo = oriField.getString("EQUIPMENT_NO");
+                            String sbbh = StringUtils.isNotBlank(equipmentNo)? equipmentNo : "暂无";*/
+                            // 所在地区编号
+//                            String szdqbh = oriField.getString("IN_THE_AREA_NO");
+                            // 厂商编号
+//                            String csbh = oriField.getString("COMP_NO");
+                            // 网络类型名称
+//                            String wllxmc = oriField.getString("NET_TYPE_NAME");
+                            // 频点
+//                            String pd = oriField.getString("FREPOI");
+                            // 基站地球经度
+                            String jzdqJd = oriField.getString("BASSTA_LON");
+                            // 基站地球纬度
+                            String jzdqWd = oriField.getString("BASSTA_LAT");
+                            // 截获时间   ---样例:20250329061228
+                            String captureTime = oriField.getString("CAPTURE_TIME");
+                            String captureTimeDzwl = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无";
+                            Date captureTimeDzwlDateObj = StringUtils.isNotBlank(captureTime)? new Date(TimeTool.dateStringToTimeStamp3(captureTime) * 1000) : null;
+                            String addressName = null;
+                            if(StringUtils.isNotBlank(jzdqWd) && StringUtils.isNotBlank(jzdqJd)){
+                                double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd));
+                                String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
+                                JSONObject rspJSONObj = JSON.parseObject(rspStr);
+                                addressName = rspJSONObj.getString("fullAddress");
+                            }
+
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                if(Constants.MODEL_CODE_BSJJ_HCZDW.equals(mxbh)){   // 单人预警-本市进京-火车站电围
+                                    // 业务需求:只保留命中点位在火车站区域内的数据
+                                    if(GeoUtils.isPointInCircle(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd), Double.valueOf(centerPointLatTJZ), Double.valueOf(centerPointLonTJZ), Double.valueOf(radiusTJZ)) && captureTimeDzwlDateObj.compareTo(bkkssj) >= 0 && captureTimeDzwlDateObj.compareTo(bkjssj) <= 0){
+                                        StringBuilder yjxxsm = new StringBuilder();
+                                        yjxxsm.append("火车站电围 - 移动电话:");
+                                        yjxxsm.append(yddh);
+                                        yjxxsm.append(",IMSI:");
+                                        yjxxsm.append(imsi);
+                                        yjxxsm.append(",IMEI:");
+                                        yjxxsm.append(imei);
+                                        yjxxsm.append(",手机MAC地址:");
+                                        yjxxsm.append(sjMac);
+                                        yjxxsm.append(",命中区域:天津站");
+                                        warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yddh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDzwlDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jzdqJd, jzdqWd, currentTime, currentTime, null, null, null, Constants.QYMC_TJZ, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                        break;
+                                    }
+                                }
+                            }
+                        } else if (resCodeRlgz.equals(resourceCode)) {   // =========== 人脸感知(火车站/本市)
+                            // 抓拍机编号
+                            /*String snashoMachNo = oriField.getString("SNASHO_MACH_NO");
+                            String zpjbh = StringUtils.isNotBlank(snashoMachNo)? snashoMachNo : "暂无";*/
+                            // 抓拍机名称
+                            String snashoMachDesig = oriField.getString("SNASHO_MACH_DESIG");
+                            String zpjmc = StringUtils.isNotBlank(snashoMachDesig)? snashoMachDesig : "暂无";
+                            // 告警人员姓名
+//                            String gjryXm = oriField.getString("ALARM_PERSON_NAME");
+                            // 证件号码
+                            String credNum = oriField.getString("CRED_NUM");
+                            String gjryZjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无";
+                            // 告警时间   ---样例:20250329061228
+                            String alarmTime = oriField.getString("ALARM_TIME");
+                            String gjsj = StringUtils.isNotBlank(alarmTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(alarmTime)) : "暂无";
+                            Date gjsjDateObj = StringUtils.isNotBlank(alarmTime)? new Date(TimeTool.dateStringToTimeStamp3(alarmTime) * 1000) : null;
+                            // 地址名称
+//                            String dzmc = oriField.getString("ADDR_NAME");
+                            // 预警相似度
+//                            String yjxsd = oriField.getString("EARALA_SIMILA");
+                            // 告警信息处理结果
+//                            String gjxxcljg = oriField.getString("ALARM_INFO_PROC_RESU");
+                            // 人脸图片文件路径
+                            String perFacePictureFilePath = oriField.getString("PER_FACE_PICTURE_FILE_PATH");
+                            String rltpwjlj = StringUtils.isNotBlank(perFacePictureFilePath)? perFacePictureFilePath : "暂无";
+                            // 经度
+                            String jd = oriField.getString("LON");
+                            // 纬度
+                            String wd = oriField.getString("LAT");
+                            String addressName = null;
+                            if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){
+                                double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd));
+                                String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
+                                JSONObject rspJSONObj = JSON.parseObject(rspStr);
+                                addressName = rspJSONObj.getString("fullAddress");
+                            }
+                            for (Map<String, Object> modelInfoMap : modelInfoList) {
+                                String mxbh = (String) modelInfoMap.get("mxbh");
+                                if(Constants.MODEL_CODE_BSJJ_HCZRLGZ.equals(mxbh)){   // 单人预警-本市进京-火车站人脸感知
+                                    // 业务需求:只保留命中点位在火车站区域内的数据
+                                    if(GeoUtils.isPointInCircle(Double.valueOf(wd), Double.valueOf(jd), Double.valueOf(centerPointLatTJZ), Double.valueOf(centerPointLonTJZ), Double.valueOf(radiusTJZ)) && gjsjDateObj.compareTo(bkkssj) >= 0 && gjsjDateObj.compareTo(bkjssj) <= 0){
+                                        StringBuilder yjxxsm = new StringBuilder();
+                                        yjxxsm.append("火车站人脸感知 - 抓拍机名称:");
+                                        yjxxsm.append(zpjmc);
+                                        yjxxsm.append(",告警人员证件号码:");
+                                        yjxxsm.append(gjryZjhm);
+                                        yjxxsm.append(",告警时间:");
+                                        yjxxsm.append(gjsj);
+                                        yjxxsm.append(",人脸图片文件路径:");
+                                        yjxxsm.append(rltpwjlj);
+                                        yjxxsm.append(",位置信息:");
+                                        yjxxsm.append(addressName);
+                                        yjxxsm.append(",命中区域:天津站");
+                                        warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, gjryZjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, gjsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, Constants.QYMC_TJZ, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                    }
+                                } else if (Constants.MODEL_CODE_BSMGQY_BSRL.equals(mxbh)) {   // 单人预警-本市敏感区域-本市人脸
+                                    // 业务需求:只保留命中点位在当前任务记录的布控区域内的数据
+                                    // 过滤不在布控区域范围的数据
+                                    JSONArray areaInfoList = JSON.parseArray(bkqyxx);
+                                    if(areaInfoList != null && !areaInfoList.isEmpty()){
+                                        for (Object obj : areaInfoList) {
+                                            JSONObject ctrlAreaInfo = (JSONObject) obj;
+                                            String areaCode = (String) ctrlAreaInfo.get("qybh");
+                                            String areaName = (String) ctrlAreaInfo.get("qymc");
+                                            Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx");
+                                            JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh")));
+                                            JSONArray locationSet = locationJSONObj.getJSONArray("location");
+                                            // 如果出现多个布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存命中第一个布控区域时的一份数据,不再继续判断
+                                            if(Constants.NUM_0 == geoType){
+                                                JSONObject loc = locationSet.getJSONObject(0);
+                                                String centerLon84 = loc.getString("lon");
+                                                String centerLat84 = loc.getString("lat");
+                                                String radius = loc.getString("radius");
+                                                if(GeoUtils.isPointInCircle(Double.valueOf(wd), Double.valueOf(jd), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius)) && gjsjDateObj.compareTo(bkkssj) >= 0 && gjsjDateObj.compareTo(bkjssj) <= 0){
+                                                    StringBuilder yjxxsm = new StringBuilder();
+                                                    if(Constants.QYBH_TJS.equals(areaCode)){
+                                                        yjxxsm.append("进入本地预警");
+                                                    } else {
+                                                        yjxxsm.append("进入敏感区域");
+                                                    }
+                                                    yjxxsm.append(" - 抓拍机名称:");
+                                                    yjxxsm.append(zpjmc);
+                                                    yjxxsm.append(",告警人员证件号码:");
+                                                    yjxxsm.append(gjryZjhm);
+                                                    yjxxsm.append(",告警时间:");
+                                                    yjxxsm.append(gjsj);
+                                                    yjxxsm.append(",人脸图片文件路径:");
+                                                    yjxxsm.append(rltpwjlj);
+                                                    yjxxsm.append(",位置信息:");
+                                                    yjxxsm.append(addressName);
+                                                    if(!Constants.QYBH_TJS.equals(areaCode)){
+                                                        yjxxsm.append(",命中区域:");
+                                                        yjxxsm.append(areaName);
+                                                    }
+                                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, gjryZjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, gjsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, areaName, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                                    break;
+                                                }
+                                            } else {
+                                                List<Coordinate> coordinates = new ArrayList<>();
+                                                for (Object item : locationSet) {
+                                                    JSONObject loc = (JSONObject) item;
+                                                    String vertexLon84 = loc.getString("lon");
+                                                    String vertexLat84 = loc.getString("lat");
+                                                    coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84)));
+                                                }
+                                                if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(jd), Double.valueOf(wd))) && gjsjDateObj.compareTo(bkkssj) >= 0 && gjsjDateObj.compareTo(bkjssj) <= 0){
+                                                    StringBuilder yjxxsm = new StringBuilder();
+                                                    if(Constants.QYBH_TJS.equals(areaCode)){
+                                                        yjxxsm.append("进入本地预警");
+                                                    } else {
+                                                        yjxxsm.append("进入敏感区域");
+                                                    }
+                                                    yjxxsm.append(" - 抓拍机名称:");
+                                                    yjxxsm.append(zpjmc);
+                                                    yjxxsm.append(",告警人员证件号码:");
+                                                    yjxxsm.append(gjryZjhm);
+                                                    yjxxsm.append(",告警时间:");
+                                                    yjxxsm.append(gjsj);
+                                                    yjxxsm.append(",人脸图片文件路径:");
+                                                    yjxxsm.append(rltpwjlj);
+                                                    yjxxsm.append(",位置信息:");
+                                                    yjxxsm.append(addressName);
+                                                    if(!Constants.QYBH_TJS.equals(areaCode)){
+                                                        yjxxsm.append(",命中区域:");
+                                                        yjxxsm.append(areaName);
+                                                    }
+                                                    warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, gjryZjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, gjsjDateObj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKeyDept(zrdwbm), zrbmbm, CommonUtil.getConfValueByKeyDept(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, areaName, addressName, yjlx, Constants.YJLX_DRYJ, null, null});
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            // ========================= 批量入库符合条件的预警数据
+            if(!warningInfoList.isEmpty()){
+                batchSaveNum = ctrlDao.batchInsertWarningInfo(warningInfoList);
+            }
+            log.info("【QBEQSJYCTRL - 单人预警消费者服务】 当次消费到的数据量:{},符合条件保存入库的数据量:{}", warningInfoListOri.size(), batchSaveNum);
+        }
+    }
+
+}

+ 3 - 3
src/main/resources/application.properties

@@ -86,8 +86,6 @@ query.max.count=10000
 res.code.auth=134B102
 # \u5BA2\u8FD0\u6570\u636E
 res.code.ky=991C1516
-# \u94C1\u8DEF\u8BA2\u7968
-#res.code.tldp=991C1398
 # \u6C11\u822A\u8BA2\u7968
 res.code.mhdp=991C1233
 # \u5883\u5185\u4EBA\u5458\u4F4F\u5BBF
@@ -107,7 +105,7 @@ res.code.dzwl=991C1356
 # \u4EBA\u8138\u611F\u77E5\uFF08\u706B\u8F66\u7AD9\uFF09
 res.code.rlgz=991C2304
 # \u8D2D\u4E70\u6563\u88C5\u6CB9
-res.code.gmszy=991C3201000512
+#res.code.gmszy=991C3201000512
 
 
 # \u5929\u6D25\u7AD9\u5706\u5F62\u533A\u57DF\u5706\u5FC3\u70B9\u7ECF\u7EAC\u5EA6\uFF0884\u5750\u6807\u7CFB\uFF09
@@ -136,6 +134,8 @@ tx.query.max.count=5000
 
 
 # \uFF08\u60C5\u62A5\u4E8C\u671F\uFF09\u7528\u6237\u57DF\u6A21\u578B\u7F16\u53F7\u4E0E\u70FD\u706B\u76D8\u53E4\u5E73\u53F0\u6570\u636E\u8D44\u6E90\u7F16\u7801\u5B57\u5178
+# 1.\u6570\u636E\u8D44\u6E90\u7F16\u7801\u503C\u4E3A[yhybk]\uFF1A\u4EE3\u8868\u8BE5\u6A21\u578B\u5728\u7528\u6237\u57DF\u5E03\u63A7\uFF0C\u6570\u636E\u57DF\u4E0D\u5173\u6CE8
+# 2.\u6570\u636E\u8D44\u6E90\u7F16\u7801\u503C\u4E3A[deving]\uFF1A\u4EE3\u8868\u8BE5\u6A21\u578B\u5728\u6570\u636E\u57DF\u5E03\u63A7\uFF0C\u4F46\u5E03\u63A7\u6A21\u578B\u8FD8\u5728\u5F00\u53D1\u4E2D\uFF0C\u76EE\u524D\u4E0D\u53C2\u4E0E\u5B9E\u9645\u5E03\u63A7
 DRYJ-BSJJ-TLDP=yhybk
 DRYJ-BSJJ-KYCC=991C1516
 DRYJ-BSJJ-HCZRLGZ=991C2304

+ 1 - 1
src/main/resources/logback.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-	<property name="log.path" value="/home/ruoyi/logs" />
+	<property name="log.path" value="/home/QBEQSJY/logs" />
     <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />