소스 검색

【情报二期】数据域服务 - "同行类"业务查询结果数据批量入库代码

fangtasyj 2 달 전
부모
커밋
083dec8d8e

+ 23 - 4
src/main/java/com/hhwy/qbeqsjy/APP.java

@@ -1,6 +1,8 @@
 package com.hhwy.qbeqsjy;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPath;
 import com.hhwy.qbeqsjy.common.CommonUtil;
 import com.hhwy.qbeqsjy.common.SnowflakeIdGenerator;
 import org.locationtech.jts.geom.Coordinate;
@@ -44,10 +46,27 @@ public class APP {
         System.out.println(warningMsgId);
         System.out.println(warningMsgId2);
         System.out.println(warningMsgId3);*/
-        Date date = new Date();
-        long time = date.getTime();
-        System.out.println(time);
-        System.out.println(time / 1000);
+
+        String ss = "{\"dataXq\":[{\"ADDDATETIME\":1370540095000,\"AJBH\":\"A1201111800002013060011\",\"COUNTRY\":\"156\",\"CSRQ\":655171200000,\"CYM\":\"无\",\"GZDW\":\"捷威动力公司\",\"HJD\":\"山东省泰安市宁阳县葛石镇葛石村\",\"IIDD\":\"A5D846DBB77044EB80D23944E7219B0E\",\"ISDEL\":\"0\",\"JGPROVINCE\":\"370000\",\"LXDH\":\"13752041110\",\"MZ\":\"01\",\"NL\":22,\"RKSJ_ZYK\":1370540095000,\"RYID\":\"R1201111800002013060022\",\"SFRDDB\":\"0\",\"SFZXWY\":\"0\",\"SXZM_MC\":\"聚众斗殴\",\"TJR\":\"3DC3AEC83778494F8526A80E5373F477\",\"TJRXM\":\"李欢\",\"WHCD\":\"30\",\"XB\":\"1\",\"XM\":\"张澎澎\",\"XZDXZ\":\"天津市西青区中北镇九川工业园宿舍3号楼616号\",\"ZJHM\":\"370921199010062113\",\"ZJLX\":\"11\",\"ZZMM\":\"13\"}],\"lyName\":\"神盾\",\"sarName\":\"嫌疑人\"}";
+        JSONObject resultData =  JSONObject.parseObject(ss);
+        JSONObject resultDataSrc =  new JSONObject();
+        resultDataSrc.put("data",resultData);
+
+        String[] responseMsgField =  "data.dataXq[0].XM@-@data.sarName@-@data.dataXq[0].AJBH".split("@");
+
+
+        StringBuffer resultBJMsgSb = new StringBuffer();
+
+        for(String tmprepField: responseMsgField){
+            if(tmprepField.contains("data.")){
+                resultBJMsgSb.append(JSONPath.read(resultDataSrc.toJSONString(),tmprepField));
+            }else{
+                resultBJMsgSb.append(tmprepField);
+            }
+        }
+
+
+        System.out.println(resultBJMsgSb.toString());
 
     }
 }

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

