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 | 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 上传成功标识 | ... | ... |