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,6 +35,7 @@ import org.springframework.data.domain.Sort.Direction;
35 import org.springframework.security.core.context.SecurityContextHolder; 35 import org.springframework.security.core.context.SecurityContextHolder;
36 import org.springframework.stereotype.Service; 36 import org.springframework.stereotype.Service;
37 37
  38 +import javax.ws.rs.HEAD;
38 import java.io.*; 39 import java.io.*;
39 import java.net.InetAddress; 40 import java.net.InetAddress;
40 import java.sql.Connection; 41 import java.sql.Connection;
@@ -377,57 +378,60 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -377,57 +378,60 @@ public class TrafficManageServiceImpl implements TrafficManageService{
377 * @return 上传成功标识 378 * @return 上传成功标识
378 */ 379 */
379 private String uploadLD(String theDate){ 380 private String uploadLD(String theDate){
380 - String result = "failure";  
381 - countSuccess = 0 ;countFailure = 0;  
382 - Line line;  
383 // 取昨天 的日期 381 // 取昨天 的日期
384 String date = theDate == null ?sdfnyr.format(DateUtils.addDays(new Date(), -1)) : theDate; 382 String date = theDate == null ?sdfnyr.format(DateUtils.addDays(new Date(), -1)) : theDate;
385 StringBuffer sf = new StringBuffer(); 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 Results results = null; 384 Results results = null;
392 String str = "",xlbm; 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 try { 389 try {
396 - int counter = 0; // 计数器  
397 - int per = 10; // 每几条线路上传一次路单 390 + // 计数器
  391 + int counter = 0;
  392 + // 每几条线路上传一次路单
  393 + int per = 10;
398 List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date); 394 List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
399 - List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLDGroup(date); 395 + listGroup = scheduleRealInfoRepository.setLDGroup(date);
400 Map<String,Object> map = new HashMap(); 396 Map<String,Object> map = new HashMap();
401 HashMap<String,String> paramMap; 397 HashMap<String,String> paramMap;
402 HashMap<String,String> otherMap = new HashMap(); 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 for(Map<String,Object> schRealInfo:listGroup){ 414 for(Map<String,Object> schRealInfo:listGroup){
404 if(schRealInfo != null){ 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 if(line == null || line.getInUse() == null || line.getInUse() == 0){ 418 if(line == null || line.getInUse() == null || line.getInUse() == 0){
  419 + ccount++;
411 continue; 420 continue;
412 } 421 }
413 if(counter % per == 0){ 422 if(counter % per == 0){
414 sf = new StringBuffer(); 423 sf = new StringBuffer();
415 sf.append("<DLDS>"); 424 sf.append("<DLDS>");
416 - logLineMap = new HashMap<>();  
417 } 425 }
418 counter ++; 426 counter ++;
419 xlbm = BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm")+""); 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 sf.append("<DLD>"); 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 sf.append("<LDList>"); 435 sf.append("<LDList>");
432 for(ScheduleRealInfo scheduleRealInfo:list){ 436 for(ScheduleRealInfo scheduleRealInfo:list){
433 if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"") 437 if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"")
@@ -449,29 +453,29 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -449,29 +453,29 @@ public class TrafficManageServiceImpl implements TrafficManageService{
449 } 453 }
450 454
451 sf.append("<LD>"); 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 otherMap.put("stationMark","B"); 460 otherMap.put("stationMark","B");
457 paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap); 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 otherMap.put("stationMark","E"); 470 otherMap.put("stationMark","E");
467 paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap); 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 sf.append("</LD>"); 479 sf.append("</LD>");
476 } 480 }
477 } 481 }
@@ -479,107 +483,67 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -479,107 +483,67 @@ public class TrafficManageServiceImpl implements TrafficManageService{
479 sf.append("</DLD>"); 483 sf.append("</DLD>");
480 } 484 }
481 if(counter % per == per - 1){ 485 if(counter % per == per - 1){
482 - counter = 0;  
483 sf.append("</DLDS>"); 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 // 每per条线路上传后剩下的数据再上传 493 // 每per条线路上传后剩下的数据再上传
496 if(counter > 0){ 494 if(counter > 0){
497 sf.append("</DLDS>"); 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 } catch (Exception e) { 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 try { 503 try {
516 //发送邮件 504 //发送邮件
517 EmailBean mail = new EmailBean(); 505 EmailBean mail = new EmailBean();
518 mail.setSubject(InetAddress.getLocalHost().getHostAddress()+":路单日志数据"+date); 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 sendEmailController.sendMail(emailSendToAddress, mail); 508 sendEmailController.sendMail(emailSendToAddress, mail);
521 logger.info("setLD-sendMail:邮件发送成功!"); 509 logger.info("setLD-sendMail:邮件发送成功!");
522 - }catch (Exception e){ 510 + } catch (Exception e) {
523 e.printStackTrace(); 511 e.printStackTrace();
524 logger.error("setLD-sendMail:",e); 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 * 上传路单 xml来自文件 548 * 上传路单 xml来自文件
585 * @return 上传成功标识 549 * @return 上传成功标识