Commit 6e116423df4cc381e077ed141e088bad58b157ef

Authored by 王通
2 parents efefc049 2793b1ce

Merge branch 'pudong' into pudong_jdk8

# Conflicts:
#	src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
... ... @@ -35,6 +35,7 @@ import org.springframework.data.domain.Sort.Direction;
35 35 import org.springframework.security.core.context.SecurityContextHolder;
36 36 import org.springframework.stereotype.Service;
37 37  
  38 +import javax.ws.rs.HEAD;
38 39 import java.io.*;
39 40 import java.net.InetAddress;
40 41 import java.sql.Connection;
... ... @@ -377,57 +378,60 @@ public class TrafficManageServiceImpl implements TrafficManageService{
377 378 * @return 上传成功标识
378 379 */
379 380 private String uploadLD(String theDate){
380   - String result = "failure";
381   - countSuccess = 0 ;countFailure = 0;
382   - Line line;
383 381 // 取昨天 的日期
384 382 String date = theDate == null ?sdfnyr.format(DateUtils.addDays(new Date(), -1)) : theDate;
385 383 StringBuffer sf = new StringBuffer();
386   - StringBuffer logSuccess = new StringBuffer("成功:");
387   - StringBuffer logFailure = new StringBuffer("失败:");
388   - HashMap logXlbmSuccessMap = new HashMap();
389   - HashMap logXlbmFailureMap = new HashMap();
390   - HashMap logXlbmMap = new HashMap();
391 384 Results results = null;
392 385 String str = "",xlbm;
393   - // 保存线路(运管处日志用)
394   - Map<String , Line> logLineMap = null;
  386 + List<Map<String,Object>> listGroup = null;
  387 + int scount = 0, ccount = 0;
  388 + long start = System.currentTimeMillis();
395 389 try {
396   - int counter = 0; // 计数器
397   - int per = 10; // 每几条线路上传一次路单
  390 + // 计数器
  391 + int counter = 0;
  392 + // 每几条线路上传一次路单
  393 + int per = 10;
398 394 List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
399   - List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLDGroup(date);
  395 + listGroup = scheduleRealInfoRepository.setLDGroup(date);
400 396 Map<String,Object> map = new HashMap();
401 397 HashMap<String,String> paramMap;
402 398 HashMap<String,String> otherMap = new HashMap();
  399 +
  400 + // 车辆内部编码和车牌做映射
  401 + Map<String, String> inside2plate = new HashMap<>();
  402 + Iterable<Cars> cars = carsRepository.findAll();
  403 + for (Cars car : cars) {
  404 + inside2plate.put(car.getInsideCode(), car.getCarPlate());
  405 + }
  406 +
  407 + // 线路编码和线路信息映射
  408 + Map<String, Line> code2line = new HashMap<>();
  409 + Iterable<Line> lines = lineRepository.findAll();
  410 + for (Line line : lines) {
  411 + code2line.put(line.getLineCode(), line);
  412 + }
  413 +
403 414 for(Map<String,Object> schRealInfo:listGroup){
404 415 if(schRealInfo != null){
405   - //根据车辆自编号查询车牌号
406   - map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
407   - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map)).get();
408 416 // 获取线路是否使用标识,如果未使用,则不查该线路数据
409   - line = lineRepository.findByLineCode(schRealInfo.get("xlBm")+"");
  417 + Line line = code2line.get(schRealInfo.get("xlBm")+"");
410 418 if(line == null || line.getInUse() == null || line.getInUse() == 0){
  419 + ccount++;
411 420 continue;
412 421 }
413 422 if(counter % per == 0){
414 423 sf = new StringBuffer();
415 424 sf.append("<DLDS>");
416   - logLineMap = new HashMap<>();
417 425 }
418 426 counter ++;
419 427 xlbm = BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm")+"");
420   - // 保存一线次路单的路编码,用于发送邮箱
421   - if(xlbm != null && !xlbm.equals("null") && logXlbmMap.get(xlbm) == null){
422   - logXlbmMap.put(xlbm,xlbm);
423   - }
424   - logLineMap.put(line.getLineCode(),line);
  428 +
425 429 sf.append("<DLD>");
426   - sf.append("<RQ>"+date+"</RQ>");
427   - sf.append("<XLBM>"+xlbm+"</XLBM>");
428   - sf.append("<LPBH>"+schRealInfo.get("lpName")+"</LPBH>");
429   - sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
430   - sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
  430 + sf.append("<RQ>").append(date).append("</RQ>");
  431 + sf.append("<XLBM>").append(xlbm).append("</XLBM>");
  432 + sf.append("<LPBH>").append(schRealInfo.get("lpName")).append("</LPBH>");
  433 + sf.append("<CPH>").append(inside2plate.get(schRealInfo.get("clZbh"))).append("</CPH>");
  434 + sf.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
431 435 sf.append("<LDList>");
432 436 for(ScheduleRealInfo scheduleRealInfo:list){
433 437 if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"")
... ... @@ -449,29 +453,29 @@ public class TrafficManageServiceImpl implements TrafficManageService{
449 453 }
450 454  
451 455 sf.append("<LD>");
452   - sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>");
453   - sf.append("<SXX>"+scheduleRealInfo.getXlDir()+"</SXX>");
454   - sf.append("<FCZDMC>"+scheduleRealInfo.getQdzName()+"</FCZDMC>");
  456 + sf.append("<SJGH>").append(scheduleRealInfo.getjGh()).append("</SJGH>");
  457 + sf.append("<SXX>").append(scheduleRealInfo.getXlDir()).append("</SXX>");
  458 + sf.append("<FCZDMC>").append(scheduleRealInfo.getQdzName()).append("</FCZDMC>");
455 459 // 起点站的参数
456 460 otherMap.put("stationMark","B");
457 461 paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
458   - sf.append("<FCZDXH>" + getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) + "</FCZDXH>");
459   - sf.append("<FCZDBM>"+scheduleRealInfo.getQdzCode()+"</FCZDBM>");
460   - sf.append("<JHFCSJ>"+scheduleRealInfo.getFcsj()+"</JHFCSJ>");
461   - sf.append("<DFSJ>"+scheduleRealInfo.getDfsj()+"</DFSJ>");
462   - sf.append("<SJFCSJ>"+scheduleRealInfo.getFcsjActual()+"</SJFCSJ>");
463   - sf.append("<FCZDLX>"+""+"</FCZDLX>");
464   - sf.append("<DDZDMC>"+scheduleRealInfo.getZdzName()+"</DDZDMC>");
  462 + sf.append("<FCZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</FCZDXH>");
  463 + sf.append("<FCZDBM>").append(scheduleRealInfo.getQdzCode()).append("</FCZDBM>");
  464 + sf.append("<JHFCSJ>").append(scheduleRealInfo.getFcsj()).append("</JHFCSJ>");
  465 + sf.append("<DFSJ>").append(scheduleRealInfo.getDfsj()).append("</DFSJ>");
  466 + sf.append("<SJFCSJ>").append(scheduleRealInfo.getFcsjActual()).append("</SJFCSJ>");
  467 + sf.append("<FCZDLX></FCZDLX>");
  468 + sf.append("<DDZDMC>").append(scheduleRealInfo.getZdzName()).append("</DDZDMC>");
465 469 // 终点站的参数
466 470 otherMap.put("stationMark","E");
467 471 paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
468   - sf.append("<DDZDXH>"+ getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) +"</DDZDXH>");
469   - sf.append("<DDZDBM>"+scheduleRealInfo.getZdzCode()+"</DDZDBM>");
470   - sf.append("<JHDDSJ>"+scheduleRealInfo.getZdsj()+"</JHDDSJ>");
471   - sf.append("<SJDDSJ>"+scheduleRealInfo.getZdsjActual()+"</SJDDSJ>");
472   - sf.append("<DDZDLX>"+""+"</DDZDLX>");
473   - sf.append("<LDSCBZ>"+0+"</LDSCBZ>");
474   - sf.append("<DDBZ>"+scheduleRealInfo.getRemarks()+"</DDBZ>");
  472 + sf.append("<DDZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</DDZDXH>");
  473 + sf.append("<DDZDBM>").append(scheduleRealInfo.getZdzCode()).append("</DDZDBM>");
  474 + sf.append("<JHDDSJ>").append(scheduleRealInfo.getZdsj()).append("</JHDDSJ>");
  475 + sf.append("<SJDDSJ>").append(scheduleRealInfo.getZdsjActual()).append("</SJDDSJ>");
  476 + sf.append("<DDZDLX></DDZDLX>");
  477 + sf.append("<LDSCBZ>0</LDSCBZ>");
  478 + sf.append("<DDBZ>").append(scheduleRealInfo.getRemarks()).append("</DDBZ>");
475 479 sf.append("</LD>");
476 480 }
477 481 }
... ... @@ -479,107 +483,67 @@ public class TrafficManageServiceImpl implements TrafficManageService{
479 483 sf.append("</DLD>");
480 484 }
481 485 if(counter % per == per - 1){
482   - counter = 0;
483 486 sf.append("</DLDS>");
484   - str = sf.toString().replace("'","");// 去掉'号
485   - results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
486   - try {
487   - // 记录日志
488   - result = logRecord(results,logXlbmMap,logXlbmSuccessMap,logXlbmFailureMap,logSuccess,logFailure,str,logLineMap);
489   - }catch (Exception e){
490   - logger.error("logRecord:",e);
491   - continue;
492   - }
  487 + // 去掉'号
  488 + str = sf.toString().replace("'","");
  489 + scount += invokeSetLD(str, counter);
  490 + counter = 0;
493 491 }
494 492 }
495 493 // 每per条线路上传后剩下的数据再上传
496 494 if(counter > 0){
497 495 sf.append("</DLDS>");
498   - str = sf.toString().replace("'","");// 去掉'号
499   - results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
500   - try {
501   - // 记录日志
502   - result = logRecord(results, logXlbmMap, logXlbmSuccessMap, logXlbmFailureMap, logSuccess, logFailure, str, logLineMap);
503   - }catch (Exception e){
504   - logger.error("logRecord:",e);
505   - }
  496 + // 去掉'号
  497 + str = sf.toString().replace("'","");
  498 + scount += invokeSetLD(str, counter);
506 499 }
507 500 } catch (Exception e) {
508   - logger.error("setLD:",e);
509   - logFailure.append(e).append("<br/>");
510   - for (StackTraceElement traceElement : e.getStackTrace()){
511   - logFailure.append("\r\t").append(traceElement);
512   - }
513   - e.printStackTrace();
514   - }finally{
  501 + logger.error("setLD:", e);
  502 + } finally {
515 503 try {
516 504 //发送邮件
517 505 EmailBean mail = new EmailBean();
518 506 mail.setSubject(InetAddress.getLocalHost().getHostAddress()+":路单日志数据"+date);
519   - mail.setContent("成功数:"+countSuccess+"<br/>失败数:"+countFailure+"<br/>" +logSuccess + "<br/>"+logFailure);
  507 + mail.setContent("总数:" + (listGroup == null ? 0 : listGroup.size()) + "<br/>成功数:" + scount + "<br/>跳过数:" + ccount + "<br/>耗时:" + (System.currentTimeMillis() - start));
520 508 sendEmailController.sendMail(emailSendToAddress, mail);
521 509 logger.info("setLD-sendMail:邮件发送成功!");
522   - }catch (Exception e){
  510 + } catch (Exception e) {
523 511 e.printStackTrace();
524 512 logger.error("setLD-sendMail:",e);
525 513 }
526 514 }
527   - return result;
  515 + return "success";
