ConsumeService.java 82 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. package com.hhwy.qbeqsjy.kafka.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.hhwy.qbeqsjy.common.*;
  6. import com.hhwy.qbeqsjy.dao.CtrlDao;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.apache.kafka.clients.consumer.ConsumerRecord;
  10. import org.apache.kafka.clients.consumer.ConsumerRecords;
  11. import org.apache.kafka.clients.consumer.KafkaConsumer;
  12. import org.locationtech.jts.geom.Coordinate;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.context.ApplicationListener;
  15. import org.springframework.context.event.ContextRefreshedEvent;
  16. import org.springframework.scheduling.annotation.EnableScheduling;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import java.io.IOException;
  20. import java.util.*;
  21. import java.util.concurrent.ExecutorService;
  22. import java.util.concurrent.Executors;
  23. /**
  24. * 布控命中数据处理
  25. */
  26. @Slf4j
  27. @Service
  28. @EnableScheduling
  29. public class ConsumeService implements ApplicationListener<ContextRefreshedEvent> {
  30. @Value("${topic.name}")
  31. private String topic;
  32. @Value("${clue.code.phone}")
  33. private String clueCodePhone;
  34. @Value("${clue.code.idCard}")
  35. private String clueCodeIdCard;
  36. @Value("${address.query.url}")
  37. private String addressQueryUrl;
  38. @Value("${centerPoint.lon.hcz}")
  39. private String centerPointLonHcz;
  40. @Value("${centerPoint.lat.hcz}")
  41. private String centerPointLatHcz;
  42. @Value("${radius.hcz}")
  43. private String radiusHcz;
  44. @Value("${res.code.auth}")
  45. private String resCodeAUTH;
  46. /*@Value("${res.code.tldp}")
  47. private String resCodeTldp;*/
  48. @Value("${res.code.mhdp}")
  49. private String resCodeMhdp;
  50. @Value("${res.code.jnryzs}")
  51. private String resCodeJnryzs;
  52. @Value("${res.code.wbsw}")
  53. private String resCodeWbsw;
  54. @Value("${res.code.ky}")
  55. private String resCodeKy;
  56. @Value("${res.code.dt}")
  57. private String resCodeDt;
  58. @Value("${res.code.sjrd}")
  59. private String resCodeSjrd;
  60. @Value("${res.code.xlpc}")
  61. private String resCodeXlpc;
  62. @Value("${res.code.zdjc}")
  63. private String resCodeZdjc;
  64. @Value("${res.code.dzwl}")
  65. private String resCodeDzwl;
  66. @Value("${res.code.rlgz}")
  67. private String resCodeRlgz;
  68. @Value("${res.code.gmszy}")
  69. private String resCodeGmszy;
  70. @Resource
  71. private CtrlDao ctrlDao;
  72. private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
  73. private HttpClient httpClient = new HttpClient();
  74. // IOC容器刷新完成后就会发布ContextRefreshedEvent事件
  75. @Override
  76. public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
  77. ExecutorService executor = Executors.newFixedThreadPool(1);
  78. executor.execute(() -> {
  79. if (contextRefreshedEvent.getApplicationContext().getParent() == null) {
  80. try {
  81. this.dataConsume();
  82. } catch (Exception e) {
  83. log.error("【QBEQSJYCTRL】 数据处理服务启动异常", e);
  84. }
  85. }
  86. });
  87. executor.shutdown();
  88. }
  89. public void dataConsume() {
  90. if (AuthService.isSecurityModel()){
  91. try {
  92. log.info("kafka集群已开启安全模式");
  93. AuthService.securityPrepare();
  94. } catch (IOException e) {
  95. log.error("kafka集群安全认证失败,异常信息 : {}.", e);
  96. return;
  97. }
  98. log.info("kafka集群安全认证成功");
  99. }
  100. AuthService consumerAuthService = new AuthService(topic);
  101. log.info("【QBEQSJYCTRL - 消费者服务】 服务已启动");
  102. process(consumerAuthService.consumer, topic);
  103. }
  104. /**
  105. * 消费目标topic中的预警结果数据,处理后批量入库
  106. * @param consumer
  107. * @param topic
  108. */
  109. public void process(KafkaConsumer<Integer, String> consumer, String topic) {
  110. consumer.subscribe(Collections.singletonList(topic));
  111. while (true) {
  112. // 间隔30秒拉取一次数据
  113. log.info("间隔30秒拉取一次数据......");
  114. ConsumerRecords<Integer, String> records = consumer.poll(Constants.WAIT_TIME);
  115. if (records != null && records.count() > 0) {
  116. List<Object[]> warningInfoList = new ArrayList<>();
  117. int batchSaveNum = 0;
  118. for (ConsumerRecord<Integer, String> record : records) {
  119. JSONObject message = JSONObject.parseObject(record.value());
  120. JSONObject uniCtrl = message.getJSONObject("UNICTRL");
  121. String clueId = uniCtrl.getString("U_CLUEID");
  122. String[] clueIdStrArr = clueId.split("_");
  123. String rwbh = clueIdStrArr[Constants.NUM_1];
  124. String clueType = clueIdStrArr[Constants.NUM_2];
  125. String clue = clueIdStrArr[Constants.NUM_3];
  126. String resourceCode = uniCtrl.getString("U_RESID");
  127. // 每张布控资源表对应的命中数据JSON对象
  128. JSONObject oriField = message.getJSONObject("ORIFIELD");
  129. log.info(oriField.toJSONString());
  130. StringBuilder yjxxsm = new StringBuilder();
  131. // 生成预警信息编号
  132. String yjxxbh = String.valueOf(generator.nextId());
  133. // 预警状态默认为0(未读)
  134. Integer yjzt = 0;
  135. Date currentTime = new Date();
  136. // 根据clueId中的任务编号、线索值、线索类型查询对应的布控任务相关信息(包含任务信息、数据资源信息、区域信息、线索信息)
  137. List<Map<String, Object>> ctrlTaskInfoList = ctrlDao.queryCtrlTaskInfo(rwbh, clue, clueType);
  138. if(ctrlTaskInfoList.size() > 0){
  139. Map<String, Object> ctrlTaskInfo = ctrlTaskInfoList.get(0);
  140. String rwmc = String.valueOf(ctrlTaskInfo.get("rwmc"));
  141. Integer rwlx = (Integer) ctrlTaskInfo.get("rwlx");
  142. String rwlxmc = String.valueOf(ctrlTaskInfo.get("rwlxmc"));
  143. String rwdxlxmc = String.valueOf(ctrlTaskInfo.get("rwdxlxmc"));
  144. String sqrXm = String.valueOf(ctrlTaskInfo.get("sqr_xm"));
  145. String sqrSfzh = String.valueOf(ctrlTaskInfo.get("sqr_sfzh"));
  146. String sqrJh = String.valueOf(ctrlTaskInfo.get("sqr_jh"));
  147. String sqrDwbm = String.valueOf(ctrlTaskInfo.get("sqr_dwbm"));
  148. String sqrDwmc = String.valueOf(ctrlTaskInfo.get("sqr_dwmc"));
  149. String bkqyxx = String.valueOf(ctrlTaskInfo.get("bkqyxx"));
  150. String yjryXm = String.valueOf(ctrlTaskInfo.get("ryxm"));
  151. String yjrySfzh = String.valueOf(ctrlTaskInfo.get("zjhm"));
  152. String yjrySjh = String.valueOf(ctrlTaskInfo.get("sjh"));
  153. String yjryLb = String.valueOf(ctrlTaskInfo.get("rylb"));
  154. String yjryBq = String.valueOf(ctrlTaskInfo.get("rybq"));
  155. String gkjb = String.valueOf(ctrlTaskInfo.get("gkjb"));
  156. String gkjbmc = String.valueOf(ctrlTaskInfo.get("gkjbmc"));
  157. String zrjz = String.valueOf(ctrlTaskInfo.get("zrjz"));
  158. String zrmjid = String.valueOf(ctrlTaskInfo.get("zrmjid"));
  159. String zrmjxm = String.valueOf(ctrlTaskInfo.get("zrmjxm"));
  160. String zrmjjh = String.valueOf(ctrlTaskInfo.get("zrmjjh"));
  161. String zrmjlxfs = String.valueOf(ctrlTaskInfo.get("zrmjlxfs"));
  162. String zrdwbm = String.valueOf(ctrlTaskInfo.get("zrdwbm"));
  163. String zrbmbm = String.valueOf(ctrlTaskInfo.get("zrbmbm"));
  164. // 根据任务编号查询对应的模型配置信息
  165. List<Map<String, Object>> modelInfoList = ctrlDao.queryCtrlTaskModelInfo(rwbh);
  166. if(resCodeAUTH.equals(resourceCode)){ // =========== AUTH认证数据
  167. // 1. ========================= 过滤基站号、经纬度为空的数据
  168. String baseStationId = oriField.getString("BASE_STATION_ID");
  169. String lonBD = oriField.getString("LONGITUDE");
  170. String latBD = oriField.getString("LATITUDE");
  171. if(StringUtils.isBlank(baseStationId) || StringUtils.isBlank(lonBD) || StringUtils.isBlank(latBD)){
  172. continue;
  173. }
  174. // 2. ========================= 调用烽火接口,根据命中点位经纬度(百度坐标系)查询对应的地址信息
  175. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", lonBD).replace("y", latBD), null);
  176. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  177. // 命中点位地址名称
  178. String addressName = rspJSONObj.getString("fullAddress");
  179. String captureTime = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  180. yjxxsm.append(yjryXm);
  181. yjxxsm.append("于");
  182. yjxxsm.append(captureTime);
  183. yjxxsm.append("出现在");
  184. yjxxsm.append(addressName);
  185. // 将烽火的百度坐标系经纬度值转换为84坐标系经纬度值
  186. double[] latAndLon84 = GpsCoordinateUtils.calBD09toWGS84(Double.valueOf(latBD), Double.valueOf(lonBD));
  187. String lat84 = String.valueOf(latAndLon84[0]);
  188. String lon84 = String.valueOf(latAndLon84[1]);
  189. // 3. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据
  190. JSONArray areaInfoList = JSON.parseArray(bkqyxx);
  191. if(areaInfoList != null && areaInfoList.size() > 0){
  192. for (Object obj : areaInfoList) {
  193. JSONObject ctrlAreaInfo = (JSONObject) obj;
  194. String areaName = (String) ctrlAreaInfo.get("qymc");
  195. Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx");
  196. JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh")));
  197. JSONArray locationSet = locationJSONObj.getJSONArray("location");
  198. // ****** 说明:如果出现多个布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存命中第一个布控区域时的一份数据,不再继续判断
  199. if(Constants.NUM_0 == geoType){ // 布控区域是圆形
  200. JSONObject loc = locationSet.getJSONObject(0);
  201. String centerLon84 = loc.getString("lon");
  202. String centerLat84 = loc.getString("lat");
  203. String radius = loc.getString("radius");
  204. if(GeoUtils.isPointInCircle(Double.valueOf(lat84), Double.valueOf(lon84), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius))){
  205. yjxxsm.append(",所在区域:");
  206. yjxxsm.append(areaName);
  207. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, currentTime, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, areaName, addressName});
  208. yjxxsm.setLength(0);
  209. break;
  210. }
  211. } else { // 布控区域是一般多边形
  212. List<Coordinate> coordinates = new ArrayList<>();
  213. for (Object item : locationSet) {
  214. JSONObject loc = (JSONObject) item;
  215. String vertexLon84 = loc.getString("lon");
  216. String vertexLat84 = loc.getString("lat");
  217. coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84)));
  218. }
  219. if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lon84), Double.valueOf(lat84)))){
  220. yjxxsm.append(",所在区域:");
  221. yjxxsm.append(areaName);
  222. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, currentTime, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, areaName, addressName});
  223. yjxxsm.setLength(0);
  224. break;
  225. }
  226. }
  227. }
  228. } else { // 如果不存在布控区域信息,则默认布控区域范围为全天津市,预警数据直接入库
  229. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, currentTime, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lon84, lat84, currentTime, currentTime, null, null, null, "天津市", addressName});
  230. yjxxsm.setLength(0);
  231. }
  232. yjxxsm.setLength(0);
  233. } else if(resCodeKy.equals(resourceCode)){ // =========== 客运数据
  234. // 票号
  235. String ph = oriField.getString("TRAIN_TIC_NO");
  236. // 旅客姓名
  237. String lkXm = oriField.getString("PASS_NAME");
  238. // 旅客身份证号
  239. String lkSfzh = oriField.getString("PASS_CRED_NUM");
  240. // 旅客手机
  241. String passMob = oriField.getString("PASS_MOB");
  242. String lkSjh = StringUtils.isNotBlank(passMob)? passMob : yjrySjh;
  243. // String ccrq = oriField.getString("RIDING_DATE"); // 乘车日期
  244. // 检票时间 ---样例:20200929073509
  245. String cheticTime = oriField.getString("CHETIC_TIME");
  246. String jpsj = StringUtils.isNotBlank(cheticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(cheticTime)) : "暂无";
  247. // String jpkyz = oriField.getString("CHETIC_PASSTA_NAME"); // 检票客运站
  248. // 检票车次号
  249. String cheticTrainNo = oriField.getString("CHETIC_TRAIN_NO");
  250. String jpcch = StringUtils.isNotBlank(cheticTrainNo)? cheticTrainNo : "暂无";
  251. // String bc = oriField.getString("SHIFT"); // 班次
  252. // 座号
  253. String seatNo = oriField.getString("SEAT_NO");
  254. String zh = StringUtils.isNotBlank(seatNo)? seatNo : "暂无";
  255. // String pj = oriField.getString("VEHTIC_PRIC"); // 票价
  256. // String zffs = oriField.getString("PAYM_METH_NAME"); // 支付方式
  257. // 车牌号
  258. String vehPlateNum = oriField.getString("VEH_PLATE_NUM");
  259. String cph = StringUtils.isNotBlank(vehPlateNum)? vehPlateNum : "暂无";
  260. // 始发地站点
  261. String depAddrStatiName = oriField.getString("DEP_ADDR_STATI_NAME");
  262. String sfdzdmc = (StringUtils.isNotBlank(depAddrStatiName) && !"0".equals(depAddrStatiName))? depAddrStatiName : "暂无";
  263. // 始发地行政区划代码
  264. String sfdxzqhdm = oriField.getString("DEP_ADDR_ADDI_CODE");
  265. // 目的地站点
  266. String destStatiName = oriField.getString("DEST_STATI_NAME");
  267. String mddzdmc = StringUtils.isNotBlank(destStatiName)? destStatiName : "暂无";
  268. String mddxzqhdm = oriField.getString("DEST_ADDI_CODE"); // 目的地行政区划代码
  269. // 订票时间 ---样例:20200929061228
  270. String booticTime = oriField.getString("BOOTIC_TIME");
  271. String dpsj = StringUtils.isNotBlank(booticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(booticTime)) : "暂无";
  272. // String dpfs = oriField.getString("BOOTIC_METH"); // 订票方式
  273. // 发车时间 ---样例:20200929061228
  274. String depTimeDtime = oriField.getString("DEP_TIME_DTIME");
  275. String fcsj = StringUtils.isNotBlank(depTimeDtime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(depTimeDtime)) : "暂无";
  276. // String ddsj = oriField.getString("ARR_TIME"); // 到达时间
  277. // String lxrXm = oriField.getString("CTCT_PERSON_NAME"); // 联系人姓名
  278. // String lxrLxdh = oriField.getString("CTCT_PERSON_CTCT_TEL"); // 联系人联系电话
  279. String captureTimeKy = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  280. yjxxsm.append("客运数据 - 票号:");
  281. yjxxsm.append(ph);
  282. yjxxsm.append(",旅客姓名:");
  283. yjxxsm.append(lkXm);
  284. yjxxsm.append(",旅客身份证号:");
  285. yjxxsm.append(lkSfzh);
  286. yjxxsm.append(",旅客手机号:");
  287. yjxxsm.append(lkSjh);
  288. yjxxsm.append(",订票时间:");
  289. yjxxsm.append(dpsj);
  290. yjxxsm.append(",发车时间:");
  291. yjxxsm.append(fcsj);
  292. yjxxsm.append(",始发站:");
  293. yjxxsm.append(sfdzdmc);
  294. yjxxsm.append(",目的站:");
  295. yjxxsm.append(mddzdmc);
  296. yjxxsm.append(",检票时间:");
  297. yjxxsm.append(jpsj);
  298. yjxxsm.append(",检票车次号:");
  299. yjxxsm.append(jpcch);
  300. yjxxsm.append(",座号:");
  301. yjxxsm.append(zh);
  302. yjxxsm.append(",车牌号:");
  303. yjxxsm.append(cph);
  304. for (Map<String, Object> modelInfoMap : modelInfoList) {
  305. String mxbh = (String) modelInfoMap.get("mxbh");
  306. if("DRYJ-BSJJ-KYCC".equals(mxbh)){ // 单人预警-本市进京-客运乘车
  307. if(StringUtils.isNotBlank(sfdxzqhdm) && StringUtils.isNotBlank(mddxzqhdm)){
  308. // 始发地:天津,目的地:北京
  309. if("12".equals(sfdxzqhdm.substring(0, 2)) && "11".equals(mddxzqhdm.substring(0, 2))){
  310. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkXm, lkSfzh, lkSjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeKy, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, null});
  311. break;
  312. }
  313. }
  314. }
  315. }
  316. yjxxsm.setLength(0);
  317. } else if (resCodeMhdp.equals(resourceCode)) { // =========== 民航订票数据
  318. // 订座记录编号
  319. String ordseatRecoNo = oriField.getString("ORDSEAT_RECO_NO");
  320. String dzjlbh = StringUtils.isNotBlank(ordseatRecoNo)? ordseatRecoNo : "暂无";
  321. // 旅客中文名
  322. String passName = oriField.getString("PASS_NAME");
  323. String lkzwm = StringUtils.isNotBlank(passName)? passName : "暂无";
  324. // 旅客证件号码
  325. String credNum = oriField.getString("CRED_NUM");
  326. String zjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无";
  327. // String lklxdh = oriField.getString("PASS_CTCT_TEL"); // 旅客联系电话
  328. // 承运航空公司
  329. String carrOrgaAirlineName = oriField.getString("CARR_ORGA_AIRLINE_NAME");
  330. String cyhkgs = StringUtils.isNotBlank(carrOrgaAirlineName)? carrOrgaAirlineName : "暂无";
  331. // 责任航空公司
  332. String respUnitAirlineName = oriField.getString("RESP_UNIT_AIRLINE_NAME");
  333. String zrhkgs = StringUtils.isNotBlank(respUnitAirlineName)? respUnitAirlineName : "暂无";
  334. // 航班号
  335. String flinum = oriField.getString("FLINUM");
  336. String hbh = StringUtils.isNotBlank(flinum)? flinum : "暂无";
  337. // 起飞机场
  338. String flyInitNrtAirportName = oriField.getString("FLY_INIT_NRT_AIRPORT_NAME");
  339. String qfjcmc = StringUtils.isNotBlank(flyInitNrtAirportName)? flyInitNrtAirportName : "暂无";
  340. // 起飞机场代码
  341. String flyInitNrtAirportCode = oriField.getString("FLY_INIT_NRT_AIRPORT_CODE");
  342. String qfjcdm = StringUtils.isNotBlank(flyInitNrtAirportCode)? flyInitNrtAirportCode : "暂无";
  343. // String qfzcs = oriField.getString("FLY_INIT_ADDR_CITY_NAME"); // 起飞站城市
  344. // 到达机场
  345. String arrAtAirAirportName = oriField.getString("ARR_AT_AIR_AIRPORT_NAME");
  346. String ddjcmc = StringUtils.isNotBlank(arrAtAirAirportName)? arrAtAirAirportName : "暂无";
  347. // 到达机场代码
  348. String arrAtAirAirportCode = oriField.getString("ARR_AT_AIR_AIRPORT_CODE");
  349. String ddjcdm = StringUtils.isNotBlank(arrAtAirAirportCode)? arrAtAirAirportCode : "暂无";
  350. // String ddzcs = oriField.getString("ARR_ADDR_CITY_NAME"); // 到达站城市
  351. // String cfrq = oriField.getString("STAOFF_DATE"); // 出发日期
  352. // 出发时间 ---样例:20200929061228
  353. String staoffTime = oriField.getString("STAOFF_TIME");
  354. String cfsj = StringUtils.isNotBlank(staoffTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(staoffTime)) : "暂无";
  355. // String ddrq = oriField.getString("ARR_DATE"); // 到达日期
  356. // 到达时间
  357. String arrTime = oriField.getString("ARR_TIME");
  358. String ddsj = StringUtils.isNotBlank(arrTime)? arrTime : "暂无";
  359. // String kpzt = oriField.getString("ELE_TIC_STAT_NAME"); // 客票状态
  360. // String cw = oriField.getString("CHISHI_SEAT"); // 舱位
  361. // String dpsj = oriField.getString("BOOTIC_TIME"); // 订票时间
  362. // 截获时间 ---样例:20200929061228
  363. String captureTime = oriField.getString("CAPTURE_TIME");
  364. String captureTimeMhdp = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无";
  365. yjxxsm.append("民航订票 - 订座记录编号:");
  366. yjxxsm.append(dzjlbh);
  367. yjxxsm.append(",旅客中文名:");
  368. yjxxsm.append(lkzwm);
  369. yjxxsm.append(",旅客证件号码:");
  370. yjxxsm.append(zjhm);
  371. yjxxsm.append(",承运航空公司:");
  372. yjxxsm.append(cyhkgs);
  373. yjxxsm.append(",责任航空公司:");
  374. yjxxsm.append(zrhkgs);
  375. yjxxsm.append(",航班号:");
  376. yjxxsm.append(hbh);
  377. yjxxsm.append(",起飞机场:");
  378. yjxxsm.append(qfjcmc);
  379. yjxxsm.append(",出发时间:");
  380. yjxxsm.append(cfsj);
  381. yjxxsm.append(",到达机场:");
  382. yjxxsm.append(ddjcmc);
  383. yjxxsm.append(",到达时间:");
  384. yjxxsm.append(ddsj);
  385. for (Map<String, Object> modelInfoMap : modelInfoList) {
  386. String mxbh = (String) modelInfoMap.get("mxbh");
  387. if("DRYJ-WSLJ-MHDP".equals(mxbh)){ // 单人预警-外省来津-民航订票
  388. if(StringUtils.isNotBlank(ddjcdm)){
  389. // 业务需求:到达机场代码为TSN(中国-天津-天津滨海国际机场)
  390. if("TSN".equals(ddjcdm.trim())){
  391. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkzwm, zjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeMhdp, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, ddjcmc});
  392. break;
  393. }
  394. }
  395. } else if ("DRYJ-KSGJ-MHDP".equals(mxbh)) { // 单人预警-跨省轨迹-民航订票
  396. if(StringUtils.isNotBlank(qfjcdm) && StringUtils.isNotBlank(ddjcmc)){
  397. String mddShi = (String) modelInfoMap.get("mdd_shi");
  398. // 业务需求:起飞机场代码为TSN(中国-天津-天津滨海国际机场),到达机场处在当前任务所记录的目的地市境内
  399. if("TSN".equals(qfjcdm.trim()) && ddjcmc.contains(mddShi)){
  400. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, lkzwm, zjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeMhdp, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, ddjcmc});
  401. break;
  402. }
  403. }
  404. }
  405. }
  406. yjxxsm.setLength(0);
  407. } else if (resCodeJnryzs.equals(resourceCode)) { // =========== 境内人员住宿数据
  408. // 旅馆编号
  409. String lgbh = oriField.getString("HOTEL_NO");
  410. String[] lgxxArr = CommonUtil.getConfValueByKey(lgbh).split("@");
  411. // 旅馆名称
  412. // String lgmc = oriField.getString("HOTE_NAME");
  413. // 旅馆地址
  414. // String lgdz = oriField.getString("HOTEL_ADDR_ADDR_NAME");
  415. // 旅馆经度
  416. // String lgjd = oriField.getString("HOTEL_LON");
  417. // 旅馆纬度
  418. // String lgwd = oriField.getString("HOTEL_LAT");
  419. String lgmc = lgxxArr[0];
  420. String lgdz = lgxxArr[1];
  421. String lgjd = lgxxArr[2];
  422. String lgwd = lgxxArr[3];
  423. // String lglx = oriField.getString("HOTE_TYPE_NAME"); // 旅馆类型
  424. // 姓名
  425. String rzrXm = oriField.getString("NAME");
  426. // 身份证号
  427. String rzrSfzh = oriField.getString("CERT_NO");
  428. // 旅客联系电话
  429. String ctctTel = oriField.getString("CTCT_TEL");
  430. String rzrLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh;
  431. // String rylx = oriField.getString("PER_CLAS_NAME"); // 人员类型
  432. // String gj = oriField.getString("NATION_NAME"); // 国籍
  433. // String hjdz = oriField.getString("DOMIC_ADDR_NAME"); // 户籍地址
  434. // 入住时间 ---样例:20250329061228
  435. String admiTime = oriField.getString("ADMI_TIME");
  436. String rzsj = StringUtils.isNotBlank(admiTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(admiTime)) : "暂无";
  437. // 退房时间 ---样例:20250329061228
  438. String choutTime = oriField.getString("CHOUT_TIME");
  439. String tfsj = StringUtils.isNotBlank(choutTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(choutTime)) : "暂无";
  440. // String zsts = oriField.getString("LODG_DAY_NUM"); // 住宿天数
  441. // 房间号
  442. String roomNo = oriField.getString("ROOM_NO");
  443. String fjh = StringUtils.isNotBlank(roomNo)? roomNo : "暂无";
  444. // String rzrs = oriField.getString("ADMISSION_PER_NUM"); // 入住人数
  445. // String ywsxcl = oriField.getString("THER_ACCO_VEHI_JUDGE_FLAG"); // 有无随行车辆
  446. // String sxclhp = oriField.getString("ACCO_VEH_VEH_PLATE_NUM"); // 随行车辆号牌
  447. // String wypt = oriField.getString("PLAT_NAME"); // 网约平台
  448. // String ydrXm = oriField.getString("APPO_PER_NAME"); // 预定人姓名
  449. // String ydrSfzh = oriField.getString("APPO_PER_CERT_NO"); // 预定人身份证号
  450. // String ydrSjh = oriField.getString("APPO_PER_CTCT_TEL"); // 预定人手机号
  451. // String rzr2Xm = oriField.getString("ADMIS_PER_TWO_NAME"); // 入住人2姓名
  452. // String rzr2Sfzh = oriField.getString("ADMIS_PER_TWO_CERT_NO"); // 入住人2身份证号
  453. // String rzr2Lxfs = oriField.getString("ADMIS_PER_TWO_CTCT_TEL"); // 入住人2联系方式
  454. String captureTimeJnryzs = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  455. yjxxsm.append("旅馆住宿 - 旅馆编号:");
  456. yjxxsm.append(lgbh);
  457. yjxxsm.append(",旅馆名称:");
  458. yjxxsm.append(lgmc);
  459. yjxxsm.append(",旅馆地址:");
  460. yjxxsm.append(lgdz);
  461. yjxxsm.append(",入住人姓名:");
  462. yjxxsm.append(rzrXm);
  463. yjxxsm.append(",入住人身份证号:");
  464. yjxxsm.append(rzrSfzh);
  465. yjxxsm.append(",入住人联系电话:");
  466. yjxxsm.append(rzrLxdh);
  467. yjxxsm.append(",入住时间:");
  468. yjxxsm.append(rzsj);
  469. yjxxsm.append(",退房时间:");
  470. yjxxsm.append(tfsj);
  471. yjxxsm.append(",房间号:");
  472. yjxxsm.append(fjh);
  473. for (Map<String, Object> modelInfoMap : modelInfoList) {
  474. String mxbh = (String) modelInfoMap.get("mxbh");
  475. /*if("DRYJ-BSJJ-LKZD".equals(mxbh)){ // 单人预警-本市进京-旅客住店
  476. // --- todo
  477. // 该需求不合理,待定
  478. }
  479. else*/
  480. if("DRYJ-BSMGQY-LKZD".equals(mxbh)){ // 单人预警-本市敏感区域-旅客住店
  481. JSONArray areaInfoList = JSON.parseArray(bkqyxx);
  482. for (Object obj : areaInfoList) {
  483. JSONObject ctrlAreaInfo = (JSONObject) obj;
  484. String qymc = (String) ctrlAreaInfo.get("qymc");
  485. Integer qyjhlx = (Integer) ctrlAreaInfo.get("qyjhlx");
  486. JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh")));
  487. JSONArray locationSet = locationJSONObj.getJSONArray("location");
  488. if(!"null".equals(lgjd) && !"null".equals(lgwd)){
  489. if(Constants.NUM_0 == qyjhlx){
  490. JSONObject loc = locationSet.getJSONObject(0);
  491. String centerLon84 = loc.getString("lon");
  492. String centerLat84 = loc.getString("lat");
  493. String radius = loc.getString("radius");
  494. if(GeoUtils.isPointInCircle(Double.valueOf(lgwd), Double.valueOf(lgjd), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius))){
  495. yjxxsm.append(",所在区域:");
  496. yjxxsm.append(qymc);
  497. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, rzrXm, rzrSfzh, rzrLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeJnryzs, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lgjd, lgwd, currentTime, currentTime, null, null, null, qymc, lgdz});
  498. yjxxsm.setLength(0);
  499. break;
  500. }
  501. } else {
  502. List<Coordinate> coordinates = new ArrayList<>();
  503. for (Object item : locationSet) {
  504. JSONObject loc = (JSONObject) item;
  505. String vertexLon84 = loc.getString("lon");
  506. String vertexLat84 = loc.getString("lat");
  507. coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84)));
  508. }
  509. if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lgjd), Double.valueOf(lgwd)))){
  510. yjxxsm.append(",所在区域:");
  511. yjxxsm.append(qymc);
  512. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, rzrXm, rzrSfzh, rzrLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeJnryzs, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, lgjd, lgwd, currentTime, currentTime, null, null, null, qymc, lgdz});
  513. yjxxsm.setLength(0);
  514. break;
  515. }
  516. }
  517. }
  518. }
  519. }
  520. }
  521. yjxxsm.setLength(0);
  522. } else if (resCodeWbsw.equals(resourceCode)) { // =========== 网吧上网数据
  523. // 上网人员姓名
  524. String swryXm = oriField.getString("INTE_PER_NAME");
  525. // 上网人员身份证号
  526. String swrySfzh = oriField.getString("CRED_NUM");
  527. // 上网人员联系电话
  528. String ctctTel = oriField.getString("CTCT_TEL");
  529. String swryLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh;
  530. // 上网终端编号
  531. String intenetTermNo = oriField.getString("INTENET_TERM_NO");
  532. String swzdbh = StringUtils.isNotBlank(intenetTermNo)? intenetTermNo : "暂无";
  533. // String ip = oriField.getString("MAIENG_IP"); // IP地址
  534. // String zdmc = oriField.getString("TERM_DESIG"); // 终端名称
  535. // String zdmac = oriField.getString("TERM_MAC"); // 终端mac地址
  536. // 上网开始时间 ---样例:20250329061228
  537. String intenetStartTime = oriField.getString("INTENET_START_TIME");
  538. String swkssj = StringUtils.isNotBlank(intenetStartTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetStartTime)) : "暂无";
  539. // 上网结束时间 ---样例:20250329061228
  540. String intenetEndTime = oriField.getString("INTENET_END_TIME");
  541. String swjssj = StringUtils.isNotBlank(intenetEndTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetEndTime)) : "暂无";
  542. // String swsc = oriField.getString("INTENET_TIME_LENGTH"); // 上网时长
  543. // 营业场所编号
  544. String premNo = oriField.getString("PREM_NO");
  545. String yycsbh = StringUtils.isNotBlank(premNo)? premNo : "暂无";
  546. // 营业场所名称
  547. String premDesig = oriField.getString("PREM_DESIG");
  548. String yycsmc = StringUtils.isNotBlank(premDesig)? premDesig : "暂无";
  549. // String dzmc = oriField.getString("ADDR_NAME"); // 地址名称
  550. // String jd = oriField.getString("LON"); // 经度
  551. // String wd = oriField.getString("LAT"); // 纬度
  552. // String frXm = oriField.getString("LEGAL_NAME"); // 法人姓名
  553. // String frSfzh = oriField.getString("LEGAL_CRED_NUM"); // 法人身份证号
  554. // String frLxdh = oriField.getString("LEGAL_CTCT_TEL"); // 法人联系电话
  555. String captureTimeWbsw = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  556. yjxxsm.append("网吧上网 - 上网人员姓名:");
  557. yjxxsm.append(swryXm);
  558. yjxxsm.append(",上网人员身份证号:");
  559. yjxxsm.append(swrySfzh);
  560. yjxxsm.append(",上网人员联系电话:");
  561. yjxxsm.append(swryLxdh);
  562. yjxxsm.append(",上网终端编号:");
  563. yjxxsm.append(swzdbh);
  564. yjxxsm.append(",上网开始时间:");
  565. yjxxsm.append(swkssj);
  566. yjxxsm.append(",上网结束时间:");
  567. yjxxsm.append(swjssj);
  568. yjxxsm.append(",营业场所编号:");
  569. yjxxsm.append(yycsbh);
  570. yjxxsm.append(",营业场所名称:");
  571. yjxxsm.append(yycsmc);
  572. for (Map<String, Object> modelInfoMap : modelInfoList) {
  573. String mxbh = (String) modelInfoMap.get("mxbh");
  574. if("DRYJ-BSMGQY-WBSW".equals(mxbh)){ // 单人预警-本市敏感区域-网吧上网
  575. // --- todo
  576. // 表中无经、纬度数据,无法判断是否出现在布控区域
  577. // 暂时不做过滤处理
  578. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, swryXm, swrySfzh, swryLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeWbsw, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, yycsmc});
  579. break;
  580. }
  581. }
  582. yjxxsm.setLength(0);
  583. } else if (resCodeDt.equals(resourceCode)) { // =========== 地铁数据
  584. // 乘客姓名
  585. String ckXm = oriField.getString("XM");
  586. // 乘客身份证号
  587. String ckSfzh = oriField.getString("ZJHM");
  588. // 乘客联系电话
  589. String yddh = oriField.getString("YDDH");
  590. String ckLxdh = StringUtils.isNotBlank(yddh)? yddh : yjrySjh;
  591. // 刷卡卡号
  592. String khXxbh = oriField.getString("KH_XXBH");
  593. String skkh = StringUtils.isNotBlank(khXxbh)? khXxbh : "暂无";
  594. // 刷卡时间 ---样例:20250329061228
  595. String shkJdsj = oriField.getString("SHK_JDSJ");
  596. String sksj = StringUtils.isNotBlank(shkJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(shkJdsj)) : "暂无";
  597. // 车站名称
  598. String czmMc = oriField.getString("CZM_MC");
  599. String czmc = StringUtils.isNotBlank(czmMc)? czmMc : "暂无";
  600. // 分类名称
  601. String flMc = oriField.getString("FL_MC");
  602. String flmc = StringUtils.isNotBlank(flMc)? flMc : "暂无";
  603. // 进出站标识名称
  604. String jczBsMc = oriField.getString("JCZ_BS_MC");
  605. String jczbsmc = StringUtils.isNotBlank(jczBsMc)? jczBsMc : "暂无";
  606. // 交易类型名称
  607. String jyLexMc = oriField.getString("JY_LEX_MC");
  608. String jylxmc = StringUtils.isNotBlank(jyLexMc)? jyLexMc : "暂无";
  609. // 闸机号
  610. String zhjhJyqk = oriField.getString("ZHJH_JYQK");
  611. String zjh = StringUtils.isNotBlank(zhjhJyqk)? zhjhJyqk : "暂无";
  612. // 地铁线路信息
  613. String dtXlxx = oriField.getString("DTXLXX");
  614. String dtxlxx = StringUtils.isNotBlank(dtXlxx)? dtXlxx : "暂无";
  615. String captureTimeDt = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  616. yjxxsm.append("地铁数据 - 乘客姓名:");
  617. yjxxsm.append(ckXm);
  618. yjxxsm.append(",乘客身份证号:");
  619. yjxxsm.append(ckSfzh);
  620. yjxxsm.append(",乘客联系电话:");
  621. yjxxsm.append(ckLxdh);
  622. yjxxsm.append(",刷卡卡号:");
  623. yjxxsm.append(skkh);
  624. yjxxsm.append(",刷卡时间:");
  625. yjxxsm.append(sksj);
  626. yjxxsm.append(",车站名称:");
  627. yjxxsm.append(czmc);
  628. yjxxsm.append(",分类名称:");
  629. yjxxsm.append(flmc);
  630. yjxxsm.append(",进出站标识名称:");
  631. yjxxsm.append(jczbsmc);
  632. yjxxsm.append(",交易类型名称:");
  633. yjxxsm.append(jylxmc);
  634. yjxxsm.append(",闸机号:");
  635. yjxxsm.append(zjh);
  636. yjxxsm.append(",地铁线路信息:");
  637. yjxxsm.append(dtxlxx);
  638. for (Map<String, Object> modelInfoMap : modelInfoList) {
  639. String mxbh = (String) modelInfoMap.get("mxbh");
  640. if("DRYJ-BSMGQY-DT".equals(mxbh)){ // 单人预警-本市敏感区域-地铁
  641. // --- todo
  642. // 表中无经、纬度数据,无法判断是否出现在布控区域
  643. // 暂时不做过滤处理
  644. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, ckXm, ckSfzh, ckLxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDt, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, czmc});
  645. break;
  646. }
  647. }
  648. yjxxsm.setLength(0);
  649. } else if (resCodeSjrd.equals(resourceCode)) { // =========== 手机热点
  650. // 移动电话
  651. String yddhSrc = oriField.getString("YDDH");
  652. String yddh = StringUtils.isNotBlank(yddhSrc)? yddhSrc : yjrySjh;
  653. // 城际设备信息编号
  654. String chjiSbeXxbh = oriField.getString("CHJI_SBE_XXBH");
  655. String cjsbxxbh = StringUtils.isNotBlank(chjiSbeXxbh)? chjiSbeXxbh : "暂无";
  656. // 国际移动用户识别码,IMSI
  657. String gjydyhsbm = oriField.getString("GJYDYHSBM");
  658. String imsi = StringUtils.isNotBlank(gjydyhsbm)? gjydyhsbm : "暂无";
  659. // 国际移动设备识别码,IMEI
  660. String gjydsbsfdm = oriField.getString("GJYDSBSFDM");
  661. String imei = StringUtils.isNotBlank(gjydsbsfdm)? gjydsbsfdm : "暂无";
  662. // 交换机信息编号
  663. String jhjXxbh = oriField.getString("JHJ_XXBH");
  664. String jhjxxbh = StringUtils.isNotBlank(jhjXxbh)? jhjXxbh : "暂无";
  665. // 位置区域信息编号
  666. String wzhQuyXxbh = oriField.getString("WZH_QUY_XXBH");
  667. String wzqyxxbh = StringUtils.isNotBlank(wzhQuyXxbh)? wzhQuyXxbh : "暂无";
  668. // 小区信息编号
  669. String xiqXxbh = oriField.getString("XIQ_XXBH");
  670. String xqxxbh = StringUtils.isNotBlank(xiqXxbh)? xiqXxbh : "暂无";
  671. // 经度
  672. String jd = oriField.getString("DQJD");
  673. // 纬度
  674. String wd = oriField.getString("DQWD");
  675. // 关联时间 ---样例:1745476573
  676. String glsj = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("JDSJ")));
  677. String captureTimeSjrd = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  678. String addressName = null;
  679. if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){
  680. double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd));
  681. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
  682. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  683. addressName = rspJSONObj.getString("fullAddress");
  684. }
  685. yjxxsm.append("手机热点 - 移动电话:");
  686. yjxxsm.append(yddh);
  687. yjxxsm.append(",城际设备信息编号:");
  688. yjxxsm.append(cjsbxxbh);
  689. yjxxsm.append(",IMSI:");
  690. yjxxsm.append(imsi);
  691. yjxxsm.append(",IMEI:");
  692. yjxxsm.append(imei);
  693. yjxxsm.append(",交换机信息编号:");
  694. yjxxsm.append(jhjxxbh);
  695. yjxxsm.append(",位置区域信息编号:");
  696. yjxxsm.append(wzqyxxbh);
  697. yjxxsm.append(",小区信息编号:");
  698. yjxxsm.append(xqxxbh);
  699. yjxxsm.append(",关联时间:");
  700. yjxxsm.append(glsj);
  701. yjxxsm.append(",位置信息:");
  702. yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无");
  703. for (Map<String, Object> modelInfoMap : modelInfoList) {
  704. String mxbh = (String) modelInfoMap.get("mxbh");
  705. if("DRYJ-BSJJ-SJRD".equals(mxbh)){ // 单人预警-本市进京-手机热点
  706. // 暂时不做过滤处理
  707. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yddh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeSjrd, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, null, addressName});
  708. break;
  709. }
  710. }
  711. yjxxsm.setLength(0);
  712. } else if (resCodeXlpc.equals(resourceCode)) { // =========== 巡逻盘查(人员)
  713. // 卡口信息ID
  714. String kakXxId = oriField.getString("KAK_XXID");
  715. String kkxxId = StringUtils.isNotBlank(kakXxId)? kakXxId : "暂无";
  716. // 卡口名称
  717. String kakMc = oriField.getString("KAK_MC");
  718. String kkmc = StringUtils.isNotBlank(kakMc)? kakMc : "暂无";
  719. // 终端型号
  720. String zhdXh = oriField.getString("ZHD_XH");
  721. String zdxh = StringUtils.isNotBlank(zhdXh)? zhdXh : "暂无";
  722. // 终端串号简要情况
  723. String zhdChaJyqk = oriField.getString("ZHD_CHA_JYQK");
  724. String zdchjyqk = StringUtils.isNotBlank(zhdChaJyqk)? zhdChaJyqk : "暂无";
  725. // 盘查时间 ---样例:20250329061228
  726. String pacJdsj = oriField.getString("PAC_JDSJ");
  727. String pcsj = StringUtils.isNotBlank(pacJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(pacJdsj)) : "暂无";
  728. // 人员姓名
  729. String xmSrc = oriField.getString("XM");
  730. String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无";
  731. // 人员身份证号
  732. String gmsfhm = oriField.getString("GMSFHM");
  733. String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无";
  734. // 人员联系电话
  735. String lxdhSrc = oriField.getString("LXDH");
  736. String lxdh = StringUtils.isNotBlank(lxdhSrc)? lxdhSrc : yjrySjh;
  737. // String rybq = oriField.getString("REY_BQI_MC"); // 人员标签
  738. // 籍贯
  739. String jgXzqhmc = oriField.getString("JG_XZQHMC");
  740. String jg = StringUtils.isNotBlank(jgXzqhmc)? jgXzqhmc : "暂无";
  741. // 民族
  742. String mzmzwz = oriField.getString("MZMZWZ");
  743. String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无";
  744. // 居住地区划内详细地址
  745. String jzdQhnxxdz = oriField.getString("JZD_QHNXXDZ");
  746. String jzdxxdz = StringUtils.isNotBlank(jzdQhnxxdz)? jzdQhnxxdz : "暂无";
  747. // 盘查民警姓名
  748. String pacMjXm = oriField.getString("PAC_MJ_XM");
  749. String pcmjXm = StringUtils.isNotBlank(pacMjXm)? pacMjXm : "暂无";
  750. // 盘查民警警号
  751. String pacMjJh = oriField.getString("PAC_MJ_JH");
  752. String pcmjJh = StringUtils.isNotBlank(pacMjJh)? pacMjJh : "暂无";
  753. // 盘查民警账号
  754. String pacMjZh = oriField.getString("PAC_MJ_ZH");
  755. String pcmjZh = StringUtils.isNotBlank(pacMjZh)? pacMjZh : "暂无";
  756. // 盘查民警所属单位名称
  757. String pacMjSsDwmc = oriField.getString("PAC_MJ_SS_DWMC");
  758. String pcmjSsdwmc = StringUtils.isNotBlank(pacMjSsDwmc)? pacMjSsDwmc : "暂无";
  759. // 盘查处理结果
  760. String pacChlJguMc = oriField.getString("PAC_CHL_JGU_MC");
  761. String pccljg = StringUtils.isNotBlank(pacChlJguMc)? pacChlJguMc : "暂无";
  762. // 盘查处理移交单位名称
  763. String pacChlYijDwmc = oriField.getString("PAC_CHL_YIJ_DWMC");
  764. String pcclyjdwmc = StringUtils.isNotBlank(pacChlYijDwmc)? pacChlYijDwmc : "暂无";
  765. // 业务类型名称
  766. String ywlxMc = oriField.getString("YWLX_MC");
  767. String ywlx = StringUtils.isNotBlank(ywlxMc)? ywlxMc : "暂无";
  768. // 盘查地经度
  769. String pcdJd = oriField.getString("PCD_DQJD");
  770. // 盘查地纬度
  771. String pcdWd = oriField.getString("PCD_DQWD");
  772. String captureTimeXlpc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  773. String addressName = null;
  774. if(StringUtils.isNotBlank(pcdWd) && StringUtils.isNotBlank(pcdJd)){
  775. double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(pcdWd), Double.valueOf(pcdJd));
  776. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
  777. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  778. addressName = rspJSONObj.getString("fullAddress");
  779. }
  780. yjxxsm.append("巡逻盘查 - 人员姓名:");
  781. yjxxsm.append(xm);
  782. yjxxsm.append(",人员身份证号:");
  783. yjxxsm.append(sfzh);
  784. yjxxsm.append(",人员联系电话:");
  785. yjxxsm.append(lxdh);
  786. yjxxsm.append(",籍贯:");
  787. yjxxsm.append(jg);
  788. yjxxsm.append(",民族:");
  789. yjxxsm.append(mz);
  790. yjxxsm.append(",居住地详细地址:");
  791. yjxxsm.append(jzdxxdz);
  792. yjxxsm.append(",盘查时间:");
  793. yjxxsm.append(pcsj);
  794. yjxxsm.append(",卡口ID:");
  795. yjxxsm.append(kkxxId);
  796. yjxxsm.append(",卡口名称:");
  797. yjxxsm.append(kkmc);
  798. yjxxsm.append(",终端型号:");
  799. yjxxsm.append(zdxh);
  800. yjxxsm.append(",终端串号:");
  801. yjxxsm.append(zdchjyqk);
  802. yjxxsm.append(",盘查民警姓名:");
  803. yjxxsm.append(pcmjXm);
  804. yjxxsm.append(",盘查民警警号:");
  805. yjxxsm.append(pcmjJh);
  806. yjxxsm.append(",盘查民警账号:");
  807. yjxxsm.append(pcmjZh);
  808. yjxxsm.append(",盘查民警所属单位名称:");
  809. yjxxsm.append(pcmjSsdwmc);
  810. yjxxsm.append(",盘查处理结果:");
  811. yjxxsm.append(pccljg);
  812. yjxxsm.append(",盘查处理移交单位名称:");
  813. yjxxsm.append(pcclyjdwmc);
  814. yjxxsm.append(",业务类型名称:");
  815. yjxxsm.append(ywlx);
  816. yjxxsm.append(",盘查地位置信息:");
  817. yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无");
  818. for (Map<String, Object> modelInfoMap : modelInfoList) {
  819. String mxbh = (String) modelInfoMap.get("mxbh");
  820. if("DRYJ-BSJJ-XLPC".equals(mxbh)){ // 单人预警-本市进京-巡逻盘查
  821. // 暂时不做过滤处理
  822. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, xm, sfzh, lxdh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeXlpc, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, pcdJd, pcdWd, currentTime, currentTime, null, null, null, null, addressName});
  823. break;
  824. }
  825. }
  826. yjxxsm.setLength(0);
  827. } else if (resCodeZdjc.equals(resourceCode)) { // =========== 站点检查(人员)
  828. // 人员姓名
  829. String xmSrc = oriField.getString("XM");
  830. String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无";
  831. // 人员身份证号
  832. String gmsfhm = oriField.getString("GMSFHM");
  833. String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无";
  834. // 民族
  835. String mzmzwz = oriField.getString("MZMZWZ");
  836. String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无";
  837. // 地址
  838. String dzmc = oriField.getString("DZMC");
  839. String dz = StringUtils.isNotBlank(dzmc)? dzmc : "暂无";
  840. // 发证机关名称
  841. String fzjgMc = oriField.getString("FZJG_MC");
  842. String fzjg = StringUtils.isNotBlank(fzjgMc)? fzjgMc : "暂无";
  843. // 证件有效起始日期
  844. String zjyxqKsRq = oriField.getString("ZJYXQ_KS_RQ");
  845. String zjyxqsrq = StringUtils.isNotBlank(zjyxqKsRq)? zjyxqKsRq : "暂无";
  846. // 证件有效终止日期
  847. String zjyxqJshRq = oriField.getString("ZJYXQ_JSH_RQ");
  848. String zjyxzzrq = StringUtils.isNotBlank(zjyxqJshRq)? zjyxqJshRq : "暂无";
  849. // 警员编号
  850. String jyuBh = oriField.getString("JYU_BH");
  851. String jybh = StringUtils.isNotBlank(jyuBh)? jyuBh : "暂无";
  852. // 人员照片地址
  853. String ryzpWz = oriField.getString("RYZP_WZ");
  854. String ryzpUrl = StringUtils.isNotBlank(ryzpWz)? ryzpWz : "暂无";
  855. // 检查站名称
  856. String jiczMc = oriField.getString("JICZ_MC");
  857. String jczmc = StringUtils.isNotBlank(jiczMc)? jiczMc : "暂无";
  858. // 检查时间 ---样例:20250329061228
  859. String jicJdsj = oriField.getString("JIC_JDSJ");
  860. String jcsj = StringUtils.isNotBlank(jicJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(jicJdsj)) : "暂无";
  861. String captureTimeZdjc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME")));
  862. yjxxsm.append("站点检查 - 人员姓名:");
  863. yjxxsm.append(xm);
  864. yjxxsm.append(",人员身份证号:");
  865. yjxxsm.append(sfzh);
  866. yjxxsm.append(",民族:");
  867. yjxxsm.append(mz);
  868. yjxxsm.append(",地址:");
  869. yjxxsm.append(dz);
  870. yjxxsm.append(",检查时间:");
  871. yjxxsm.append(jcsj);
  872. yjxxsm.append(",发证机关:");
  873. yjxxsm.append(fzjg);
  874. yjxxsm.append(",证件有效起始日期:");
  875. yjxxsm.append(zjyxqsrq);
  876. yjxxsm.append(",证件有效终止日期:");
  877. yjxxsm.append(zjyxzzrq);
  878. yjxxsm.append(",人员照片:");
  879. yjxxsm.append(ryzpUrl);
  880. yjxxsm.append(",警员编号:");
  881. yjxxsm.append(jybh);
  882. yjxxsm.append(",检查站名称:");
  883. yjxxsm.append(jczmc);
  884. for (Map<String, Object> modelInfoMap : modelInfoList) {
  885. String mxbh = (String) modelInfoMap.get("mxbh");
  886. if("DRYJ-BSJJ-ZDJC".equals(mxbh)){ // 单人预警-本市进京-站点检查
  887. // 暂时不做过滤处理
  888. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, xm, sfzh, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeZdjc, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, null, null, currentTime, currentTime, null, null, null, null, jczmc});
  889. break;
  890. }
  891. }
  892. yjxxsm.setLength(0);
  893. } else if (resCodeDzwl.equals(resourceCode)) { // =========== 电子围栏(火车站)
  894. // 移动电话
  895. String mob = oriField.getString("MOB");
  896. String yddh = StringUtils.isNotBlank(mob)? mob : yjrySjh;
  897. // 国际移动用户识别码
  898. String imsiSrc = oriField.getString("IMSI");
  899. String imsi = StringUtils.isNotBlank(imsiSrc)? imsiSrc : "暂无";
  900. // 国际移动设备识别码
  901. String imeiSrc = oriField.getString("IMEI");
  902. String imei = StringUtils.isNotBlank(imeiSrc)? imeiSrc : "暂无";
  903. // 手机MAC地址
  904. String mobphoMac = oriField.getString("MOBPHO_MAC");
  905. String sjMac = StringUtils.isNotBlank(mobphoMac)? mobphoMac : "暂无";
  906. // 运营商名称
  907. // String spName = oriField.getString("SP_NAME");
  908. // String yysmc = StringUtils.isNotBlank(spName)? spName : "暂无";
  909. // 设备编号
  910. String equipmentNo = oriField.getString("EQUIPMENT_NO");
  911. String sbbh = StringUtils.isNotBlank(equipmentNo)? equipmentNo : "暂无";
  912. // 所在地区编号
  913. // String szdqbh = oriField.getString("IN_THE_AREA_NO");
  914. // 厂商编号
  915. // String csbh = oriField.getString("COMP_NO");
  916. // 网络类型名称
  917. // String wllxmc = oriField.getString("NET_TYPE_NAME");
  918. // 频点
  919. // String pd = oriField.getString("FREPOI");
  920. // 基站地球经度
  921. String jzdqJd = oriField.getString("BASSTA_LON");
  922. // 基站地球纬度
  923. String jzdqWd = oriField.getString("BASSTA_LAT");
  924. // 截获时间 ---样例:20250329061228
  925. String captureTime = oriField.getString("CAPTURE_TIME");
  926. String captureTimeDzwl = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无";
  927. String addressName = null;
  928. if(StringUtils.isNotBlank(jzdqWd) && StringUtils.isNotBlank(jzdqJd)){
  929. double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd));
  930. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
  931. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  932. addressName = rspJSONObj.getString("fullAddress");
  933. }
  934. yjxxsm.append("火车站电围 - 移动电话:");
  935. yjxxsm.append(yddh);
  936. yjxxsm.append(",IMSI:");
  937. yjxxsm.append(imsi);
  938. yjxxsm.append(",IMEI:");
  939. yjxxsm.append(imei);
  940. yjxxsm.append(",手机MAC地址:");
  941. yjxxsm.append(sjMac);
  942. yjxxsm.append(",设备编号:");
  943. yjxxsm.append(sbbh);
  944. for (Map<String, Object> modelInfoMap : modelInfoList) {
  945. String mxbh = (String) modelInfoMap.get("mxbh");
  946. if("DRYJ-BSJJ-HCZDW".equals(mxbh)){ // 单人预警-本市进京-火车站电围
  947. // 只保留命中点位在火车站区域内的数据
  948. if(GeoUtils.isPointInCircle(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd), Double.valueOf(centerPointLatHcz), Double.valueOf(centerPointLonHcz), Double.valueOf(radiusHcz))){
  949. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, yjrySfzh, yddh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, captureTimeDzwl, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jzdqJd, jzdqWd, currentTime, currentTime, null, null, null, "火车站", addressName});
  950. break;
  951. }
  952. }
  953. }
  954. yjxxsm.setLength(0);
  955. } else if (resCodeRlgz.equals(resourceCode)) { // =========== 人脸感知(火车站)
  956. // 抓拍机编号
  957. String snashoMachNo = oriField.getString("SNASHO_MACH_NO");
  958. String zpjbh = StringUtils.isNotBlank(snashoMachNo)? snashoMachNo : "暂无";
  959. // 抓拍机名称
  960. String snashoMachDesig = oriField.getString("SNASHO_MACH_DESIG");
  961. String zpjmc = StringUtils.isNotBlank(snashoMachDesig)? snashoMachDesig : "暂无";
  962. // 告警人员姓名
  963. // String gjryXm = oriField.getString("ALARM_PERSON_NAME");
  964. // 证件号码
  965. String credNum = oriField.getString("CRED_NUM");
  966. String gjryZjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无";
  967. // 告警时间 ---样例:20250329061228
  968. String alarmTime = oriField.getString("ALARM_TIME");
  969. String gjsj = StringUtils.isNotBlank(alarmTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(alarmTime)) : "暂无";
  970. // 地址名称
  971. // String dzmc = oriField.getString("ADDR_NAME");
  972. // 预警相似度
  973. // String yjxsd = oriField.getString("EARALA_SIMILA");
  974. // 告警信息处理结果
  975. // String gjxxcljg = oriField.getString("ALARM_INFO_PROC_RESU");
  976. // 人脸图片文件路径
  977. String perFacePictureFilePath = oriField.getString("PER_FACE_PICTURE_FILE_PATH");
  978. String rltpwjlj = StringUtils.isNotBlank(perFacePictureFilePath)? perFacePictureFilePath : "暂无";
  979. // 经度
  980. String jd = oriField.getString("LON");
  981. // 纬度
  982. String wd = oriField.getString("LAT");
  983. String addressName = null;
  984. if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){
  985. double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd));
  986. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
  987. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  988. addressName = rspJSONObj.getString("fullAddress");
  989. }
  990. yjxxsm.append("火车站人脸感知 - 抓拍机编号:");
  991. yjxxsm.append(zpjbh);
  992. yjxxsm.append(",抓拍机名称:");
  993. yjxxsm.append(zpjmc);
  994. yjxxsm.append(",告警人员证件号码:");
  995. yjxxsm.append(gjryZjhm);
  996. yjxxsm.append(",告警时间:");
  997. yjxxsm.append(gjsj);
  998. yjxxsm.append(",人脸图片文件路径:");
  999. yjxxsm.append(rltpwjlj);
  1000. for (Map<String, Object> modelInfoMap : modelInfoList) {
  1001. String mxbh = (String) modelInfoMap.get("mxbh");
  1002. if("DRYJ-BSJJ-HCZRLGZ".equals(mxbh)){ // 单人预警-本市进京-火车站人脸感知
  1003. // 只保留命中点位在火车站区域内的数据
  1004. if(GeoUtils.isPointInCircle(Double.valueOf(wd), Double.valueOf(jd), Double.valueOf(centerPointLatHcz), Double.valueOf(centerPointLonHcz), Double.valueOf(radiusHcz))){
  1005. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, gjryZjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, gjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, "火车站", addressName});
  1006. break;
  1007. }
  1008. }
  1009. }
  1010. yjxxsm.setLength(0);
  1011. } else if (resCodeGmszy.equals(resourceCode)) { // =========== 购买散装油
  1012. // 抓拍机编号
  1013. String snashoMachNo = oriField.getString("SNASHO_MACH_NO");
  1014. String zpjbh = StringUtils.isNotBlank(snashoMachNo)? snashoMachNo : "暂无";
  1015. // 抓拍机名称
  1016. String snashoMachDesig = oriField.getString("SNASHO_MACH_DESIG");
  1017. String zpjmc = StringUtils.isNotBlank(snashoMachDesig)? snashoMachDesig : "暂无";
  1018. // 证件号码
  1019. String credNum = oriField.getString("CRED_NUM");
  1020. String gjryZjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无";
  1021. // 告警时间 ---样例:20250329061228
  1022. String alarmTime = oriField.getString("ALARM_TIME");
  1023. String gjsj = StringUtils.isNotBlank(alarmTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(alarmTime)) : "暂无";
  1024. // 人脸图片文件路径
  1025. String perFacePictureFilePath = oriField.getString("PER_FACE_PICTURE_FILE_PATH");
  1026. String rltpwjlj = StringUtils.isNotBlank(perFacePictureFilePath)? perFacePictureFilePath : "暂无";
  1027. // 经度
  1028. String jd = oriField.getString("LON");
  1029. // 纬度
  1030. String wd = oriField.getString("LAT");
  1031. String addressName = null;
  1032. if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){
  1033. double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd));
  1034. String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null);
  1035. JSONObject rspJSONObj = JSON.parseObject(rspStr);
  1036. addressName = rspJSONObj.getString("fullAddress");
  1037. }
  1038. yjxxsm.append("购买散装油 - 抓拍机编号:");
  1039. yjxxsm.append(zpjbh);
  1040. yjxxsm.append(",抓拍机名称:");
  1041. yjxxsm.append(zpjmc);
  1042. yjxxsm.append(",告警人员证件号码:");
  1043. yjxxsm.append(gjryZjhm);
  1044. yjxxsm.append(",告警时间:");
  1045. yjxxsm.append(gjsj);
  1046. yjxxsm.append(",人脸图片文件路径:");
  1047. yjxxsm.append(rltpwjlj);
  1048. for (Map<String, Object> modelInfoMap : modelInfoList) {
  1049. String mxbh = (String) modelInfoMap.get("mxbh");
  1050. if("DRYJ-FXXW-GMSZY".equals(mxbh)){ // 单人预警-风险行为-购买散装油
  1051. warningInfoList.add(new Object[]{rwbh, rwmc, rwlx, rwlxmc, rwdxlxmc, yjxxbh, yjryXm, gjryZjhm, yjrySjh, yjxxsm.toString(), yjzt, Constants.YJZT_WD, gjsj, zrjz, zrmjid, zrmjxm, zrmjjh, zrmjlxfs, zrdwbm, CommonUtil.getConfValueByKey(zrdwbm), zrbmbm, CommonUtil.getConfValueByKey(zrbmbm), sqrXm, sqrSfzh, sqrJh, sqrDwbm, sqrDwmc, yjryLb, yjryBq, gkjb, gkjbmc, resourceCode, jd, wd, currentTime, currentTime, null, null, null, "火车站", addressName});
  1052. break;
  1053. }
  1054. }
  1055. yjxxsm.setLength(0);
  1056. }
  1057. }
  1058. }
  1059. // ========================= 批量入库符合条件的预警数据
  1060. if(warningInfoList.size() > 0){
  1061. batchSaveNum = ctrlDao.batchInsertWarningInfo(warningInfoList);
  1062. }
  1063. log.info("【QBEQSJYCTRL - 单人预警消费者服务】 当次消费到的数据量:{},符合条件保存入库的数据量:{}", records.count(), batchSaveNum);
  1064. }
  1065. }
  1066. }
  1067. }