瀏覽代碼

【情报二期】数据域服务 - 同行类数据统一查询接口代码

peifj 2 月之前
父節點
當前提交
0bafe600b8

+ 7 - 1
src/main/java/com/hhwy/qbeqsjy/common/Constants.java

@@ -11,6 +11,12 @@ import java.util.Locale;
  */
 public class Constants {
 
+    // 接口响应内容类型默认值
+    public static final String DEFAULT_RSP_TYPE = "application/json";
+    // 接口响应内容类型值
+    public static final String URLENCODED_RSP_TYPE = "application/x-www-form-urlencoded";
+    // 地区代码:天津
+    public static final String AREA_CODE_TJ = "120000";
     // 任务标识:单人预警
     public static final String TASK_DRYJ = "DRYJ";
     // 任务标识:聚集预警
@@ -267,8 +273,8 @@ public class Constants {
 
     public static final int SUCCESSSTATUS = 200;
     public static final int ERRSTATUS = 400;
+    public static final String STR_NUM_0 = "0";
     public static final String STR_NUM_1 = "1";
-
     public static final long NUM_1539100800 = 1539100800L;
     public static final double TJ_LON = 117.217;
     public static final double TJ_LAT = 39.14;

+ 7 - 0
src/main/java/com/hhwy/qbeqsjy/common/TimeTool.java

@@ -79,6 +79,13 @@ public class TimeTool {
 		String dateString = sdf.format(timeStamp * Constants.NUM_1000);
 		return dateString;
 	}
+
+
+	public static String timeStampToDateString4(Long timeStamp) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSss");
+		String dateString = sdf.format(timeStamp * Constants.NUM_1000);
+		return dateString;
+	}
 	
 	/**
 	 * 将时间字符串转换为绝对秒(时间字符串格式为yyyy-MM-dd HH:mm:ss)

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

@@ -203,31 +203,31 @@ public class CtrlDao {
 
 
     /**
-     * 根据 系统ID 获取预警数据查询记录表中对应的最新一次查询时间(绝对秒)
+     * 根据 系统ID 获取预警数据查询记录表中对应的起始查询时间
      * @param sysId
      * @return
      */
-    public Timestamp getLastQueryTimeBySysId(String sysId){
-        String sql = "select last_query_time from t_ctrl_warning_query_info where sysId = ?";
+    public Timestamp getStartQueryTimeBySysId(String sysId){
+        String sql = "select start_query_time from t_ctrl_warning_query_info where sysId = ?";
         try {
-            return (Timestamp) gaussDBJdbcTemplate.queryForMap(sql, sysId).get("last_query_time");
+            return (Timestamp) gaussDBJdbcTemplate.queryForMap(sql, sysId).get("start_query_time");
         } catch (Exception e){
-            log.error("【根据系统ID获取预警数据查询记录表中对应的最新一次查询时间发生异常】 异常信息:", e);
+            log.error("【根据系统ID获取预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
         }
         return null;
     }
 
 
     /**
-     * 基于最新一次查询时间,计算当前预警数据表中的最大入库时间(尽量减少参与计算预警数据中最大入库时间的数据量
+     * 基于起始查询时间,计算当前预警数据表中的最大创建(入库)时间   --- 尽量减少参与计算预警数据中最大入库时间的数据量
      * @return
      */
-    public Timestamp getNewMaxCreateTime(Timestamp lastQueryTime){
+    public Timestamp getNewMaxCreateTime(Timestamp startQueryTime){
         String sql = "select max(cjsj) max_cjsj from t_ctrl_warning_info where cjsj > ?";
         try {
-            return (Timestamp) gaussDBJdbcTemplate.queryForMap(sql, lastQueryTime).get("max_cjsj");
+            return (Timestamp) gaussDBJdbcTemplate.queryForMap(sql, startQueryTime).get("max_cjsj");
         } catch (Exception e){
-            log.error("【基于最新一次查询时间,计算当前预警数据表中的最大入库时间发生异常】 异常信息:", e);
+            log.error("【基于起始查询时间,计算当前预警数据表中的最大入库时间发生异常】 异常信息:", e);
         }
         return null;
     }
@@ -235,14 +235,14 @@ public class CtrlDao {
 
     /**
      * 增量查询布控任务预警结果数据
-     * @param lastQueryTime
+     * @param startQueryTime
      * @return
      */
-    public List<Map<String, Object>> queryWarningInfoByInc(Timestamp lastQueryTime, Timestamp currentMaxCreateTime){
+    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, cjsj, gxsj from t_ctrl_warning_info where yjsj > ? and yjsj <= ? order by yjsj desc";
         try {
-            warningInfoList = gaussDBJdbcTemplate.queryForList(sql, lastQueryTime, currentMaxCreateTime);
+            warningInfoList = gaussDBJdbcTemplate.queryForList(sql, startQueryTime, newMaxCreateTime);
             log.info("【增量查询布控任务预警结果数据成功】 数据量:{}", warningInfoList.size());
         } catch (Exception e){
             log.error("【增量查询布控任务预警结果数据发生异常】 异常信息:", e);
@@ -252,16 +252,16 @@ public class CtrlDao {
 
 
     /**
-     * 根据 系统ID 更新预警数据查询记录表中对应的最新一次查询时间(绝对秒)
+     * 根据 系统ID 更新预警数据查询记录表中对应的起始查询时间
      * @return
      */
-    public boolean updateLastQueryTimeBySysId(Timestamp currentMaxCreateTime, String sysId){
-        String sql = "update t_ctrl_warning_query_info set last_query_time = ? where where sysId = ?";
+    public boolean updateStartQueryTimeBySysId(Timestamp newMaxCreateTime, String sysId){
+        String sql = "update t_ctrl_warning_query_info set start_query_time = ? where where sysId = ?";
         try {
-            int updateRows = gaussDBJdbcTemplate.update(sql, currentMaxCreateTime, sysId);
+            int updateRows = gaussDBJdbcTemplate.update(sql, newMaxCreateTime, sysId);
             return updateRows > 0;
         } catch (Exception e){
-            log.error("【根据系统ID更新预警数据查询记录表中对应的最新一次查询时间发生异常】 异常信息:", e);
+            log.error("【根据系统ID更新预警数据查询记录表中对应的起始查询时间发生异常】 异常信息:", e);
         }
         return false;
     }

+ 59 - 11
src/main/java/com/hhwy/qbeqsjy/kafka/service/SameTravelService.java

@@ -3,17 +3,19 @@ package com.hhwy.qbeqsjy.kafka.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+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 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.Value;
 import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
 
 
 /**
@@ -39,16 +41,21 @@ public class SameTravelService {
     private String fwkfptTokenUrl;
     @Value("${fwkfpt.uniQuery.url}")
     private String fwkfptUniQueryUrl;
+    @Value("${tx.query.max.count}")
+    private String maxReturnNum;
 
 
     /**
      * 调用烽火同行类数据通查服务接口
+     * @param conditionFieldValue 条件查询的字段值
+     * @param resourceName 条件查询的数据资源标识符(烽火标准)
      * @return
      */
-    public List<Map<String, Object>> callFHUniQueryService(){
+    public List<Map<String, Object>> callFHUniQueryService(String conditionFieldValue, String resourceName){
         List<Map<String, Object>> dataList = new ArrayList<>();
+        // ========== 获取烽火 - 服务开放平台token
         Map<String, Object> tokenHeaderParamsMap = new HashMap<>();
-        tokenHeaderParamsMap.put("Content-Type", "application/x-www-form-urlencoded");
+        tokenHeaderParamsMap.put("Content-Type", Constants.URLENCODED_RSP_TYPE);
         Map<String, Object> userTokenMap = new HashMap<>();
         userTokenMap.put("type", fwkfptType);
         userTokenMap.put("policeNo", fwkfptPoliceNo);
@@ -76,17 +83,52 @@ public class SameTravelService {
             userTokenId = JSON.parseObject(userTokenJSONStr).getString("userToken");
             log.info("获取【烽火 - 服务开放平台 # 权限认证令牌】 令牌创建成功,响应消息:{}", content);
         }
+
         long start = System.currentTimeMillis();
+        // ========== 构造请求头
         Map<String, Object> headerParamsMap = new HashMap<>();
-        headerParamsMap.put("Content-Type", "application/json");
+        headerParamsMap.put("Content-Type", Constants.DEFAULT_RSP_TYPE);
         headerParamsMap.put("app_token", appTokenId);
         headerParamsMap.put("user_token", userTokenId);
         headerParamsMap.put("userid", fwkfptUserId);
         headerParamsMap.put("subid", fwkfptAppId);
         headerParamsMap.put("serviceid", fwkfptServiceId);
         headerParamsMap.put("SenderID", fwkfptSenderId);
-        String reqBody = "{ \"From\":\"120000\", \"To\":\"120000\", \"MessageSequence\":\"2020030314141200001\", \"RequestParam\":{ \"Condition\":\"VEH_PLATE_NUM='津RVG959'\", \"OtherCondition\":{ \"AsyncBoolean\":\"0\", \"AsyncIdentity\":\"0\", \"AsyncOnceReturnNum\":\"100\", \"AsyncQuery\":\"\", \"CallbackID\":\"\", \"CodeMode\":\"0\", \"MaxReturnNum\":\"10\", \"SortResults\":\"ILLE_TIME+\" }, \"ResourceInfos\":[ { \"DataItems\":[ { \"Name\":\"VEH_PLATE_NUM\", \"Fmt\": \"\" }, { \"Name\":\"ILLE_TIME\", \"Fmt\": \"\" } ], \"ResourceName\":\"R-120000000001-00000170\" } ] } }";
-        String rspStr = httpClient.postResource(fwkfptUniQueryUrl, reqBody, headerParamsMap);
+        // ========== 构造请求体
+        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(","));
+        requestParam.put("Condition", rspFieldNameList.get(0) + "='" + conditionFieldValue + "'");
+        Map<String, Object> otherCondition = new HashMap<>();
+        otherCondition.put("AsyncBoolean", Constants.STR_NUM_0);
+        otherCondition.put("AsyncIdentity", Constants.STR_NUM_0);
+        otherCondition.put("AsyncOnceReturnNum", maxReturnNum);
+        otherCondition.put("AsyncQuery", "");
+        otherCondition.put("CallbackID", "");
+        otherCondition.put("CodeMode", Constants.STR_NUM_0);
+        otherCondition.put("MaxReturnNum", maxReturnNum);
+        otherCondition.put("SortResults", "");
+        requestParam.put("OtherCondition", otherCondition);
+        List<Map<String, Object>> resourceInfosList = new ArrayList<>();
+        Map<String, Object> resourceInfoMap = new HashMap<>();
+        List<Map<String, Object>> dataItemsList = new ArrayList<>();
+        for (String fieldName : rspFieldNameList) {
+            Map<String, Object> dataItemMap = new HashMap<>();
+            dataItemMap.put("Fmt", "");
+            dataItemMap.put("Name", fieldName);
+            dataItemsList.add(dataItemMap);
+        }
+        resourceInfoMap.put("DataItems", dataItemsList);
+        resourceInfoMap.put("ResourceName", resourceName);
+        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);
         JSONObject rspJSONObj = JSON.parseObject(rspStr);
         if(rspJSONObj != null){
             String messageStatus = rspJSONObj.getString("MessageStatus");
@@ -96,7 +138,7 @@ public class SameTravelService {
                 JSONArray resourceInfos = responseParam.getJSONArray("ResourceInfos");
                 if(resourceInfos != null && resourceInfos.size() > 0){
                     JSONObject jsonObject = resourceInfos.getJSONObject(0);
-                    String resourceName = jsonObject.getString("ResourceName");
+                    String resName = jsonObject.getString("ResourceName");
                     JSONArray dataInfo = jsonObject.getJSONArray("DataInfo");
                     if(dataInfo != null && dataInfo.size() > 0){   // 存在命中数据
                         JSONArray dataItems = jsonObject.getJSONArray("DataItems");
@@ -113,11 +155,17 @@ public class SameTravelService {
                         }
                     }
                 }
-                log.info("【烽火 - 服务开放平台 # 同行类数据通查服务接口 响应数据解析完成】 命中数据量:{}", dataList.size());
             }
         }
+        log.info("【烽火 - 服务开放平台 # 同行类数据通查服务接口 响应数据解析完成】 命中数据量:{}", dataList.size());
         return dataList;
     }
 
 
+    public static void main(String[] args) {
+        SameTravelService sameTravelService = new SameTravelService();
+        sameTravelService.callFHUniQueryService("120000xxxx", "R-120000000000-00000003");
+    }
+
+
 }

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

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

+ 20 - 24
src/main/resources/application.properties

@@ -73,6 +73,25 @@ query.max.count=1000
 # \u6570\u636E\u8D44\u6E90\u7F16\u7801=\u53EF\u89E3\u6790\u7684\u5B57\u6BB5
 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...
+# \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
+R-120000000000-00000002=FIRST_PER_ZJHM,FIRST_PER_NAME,SECOND_PER_ZJHM,SECOND_PER_NAME,QFJC_XXDM02,DDJC_XXDM02,DD_CFA_RQ,DD_DD_RQ,GTDP_XXBH
+# \u540C\u5BBE\u9986
+R-120000000000-00000003=ZJHM,XM,XM2,ZJHM2,RUZ_LVG_XXBH,RUZ_FAJ_XXBH,RUZ_JDSJ,RUZ_JDSJ2,RUZ_TS_1,RUZ_TS_2
+# \u540C\u7F51\u5427
+R-120000000000-00000004=SWR_ZJHM,YYCS_XXDM02,YYCS_MC,SWR_XM,SWR_XM_2,SWR_ZJHM_2,SWSESSION_KSSJ,SWSESSION_KSSJ_2,SWSESSION_ZHD_XXBH,SWSESSION_ZHD_XXBH_2
+# \u540C\u6C11\u822A\u8FDB\u6E2F
+R-120000000000-00000005=ZJHM,LVK_XM,LVK_XM_2,ZJHM_2,HBA_SXH,HBA_RQ,QFHZ_SZ_XXDM02,QFHZ_MC,DDHZ_SZ_XXDM02,DDHZ_MC,LG_JDSJ,JIG_JDSJ,DQHZ_ZWH,DQHZ_ZWH_2,FLAG_GX
+# \u540C\u6C11\u822A\u79BB\u6E2F
+R-120000000000-00000006=ZJHM,LVK_XM,LVK_XM_2,ZJHM_2,HBA_SXH,HBA_RQ,QFHZ_SZ_XXDM02,QFHZ_MC,DDHZ_SZ_XXDM02,DDHZ_MC,LG_JDSJ,JIG_JDSJ,DQHZ_ZWH,DQHZ_ZWH_2,FLAG_GX
+# \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\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
@@ -3115,27 +3134,4 @@ query.max.count=1000
 120225730000=\u84DF\u5DDE\u5206\u5C40\u76D8\u5C71\u98CE\u666F\u540D\u80DC\u533A\u6CBB\u5B89\u6D3E\u51FA\u6240
 120225750000=\u84DF\u5DDE\u5206\u5C40\u957F\u57CE\u6CBB\u5B89\u6D3E\u51FA\u6240
 120225760000=\u84DF\u5DDE\u5206\u5C40\u7EAA\u59D4\u529E\u516C\u5BA4
-120225780000=\u84DF\u5DDE\u5206\u5C40\u5DDE\u6CB3\u6E7E\u6D3E\u51FA\u6240
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+120225780000=\u84DF\u5DDE\u5206\u5C40\u5DDE\u6CB3\u6E7E\u6D3E\u51FA\u6240