528 516 }
529 517  
530 518 /**
531   - * 记录日志
532   - * @param results
533   - * @param logXlbmMap
534   - * @param logXlbmSuccessMap
535   - * @param logXlbmFailureMap
536   - * @param logSuccess
537   - * @param logFailure
538   - * @param str
  519 + * 调用运管处电子路单接口,如果上传失败或有网络问题,最多执行10次
  520 + * @param xml 拼接的xml字符串
  521 + * @param counter 分组数
  522 + * @return 成功返回counter 失败返回0
539 523 */
540   - private String logRecord(Results results,HashMap logXlbmMap,HashMap logXlbmSuccessMap,HashMap logXlbmFailureMap,StringBuffer logSuccess,
541   - StringBuffer logFailure,String str,Map<String ,Line> logLineMap) throws Exception{
542   - String result = "failure";
543   - String state;
544   - // 记录日志
545   - if(results != null){
546   - if(results.isSuccess()){// 上传成功
547   - // 把上线成功的线路编码放入 logXlbmSuccessMap,并记录logSuccess
548   - countSuccess += fillMailXlbmMap(logXlbmMap,logXlbmSuccessMap,logSuccess);
549   - result = "success";
550   - state = "1";
551   - }else{// 上传失败
552   - // 把上线失败的线路编码放入 logXlbmFailureMap,并记录logFailure
553   - countFailure += fillMailXlbmMap(logXlbmMap,logXlbmFailureMap,logFailure);
554   - result = "failure";
555   - state = "0";
556   - }
557   - logger.info("setLD:"+str);
558   - logger.info("setLD:"+result);
559   - // 保存运管处上传记录
560   - saveYgcUploadLog(logLineMap,str,TrafficManageServiceImpl.UPLOAD_TYPE_LD,state);
561   - results = null;
562   - logXlbmMap = new HashMap();
563   - }
564   - return result;
565   - }
566   - /**
567   - * 填充线路编码到相应的map
568   - * @param fromMap
569   - * @param toMap
570   - */
571   - private int fillMailXlbmMap(HashMap fromMap,HashMap toMap,StringBuffer logStr){
572   - int tmpCount = 0;
573   - for (Object key : fromMap.keySet()) {
574   - if(toMap.get(key) == null){
575   - toMap.put(key,fromMap.get(key));
576   - logStr.append(key).append(",");
577   - tmpCount ++;
  524 + private int invokeSetLD(String xml, int counter) {
  525 + for (int i = 0;i < 10;i++) {
  526 + try {
  527 + Results results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(xml));
  528 + if (results.isSuccess()) {
  529 + logger.info("setLD: " + xml);
  530 + logger.info("setLD: 成功");
  531 + return counter;
  532 + }
  533 + Thread.sleep(2000);
  534 + } catch (Exception e) {
  535 + logger.error("运管处接口调用异常", e);
  536 + try {
  537 + Thread.sleep(2000);
  538 + } catch (InterruptedException ex) {
  539 + ex.printStackTrace();
  540 + }
578 541 }
579 542 }
580   - fromMap = new HashMap();
581   - return tmpCount;
  543 +
  544 + return 0;
582 545 }
  546 +
583 547 /**
584 548 * 上传路单 xml来自文件
585 549 * @return 上传成功标识
... ...