@@ -11,6 +11,20 @@ import java.util.Locale;
  */
 public class Constants {
 
+    // 数据资源编码:同火车
+    public static final String RES_CODE_THC = "";
+    // 数据资源编码:同航班
+    public static final String RES_CODE_THB = "";
+    // 数据资源编码:同宾馆
+    public static final String RES_CODE_TBG = "";
+    // 数据资源编码:同网吧
+    public static final String RES_CODE_TWB = "";
+    // 数据资源编码:同长途客运
+    public static final String RES_CODE_TCTKY = "";
+    // 数据资源编码:同民航进港
+    public static final String RES_CODE_TMHJG = "";
+    // 数据资源编码:同民航离港
+    public static final String RES_CODE_TMHLG = "";
     // 接口响应内容类型默认值
     public static final String DEFAULT_RSP_TYPE = "application/json";
     // 接口响应内容类型值

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

@@ -146,15 +146,15 @@ public class CtrlDao {
      * @param warningInfoList
      * @return
      */
-    public boolean batchInsertWarningInfo(List<Object[]> warningInfoList){
+    public int batchInsertWarningInfo(List<Object[]> warningInfoList){
         String sql = "insert into t_ctrl_warning_info (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, cjsj, gxsj) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
         try {
             int[] insertRows = gaussDBJdbcTemplate.batchUpdate(sql, warningInfoList);
-            return insertRows.length == warningInfoList.size();
+            return insertRows.length;
         } catch (Exception e){
             log.error("【批量插入布控任务预警结果数据发生异常】 异常信息:", e);
         }
-        return false;
+        return Constants.NUM_0;
     }
 
 

+ 24 - 16
src/main/java/com/hhwy/qbeqsjy/kafka/service/ConsumeService.java

@@ -83,12 +83,13 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
      * @param topic
      */
     public void process(KafkaConsumer<Integer, String> consumer, String topic) {
-        List<Object[]> warningInfoList = new ArrayList<>();
         consumer.subscribe(Collections.singletonList(topic));
         while (true) {
             // 间隔30秒拉取一次数据
             ConsumerRecords<Integer, String> records = consumer.poll(Constants.WAIT_TIME);
             if (records != null && records.count() > 0) {
+                List<Object[]> warningInfoList = new ArrayList<>();
+                int batchSaveNum = 0;
                 for (ConsumerRecord<Integer, String> record : records) {
                     JSONObject message = JSONObject.parseObject(record.value());
                     JSONObject uniCtrl = message.getJSONObject("UNICTRL");
@@ -101,7 +102,8 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                     // 每张布控资源表对应的命中数据JSON对象
                     JSONObject oriField = message.getJSONObject("ORIFIELD");
 //                    String yjxxsm = oriField.toJSONString();
-                    String yjxxsm = "";
+                    StringBuilder yjxxsm = new StringBuilder();
+                    // 预警时间
                     Date yjsj = new Date();
                     // 生成预警信息编号
                     String yjxxbh = String.valueOf(generator.nextId());
@@ -145,13 +147,21 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                                 continue;
                             }
                             // 2. ========================= 根据命中点位经纬度查询对应的地址信息(百度坐标系)
-                            String fullAddressQueryUrl = addressQueryUrl.replace("x", lon).replace("y", lat);
-                            String rspStr = httpClient.sendGetRequst(fullAddressQueryUrl, null);
+                            String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", lon).replace("y", lat), null);
                             JSONObject rspJSONObj = JSON.parseObject(rspStr);
                             // 命中点位地址名称
                             String addressName = rspJSONObj.getString("fullAddress");
                             String captureTime = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
-                            yjxxsm = "[" + yjryXm + "]于" + captureTime + "出现在[" + addressName + "] - 点位坐标:(" + lon + "," + lat + ")";
+                            yjxxsm.append(yjryXm);
+                            yjxxsm.append("于");
+                            yjxxsm.append(captureTime);
+                            yjxxsm.append("出现在");
+                            yjxxsm.append(addressName);
+                            yjxxsm.append(" - 点位坐标:(");
+                            yjxxsm.append(lon);
+                            yjxxsm.append(",");
+                            yjxxsm.append(lat);
+                            yjxxsm.append(")");
                             // 3. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据
                             JSONArray areaInfoList = JSON.parseArray(bkqyxx);
                             if(areaInfoList != null && areaInfoList.size() > 0){
@@ -160,14 +170,13 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                                     Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx");
                                     JSONArray locationSet = JSON.parseArray(String.valueOf(ctrlAreaInfo.get("qyfwjwdjh")));
                                     // ****** 说明:如果出现多个布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存命中第一个布控区域时的一份数据
-                                    // 布控区域是圆形
-                                    if(Constants.NUM_0 == geoType){
+                                    if(Constants.NUM_0 == geoType){   // 布控区域是圆形
                                         JSONObject loc = locationSet.getJSONObject(0);
                                         String centerLon = loc.getString("lon");
                                         String centerLat = loc.getString("lat");
                                         String radius = loc.getString("radius");
                                         if(GeoUtils.isPointInCircle(Double.valueOf(lat), Double.valueOf(lon), Double.valueOf(centerLat), Double.valueOf(centerLon), Double.valueOf(radius))){
-                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm, yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
+                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
                                             break;
                                         }
                                     } else {   // 布控区域是一般多边形
@@ -179,25 +188,24 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                                             coordinates.add(new Coordinate(Double.valueOf(vertexLon), Double.valueOf(vertexLat)));
                                         }
                                         if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lon), Double.valueOf(lat)))){
-                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm, yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
+                                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
                                             break;
                                         }
                                     }
                                 }
-                            } else {   // 如果不存在布控区域信息,则默认布控区域范围为全天津市,直接入库
-                                warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm, yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
+                            } else {   // 如果不存在布控区域信息,则默认布控区域范围为全天津市,预警数据直接入库
+                                warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
                             }
-                        } else {   // 如果是其他类布控资源,则直接保存入库
-                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm, yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
+                        } else {   // 如果是其他类布控资源,预警数据直接入库
+                            warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceId, yjsj, yjsj});
                         }
                     }
                 }
                 // ========================= 批量入库符合条件的预警数据
                 if(warningInfoList.size() > 0){
-                    ctrlDao.batchInsertWarningInfo(warningInfoList);
-                    warningInfoList.clear();
+                    batchSaveNum = ctrlDao.batchInsertWarningInfo(warningInfoList);
                 }
