Commit 78137fe045e5434310b5cd5340741fbcd8e571fa
1 parent
aefacb21
修改的定时器时间
Showing
3 changed files
with
15 additions
and
168 deletions
src/main/java/com/example/demo/model/TJRL.java
| ... | ... | @@ -7,7 +7,7 @@ import java.lang.reflect.Field; |
| 7 | 7 | import java.lang.reflect.Method; |
| 8 | 8 | |
| 9 | 9 | public class TJRL implements Cloneable { |
| 10 | - //@JsonProperty | |
| 10 | + | |
| 11 | 11 | private String TJRLCARDNO;// NUMBER Y 交通卡号 |
| 12 | 12 | private String TJRLINSID; // NUMBER Y 行业 |
| 13 | 13 | private String TJRLCDKIND;// NUMBER Y 卡类型 | ... | ... |
src/main/java/com/example/demo/service/Contrast.java
| 1 | 1 | package com.example.demo.service; |
| 2 | 2 | |
| 3 | +import cn.hutool.json.JSON; | |
| 3 | 4 | import com.alibaba.fastjson.JSONArray; |
| 4 | 5 | import com.alibaba.fastjson.JSONObject; |
| 5 | 6 | import com.bsth.util.HttpUtils; |
| ... | ... | @@ -7,8 +8,6 @@ import com.example.demo.SaticScheduleTask; |
| 7 | 8 | import com.example.demo.mapper.db1.SiteMapper1; |
| 8 | 9 | import com.example.demo.mapper.db2.SiteMapper2; |
| 9 | 10 | import com.example.demo.model.*; |
| 10 | -import com.fasterxml.jackson.core.JsonProcessingException; | |
| 11 | -import com.fasterxml.jackson.databind.ObjectMapper; | |
| 12 | 11 | import org.slf4j.Logger; |
| 13 | 12 | import org.slf4j.LoggerFactory; |
| 14 | 13 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -313,15 +312,8 @@ public class Contrast { |
| 313 | 312 | data2.add(tjrl); |
| 314 | 313 | } |
| 315 | 314 | map.put("datas", data2); |
| 316 | - | |
| 317 | - ObjectMapper mapper = new ObjectMapper(); | |
| 318 | - String json = null; | |
| 319 | - try { | |
| 320 | - json = mapper.writeValueAsString(map); | |
| 321 | - } catch (JsonProcessingException e) { | |
| 322 | - e.printStackTrace(); | |
| 323 | - } | |
| 324 | - | |
| 315 | + JSON j=new cn.hutool.json.JSONObject(map); | |
| 316 | + String json =j.toString(); | |
| 325 | 317 | ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send("PDGJ", json); |
| 326 | 318 | future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() { |
| 327 | 319 | @Override |
| ... | ... | @@ -343,154 +335,7 @@ public class Contrast { |
| 343 | 335 | } |
| 344 | 336 | |
| 345 | 337 | |
| 346 | - /** | |
| 347 | - * @Description: 根据carid 获取票务数据 | |
| 348 | - * @Param: allData交易记录 isOld是否是残余数据(上次未匹配到的数据) | |
| 349 | - * @return: | |
| 350 | - * @Author: YM | |
| 351 | - * @Date: 2021/10/13 | |
| 352 | - */ | |
| 353 | - public void filterCardListByDB(List<TJRLDB> allData,Boolean isOld) { | |
| 354 | - long start = System.currentTimeMillis(); | |
| 355 | - List<Map> driverCardList = getDriverCardList();//获取司机信息 | |
| 356 | - Map<String,List<Scheduling>> schedulingS =getSchedulingS; | |
| 357 | - Map<String,List<Scheduling>> schedulingSSell =getSchedulingSSell; | |
| 358 | - DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | |
| 359 | - int b=0;//用于计算匹配成功的数量 | |
| 360 | - for (int i = 0; i < allData.size(); i++) { | |
| 361 | - TJRLDB data = allData.get(i); | |
| 362 | - //通过司售卡找到司机 | |
| 363 | - String carId = data.getTJRLDRVCRDID().length()>8? | |
| 364 | - data.getTJRLDRVCRDID().substring( data.getTJRLDRVCRDID().length()-8): | |
| 365 | - data.getTJRLDRVCRDID(); | |
| 366 | - List<Map> collect = driverCardList.stream().filter(map -> map.get("cardno").equals(carId)).collect(Collectors.toList()); | |
| 367 | - String mark=""; | |
| 368 | - String jobCodes = ""; | |
| 369 | - Boolean flag=false;//用来判断是否没有匹配成功 | |
| 370 | - Long cardDate = null; | |
| 371 | - if (!collect.isEmpty()) { | |
| 372 | - if (null != collect.get(0).get("jobCode") && null != collect.get(0).get("personalName")) { | |
| 373 | - String personalName = collect.get(0).get("personalName").toString();//姓名 | |
| 374 | - String[] arr=collect.get(0).get("jobCode").toString().split("-"); | |
| 375 | - jobCodes =arr.length==0?collect.get(0).get("jobCode").toString():arr[arr.length-1];//工号 | |
| 376 | - String time=String.valueOf(data.getTJRLRTIME());//时间 | |
| 377 | - String date=String.valueOf(data.getTJRLRDATE());//日期 | |
| 378 | - cardDate = LocalDateTime.parse(date+" "+time,dtf).toInstant(ZoneOffset.of("+8")).toEpochMilli(); //刷卡时间(时间戳) | |
| 379 | 338 | |
| 380 | - //通过司机姓名获得进出记录 | |
| 381 | - List<Scheduling> schedulingList1=schedulingS.get(personalName); | |
| 382 | - //没匹配到匹配售票员 | |
| 383 | - if(schedulingList1==null){ | |
| 384 | - schedulingList1=schedulingSSell.get(personalName); | |
| 385 | - } | |
| 386 | - Scheduling scheduling = null; | |
| 387 | - | |
| 388 | - if(schedulingList1!=null){ | |
| 389 | - Collections.sort(schedulingList1, Comparator.comparing(Scheduling::getTs).reversed()); | |
| 390 | - for (int i1 = 0; i1 < schedulingList1.size(); i1++) { | |
| 391 | - Scheduling s=schedulingList1.get(i1); | |
| 392 | - if((Long.parseLong(s.getTs())-TIME2*60*1000)<=cardDate){ | |
| 393 | - scheduling=s; | |
| 394 | - b++; | |
| 395 | - flag=true; | |
| 396 | - break; | |
| 397 | - } | |
| 398 | - } | |
| 399 | - }else { | |
| 400 | - mark="未查到驾驶员排班:"+personalName+" 工号:"+jobCodes; | |
| 401 | - } | |
| 402 | - | |
| 403 | - if (scheduling!=null) { | |
| 404 | - data.setSTATION_FLAG("1"); | |
| 405 | - data.setTJRLUNITID(scheduling.getGs_name()); | |
| 406 | - data.setTJRLSTATID(scheduling.getXl_name()); | |
| 407 | - data.setROAD_FORM_TYPE(scheduling.getBc_type()); | |
| 408 | - data.setUPDOWN(scheduling.getXl_dir()); | |
| 409 | - data.setBUS_CODE(scheduling.getCl_zbh()); | |
| 410 | - data.setBUS_PLATE(scheduling.getCar_plate()); | |
| 411 | - data.setROAD_CODE(scheduling.getLp_name()); | |
| 412 | - data.setDEPART_NAME(scheduling.getQdz_name()); | |
| 413 | - data.setDEPART_CODE(scheduling.getQdz_code()); | |
| 414 | - data.setDEPART_ACTUAL_TIME(scheduling.getFcsj_actual()); | |
| 415 | - data.setREACH_NAME(scheduling.getZdz_name()); | |
| 416 | - data.setREACH_CODE(scheduling.getZdz_code()); | |
| 417 | - data.setREACH_ACTUAL_TIME(scheduling.getZdsj_actual()); | |
| 418 | - if(scheduling.getStation_name()!=null){ | |
| 419 | - data.setLEVELS_FLAG("1"); | |
| 420 | - data.setLEVELS1(scheduling.getStation_route_code());//站点路由序号 | |
| 421 | - data.setLEVELS_NAME1(scheduling.getStation_name());//站点名 | |
| 422 | - data.setLEVELS1_CODE(scheduling.getStop_no());//站点编号 | |
| 423 | - }else { | |
| 424 | - data.setLEVELS_FLAG("0"); | |
| 425 | - } | |
| 426 | - } else { | |
| 427 | - data.setSTATION_FLAG("0"); | |
| 428 | - } | |
| 429 | - } | |
| 430 | - }else { | |
| 431 | - mark="未查到驾驶员 卡号:"+carId; | |
| 432 | - data.setSTATION_FLAG("0"); | |
| 433 | - } | |
| 434 | - if(mark.length()==0 && !flag){ | |
| 435 | - mark="未匹配到班次 "+jobCodes+"刷卡时间为:"+LocalDateTime.ofEpochSecond(cardDate/1000, 0, ZoneOffset.ofHours(8)); | |
| 436 | - } | |
| 437 | - data.setMARK(mark); | |
| 438 | - //如果是新数据 没匹配到 去除这条记录 并放入缓存等到下次继续匹配 | |
| 439 | - if(!isOld && !flag){ | |
| 440 | - List<TJRLDB> m =oldData; | |
| 441 | - m.add(data); | |
| 442 | - allData.set(i,null); | |
| 443 | - | |
| 444 | - } | |
| 445 | - } | |
| 446 | - int size=allData.size(); | |
| 447 | - allData.removeIf(Objects::isNull); | |
| 448 | - //防止数据过多 分批插入 | |
| 449 | - List<List<TJRLDB>> subList = getSubList(2000, allData); | |
| 450 | - if(!subList.isEmpty()){ | |
| 451 | - subList.forEach(data->{ | |
| 452 | - if (!data.isEmpty()) { | |
| 453 | - siteMapper1.insertResult(data); | |
| 454 | - } | |
| 455 | - }); | |
| 456 | - } | |
| 457 | - | |
| 458 | - List<List<TJRLDB>> subList2 = getSubList(500, allData); | |
| 459 | - if(!subList2.isEmpty()){ | |
| 460 | - subList2.forEach(data->{ | |
| 461 | - if (!data.isEmpty()) { | |
| 462 | - Map<String, Object> map = new HashMap<>(); | |
| 463 | - map.put("datatype", "passengerflow"); | |
| 464 | - TJRL tjrl= (TJRL) data; | |
| 465 | - map.put("datas", tjrl); | |
| 466 | - | |
| 467 | - ObjectMapper mapper = new ObjectMapper(); | |
| 468 | - String json = null; | |
| 469 | - try { | |
| 470 | - json = mapper.writeValueAsString(map); | |
| 471 | - } catch (JsonProcessingException e) { | |
| 472 | - e.printStackTrace(); | |
| 473 | - } | |
| 474 | - | |
| 475 | - ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send("PDGJ", json); | |
| 476 | - future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() { | |
| 477 | - @Override | |
| 478 | - public void onSuccess(SendResult<String, String> result) { | |
| 479 | - } | |
| 480 | - @Override | |
| 481 | - public void onFailure(Throwable ex) { | |
| 482 | - logger.error("kafka发送票务数据异常", ex); | |
| 483 | - } | |
| 484 | - }); | |
| 485 | - } | |
| 486 | - }); | |
| 487 | - } | |
| 488 | - //如果是上次遗留的数据不管这是是否匹配到都清空 | |
| 489 | - if(isOld){ | |
| 490 | - oldData.clear(); | |
| 491 | - } | |
| 492 | - logger.warn("======匹配"+size+"条======匹配到"+b+"条=====耗时=="+(System.currentTimeMillis() - start)/1000 + "秒"); | |
| 493 | - } | |
| 494 | 339 | |
| 495 | 340 | |
| 496 | 341 | |
| ... | ... | @@ -534,7 +379,7 @@ public class Contrast { |
| 534 | 379 | record.setTJRLRDATE(s.split(" ")[0]); |
| 535 | 380 | record.setTJRLRTIME(s.split(" ")[1]); |
| 536 | 381 | } |
| 537 | - filterCardListByDB(records,false); | |
| 382 | + filterCardList(records,false); | |
| 538 | 383 | } |
| 539 | 384 | |
| 540 | 385 | public List<List<TJRLDB>> getSubList(int length, List<TJRLDB> list){ | ... | ... |
src/main/resources/mapping/db1/Site-mapper1.xml
| ... | ... | @@ -7,13 +7,14 @@ |
| 7 | 7 | |
| 8 | 8 | |
| 9 | 9 | <insert id="insertResult" parameterType="List"> |
| 10 | - INSERT INTO `passenger_flow`.`t_jc_result` ( | |
| 11 | - `TJRLCARDNO`, `TJRLINSID`, `TJRLCDKIND`, `TJRLPOSID`,`TJRLRDATE`, | |
| 12 | - `TJRLRTIME`,`TJRLCDBAL`,`TJRLAMT`,`TJRLORGAMT`, | |
| 13 | - `TJRLTXFG`,`STATION_FLAG`,`TJRLUNITID`,`TJRLSTATID`,`ROAD_FORM_TYPE`, `UPDOWN`, `BUS_CODE`, | |
| 14 | - `BUS_PLATE`, `ROAD_CODE`, `DEPART_NAME`,`DEPART_CODE`, `DEPART_ACTUAL_TIME`, | |
| 15 | - `REACH_NAME`,`REACH_CODE`,`REACH_ACTUAL_TIME`, | |
| 16 | - `LEVELS_FLAG`,`LEVELS1`, `LEVELS_NAME1`, `LEVELS1_CODE`,`LEVELS2`, `LEVELS_NAME2`,`MARK`,TRAD_ID | |
| 10 | + INSERT INTO passenger_flow.t_jc_result ( | |
| 11 | + TJRLCARDNO, TJRLINSID, TJRLCDKIND, TJRLPOSID,TJRLRDATE, | |
| 12 | + TJRLRTIME,TJRLCDBAL,TJRLAMT,TJRLORGAMT, | |
| 13 | + TJRLTXFG,STATION_FLAG,TJRLUNITID,TJRLSTATID,ROAD_FORM_TYPE, UPDOWN, BUS_CODE, | |
| 14 | + BUS_PLATE, ROAD_CODE, DEPART_NAME,DEPART_CODE, DEPART_ACTUAL_TIME, | |
| 15 | + REACH_NAME,REACH_CODE,REACH_ACTUAL_TIME, | |
| 16 | + LEVELS_FLAG,LEVELS1, LEVELS_NAME1, LEVELS1_CODE,LEVELS2, LEVELS_NAME2,LEVELS2_CODE,MARK,TRAD_ID, | |
| 17 | + GPS_DATE_TIME1,GPS_DATE_TIME2,B_STATION_ID,PLAN_START_TIME,PLAN_ARRIVE_TIME,ACTUAL_START_TIME,ACTUAL_ARRIVE_TIME | |
| 17 | 18 | ) |
| 18 | 19 | VALUES |
| 19 | 20 | <foreach collection="list" item="em" index="index" separator=","> |
| ... | ... | @@ -23,7 +24,8 @@ |
| 23 | 24 | #{em.BUS_CODE}, |
| 24 | 25 | #{em.BUS_PLATE}, #{em.ROAD_CODE}, #{em.DEPART_NAME},#{em.DEPART_CODE}, #{em.DEPART_ACTUAL_TIME}, |
| 25 | 26 | #{em.REACH_NAME},#{em.REACH_CODE},#{em.REACH_ACTUAL_TIME}, |
| 26 | - #{em.LEVELS_FLAG},#{em.LEVELS1}, #{em.LEVELS_NAME1}, #{em.LEVELS1_CODE},#{em.LEVELS2}, #{em.LEVELS_NAME2}, #{em.MARK},#{em.TRAD_ID}) | |
| 27 | + #{em.LEVELS_FLAG},#{em.LEVELS1}, #{em.LEVELS_NAME1}, #{em.LEVELS1_CODE},#{em.LEVELS2}, #{em.LEVELS_NAME2}, #{em.LEVELS2_CODE}, #{em.MARK},#{em.TRAD_ID}, | |
| 28 | + #{em.GPS_DATE_TIME1},#{em.GPS_DATE_TIME2},#{em.B_STATION_ID},#{em.PLAN_START_TIME},#{em.PLAN_ARRIVE_TIME},#{em.ACTUAL_START_TIME},#{em.ACTUAL_ARRIVE_TIME}) | |
| 27 | 29 | </foreach> |
| 28 | 30 | </insert> |
| 29 | 31 | ... | ... |