Commit 6e116423df4cc381e077ed141e088bad58b157ef
Merge branch 'pudong' into pudong_jdk8
# Conflicts: # src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
Showing
1 changed file
with
85 additions
and
121 deletions
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 上传成功标识 |