-                log.info("【QBEQSJYCTRL - 消费者服务】 当次消费的数据量:{},符合条件保存入库的数据量:{}", records.count(), warningInfoList.size());
+                log.info("【QBEQSJYCTRL - 单人预警消费者服务】 当次消费的数据量:{},符合条件保存入库的数据量:{}", records.count(), batchSaveNum);
             }
         }
     }

+ 218 - 49
src/main/java/com/hhwy/qbeqsjy/service/SameTravelService.java

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONPath;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.hhwy.qbeqsjy.common.CommonUtil;
-import com.hhwy.qbeqsjy.common.Constants;
-import com.hhwy.qbeqsjy.common.HttpClient;
-import com.hhwy.qbeqsjy.common.TimeTool;
+import com.hhwy.qbeqsjy.common.*;
 import com.hhwy.qbeqsjy.dao.CtrlDao;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -46,6 +43,10 @@ public class SameTravelService {
     private String fwkfptUniQueryUrl;
     @Value("${tx.query.max.count}")
     private String maxReturnNum;
+    @Value("${clue.code.idCard}")
+    private String clueCodeIdCard;
+    private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+    private HttpClient httpClient = new HttpClient();
     @Autowired
     private CtrlDao ctrlDao;
 
@@ -53,44 +54,21 @@ public class SameTravelService {
     /**
      * 调用烽火同行类数据通查服务接口,并将查询结果保存入库
      * @param taskId 任务编号
-     * @param conditionFieldValue 条件查询的字段值
-     * @param resourceIdentifier 条件查询的数据资源标识符(烽火盘古平台标准)
-     * @param resourceCode 条件查询的数据资源标识符对应的数据资源编码(烽火盘古平台标准)
+     * @param conditionFieldValue 参与条件查询的字段值
+     * @param resourceIdentifier 参与条件查询的数据资源标识符(烽火盘古平台标准)
+     * @param resourceCode 参与条件查询的数据资源标识符对应的数据资源编码(烽火盘古平台标准)
      * @return
      */
     public void callFHUniQueryService(String taskId, String conditionFieldValue, String resourceIdentifier, String resourceCode){
-        // ========== 1.获取烽火 - 服务开放平台认证token
-        Map<String, Object> tokenHeaderParamsMap = new HashMap<>();
-        tokenHeaderParamsMap.put("Content-Type", Constants.URLENCODED_RSP_TYPE);
-        Map<String, Object> userTokenMap = new HashMap<>();
-        userTokenMap.put("type", fwkfptType);
-        userTokenMap.put("policeNo", fwkfptPoliceNo);
-        userTokenMap.put("userId", fwkfptUserId);
-        Map<String, Object> appTokenMap = new HashMap<>();
-        appTokenMap.put("appId", fwkfptAppId);
-        appTokenMap.put("userToken", JSON.toJSONString(userTokenMap));
-        List<NameValuePair> nameValuePairs = new ArrayList<>();
-        nameValuePairs.add(new BasicNameValuePair("userToken", JSON.toJSONString(userTokenMap)));
-        nameValuePairs.add(new BasicNameValuePair("appToken", JSON.toJSONString(appTokenMap)));
-        nameValuePairs.add(new BasicNameValuePair("serviceid", fwkfptServiceId));
-        HttpClient httpClient = new HttpClient();
-        String content = httpClient.postResourceFWKFPT(fwkfptTokenUrl, nameValuePairs, tokenHeaderParamsMap);
-        JSONObject resultJSONobj = JSON.parseObject(content);
-        String appTokenId = "";
-        String userTokenId = "";
-        if(resultJSONobj != null){
-            String appTokenJSONStr = resultJSONobj.getString("appTokenId");
-            String userTokenJSONStr = resultJSONobj.getString("userTokenId");
-            if(StringUtils.isBlank(appTokenJSONStr) && StringUtils.isBlank(userTokenJSONStr)){
-                String message = resultJSONobj.getString("message");
-                log.error("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建失败,异常信息:{}", message);
-            }
-            appTokenId = JSON.parseObject(appTokenJSONStr).getString("appToken");
-            userTokenId = JSON.parseObject(userTokenJSONStr).getString("userToken");
-            log.info("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建成功,响应消息:{}", content);
+        // ========== 获取烽火 - 服务开放平台认证token
+        Map<String, String> tokenMap = getFHUniQueryServiceToken();
+        String appTokenId = tokenMap.get("appTokenId");
+        String userTokenId = tokenMap.get("userTokenId");
+        if(StringUtils.isBlank(appTokenId) || StringUtils.isBlank(userTokenId)){
+            log.info("【QBEQSJYCTRL - 聚集预警通用查询服务】 获取目标服务认证token失败,操作结束");
+            return;
         }
-
-        // ========== 2.调用烽火 - 同行类数据通查服务接口
+        // ========== 调用烽火 - 同行类数据通查服务接口
         long start = System.currentTimeMillis();
         Map<String, Object> headerParamsMap = new HashMap<>();
         headerParamsMap.put("Content-Type", Constants.DEFAULT_RSP_TYPE);
@@ -132,7 +110,7 @@ public class SameTravelService {
         requestParam.put("ResourceInfos", resourceInfosList);
         reqBody.put("RequestParam", requestParam);
         String rspStr = httpClient.postResource(fwkfptUniQueryUrl, JSON.toJSONString(reqBody, SerializerFeature.WriteMapNullValue), headerParamsMap);
-        // ========== 3.解析烽火 - 同行类数据通查服务接口响应信息
+        // ========== 解析烽火 - 同行类数据通查服务接口响应信息
         JSONObject rspJSONObj = JSON.parseObject(rspStr);
         List<JSONObject> dataList = new ArrayList<>();
         if(rspJSONObj != null){
@@ -147,9 +125,9 @@ public class SameTravelService {
                     JSONArray dataInfo = jsonObject.getJSONArray("DataInfo");
                     if(dataInfo != null && dataInfo.size() > 0){   // 存在命中数据
                         JSONArray dataItems = jsonObject.getJSONArray("DataItems");
+                        // 格式化存储预警结果数据,形如:[{"xm": "1", "zjhm": "111"}, {"xm": "2", "zjhm": "222"}, ...]
                         for (Object obj : dataInfo) {
                             JSONArray dataRow = (JSONArray) obj;
-//                            Map<String, Object> rowData = new HashMap<>();
                             JSONObject rowData = new JSONObject();
                             for (int i = 0; i < dataRow.size(); i++) {
                                 Object columnValue = dataRow.get(i);
@@ -164,22 +142,213 @@ public class SameTravelService {
             }
         }
         log.info("【烽火 - 服务开放平台 # 同行类数据通查服务接口 响应数据解析完成】 命中数据量:{}", dataList.size());
-        // ========== 4.保存入库烽火 - 同行类查询结果数据
+        // ========== 保存入库同行类业务查询结果数据(入库前需关联补全对应布控任务相关信息)
+        List<Object[]> warningInfoList = new ArrayList<>();
+        int batchSaveNum = 0;
         if(dataList.size() > 0){
-            // 通过数据资源编码动态获取每个数据资源对应的JSON数据解析公式
-            String parseFormula = CommonUtil.getConfValueByKey(resourceCode);
+            // 预警状态默认为0(未读)
+            Integer yjzt = 0;
+            // 预警时间
+            Date yjsj = new Date();
             for (JSONObject item : dataList) {
-                
-                Object titles = JSONPath.eval(item, "$.store.book[*].title");
-                
+                // 构造预警信息说明
+                String yjxxsm = buildYjxxsmByResourceCode(resourceCode, item);
+                // 根据任务编号、线索值、线索类型查询对应的布控任务相关信息(包含任务信息、区域信息、线索信息)
+                List<Map<String, Object>> ctrlTaskInfoList = ctrlDao.queryCtrlTaskInfo(taskId, conditionFieldValue, clueCodeIdCard);
+                if(ctrlTaskInfoList.size() > 0){
+                    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"));
+                    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"));
+                    // 生成预警信息编号
+                    String yjxxbh = String.valueOf(generator.nextId());
+                    warningInfoList.add(new Object[]{taskId, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm, yjzt, Constants.YJZT_WD, yjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, yjsj, yjsj});
+                }
+            }
+            if(warningInfoList.size() > 0){
+                batchSaveNum = ctrlDao.batchInsertWarningInfo(warningInfoList);
+            }
+        }
+        log.info("【QBEQSJYCTRL - 聚集预警通用查询服务】 命中数据量:{},已入库数据量:{}", dataList.size(), batchSaveNum);
+    }
+
+
+    /**
+     * 获取烽火 - 服务开放平台认证token
+     * @return
+     */
+    public Map<String, String> getFHUniQueryServiceToken(){
+        Map<String, String> tokenMap = new HashMap<>();
+        Map<String, Object> tokenHeaderParamsMap = new HashMap<>();
+        tokenHeaderParamsMap.put("Content-Type", Constants.URLENCODED_RSP_TYPE);
+        Map<String, Object> userTokenMap = new HashMap<>();
+        userTokenMap.put("type", fwkfptType);
+        userTokenMap.put("policeNo", fwkfptPoliceNo);
+        userTokenMap.put("userId", fwkfptUserId);
+        Map<String, Object> appTokenMap = new HashMap<>();
+        appTokenMap.put("appId", fwkfptAppId);
+        appTokenMap.put("userToken", JSON.toJSONString(userTokenMap));
+        List<NameValuePair> nameValuePairs = new ArrayList<>();
+        nameValuePairs.add(new BasicNameValuePair("userToken", JSON.toJSONString(userTokenMap)));
+        nameValuePairs.add(new BasicNameValuePair("appToken", JSON.toJSONString(appTokenMap)));
+        nameValuePairs.add(new BasicNameValuePair("serviceid", fwkfptServiceId));
+        String rspContent = httpClient.postResourceFWKFPT(fwkfptTokenUrl, nameValuePairs, tokenHeaderParamsMap);
+        JSONObject rspContentJSONObj = JSON.parseObject(rspContent);
+        if(rspContentJSONObj != null){
+            String appTokenJSONStr = rspContentJSONObj.getString("appTokenId");
+            String userTokenJSONStr = rspContentJSONObj.getString("userTokenId");
+            if(StringUtils.isBlank(appTokenJSONStr) || StringUtils.isBlank(userTokenJSONStr)){
+                String message = rspContentJSONObj.getString("message");
+                log.error("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建失败,异常信息:{}", message);
+            } else {
+                String appTokenId = JSON.parseObject(appTokenJSONStr).getString("appToken");
+                String userTokenId = JSON.parseObject(userTokenJSONStr).getString("userToken");
+                tokenMap.put("appTokenId", appTokenId);
+                tokenMap.put("userTokenId", userTokenId);
+                log.info("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建成功");
             }
         }
+        return tokenMap;
     }
 
 
-    public static void main(String[] args) {
-        SameTravelService sameTravelService = new SameTravelService();
-        sameTravelService.callFHUniQueryService("","120000xxxx", "R-120000000000-00000003", "");
+    /**
+     * 根据 数据资源编码和对应JSON数据 构造对应预警信息说明
+     * @param resourceCode
+     * @param data
+     * @return
+     */
+    public String buildYjxxsmByResourceCode(String resourceCode, JSONObject data){
+        String yjxxsm = "";
+        if(Constants.RES_CODE_THC.equals(resourceCode)){
+            String xm = data.getString("XM");
+            String zjhm = data.getString("ZJHM");
+            String zwh = data.getString("ZWH");
+            String xm2 = data.getString("XM_2");
+            String zjhm2 = data.getString("ZJHM_2");
+            String zwh2 = data.getString("ZWH_2");
+            String facRq = data.getString("FAC_RQ");
+            String cc = data.getString("CC");
+            String cxh = data.getString("CXH");
+            String sfazMc = data.getString("SFAZ_MC");
+            String ddzMc = data.getString("DDZ_MC");
+            String flagGx = "0".equals(data.getString("FLAG_GX"))? "邻座" : "前后排";
+            yjxxsm = xm + "(身份证号:" + zjhm + ",座位号:" + zwh + ")和" + xm2 + "(身份证号:" + zjhm2 + ",座位号:" + zwh2 + ")于" + facRq + "共同乘坐" + cc + "次列车第"
+                    + cxh + "号车厢,出发站:" + sfazMc + ",到达站:" + ddzMc + ",位置关系:" + flagGx;
+        }
+        if (Constants.RES_CODE_THB.equals(resourceCode)){
+            String zjhm = data.getString("FIRST_PER_ZJHM");
+            String xm = data.getString("FIRST_PER_NAME");
+            String zjhm2 = data.getString("SECOND_PER_ZJHM");
+            String xm2 = data.getString("SECOND_PER_NAME");
+            String cfjcXxdm = data.getString("QFJC_XXDM02");
+            String ddjcXxdm = data.getString("DDJC_XXDM02");
+            String cfrq = data.getString("DD_CFA_RQ");
+            String ddrq = data.getString("DD_DD_RQ");
+            String gtdpXxbh = data.getString("GTDP_XXBH");
+            yjxxsm = xm + "(身份证号:" + zjhm + ")和" + xm2 + "(身份证号:" + zjhm2 + ")共同购买航班票,出发机场信息代码:" + cfjcXxdm + ",到达机场信息代码:" + ddjcXxdm
+                    + ",出发日期:" + cfrq + ",到达日期:" + ddrq + "共同订票信息编号:" + gtdpXxbh;
+        }
+        if (Constants.RES_CODE_TBG.equals(resourceCode)) {
+            String zjhm = data.getString("ZJHM");
+            String xm = data.getString("XM");
+            String zjhm2 = data.getString("ZJHM2");
+            String xm2 = data.getString("XM2");
+            String rzlgXxbh = data.getString("RUZ_LVG_XXBH");
+            // 根据旅馆信息编号关联旅馆名称信息
+            String rzlgmc = "";
+            String rzfjh = data.getString("RUZ_FAJ_XXBH");
+            String rzsj = data.getString("RUZ_JDSJ");
+            String rzsj2 = data.getString("RUZ_JDSJ2");
+            yjxxsm = xm + "(身份证号:" + zjhm + ")和" + xm2 + "(身份证号:" + zjhm2 + ")共同入住" + rzlgmc + ",房间号:" + rzfjh + "," + xm + "入住时间:" + rzsj + ","
+                    + xm2 + "入住时间:" + rzsj2;
+        }
+        if (Constants.RES_CODE_TWB.equals(resourceCode)) {
+            String zjhm = data.getString("SWR_ZJHM");
+            String csxxdm = data.getString("YYCS_XXDM02");
+            String csmc = data.getString("YYCS_MC");
+            String xm = data.getString("SWR_XM");
+            String xm2 = data.getString("SWR_XM_2");
+            String zjhm2 = data.getString("SWR_ZJHM_2");
+            String swkssj = data.getString("SWSESSION_KSSJ");
+            String swkssj2 = data.getString("SWSESSION_KSSJ_2");
+            String swxxzdbh = data.getString("SWSESSION_ZHD_XXBH");
+            String swxxzdbh2 = data.getString("SWSESSION_ZHD_XXBH_2");
+            yjxxsm = xm + "(身份证号:" + zjhm + ")和" + xm2 + "(身份证号:" + zjhm2 + ")于" + csmc + "(场所信息代码:" + csxxdm + ")共同上网," + xm + "上网开始时间:"
+                    + swkssj + "(上网终端信息编号:"+ swxxzdbh + ")," + xm2 + "上网开始时间:" + swkssj2 + "(上网终端信息编号:"+ swxxzdbh2 + ")";
+        }
+        if (Constants.RES_CODE_TCTKY.equals(resourceCode)){
+            String zjhm = data.getString("FIRST_PER_ZJHM");
+            String xm = data.getString("FIRST_PER_NAME");
+            String zjhm2 = data.getString("SECOND_PER_ZJHM");
+            String xm2 = data.getString("SECOND_PER_NAME");
+            String cczId = data.getString("CHCH_ZHDI_ID");
+            String cc = data.getString("JP_CC");
+            String fcjdsj = data.getString("FAC_JDSJ");
+            String mdzId = data.getString("MDD_ID");
+            String mdzmc = data.getString("MDD_ZHDI_MC");
+            yjxxsm = xm + "(身份证号:" + zjhm + ")和" + xm2 + "(身份证号:" + zjhm2 + ")于" + fcjdsj + "共同乘坐" + cc + "长途客车(乘车站ID:" + cczId + "),目的站:"
+                    + mdzmc + "(目的站ID:" + mdzId + ")";
+        }
+        if (Constants.RES_CODE_TMHJG.equals(resourceCode)) {
+            String zjhm = data.getString("ZJHM");
+            String xm = data.getString("LVK_XM");
+            String zjhm2 = data.getString("ZJHM_2");
+            String xm2 = data.getString("LVK_XM_2");
+            String hbsxh = data.getString("HBA_SXH");
+            String hbrq = data.getString("HBA_RQ");
+            String cfjcxxdm = data.getString("QFHZ_SZ_XXDM02");
+            String cfjcmc = data.getString("QFHZ_MC");
+            String ddjcxxdm = data.getString("DDHZ_SZ_XXDM02");
+            String ddjcmc = data.getString("DDHZ_MC");
+            String lgjdsj = data.getString("LG_JDSJ");
+            String jgjdsj = data.getString("JIG_JDSJ");
+            String zwh = data.getString("DQHZ_ZWH");
+            String zwh2 = data.getString("DQHZ_ZWH_2");
+            String flagGx = "0".equals(data.getString("FLAG_GX"))? "邻座" : "前后排";
+            yjxxsm = xm + "(身份证号:" + zjhm + ",座位号:" + zwh + ")和" + xm2 + "(身份证号:" + zjhm2 + ",座位号:" + zwh2 + ")于" + hbrq + "共同乘坐" + hbsxh + "次航班"
+                    + ",出发机场:" + cfjcmc + ",到达机场:" + ddjcmc + ",进港时间:" + jgjdsj + ",位置关系:" + flagGx;
+        }
+        if (Constants.RES_CODE_TMHLG.equals(resourceCode)) {
+            String zjhm = data.getString("ZJHM");
+            String xm = data.getString("LVK_XM");
+            String zjhm2 = data.getString("ZJHM_2");
+            String xm2 = data.getString("LVK_XM_2");
+            String hbsxh = data.getString("HBA_SXH");
+            String hbrq = data.getString("HBA_RQ");
+            String cfjcxxdm = data.getString("QFHZ_SZ_XXDM02");
+            String cfjcmc = data.getString("QFHZ_MC");
+            String ddjcxxdm = data.getString("DDHZ_SZ_XXDM02");
+            String ddjcmc = data.getString("DDHZ_MC");
+            String lgjdsj = data.getString("LG_JDSJ");
+            String jgjdsj = data.getString("JIG_JDSJ");
+            String zwh = data.getString("DQHZ_ZWH");
+            String zwh2 = data.getString("DQHZ_ZWH_2");
+            String flagGx = "0".equals(data.getString("FLAG_GX"))? "邻座" : "前后排";
+            yjxxsm = xm + "(身份证号:" + zjhm + ",座位号:" + zwh + ")和" + xm2 + "(身份证号:" + zjhm2 + ",座位号:" + zwh2 + ")于" + hbrq + "共同乘坐" + hbsxh + "次航班"
+                    + ",出发机场:" + cfjcmc + ",到达机场:" + ddjcmc + ",离港时间:" + jgjdsj + ",位置关系:" + flagGx;
+        }
+        return yjxxsm;
     }
 
 

+ 1 - 7
src/main/resources/application.properties

@@ -76,7 +76,7 @@ query.max.count=1000
 134B102=BASE_STATION_ID,LONGITUDE,LATITUDE
 
 # \u540C\u884C\u7C7B\u6570\u636E\u8D44\u6E90\u6807\u8BC6\u7B26
-# \u6570\u636E\u8D44\u6E90\u6807\u8BC6\u7B26=\u5B57\u6BB5\u540D1,\u5B57\u6BB5\u540D2...
+# \u6570\u636E\u8D44\u6E90\u6807\u8BC6\u7B26=\u5B57\u6BB5\u540D1,\u5B57\u6BB5\u540D2...\uFF08\u8BF4\u660E\uFF1A\u4EE5\u4E0B\u6BCF\u4E00\u9879\u7684\u7B2C\u4E00\u4E2A\u5B57\u6BB5\u4F5C\u4E3A\u53C2\u4E0E\u6761\u4EF6\u67E5\u8BE2\u7684\u9ED8\u8BA4\u5B57\u6BB5\uFF09
 # \u540C\u706B\u8F66
 R-120000000000-00000001=ZJHM,XM,XM_2,ZJHM_2,FAC_RQ,CC,SFAZ_MC,DDZ_MC,CXH,ZWH,ZWH_2,FLAG_GX
 # \u540C\u822A\u73ED
@@ -92,12 +92,6 @@ R-120000000000-00000006=ZJHM,LVK_XM,LVK_XM_2,ZJHM_2,HBA_SXH,HBA_RQ,QFHZ_SZ_XXDM0
 # \u540C\u957F\u9014\u5BA2\u8FD0
 R-120000000000-00000007=FIRST_PER_ZJHM,FIRST_PER_NAME,SECOND_PER_ZJHM,SECOND_PER_NAME,CHCH_ZHDI_ID,JP_CC,FAC_JDSJ,MDD_ID,MDD_ZHDI_MC
 
-# \u540C\u884C\u7C7B\u6570\u636E\u8D44\u6E90\u7F16\u7801
-# \u6570\u636E\u8D44\u6E90\u7F16\u7801=\u4E1A\u52A1\u5B57\u6BB5JSONPath\u89E3\u6790\u516C\u5F0F
-# \u540C\u706B\u8F66
-991XXXX=$.XM(\u8EAB\u4EFD\u8BC1\u53F7\uFF1A$.ZJHM\uFF0C\u5EA7\u4F4D\u53F7\uFF1A$.ZWH)\u548C$.XM_2(\u8EAB\u4EFD\u8BC1\u53F7\uFF1A$.ZJHM_2\uFF0C\u5EA7\u4F4D\u53F7\uFF1A$.ZWH_2)\u4E8E$.FAC_RQ\u5171\u540C\u4E58\u5750$.CC\u6B21\u5217\u8F66\u7B2C$.CXH\u53F7\u8F66\u53A2\uFF0C\u51FA\u53D1\u7AD9\uFF1A$.SFAZ_MC\uFF0C\u5230\u8FBE\u7AD9\uFF1A$.DDZ_MC\uFF0C\u4F4D\u7F6E\u5173\u7CFB\uFF1A$.FLAG_GX
-
-
 # \u540C\u884C\u7C7B\u6570\u636E\u67E5\u8BE2\u4E00\u6B21\u6700\u5927\u8FD4\u56DE\u6570\u636E\u6761\u6570\uFF0C\u9ED8\u8BA41000\u6761
 tx.query.max.count=1000