Forráskód Böngészése

【情报二期】数据域服务 - 命中点位补全地址信息代码

peifj 2 hónapja
szülő
commit
a24b876226

+ 18 - 7
src/main/java/com/hhwy/qbeqsjy/kafka/service/ConsumeService.java

@@ -36,9 +36,12 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
     private String clueCodePhone;
     @Value("${clue.code.idCard}")
     private String clueCodeIdCard;
+    @Value("${address.query.url}")
+    private String addressQueryUrl;
     @Resource
     private CtrlDao ctrlDao;
     private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+    private HttpClient httpClient = new HttpClient();
 
 
     // IOC容器刷新完成后就会发布ContextRefreshedEvent事件
@@ -97,7 +100,8 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                     String resourceId = uniCtrl.getString("U_RESID");
                     // 每张布控资源表对应的命中数据JSON对象
                     JSONObject oriField = message.getJSONObject("ORIFIELD");
-                    String yjxxsm = oriField.toJSONString();
+//                    String yjxxsm = oriField.toJSONString();
+                    String yjxxsm = "";
                     Date yjsj = new Date();
                     // 生成预警信息编号
                     String yjxxbh = String.valueOf(generator.nextId());
@@ -133,17 +137,24 @@ public class ConsumeService implements ApplicationListener<ContextRefreshedEvent
                         String zrbmbm = String.valueOf(ctrlTaskInfo.get("zrbmbm"));
                         // 如果布控资源为AUTH表
                         if(Constants.TABLE_AUTH_RES_ID.equals(resourceId)){
-                            // 1. ========================= 过滤基站号为空的数据
+                            // 1. ========================= 过滤基站号、经纬度为空的数据
                             String baseStationId = oriField.getString("BASE_STATION_ID");
-                            if(StringUtils.isBlank(baseStationId)){
+                            String lon = oriField.getString("LONGITUDE");
+                            String lat = oriField.getString("LATITUDE");
+                            if(StringUtils.isBlank(baseStationId) || StringUtils.isBlank(lon) || StringUtils.isBlank(lat)){
                                 continue;
                             }
-                            // 2. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据
+                            // 2. ========================= 根据命中点位经纬度查询对应的地址信息(百度坐标系)
+                            String fullAddressQueryUrl = addressQueryUrl.replace("x", lon).replace("y", lat);
+                            String rspStr = httpClient.sendGetRequst(fullAddressQueryUrl, 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 + ")";
+                            // 3. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据
                             JSONArray areaInfoList = JSON.parseArray(bkqyxx);
                             if(areaInfoList != null && areaInfoList.size() > 0){
-                                // 命中点位经纬度
-                                String lon = oriField.getString("LONGITUDE");
-                                String lat = oriField.getString("LATITUDE");
                                 for (Object obj : areaInfoList) {
                                     JSONObject ctrlAreaInfo = (JSONObject) obj;
                                     Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx");

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

@@ -181,41 +181,11 @@ public class CtrlService {
         ExecutorService executorService = Executors.newFixedThreadPool(Constants.NUM_1);
         executorService.execute(() -> {
             Date createTime = new Date();
-            List<Object[]> ctrlErrorList = new ArrayList<>();
-            int ctrlNum = 0;
-            HttpClient httpClient = new HttpClient();
-            for (Map<String, Object> clueMap : clueList) {
-                if(!clueMap.isEmpty()){
-                    // 重新组装前端传入的参数
-                    String clue = String.valueOf(clueMap.get("clue"));
-                    String clueType = String.valueOf(clueMap.get("clueType"));
-                    clueMap.put("taskId", taskId);
-                    clueMap.put("resourceIdList", resourceIdList);
-                    AjaxResult result = doCtrl(httpClient, clueMap);
-                    int code = (int) result.get("code");
-                    if(code == 500){
-                        // 记录布控失败的线索信息,等待当前任务布控操作执行结束后再批量入库,后续通过设置定时任务按照记录的布控失败线索信息继续实施布控
-                        // 存在操作延迟,但保证数据最终一致性
-                        Object[] errorData = new Object[]{taskId, clue, clueType, resourceIdList, createTime};
-                        ctrlErrorList.add(errorData);
-                    } else {
-                        JSONObject data = (JSONObject) result.get("data");
-                        if(data == null){
-                            String msg = (String) result.get("msg");
-                            log.info("任务ID:{},线索值:{},布控服务返回信息:{}", taskId, clue, msg);
-                        } else {
-                            String clueId = data.getString("clueId");
-                            log.info("任务ID:{},线索值:{},线索ID:{}", taskId, clue, clueId);
-                        }
-                    }
-                    ctrlNum++;
-                }
-                // 每布控5000条线索,当前线程睡眠30s,减轻【统一布控】服务端压力
-                if(ctrlNum == Constants.NUM_5000){
-                    CommonUtil.threadSleep(Constants.NUM_30000);
-                    ctrlNum = 0;
-                }
-            }
+            // --- todo
+
+
+
+
             log.info("--- > 任务ID:{},线索集合布控完成", taskId);
 
         });

+ 32 - 17
src/main/java/com/hhwy/qbeqsjy/kafka/service/SameTravelService.java → src/main/java/com/hhwy/qbeqsjy/service/SameTravelService.java

@@ -1,17 +1,20 @@
-package com.hhwy.qbeqsjy.kafka.service;
+package com.hhwy.qbeqsjy.service;
 
 import com.alibaba.fastjson.JSON;
 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.dao.CtrlDao;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.NameValuePair;
 import org.apache.http.message.BasicNameValuePair;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -43,17 +46,20 @@ public class SameTravelService {
     private String fwkfptUniQueryUrl;
     @Value("${tx.query.max.count}")
     private String maxReturnNum;
+    @Autowired
+    private CtrlDao ctrlDao;
 
 
     /**
-     * 调用烽火同行类数据通查服务接口
+     * 调用烽火同行类数据通查服务接口,并将查询结果保存入库
+     * @param taskId 任务编号
      * @param conditionFieldValue 条件查询的字段值
-     * @param resourceName 条件查询的数据资源标识符(烽火标准)
+     * @param resourceIdentifier 条件查询的数据资源标识符(烽火盘古平台标准)
+     * @param resourceCode 条件查询的数据资源标识符对应的数据资源编码(烽火盘古平台标准)
      * @return
      */
-    public List<Map<String, Object>> callFHUniQueryService(String conditionFieldValue, String resourceName){
-        List<Map<String, Object>> dataList = new ArrayList<>();
-        // ========== 获取烽火 - 服务开放平台token
+    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<>();
@@ -84,8 +90,8 @@ public class SameTravelService {
             log.info("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建成功,响应消息:{}", content);
         }
 
+        // ========== 2.调用烽火 - 同行类数据通查服务接口
         long start = System.currentTimeMillis();
-        // ========== 构造请求头
         Map<String, Object> headerParamsMap = new HashMap<>();
         headerParamsMap.put("Content-Type", Constants.DEFAULT_RSP_TYPE);
         headerParamsMap.put("app_token", appTokenId);
@@ -94,13 +100,12 @@ public class SameTravelService {
         headerParamsMap.put("subid", fwkfptAppId);
         headerParamsMap.put("serviceid", fwkfptServiceId);
         headerParamsMap.put("SenderID", fwkfptSenderId);
-        // ========== 构造请求体
         Map<String, Object> reqBody = new HashMap<>();
         reqBody.put("From", Constants.AREA_CODE_TJ);
         reqBody.put("To", Constants.AREA_CODE_TJ);
         reqBody.put("MessageSequence", TimeTool.timeStampToDateString4(TimeTool.getNowTimeStamp()));
         Map<String, Object> requestParam = new HashMap<>();
-        List<String> rspFieldNameList = Arrays.asList(CommonUtil.getConfValueByKey(resourceName).split(","));
+        List<String> rspFieldNameList = Arrays.asList(CommonUtil.getConfValueByKey(resourceIdentifier).split(","));
         requestParam.put("Condition", rspFieldNameList.get(0) + "='" + conditionFieldValue + "'");
         Map<String, Object> otherCondition = new HashMap<>();
         otherCondition.put("AsyncBoolean", Constants.STR_NUM_0);
@@ -122,14 +127,14 @@ public class SameTravelService {
             dataItemsList.add(dataItemMap);
         }
         resourceInfoMap.put("DataItems", dataItemsList);
-        resourceInfoMap.put("ResourceName", resourceName);
+        resourceInfoMap.put("ResourceName", resourceIdentifier);
         resourceInfosList.add(resourceInfoMap);
         requestParam.put("ResourceInfos", resourceInfosList);
         reqBody.put("RequestParam", requestParam);
-        log.info(JSON.toJSONString(reqBody, SerializerFeature.WriteMapNullValue));
-
         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){
             String messageStatus = rspJSONObj.getString("MessageStatus");
             if("0200".equals(messageStatus)){
@@ -144,27 +149,37 @@ public class SameTravelService {
                         JSONArray dataItems = jsonObject.getJSONArray("DataItems");
                         for (Object obj : dataInfo) {
                             JSONArray dataRow = (JSONArray) obj;
-                            Map<String, Object> rowMap = new HashMap<>();
+//                            Map<String, Object> rowData = new HashMap<>();
+                            JSONObject rowData = new JSONObject();
                             for (int i = 0; i < dataRow.size(); i++) {
                                 Object columnValue = dataRow.get(i);
                                 JSONObject columnMap = dataItems.getJSONObject(i);
                                 String name = columnMap.getString("Name");
-                                rowMap.put(name, columnValue);
+                                rowData.put(name, columnValue);
                             }
-                            dataList.add(rowMap);
+                            dataList.add(rowData);
                         }
                     }
                 }
             }
         }
         log.info("【烽火 - 服务开放平台 # 同行类数据通查服务接口 响应数据解析完成】 命中数据量:{}", dataList.size());
-        return dataList;
+        // ========== 4.保存入库烽火 - 同行类查询结果数据
+        if(dataList.size() > 0){
+            // 通过数据资源编码动态获取每个数据资源对应的JSON数据解析公式
+            String parseFormula = CommonUtil.getConfValueByKey(resourceCode);
+            for (JSONObject item : dataList) {
+                
+                Object titles = JSONPath.eval(item, "$.store.book[*].title");
+                
+            }
+        }
     }
 
 
     public static void main(String[] args) {
         SameTravelService sameTravelService = new SameTravelService();
-        sameTravelService.callFHUniQueryService("120000xxxx", "R-120000000000-00000003");
+        sameTravelService.callFHUniQueryService("","120000xxxx", "R-120000000000-00000003", "");
     }
 
 

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

@@ -39,6 +39,8 @@ uniCtrl.add.url=http://130.0.46.141:8090/lokiRest/uniCtrl/monitor/add
 uniCtrl.del.url=http://130.0.46.141:8090/lokiRest/uniCtrl/monitor/del
 # \u3010\u7EDF\u4E00\u5E03\u63A7\u3011\u5E03\u63A7\u7ED3\u679C\u67E5\u8BE2\u63A5\u53E3url
 uniCtrl.query.url=http://130.0.46.141:8090/lokiRest/unictrl/query/status
+# \u70FD\u706B\u5730\u5740\u4FE1\u606F\u67E5\u8BE2\u63A5\u53E3url\uFF08\u767E\u5EA6\u5750\u6807\u7CFB\uFF09
+address.query.url=http://130.0.56.93:9150/FHGis/geocoder/inverse?lon=x&lat=y
 
 # \u70FD\u706B - \u3010\u670D\u52A1\u5F00\u653E\u5E73\u53F0\u3011\u914D\u7F6E
 # \u3010\u670D\u52A1\u5F00\u653E\u5E73\u53F0\u3011\u83B7\u53D6token\u63A5\u53E3url
@@ -90,10 +92,15 @@ 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
 
-
 # \u5355\u4F4D&\u90E8\u95E8\u7F16\u7801\u5B57\u5178
 120000000000=\u5929\u6D25\u5E02\u516C\u5B89\u5C40
 120000010000=\u6307\u6325\u4E2D\u5FC3