package com.hhwy.qbeqsjy.kafka.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hhwy.qbeqsjy.common.*; import com.hhwy.qbeqsjy.dao.CtrlDao; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.locationtech.jts.geom.Coordinate; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 布控命中数据处理 */ @Slf4j @Service @EnableScheduling public class ConsumeService implements ApplicationListener { @Value("${topic.name}") private String topic; @Value("${clue.code.phone}") private String clueCodePhone; @Value("${clue.code.idCard}") private String clueCodeIdCard; @Value("${address.query.url}") private String addressQueryUrl; @Value("${centerPoint.lon.hcz}") private String centerPointLonHcz; @Value("${centerPoint.lat.hcz}") private String centerPointLatHcz; @Value("${radius.hcz}") private String radiusHcz; @Value("${res.code.auth}") private String resCodeAUTH; /*@Value("${res.code.tldp}") private String resCodeTldp;*/ @Value("${res.code.mhdp}") private String resCodeMhdp; @Value("${res.code.jnryzs}") private String resCodeJnryzs; @Value("${res.code.wbsw}") private String resCodeWbsw; @Value("${res.code.ky}") private String resCodeKy; @Value("${res.code.dt}") private String resCodeDt; @Value("${res.code.sjrd}") private String resCodeSjrd; @Value("${res.code.xlpc}") private String resCodeXlpc; @Value("${res.code.zdjc}") private String resCodeZdjc; @Value("${res.code.dzwl}") private String resCodeDzwl; @Value("${res.code.rlgz}") private String resCodeRlgz; @Value("${res.code.gmszy}") private String resCodeGmszy; @Resource private CtrlDao ctrlDao; private SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1); private HttpClient httpClient = new HttpClient(); // IOC容器刷新完成后就会发布ContextRefreshedEvent事件 @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { ExecutorService executor = Executors.newFixedThreadPool(1); executor.execute(() -> { if (contextRefreshedEvent.getApplicationContext().getParent() == null) { try { this.dataConsume(); } catch (Exception e) { log.error("【QBEQSJYCTRL】 数据处理服务启动异常", e); } } }); executor.shutdown(); } public void dataConsume() { if (AuthService.isSecurityModel()){ try { log.info("kafka集群已开启安全模式"); AuthService.securityPrepare(); } catch (IOException e) { log.error("kafka集群安全认证失败,异常信息 : {}.", e); return; } log.info("kafka集群安全认证成功"); } AuthService consumerAuthService = new AuthService(topic); log.info("【QBEQSJYCTRL - 消费者服务】 服务已启动"); process(consumerAuthService.consumer, topic); } /** * 消费目标topic中的预警结果数据,处理后批量入库 * @param consumer * @param topic */ public void process(KafkaConsumer consumer, String topic) { consumer.subscribe(Collections.singletonList(topic)); while (true) { // 间隔30秒拉取一次数据 log.info("间隔30秒拉取一次数据......"); ConsumerRecords records = consumer.poll(Constants.WAIT_TIME); if (records != null && records.count() > 0) { List warningInfoList = new ArrayList<>(); int batchSaveNum = 0; for (ConsumerRecord record : records) { JSONObject message = JSONObject.parseObject(record.value()); JSONObject uniCtrl = message.getJSONObject("UNICTRL"); String clueId = uniCtrl.getString("U_CLUEID"); String[] clueIdStrArr = clueId.split("_"); String rwbh = clueIdStrArr[Constants.NUM_1]; String clueType = clueIdStrArr[Constants.NUM_2]; String clue = clueIdStrArr[Constants.NUM_3]; String resourceCode = uniCtrl.getString("U_RESID"); // 每张布控资源表对应的命中数据JSON对象 JSONObject oriField = message.getJSONObject("ORIFIELD"); log.info(oriField.toJSONString()); StringBuilder yjxxsm = new StringBuilder(); // 生成预警信息编号 String yjxxbh = String.valueOf(generator.nextId()); // 预警状态默认为0(未读) Integer yjzt = 0; Date currentTime = new Date(); // 根据clueId中的任务编号、线索值、线索类型查询对应的布控任务相关信息(包含任务信息、数据资源信息、区域信息、线索信息) List> ctrlTaskInfoList = ctrlDao.queryCtrlTaskInfo(rwbh, clue, clueType); if(ctrlTaskInfoList.size() > 0){ Map 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 bkqyxx = String.valueOf(ctrlTaskInfo.get("bkqyxx")); String yjryXm = String.valueOf(ctrlTaskInfo.get("ryxm")); String yjrySfzh = String.valueOf(ctrlTaskInfo.get("zjhm")); String yjrySjh = String.valueOf(ctrlTaskInfo.get("sjh")); String yjryLb = String.valueOf(ctrlTaskInfo.get("rylb")); String yjryBq = String.valueOf(ctrlTaskInfo.get("rybq")); String gkjb = String.valueOf(ctrlTaskInfo.get("gkjb")); String gkjbmc = String.valueOf(ctrlTaskInfo.get("gkjbmc")); String zrjz = String.valueOf(ctrlTaskInfo.get("zrjz")); String zrmjid = String.valueOf(ctrlTaskInfo.get("zrmjid")); String zrmjxm = String.valueOf(ctrlTaskInfo.get("zrmjxm")); String zrmjjh = String.valueOf(ctrlTaskInfo.get("zrmjjh")); String zrmjlxfs = String.valueOf(ctrlTaskInfo.get("zrmjlxfs")); String zrdwbm = String.valueOf(ctrlTaskInfo.get("zrdwbm")); String zrbmbm = String.valueOf(ctrlTaskInfo.get("zrbmbm")); // 根据任务编号查询对应的模型配置信息 List> modelInfoList = ctrlDao.queryCtrlTaskModelInfo(rwbh); if(resCodeAUTH.equals(resourceCode)){ // =========== AUTH认证数据 // 1. ========================= 过滤基站号、经纬度为空的数据 String baseStationId = oriField.getString("BASE_STATION_ID"); String lonBD = oriField.getString("LONGITUDE"); String latBD = oriField.getString("LATITUDE"); if(StringUtils.isBlank(baseStationId) || StringUtils.isBlank(lonBD) || StringUtils.isBlank(latBD)){ continue; } // 2. ========================= 调用烽火接口,根据命中点位经纬度(百度坐标系)查询对应的地址信息 String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", lonBD).replace("y", latBD), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); // 命中点位地址名称 String addressName = rspJSONObj.getString("fullAddress"); String captureTime = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append(yjryXm); yjxxsm.append("于"); yjxxsm.append(captureTime); yjxxsm.append("出现在"); yjxxsm.append(addressName); // 将烽火的百度坐标系经纬度值转换为84坐标系经纬度值 double[] latAndLon84 = GpsCoordinateUtils.calBD09toWGS84(Double.valueOf(latBD), Double.valueOf(lonBD)); String lat84 = String.valueOf(latAndLon84[0]); String lon84 = String.valueOf(latAndLon84[1]); // 3. ========================= 如果存在布控区域,则过滤不在布控区域范围的数据 JSONArray areaInfoList = JSON.parseArray(bkqyxx); if(areaInfoList != null && areaInfoList.size() > 0){ for (Object obj : areaInfoList) { JSONObject ctrlAreaInfo = (JSONObject) obj; String areaName = (String) ctrlAreaInfo.get("qymc"); Integer geoType = (Integer) ctrlAreaInfo.get("qyjhlx"); JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh"))); JSONArray locationSet = locationJSONObj.getJSONArray("location"); // ****** 说明:如果出现多个布控区域范围存在重叠,并且命中点位也恰巧出现在重叠区域的极端情况,目前则只保存命中第一个布控区域时的一份数据,不再继续判断 if(Constants.NUM_0 == geoType){ // 布控区域是圆形 JSONObject loc = locationSet.getJSONObject(0); String centerLon84 = loc.getString("lon"); String centerLat84 = loc.getString("lat"); String radius = loc.getString("radius"); if(GeoUtils.isPointInCircle(Double.valueOf(lat84), Double.valueOf(lon84), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius))){ yjxxsm.append(",所在区域:"); yjxxsm.append(areaName); 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}); yjxxsm.setLength(0); break; } } else { // 布控区域是一般多边形 List coordinates = new ArrayList<>(); for (Object item : locationSet) { JSONObject loc = (JSONObject) item; String vertexLon84 = loc.getString("lon"); String vertexLat84 = loc.getString("lat"); coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84))); } if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lon84), Double.valueOf(lat84)))){ yjxxsm.append(",所在区域:"); yjxxsm.append(areaName); 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}); yjxxsm.setLength(0); break; } } } } else { // 如果不存在布控区域信息,则默认布控区域范围为全天津市,预警数据直接入库 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}); yjxxsm.setLength(0); } yjxxsm.setLength(0); } else if(resCodeKy.equals(resourceCode)){ // =========== 客运数据 // 票号 String ph = oriField.getString("TRAIN_TIC_NO"); // 旅客姓名 String lkXm = oriField.getString("PASS_NAME"); // 旅客身份证号 String lkSfzh = oriField.getString("PASS_CRED_NUM"); // 旅客手机 String passMob = oriField.getString("PASS_MOB"); String lkSjh = StringUtils.isNotBlank(passMob)? passMob : yjrySjh; // String ccrq = oriField.getString("RIDING_DATE"); // 乘车日期 // 检票时间 ---样例:20200929073509 String cheticTime = oriField.getString("CHETIC_TIME"); String jpsj = StringUtils.isNotBlank(cheticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(cheticTime)) : "暂无"; // String jpkyz = oriField.getString("CHETIC_PASSTA_NAME"); // 检票客运站 // 检票车次号 String cheticTrainNo = oriField.getString("CHETIC_TRAIN_NO"); String jpcch = StringUtils.isNotBlank(cheticTrainNo)? cheticTrainNo : "暂无"; // String bc = oriField.getString("SHIFT"); // 班次 // 座号 String seatNo = oriField.getString("SEAT_NO"); String zh = StringUtils.isNotBlank(seatNo)? seatNo : "暂无"; // String pj = oriField.getString("VEHTIC_PRIC"); // 票价 // String zffs = oriField.getString("PAYM_METH_NAME"); // 支付方式 // 车牌号 String vehPlateNum = oriField.getString("VEH_PLATE_NUM"); String cph = StringUtils.isNotBlank(vehPlateNum)? vehPlateNum : "暂无"; // 始发地站点 String depAddrStatiName = oriField.getString("DEP_ADDR_STATI_NAME"); String sfdzdmc = (StringUtils.isNotBlank(depAddrStatiName) && !"0".equals(depAddrStatiName))? depAddrStatiName : "暂无"; // 始发地行政区划代码 String sfdxzqhdm = oriField.getString("DEP_ADDR_ADDI_CODE"); // 目的地站点 String destStatiName = oriField.getString("DEST_STATI_NAME"); String mddzdmc = StringUtils.isNotBlank(destStatiName)? destStatiName : "暂无"; String mddxzqhdm = oriField.getString("DEST_ADDI_CODE"); // 目的地行政区划代码 // 订票时间 ---样例:20200929061228 String booticTime = oriField.getString("BOOTIC_TIME"); String dpsj = StringUtils.isNotBlank(booticTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(booticTime)) : "暂无"; // String dpfs = oriField.getString("BOOTIC_METH"); // 订票方式 // 发车时间 ---样例:20200929061228 String depTimeDtime = oriField.getString("DEP_TIME_DTIME"); String fcsj = StringUtils.isNotBlank(depTimeDtime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(depTimeDtime)) : "暂无"; // String ddsj = oriField.getString("ARR_TIME"); // 到达时间 // String lxrXm = oriField.getString("CTCT_PERSON_NAME"); // 联系人姓名 // String lxrLxdh = oriField.getString("CTCT_PERSON_CTCT_TEL"); // 联系人联系电话 String captureTimeKy = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append("客运数据 - 票号:"); yjxxsm.append(ph); yjxxsm.append(",旅客姓名:"); yjxxsm.append(lkXm); yjxxsm.append(",旅客身份证号:"); yjxxsm.append(lkSfzh); yjxxsm.append(",旅客手机号:"); yjxxsm.append(lkSjh); yjxxsm.append(",订票时间:"); yjxxsm.append(dpsj); yjxxsm.append(",发车时间:"); yjxxsm.append(fcsj); yjxxsm.append(",始发站:"); yjxxsm.append(sfdzdmc); yjxxsm.append(",目的站:"); yjxxsm.append(mddzdmc); yjxxsm.append(",检票时间:"); yjxxsm.append(jpsj); yjxxsm.append(",检票车次号:"); yjxxsm.append(jpcch); yjxxsm.append(",座号:"); yjxxsm.append(zh); yjxxsm.append(",车牌号:"); yjxxsm.append(cph); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-KYCC".equals(mxbh)){ // 单人预警-本市进京-客运乘车 if(StringUtils.isNotBlank(sfdxzqhdm) && StringUtils.isNotBlank(mddxzqhdm)){ // 始发地:天津,目的地:北京 if("12".equals(sfdxzqhdm.substring(0, 2)) && "11".equals(mddxzqhdm.substring(0, 2))){ 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}); break; } } } } yjxxsm.setLength(0); } else if (resCodeMhdp.equals(resourceCode)) { // =========== 民航订票数据 // 订座记录编号 String ordseatRecoNo = oriField.getString("ORDSEAT_RECO_NO"); String dzjlbh = StringUtils.isNotBlank(ordseatRecoNo)? ordseatRecoNo : "暂无"; // 旅客中文名 String passName = oriField.getString("PASS_NAME"); String lkzwm = StringUtils.isNotBlank(passName)? passName : "暂无"; // 旅客证件号码 String credNum = oriField.getString("CRED_NUM"); String zjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无"; // String lklxdh = oriField.getString("PASS_CTCT_TEL"); // 旅客联系电话 // 承运航空公司 String carrOrgaAirlineName = oriField.getString("CARR_ORGA_AIRLINE_NAME"); String cyhkgs = StringUtils.isNotBlank(carrOrgaAirlineName)? carrOrgaAirlineName : "暂无"; // 责任航空公司 String respUnitAirlineName = oriField.getString("RESP_UNIT_AIRLINE_NAME"); String zrhkgs = StringUtils.isNotBlank(respUnitAirlineName)? respUnitAirlineName : "暂无"; // 航班号 String flinum = oriField.getString("FLINUM"); String hbh = StringUtils.isNotBlank(flinum)? flinum : "暂无"; // 起飞机场 String flyInitNrtAirportName = oriField.getString("FLY_INIT_NRT_AIRPORT_NAME"); String qfjcmc = StringUtils.isNotBlank(flyInitNrtAirportName)? flyInitNrtAirportName : "暂无"; // 起飞机场代码 String flyInitNrtAirportCode = oriField.getString("FLY_INIT_NRT_AIRPORT_CODE"); String qfjcdm = StringUtils.isNotBlank(flyInitNrtAirportCode)? flyInitNrtAirportCode : "暂无"; // String qfzcs = oriField.getString("FLY_INIT_ADDR_CITY_NAME"); // 起飞站城市 // 到达机场 String arrAtAirAirportName = oriField.getString("ARR_AT_AIR_AIRPORT_NAME"); String ddjcmc = StringUtils.isNotBlank(arrAtAirAirportName)? arrAtAirAirportName : "暂无"; // 到达机场代码 String arrAtAirAirportCode = oriField.getString("ARR_AT_AIR_AIRPORT_CODE"); String ddjcdm = StringUtils.isNotBlank(arrAtAirAirportCode)? arrAtAirAirportCode : "暂无"; // String ddzcs = oriField.getString("ARR_ADDR_CITY_NAME"); // 到达站城市 // String cfrq = oriField.getString("STAOFF_DATE"); // 出发日期 // 出发时间 ---样例:20200929061228 String staoffTime = oriField.getString("STAOFF_TIME"); String cfsj = StringUtils.isNotBlank(staoffTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(staoffTime)) : "暂无"; // String ddrq = oriField.getString("ARR_DATE"); // 到达日期 // 到达时间 String arrTime = oriField.getString("ARR_TIME"); String ddsj = StringUtils.isNotBlank(arrTime)? arrTime : "暂无"; // String kpzt = oriField.getString("ELE_TIC_STAT_NAME"); // 客票状态 // String cw = oriField.getString("CHISHI_SEAT"); // 舱位 // String dpsj = oriField.getString("BOOTIC_TIME"); // 订票时间 // 截获时间 ---样例:20200929061228 String captureTime = oriField.getString("CAPTURE_TIME"); String captureTimeMhdp = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无"; yjxxsm.append("民航订票 - 订座记录编号:"); yjxxsm.append(dzjlbh); yjxxsm.append(",旅客中文名:"); yjxxsm.append(lkzwm); yjxxsm.append(",旅客证件号码:"); yjxxsm.append(zjhm); yjxxsm.append(",承运航空公司:"); yjxxsm.append(cyhkgs); yjxxsm.append(",责任航空公司:"); yjxxsm.append(zrhkgs); yjxxsm.append(",航班号:"); yjxxsm.append(hbh); yjxxsm.append(",起飞机场:"); yjxxsm.append(qfjcmc); yjxxsm.append(",出发时间:"); yjxxsm.append(cfsj); yjxxsm.append(",到达机场:"); yjxxsm.append(ddjcmc); yjxxsm.append(",到达时间:"); yjxxsm.append(ddsj); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-WSLJ-MHDP".equals(mxbh)){ // 单人预警-外省来津-民航订票 if(StringUtils.isNotBlank(ddjcdm)){ // 业务需求:到达机场代码为TSN(中国-天津-天津滨海国际机场) if("TSN".equals(ddjcdm.trim())){ 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}); break; } } } else if ("DRYJ-KSGJ-MHDP".equals(mxbh)) { // 单人预警-跨省轨迹-民航订票 if(StringUtils.isNotBlank(qfjcdm) && StringUtils.isNotBlank(ddjcmc)){ String mddShi = (String) modelInfoMap.get("mdd_shi"); // 业务需求:起飞机场代码为TSN(中国-天津-天津滨海国际机场),到达机场处在当前任务所记录的目的地市境内 if("TSN".equals(qfjcdm.trim()) && ddjcmc.contains(mddShi)){ 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}); break; } } } } yjxxsm.setLength(0); } else if (resCodeJnryzs.equals(resourceCode)) { // =========== 境内人员住宿数据 // 旅馆编号 String lgbh = oriField.getString("HOTEL_NO"); String[] lgxxArr = CommonUtil.getConfValueByKey(lgbh).split("@"); // 旅馆名称 // String lgmc = oriField.getString("HOTE_NAME"); // 旅馆地址 // String lgdz = oriField.getString("HOTEL_ADDR_ADDR_NAME"); // 旅馆经度 // String lgjd = oriField.getString("HOTEL_LON"); // 旅馆纬度 // String lgwd = oriField.getString("HOTEL_LAT"); String lgmc = lgxxArr[0]; String lgdz = lgxxArr[1]; String lgjd = lgxxArr[2]; String lgwd = lgxxArr[3]; // String lglx = oriField.getString("HOTE_TYPE_NAME"); // 旅馆类型 // 姓名 String rzrXm = oriField.getString("NAME"); // 身份证号 String rzrSfzh = oriField.getString("CERT_NO"); // 旅客联系电话 String ctctTel = oriField.getString("CTCT_TEL"); String rzrLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh; // String rylx = oriField.getString("PER_CLAS_NAME"); // 人员类型 // String gj = oriField.getString("NATION_NAME"); // 国籍 // String hjdz = oriField.getString("DOMIC_ADDR_NAME"); // 户籍地址 // 入住时间 ---样例:20250329061228 String admiTime = oriField.getString("ADMI_TIME"); String rzsj = StringUtils.isNotBlank(admiTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(admiTime)) : "暂无"; // 退房时间 ---样例:20250329061228 String choutTime = oriField.getString("CHOUT_TIME"); String tfsj = StringUtils.isNotBlank(choutTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(choutTime)) : "暂无"; // String zsts = oriField.getString("LODG_DAY_NUM"); // 住宿天数 // 房间号 String roomNo = oriField.getString("ROOM_NO"); String fjh = StringUtils.isNotBlank(roomNo)? roomNo : "暂无"; // String rzrs = oriField.getString("ADMISSION_PER_NUM"); // 入住人数 // String ywsxcl = oriField.getString("THER_ACCO_VEHI_JUDGE_FLAG"); // 有无随行车辆 // String sxclhp = oriField.getString("ACCO_VEH_VEH_PLATE_NUM"); // 随行车辆号牌 // String wypt = oriField.getString("PLAT_NAME"); // 网约平台 // String ydrXm = oriField.getString("APPO_PER_NAME"); // 预定人姓名 // String ydrSfzh = oriField.getString("APPO_PER_CERT_NO"); // 预定人身份证号 // String ydrSjh = oriField.getString("APPO_PER_CTCT_TEL"); // 预定人手机号 // String rzr2Xm = oriField.getString("ADMIS_PER_TWO_NAME"); // 入住人2姓名 // String rzr2Sfzh = oriField.getString("ADMIS_PER_TWO_CERT_NO"); // 入住人2身份证号 // String rzr2Lxfs = oriField.getString("ADMIS_PER_TWO_CTCT_TEL"); // 入住人2联系方式 String captureTimeJnryzs = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append("旅馆住宿 - 旅馆编号:"); yjxxsm.append(lgbh); yjxxsm.append(",旅馆名称:"); yjxxsm.append(lgmc); yjxxsm.append(",旅馆地址:"); yjxxsm.append(lgdz); yjxxsm.append(",入住人姓名:"); yjxxsm.append(rzrXm); yjxxsm.append(",入住人身份证号:"); yjxxsm.append(rzrSfzh); yjxxsm.append(",入住人联系电话:"); yjxxsm.append(rzrLxdh); yjxxsm.append(",入住时间:"); yjxxsm.append(rzsj); yjxxsm.append(",退房时间:"); yjxxsm.append(tfsj); yjxxsm.append(",房间号:"); yjxxsm.append(fjh); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); /*if("DRYJ-BSJJ-LKZD".equals(mxbh)){ // 单人预警-本市进京-旅客住店 // --- todo // 该需求不合理,待定 } else*/ if("DRYJ-BSMGQY-LKZD".equals(mxbh)){ // 单人预警-本市敏感区域-旅客住店 JSONArray areaInfoList = JSON.parseArray(bkqyxx); for (Object obj : areaInfoList) { JSONObject ctrlAreaInfo = (JSONObject) obj; String qymc = (String) ctrlAreaInfo.get("qymc"); Integer qyjhlx = (Integer) ctrlAreaInfo.get("qyjhlx"); JSONObject locationJSONObj = JSON.parseObject(String.valueOf(ctrlAreaInfo.get("qyfwjwdjhFh"))); JSONArray locationSet = locationJSONObj.getJSONArray("location"); if(!"null".equals(lgjd) && !"null".equals(lgwd)){ if(Constants.NUM_0 == qyjhlx){ JSONObject loc = locationSet.getJSONObject(0); String centerLon84 = loc.getString("lon"); String centerLat84 = loc.getString("lat"); String radius = loc.getString("radius"); if(GeoUtils.isPointInCircle(Double.valueOf(lgwd), Double.valueOf(lgjd), Double.valueOf(centerLat84), Double.valueOf(centerLon84), Double.valueOf(radius))){ yjxxsm.append(",所在区域:"); yjxxsm.append(qymc); 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}); yjxxsm.setLength(0); break; } } else { List coordinates = new ArrayList<>(); for (Object item : locationSet) { JSONObject loc = (JSONObject) item; String vertexLon84 = loc.getString("lon"); String vertexLat84 = loc.getString("lat"); coordinates.add(new Coordinate(Double.valueOf(vertexLon84), Double.valueOf(vertexLat84))); } if(GeoUtils.isPointInPolygon(coordinates, new Coordinate(Double.valueOf(lgjd), Double.valueOf(lgwd)))){ yjxxsm.append(",所在区域:"); yjxxsm.append(qymc); 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}); yjxxsm.setLength(0); break; } } } } } } yjxxsm.setLength(0); } else if (resCodeWbsw.equals(resourceCode)) { // =========== 网吧上网数据 // 上网人员姓名 String swryXm = oriField.getString("INTE_PER_NAME"); // 上网人员身份证号 String swrySfzh = oriField.getString("CRED_NUM"); // 上网人员联系电话 String ctctTel = oriField.getString("CTCT_TEL"); String swryLxdh = StringUtils.isNotBlank(ctctTel)? ctctTel : yjrySjh; // 上网终端编号 String intenetTermNo = oriField.getString("INTENET_TERM_NO"); String swzdbh = StringUtils.isNotBlank(intenetTermNo)? intenetTermNo : "暂无"; // String ip = oriField.getString("MAIENG_IP"); // IP地址 // String zdmc = oriField.getString("TERM_DESIG"); // 终端名称 // String zdmac = oriField.getString("TERM_MAC"); // 终端mac地址 // 上网开始时间 ---样例:20250329061228 String intenetStartTime = oriField.getString("INTENET_START_TIME"); String swkssj = StringUtils.isNotBlank(intenetStartTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetStartTime)) : "暂无"; // 上网结束时间 ---样例:20250329061228 String intenetEndTime = oriField.getString("INTENET_END_TIME"); String swjssj = StringUtils.isNotBlank(intenetEndTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(intenetEndTime)) : "暂无"; // String swsc = oriField.getString("INTENET_TIME_LENGTH"); // 上网时长 // 营业场所编号 String premNo = oriField.getString("PREM_NO"); String yycsbh = StringUtils.isNotBlank(premNo)? premNo : "暂无"; // 营业场所名称 String premDesig = oriField.getString("PREM_DESIG"); String yycsmc = StringUtils.isNotBlank(premDesig)? premDesig : "暂无"; // String dzmc = oriField.getString("ADDR_NAME"); // 地址名称 // String jd = oriField.getString("LON"); // 经度 // String wd = oriField.getString("LAT"); // 纬度 // String frXm = oriField.getString("LEGAL_NAME"); // 法人姓名 // String frSfzh = oriField.getString("LEGAL_CRED_NUM"); // 法人身份证号 // String frLxdh = oriField.getString("LEGAL_CTCT_TEL"); // 法人联系电话 String captureTimeWbsw = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append("网吧上网 - 上网人员姓名:"); yjxxsm.append(swryXm); yjxxsm.append(",上网人员身份证号:"); yjxxsm.append(swrySfzh); yjxxsm.append(",上网人员联系电话:"); yjxxsm.append(swryLxdh); yjxxsm.append(",上网终端编号:"); yjxxsm.append(swzdbh); yjxxsm.append(",上网开始时间:"); yjxxsm.append(swkssj); yjxxsm.append(",上网结束时间:"); yjxxsm.append(swjssj); yjxxsm.append(",营业场所编号:"); yjxxsm.append(yycsbh); yjxxsm.append(",营业场所名称:"); yjxxsm.append(yycsmc); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSMGQY-WBSW".equals(mxbh)){ // 单人预警-本市敏感区域-网吧上网 // --- todo // 表中无经、纬度数据,无法判断是否出现在布控区域 // 暂时不做过滤处理 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}); break; } } yjxxsm.setLength(0); } else if (resCodeDt.equals(resourceCode)) { // =========== 地铁数据 // 乘客姓名 String ckXm = oriField.getString("XM"); // 乘客身份证号 String ckSfzh = oriField.getString("ZJHM"); // 乘客联系电话 String yddh = oriField.getString("YDDH"); String ckLxdh = StringUtils.isNotBlank(yddh)? yddh : yjrySjh; // 刷卡卡号 String khXxbh = oriField.getString("KH_XXBH"); String skkh = StringUtils.isNotBlank(khXxbh)? khXxbh : "暂无"; // 刷卡时间 ---样例:20250329061228 String shkJdsj = oriField.getString("SHK_JDSJ"); String sksj = StringUtils.isNotBlank(shkJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(shkJdsj)) : "暂无"; // 车站名称 String czmMc = oriField.getString("CZM_MC"); String czmc = StringUtils.isNotBlank(czmMc)? czmMc : "暂无"; // 分类名称 String flMc = oriField.getString("FL_MC"); String flmc = StringUtils.isNotBlank(flMc)? flMc : "暂无"; // 进出站标识名称 String jczBsMc = oriField.getString("JCZ_BS_MC"); String jczbsmc = StringUtils.isNotBlank(jczBsMc)? jczBsMc : "暂无"; // 交易类型名称 String jyLexMc = oriField.getString("JY_LEX_MC"); String jylxmc = StringUtils.isNotBlank(jyLexMc)? jyLexMc : "暂无"; // 闸机号 String zhjhJyqk = oriField.getString("ZHJH_JYQK"); String zjh = StringUtils.isNotBlank(zhjhJyqk)? zhjhJyqk : "暂无"; // 地铁线路信息 String dtXlxx = oriField.getString("DTXLXX"); String dtxlxx = StringUtils.isNotBlank(dtXlxx)? dtXlxx : "暂无"; String captureTimeDt = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append("地铁数据 - 乘客姓名:"); yjxxsm.append(ckXm); yjxxsm.append(",乘客身份证号:"); yjxxsm.append(ckSfzh); yjxxsm.append(",乘客联系电话:"); yjxxsm.append(ckLxdh); yjxxsm.append(",刷卡卡号:"); yjxxsm.append(skkh); yjxxsm.append(",刷卡时间:"); yjxxsm.append(sksj); yjxxsm.append(",车站名称:"); yjxxsm.append(czmc); yjxxsm.append(",分类名称:"); yjxxsm.append(flmc); yjxxsm.append(",进出站标识名称:"); yjxxsm.append(jczbsmc); yjxxsm.append(",交易类型名称:"); yjxxsm.append(jylxmc); yjxxsm.append(",闸机号:"); yjxxsm.append(zjh); yjxxsm.append(",地铁线路信息:"); yjxxsm.append(dtxlxx); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSMGQY-DT".equals(mxbh)){ // 单人预警-本市敏感区域-地铁 // --- todo // 表中无经、纬度数据,无法判断是否出现在布控区域 // 暂时不做过滤处理 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}); break; } } yjxxsm.setLength(0); } else if (resCodeSjrd.equals(resourceCode)) { // =========== 手机热点 // 移动电话 String yddhSrc = oriField.getString("YDDH"); String yddh = StringUtils.isNotBlank(yddhSrc)? yddhSrc : yjrySjh; // 城际设备信息编号 String chjiSbeXxbh = oriField.getString("CHJI_SBE_XXBH"); String cjsbxxbh = StringUtils.isNotBlank(chjiSbeXxbh)? chjiSbeXxbh : "暂无"; // 国际移动用户识别码,IMSI String gjydyhsbm = oriField.getString("GJYDYHSBM"); String imsi = StringUtils.isNotBlank(gjydyhsbm)? gjydyhsbm : "暂无"; // 国际移动设备识别码,IMEI String gjydsbsfdm = oriField.getString("GJYDSBSFDM"); String imei = StringUtils.isNotBlank(gjydsbsfdm)? gjydsbsfdm : "暂无"; // 交换机信息编号 String jhjXxbh = oriField.getString("JHJ_XXBH"); String jhjxxbh = StringUtils.isNotBlank(jhjXxbh)? jhjXxbh : "暂无"; // 位置区域信息编号 String wzhQuyXxbh = oriField.getString("WZH_QUY_XXBH"); String wzqyxxbh = StringUtils.isNotBlank(wzhQuyXxbh)? wzhQuyXxbh : "暂无"; // 小区信息编号 String xiqXxbh = oriField.getString("XIQ_XXBH"); String xqxxbh = StringUtils.isNotBlank(xiqXxbh)? xiqXxbh : "暂无"; // 经度 String jd = oriField.getString("DQJD"); // 纬度 String wd = oriField.getString("DQWD"); // 关联时间 ---样例:1745476573 String glsj = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("JDSJ"))); String captureTimeSjrd = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); String addressName = null; if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){ double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd)); String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); addressName = rspJSONObj.getString("fullAddress"); } yjxxsm.append("手机热点 - 移动电话:"); yjxxsm.append(yddh); yjxxsm.append(",城际设备信息编号:"); yjxxsm.append(cjsbxxbh); yjxxsm.append(",IMSI:"); yjxxsm.append(imsi); yjxxsm.append(",IMEI:"); yjxxsm.append(imei); yjxxsm.append(",交换机信息编号:"); yjxxsm.append(jhjxxbh); yjxxsm.append(",位置区域信息编号:"); yjxxsm.append(wzqyxxbh); yjxxsm.append(",小区信息编号:"); yjxxsm.append(xqxxbh); yjxxsm.append(",关联时间:"); yjxxsm.append(glsj); yjxxsm.append(",位置信息:"); yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无"); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-SJRD".equals(mxbh)){ // 单人预警-本市进京-手机热点 // 暂时不做过滤处理 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}); break; } } yjxxsm.setLength(0); } else if (resCodeXlpc.equals(resourceCode)) { // =========== 巡逻盘查(人员) // 卡口信息ID String kakXxId = oriField.getString("KAK_XXID"); String kkxxId = StringUtils.isNotBlank(kakXxId)? kakXxId : "暂无"; // 卡口名称 String kakMc = oriField.getString("KAK_MC"); String kkmc = StringUtils.isNotBlank(kakMc)? kakMc : "暂无"; // 终端型号 String zhdXh = oriField.getString("ZHD_XH"); String zdxh = StringUtils.isNotBlank(zhdXh)? zhdXh : "暂无"; // 终端串号简要情况 String zhdChaJyqk = oriField.getString("ZHD_CHA_JYQK"); String zdchjyqk = StringUtils.isNotBlank(zhdChaJyqk)? zhdChaJyqk : "暂无"; // 盘查时间 ---样例:20250329061228 String pacJdsj = oriField.getString("PAC_JDSJ"); String pcsj = StringUtils.isNotBlank(pacJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(pacJdsj)) : "暂无"; // 人员姓名 String xmSrc = oriField.getString("XM"); String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无"; // 人员身份证号 String gmsfhm = oriField.getString("GMSFHM"); String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无"; // 人员联系电话 String lxdhSrc = oriField.getString("LXDH"); String lxdh = StringUtils.isNotBlank(lxdhSrc)? lxdhSrc : yjrySjh; // String rybq = oriField.getString("REY_BQI_MC"); // 人员标签 // 籍贯 String jgXzqhmc = oriField.getString("JG_XZQHMC"); String jg = StringUtils.isNotBlank(jgXzqhmc)? jgXzqhmc : "暂无"; // 民族 String mzmzwz = oriField.getString("MZMZWZ"); String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无"; // 居住地区划内详细地址 String jzdQhnxxdz = oriField.getString("JZD_QHNXXDZ"); String jzdxxdz = StringUtils.isNotBlank(jzdQhnxxdz)? jzdQhnxxdz : "暂无"; // 盘查民警姓名 String pacMjXm = oriField.getString("PAC_MJ_XM"); String pcmjXm = StringUtils.isNotBlank(pacMjXm)? pacMjXm : "暂无"; // 盘查民警警号 String pacMjJh = oriField.getString("PAC_MJ_JH"); String pcmjJh = StringUtils.isNotBlank(pacMjJh)? pacMjJh : "暂无"; // 盘查民警账号 String pacMjZh = oriField.getString("PAC_MJ_ZH"); String pcmjZh = StringUtils.isNotBlank(pacMjZh)? pacMjZh : "暂无"; // 盘查民警所属单位名称 String pacMjSsDwmc = oriField.getString("PAC_MJ_SS_DWMC"); String pcmjSsdwmc = StringUtils.isNotBlank(pacMjSsDwmc)? pacMjSsDwmc : "暂无"; // 盘查处理结果 String pacChlJguMc = oriField.getString("PAC_CHL_JGU_MC"); String pccljg = StringUtils.isNotBlank(pacChlJguMc)? pacChlJguMc : "暂无"; // 盘查处理移交单位名称 String pacChlYijDwmc = oriField.getString("PAC_CHL_YIJ_DWMC"); String pcclyjdwmc = StringUtils.isNotBlank(pacChlYijDwmc)? pacChlYijDwmc : "暂无"; // 业务类型名称 String ywlxMc = oriField.getString("YWLX_MC"); String ywlx = StringUtils.isNotBlank(ywlxMc)? ywlxMc : "暂无"; // 盘查地经度 String pcdJd = oriField.getString("PCD_DQJD"); // 盘查地纬度 String pcdWd = oriField.getString("PCD_DQWD"); String captureTimeXlpc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); String addressName = null; if(StringUtils.isNotBlank(pcdWd) && StringUtils.isNotBlank(pcdJd)){ double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(pcdWd), Double.valueOf(pcdJd)); String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); addressName = rspJSONObj.getString("fullAddress"); } yjxxsm.append("巡逻盘查 - 人员姓名:"); yjxxsm.append(xm); yjxxsm.append(",人员身份证号:"); yjxxsm.append(sfzh); yjxxsm.append(",人员联系电话:"); yjxxsm.append(lxdh); yjxxsm.append(",籍贯:"); yjxxsm.append(jg); yjxxsm.append(",民族:"); yjxxsm.append(mz); yjxxsm.append(",居住地详细地址:"); yjxxsm.append(jzdxxdz); yjxxsm.append(",盘查时间:"); yjxxsm.append(pcsj); yjxxsm.append(",卡口ID:"); yjxxsm.append(kkxxId); yjxxsm.append(",卡口名称:"); yjxxsm.append(kkmc); yjxxsm.append(",终端型号:"); yjxxsm.append(zdxh); yjxxsm.append(",终端串号:"); yjxxsm.append(zdchjyqk); yjxxsm.append(",盘查民警姓名:"); yjxxsm.append(pcmjXm); yjxxsm.append(",盘查民警警号:"); yjxxsm.append(pcmjJh); yjxxsm.append(",盘查民警账号:"); yjxxsm.append(pcmjZh); yjxxsm.append(",盘查民警所属单位名称:"); yjxxsm.append(pcmjSsdwmc); yjxxsm.append(",盘查处理结果:"); yjxxsm.append(pccljg); yjxxsm.append(",盘查处理移交单位名称:"); yjxxsm.append(pcclyjdwmc); yjxxsm.append(",业务类型名称:"); yjxxsm.append(ywlx); yjxxsm.append(",盘查地位置信息:"); yjxxsm.append(StringUtils.isNotBlank(addressName)? addressName : "暂无"); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-XLPC".equals(mxbh)){ // 单人预警-本市进京-巡逻盘查 // 暂时不做过滤处理 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}); break; } } yjxxsm.setLength(0); } else if (resCodeZdjc.equals(resourceCode)) { // =========== 站点检查(人员) // 人员姓名 String xmSrc = oriField.getString("XM"); String xm = StringUtils.isNotBlank(xmSrc)? xmSrc : "暂无"; // 人员身份证号 String gmsfhm = oriField.getString("GMSFHM"); String sfzh = StringUtils.isNotBlank(gmsfhm)? gmsfhm : "暂无"; // 民族 String mzmzwz = oriField.getString("MZMZWZ"); String mz = StringUtils.isNotBlank(mzmzwz)? mzmzwz : "暂无"; // 地址 String dzmc = oriField.getString("DZMC"); String dz = StringUtils.isNotBlank(dzmc)? dzmc : "暂无"; // 发证机关名称 String fzjgMc = oriField.getString("FZJG_MC"); String fzjg = StringUtils.isNotBlank(fzjgMc)? fzjgMc : "暂无"; // 证件有效起始日期 String zjyxqKsRq = oriField.getString("ZJYXQ_KS_RQ"); String zjyxqsrq = StringUtils.isNotBlank(zjyxqKsRq)? zjyxqKsRq : "暂无"; // 证件有效终止日期 String zjyxqJshRq = oriField.getString("ZJYXQ_JSH_RQ"); String zjyxzzrq = StringUtils.isNotBlank(zjyxqJshRq)? zjyxqJshRq : "暂无"; // 警员编号 String jyuBh = oriField.getString("JYU_BH"); String jybh = StringUtils.isNotBlank(jyuBh)? jyuBh : "暂无"; // 人员照片地址 String ryzpWz = oriField.getString("RYZP_WZ"); String ryzpUrl = StringUtils.isNotBlank(ryzpWz)? ryzpWz : "暂无"; // 检查站名称 String jiczMc = oriField.getString("JICZ_MC"); String jczmc = StringUtils.isNotBlank(jiczMc)? jiczMc : "暂无"; // 检查时间 ---样例:20250329061228 String jicJdsj = oriField.getString("JIC_JDSJ"); String jcsj = StringUtils.isNotBlank(jicJdsj)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(jicJdsj)) : "暂无"; String captureTimeZdjc = TimeTool.timeStampToDateString(Long.valueOf(oriField.getString("CAPTURE_TIME"))); yjxxsm.append("站点检查 - 人员姓名:"); yjxxsm.append(xm); yjxxsm.append(",人员身份证号:"); yjxxsm.append(sfzh); yjxxsm.append(",民族:"); yjxxsm.append(mz); yjxxsm.append(",地址:"); yjxxsm.append(dz); yjxxsm.append(",检查时间:"); yjxxsm.append(jcsj); yjxxsm.append(",发证机关:"); yjxxsm.append(fzjg); yjxxsm.append(",证件有效起始日期:"); yjxxsm.append(zjyxqsrq); yjxxsm.append(",证件有效终止日期:"); yjxxsm.append(zjyxzzrq); yjxxsm.append(",人员照片:"); yjxxsm.append(ryzpUrl); yjxxsm.append(",警员编号:"); yjxxsm.append(jybh); yjxxsm.append(",检查站名称:"); yjxxsm.append(jczmc); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-ZDJC".equals(mxbh)){ // 单人预警-本市进京-站点检查 // 暂时不做过滤处理 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}); break; } } yjxxsm.setLength(0); } else if (resCodeDzwl.equals(resourceCode)) { // =========== 电子围栏(火车站) // 移动电话 String mob = oriField.getString("MOB"); String yddh = StringUtils.isNotBlank(mob)? mob : yjrySjh; // 国际移动用户识别码 String imsiSrc = oriField.getString("IMSI"); String imsi = StringUtils.isNotBlank(imsiSrc)? imsiSrc : "暂无"; // 国际移动设备识别码 String imeiSrc = oriField.getString("IMEI"); String imei = StringUtils.isNotBlank(imeiSrc)? imeiSrc : "暂无"; // 手机MAC地址 String mobphoMac = oriField.getString("MOBPHO_MAC"); String sjMac = StringUtils.isNotBlank(mobphoMac)? mobphoMac : "暂无"; // 运营商名称 // String spName = oriField.getString("SP_NAME"); // String yysmc = StringUtils.isNotBlank(spName)? spName : "暂无"; // 设备编号 String equipmentNo = oriField.getString("EQUIPMENT_NO"); String sbbh = StringUtils.isNotBlank(equipmentNo)? equipmentNo : "暂无"; // 所在地区编号 // String szdqbh = oriField.getString("IN_THE_AREA_NO"); // 厂商编号 // String csbh = oriField.getString("COMP_NO"); // 网络类型名称 // String wllxmc = oriField.getString("NET_TYPE_NAME"); // 频点 // String pd = oriField.getString("FREPOI"); // 基站地球经度 String jzdqJd = oriField.getString("BASSTA_LON"); // 基站地球纬度 String jzdqWd = oriField.getString("BASSTA_LAT"); // 截获时间 ---样例:20250329061228 String captureTime = oriField.getString("CAPTURE_TIME"); String captureTimeDzwl = StringUtils.isNotBlank(captureTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(captureTime)) : "暂无"; String addressName = null; if(StringUtils.isNotBlank(jzdqWd) && StringUtils.isNotBlank(jzdqJd)){ double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd)); String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); addressName = rspJSONObj.getString("fullAddress"); } yjxxsm.append("火车站电围 - 移动电话:"); yjxxsm.append(yddh); yjxxsm.append(",IMSI:"); yjxxsm.append(imsi); yjxxsm.append(",IMEI:"); yjxxsm.append(imei); yjxxsm.append(",手机MAC地址:"); yjxxsm.append(sjMac); yjxxsm.append(",设备编号:"); yjxxsm.append(sbbh); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-HCZDW".equals(mxbh)){ // 单人预警-本市进京-火车站电围 // 只保留命中点位在火车站区域内的数据 if(GeoUtils.isPointInCircle(Double.valueOf(jzdqWd), Double.valueOf(jzdqJd), Double.valueOf(centerPointLatHcz), Double.valueOf(centerPointLonHcz), Double.valueOf(radiusHcz))){ 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}); break; } } } yjxxsm.setLength(0); } else if (resCodeRlgz.equals(resourceCode)) { // =========== 人脸感知(火车站) // 抓拍机编号 String snashoMachNo = oriField.getString("SNASHO_MACH_NO"); String zpjbh = StringUtils.isNotBlank(snashoMachNo)? snashoMachNo : "暂无"; // 抓拍机名称 String snashoMachDesig = oriField.getString("SNASHO_MACH_DESIG"); String zpjmc = StringUtils.isNotBlank(snashoMachDesig)? snashoMachDesig : "暂无"; // 告警人员姓名 // String gjryXm = oriField.getString("ALARM_PERSON_NAME"); // 证件号码 String credNum = oriField.getString("CRED_NUM"); String gjryZjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无"; // 告警时间 ---样例:20250329061228 String alarmTime = oriField.getString("ALARM_TIME"); String gjsj = StringUtils.isNotBlank(alarmTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(alarmTime)) : "暂无"; // 地址名称 // String dzmc = oriField.getString("ADDR_NAME"); // 预警相似度 // String yjxsd = oriField.getString("EARALA_SIMILA"); // 告警信息处理结果 // String gjxxcljg = oriField.getString("ALARM_INFO_PROC_RESU"); // 人脸图片文件路径 String perFacePictureFilePath = oriField.getString("PER_FACE_PICTURE_FILE_PATH"); String rltpwjlj = StringUtils.isNotBlank(perFacePictureFilePath)? perFacePictureFilePath : "暂无"; // 经度 String jd = oriField.getString("LON"); // 纬度 String wd = oriField.getString("LAT"); String addressName = null; if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){ double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd)); String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); addressName = rspJSONObj.getString("fullAddress"); } yjxxsm.append("火车站人脸感知 - 抓拍机编号:"); yjxxsm.append(zpjbh); yjxxsm.append(",抓拍机名称:"); yjxxsm.append(zpjmc); yjxxsm.append(",告警人员证件号码:"); yjxxsm.append(gjryZjhm); yjxxsm.append(",告警时间:"); yjxxsm.append(gjsj); yjxxsm.append(",人脸图片文件路径:"); yjxxsm.append(rltpwjlj); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-BSJJ-HCZRLGZ".equals(mxbh)){ // 单人预警-本市进京-火车站人脸感知 // 只保留命中点位在火车站区域内的数据 if(GeoUtils.isPointInCircle(Double.valueOf(wd), Double.valueOf(jd), Double.valueOf(centerPointLatHcz), Double.valueOf(centerPointLonHcz), Double.valueOf(radiusHcz))){ 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}); break; } } } yjxxsm.setLength(0); } else if (resCodeGmszy.equals(resourceCode)) { // =========== 购买散装油 // 抓拍机编号 String snashoMachNo = oriField.getString("SNASHO_MACH_NO"); String zpjbh = StringUtils.isNotBlank(snashoMachNo)? snashoMachNo : "暂无"; // 抓拍机名称 String snashoMachDesig = oriField.getString("SNASHO_MACH_DESIG"); String zpjmc = StringUtils.isNotBlank(snashoMachDesig)? snashoMachDesig : "暂无"; // 证件号码 String credNum = oriField.getString("CRED_NUM"); String gjryZjhm = StringUtils.isNotBlank(credNum)? credNum : "暂无"; // 告警时间 ---样例:20250329061228 String alarmTime = oriField.getString("ALARM_TIME"); String gjsj = StringUtils.isNotBlank(alarmTime)? TimeTool.timeStampToDateString(TimeTool.dateStringToTimeStamp3(alarmTime)) : "暂无"; // 人脸图片文件路径 String perFacePictureFilePath = oriField.getString("PER_FACE_PICTURE_FILE_PATH"); String rltpwjlj = StringUtils.isNotBlank(perFacePictureFilePath)? perFacePictureFilePath : "暂无"; // 经度 String jd = oriField.getString("LON"); // 纬度 String wd = oriField.getString("LAT"); String addressName = null; if(StringUtils.isNotBlank(wd) && StringUtils.isNotBlank(jd)){ double[] jwdBD = GpsCoordinateUtils.calWGS84toBD09(Double.valueOf(wd), Double.valueOf(jd)); String rspStr = httpClient.sendGetRequst(addressQueryUrl.replace("x", String.valueOf(jwdBD[1])).replace("y", String.valueOf(jwdBD[0])), null); JSONObject rspJSONObj = JSON.parseObject(rspStr); addressName = rspJSONObj.getString("fullAddress"); } yjxxsm.append("购买散装油 - 抓拍机编号:"); yjxxsm.append(zpjbh); yjxxsm.append(",抓拍机名称:"); yjxxsm.append(zpjmc); yjxxsm.append(",告警人员证件号码:"); yjxxsm.append(gjryZjhm); yjxxsm.append(",告警时间:"); yjxxsm.append(gjsj); yjxxsm.append(",人脸图片文件路径:"); yjxxsm.append(rltpwjlj); for (Map modelInfoMap : modelInfoList) { String mxbh = (String) modelInfoMap.get("mxbh"); if("DRYJ-FXXW-GMSZY".equals(mxbh)){ // 单人预警-风险行为-购买散装油 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}); break; } } yjxxsm.setLength(0); } } } // ========================= 批量入库符合条件的预警数据 if(warningInfoList.size() > 0){ batchSaveNum = ctrlDao.batchInsertWarningInfo(warningInfoList); } log.info("【QBEQSJYCTRL - 单人预警消费者服务】 当次消费到的数据量:{},符合条件保存入库的数据量:{}", records.count(), batchSaveNum); } } } }