Commit b19f44d434e5723c78e330501d95c745fe8e51e3

Authored by 王通
1 parent 5749c030

1.青浦运管所电子路单上传需按线路,分开传会认为只有一次有效

src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
1   -package com.bsth.service.impl;
2   -
3   -import com.bsth.data.BasicData;
4   -import com.bsth.email.SendEmailController;
5   -import com.bsth.email.entity.EmailBean;
6   -import com.bsth.entity.*;
7   -import com.bsth.entity.realcontrol.ChildTaskPlan;
8   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
9   -import com.bsth.entity.schedule.SchedulePlanInfo;
10   -import com.bsth.entity.schedule.TTInfo;
11   -import com.bsth.entity.schedule.TTInfoDetail;
12   -import com.bsth.entity.search.CustomerSpecs;
13   -import com.bsth.entity.sys.SysUser;
14   -import com.bsth.entity.traffic.SKBUploadLogger;
15   -import com.bsth.repository.*;
16   -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
17   -import com.bsth.repository.schedule.*;
18   -import com.bsth.repository.traffic.SKBUploadLoggerRepository;
19   -import com.bsth.security.util.SecurityUtils;
20   -import com.bsth.service.TrafficManageService;
21   -import com.bsth.service.traffic.YgcBasicDataService;
22   -import com.bsth.util.TimeUtils;
23   -import com.bsth.util.db.DBUtils_MS;
24   -import com.bsth.webService.trafficManage.org.tempuri.Results;
25   -import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator;
26   -import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap;
27   -import com.bsth.webService.trafficManage.qp.WebServiceSoap_PortType;
28   -import org.apache.commons.lang.StringEscapeUtils;
29   -import org.apache.commons.lang.StringUtils;
30   -import org.apache.commons.lang.time.DateUtils;
31   -import org.slf4j.Logger;
32   -import org.slf4j.LoggerFactory;
33   -import org.springframework.beans.factory.annotation.Autowired;
34   -import org.springframework.data.domain.Sort;
35   -import org.springframework.data.domain.Sort.Direction;
36   -import org.springframework.stereotype.Service;
37   -
38   -import java.io.*;
39   -import java.net.InetAddress;
40   -import java.sql.Connection;
41   -import java.sql.PreparedStatement;
42   -import java.sql.ResultSet;
43   -import java.text.DecimalFormat;
44   -import java.text.SimpleDateFormat;
45   -import java.util.*;
46   -import java.util.regex.Matcher;
47   -import java.util.regex.Pattern;
48   -
49   -/**
50   - *
51   - * @ClassName: TrafficManageServiceImpl(运管处接口service业务层实现类)
52   - *
53   - * @Extends : BaseService
54   - *
55   - * @Description: TODO(运管处接口service业务层)
56   - *
57   - * @Author bsth@zq
58   - *
59   - * @Date 2016年10月28日 上午9:21:17
60   - *
61   - * @Version 公交调度系统BS版 0.1
62   - *
63   - */
64   -
65   -@Service
66   -public class TrafficManageServiceImpl implements TrafficManageService{
67   -
68   - Logger logger = LoggerFactory.getLogger(this.getClass());
69   -
70   - // 线路repository
71   - @Autowired
72   - private LineRepository lineRepository;
73   -
74   - @Autowired
75   - private LineInformationRepository lineInformationRepository;
76   -
77   - // 站点路由repository
78   - @Autowired
79   - private StationRouteRepository stationRouteRepository;
80   -
81   - // 历史站点路由repository
82   - @Autowired
83   - private LsStationRouteRepository lsStationRouteRepository;
84   -
85   - @Autowired
86   - private SectionRepository sectionRepository;
87   -
88   - // 车辆repository
89   - @Autowired
90   - private CarsRepository carsRepository;
91   -
92   - // 人员repository
93   - @Autowired
94   - private PersonnelRepository personnelRepository;
95   -
96   - // 时刻模板repository
97   - @Autowired
98   - private TTInfoRepository ttInfoRepository;
99   -
100   - // 时刻模板明细repository
101   - @Autowired
102   - private TTInfoDetailRepository ttInfoDetailRepository;
103   -
104   - // 排班计划明细repository
105   - @Autowired
106   - private SchedulePlanInfoRepository schedulePlanInfoRepository;
107   -
108   - // 实际排班计划明细repository
109   - @Autowired
110   - private ScheduleRealInfoRepository scheduleRealInfoRepository;
111   -
112   - // 时刻表上传记录repository
113   - @Autowired
114   - private SKBUploadLoggerRepository skbUploadLoggerRepository;
115   -
116   - // 线路站点repository
117   - @Autowired
118   - private YgcBasicDataService ygcBasicDataService;
119   -
120   - // 发送邮件
121   - @Autowired
122   - private SendEmailController sendEmailController;
123   -
124   - // 运管处上传接口
125   - private com.bsth.webService.trafficManage.up.org.tempuri.WebServiceSoap webServiceSoapUp;
126   - private WebServiceSoap ssop ;
127   - {
128   - try {
129   - ssop = new WebServiceLocator().getWebServiceSoap();
130   - } catch (Exception e) {
131   - e.printStackTrace();
132   - }
133   - }
134   - // 青浦接口
135   - private WebServiceSoap_PortType qp_ssop;
136   - {
137   - try {
138   - qp_ssop = new com.bsth.webService.trafficManage.qp.WebServiceLocator().getWebServiceSoap();
139   - } catch (Exception e) {
140   - e.printStackTrace();
141   - }
142   - }
143   - // 格式化 年月日时分秒 nyrsfm是年月日时分秒的拼音首字母
144   - private SimpleDateFormat sdfnyrsfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
145   -
146   - // 格式化 年月日
147   - private SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
148   -
149   - // 数字格式化
150   - DecimalFormat format = new DecimalFormat("0.00");
151   -
152   - // 用户名
153   - private final String userNameOther = "user";
154   - // 密码
155   - private final String passwordOther = "user";
156   -
157   - private final String userNameOther_qp = "china317";
158   -
159   - private final String passwordOther_qp = "china317";
160   -
161   - // 用户名
162   - private final String userNameUp = "user";
163   - // 密码
164   - private final String passwordUp = "user";
165   - // 接收邮件人
166   - private final String emailSendToAddress = "175912183@qq.com";
167   - // 记录路单上线的成功、失败线路数
168   - private Integer countSuccess,countFailure;
169   -
170   - private synchronized com.bsth.webService.trafficManage.up.org.tempuri.WebServiceSoap getWebServiceSoapUp(){
171   - try {
172   - if(webServiceSoapUp == null){
173   - webServiceSoapUp = new com.bsth.webService.trafficManage.up.org.tempuri.WebServiceLocator().getWebServiceSoap();
174   - }
175   - }catch (Exception e){
176   - e.printStackTrace();
177   - }finally {
178   - return webServiceSoapUp;
179   - }
180   - }
181   - /**
182   - * 上传线路信息
183   - */
184   - @Override
185   - public String setXL(String ids) {
186   - String result = "failure";
187   - StringBuffer sBuffer = new StringBuffer();
188   - String[] idArray = ids.split(",");
189   - try {
190   - for (String id : idArray) {
191   - if(id == null || id.trim().equals("")){
192   - continue;
193   - }
194   - Map<String,Object> map = new HashMap<>();
195   - map.put("lineCode_eq", id);
196   - Line line ;
197   - LineInformation lineInformation;
198   - line = lineRepository.findOne(new CustomerSpecs<Line>(map));
199   - if(line == null){
200   - continue;
201   - }
202   - List<StationRoute> upStationsList ;// 上行站点路由集
203   - List<StationRoute> downStationsList;// 下行站点路由集
204   - List<Object[]> downPointList;// 下行站点集
205   - List<Object[]> upPointList;// 上行站点集
206   - sBuffer.append("<XLs>");
207   - sBuffer.append("<XL>");
208   - if(BasicData.lineId2ShangHaiCodeMap.get(line.getId()) == null){
209   - return result;
210   - }
211   - map = new HashMap<>();
212   - map.put("line.id_eq",line.getId());
213   - lineInformation = lineInformationRepository.findOne(new CustomerSpecs<LineInformation>(map));
214   - if(lineInformation == null){
215   - continue;
216   - }
217   - sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");
218   - sBuffer.append("<XLMC>").append(line.getName()).append("</XLMC>");
219   - sBuffer.append("<QDZ>").append(line.getStartStationName()).append("</QDZ>");
220   - sBuffer.append("<ZDZ>").append(line.getEndStationName()).append("</ZDZ>");
221   - sBuffer.append("<QZLC>").append(lineInformation.getUpMileage()).append("</QZLC>");
222   - sBuffer.append("<ZQLC>").append(lineInformation.getDownMileage()).append("</ZQLC>");
223   - sBuffer.append("<XLGH>").append(line.getLinePlayType()).append("</XLGH>");
224   - sBuffer.append("<UPDATE_DATE>").append(sdfnyr.format(new Date())).append("</UPDATE_DATE>");
225   -
226   - // 循环添加站点信息
227   - sBuffer.append("<StationList>");
228   -
229   - // 先查上行
230   - upStationsList = stationRouteRepository.findByLine(line.getLineCode(), 0);
231   - Map<String, Integer> stationNumMap = getStationName2YgcNumberMap(line.getLineCode());
232   - int startId = 1;
233   - startId = packagStationXml(upStationsList, sBuffer, startId,stationNumMap);
234   - // 环线不查下行
235   - if(line.getLinePlayType() != 1){
236   - // 再查下行
237   - downStationsList = stationRouteRepository.findByLine(line.getLineCode(), 1);
238   - packagStationXml(downStationsList, sBuffer, startId,stationNumMap);
239   - }
240   - sBuffer.append("</StationList>");
241   -
242   - // 循环添加站点点位信息
243   - sBuffer.append("<LinePointList>");
244   - upPointList = sectionRepository.getSectionDirByLineId(line.getId(),0);
245   - startId = 1;
246   - startId = packagStationPointXml(upPointList, sBuffer, startId);
247   - // 环线不查下行
248   - if(line.getLinePlayType() != 1){
249   - downPointList = sectionRepository.getSectionDirByLineId(line.getId(),1);
250   - packagStationPointXml(downPointList, sBuffer, startId);
251   - }
252   - sBuffer.append("</LinePointList>");
253   - sBuffer.append("</XL>");
254   - sBuffer.append("</XLs>");
255   - // 临时添加,后面删除
256   - if(sBuffer.indexOf("<ZDXH>0</ZDXH>") != -1){
257   - return "0";
258   - }
259   - // 调用上传方法
260   - if(getWebServiceSoapUp().setXL(userNameUp,passwordUp,sBuffer.toString()).isSuccess()){
261   - result = "success";
262   - }else{
263   - result = "failure";
264   - }
265   - logger.info("setXL:"+sBuffer.toString());
266   - logger.info("setXL:"+result);
267   - }
268   - } catch (Exception e) {
269   - logger.error("setXL:",e);
270   - e.printStackTrace();
271   - }
272   - return result;
273   - }
274   -
275   - /**
276   - * 加载运管处的站点及序号
277   - * 上行从1开始,下行顺序续编
278   - */
279   - private Map<String, Integer> getStationName2YgcNumberMap (String lineCode){
280   - Map<String, Integer> resultMap = new HashMap<>();
281   - List<Map<String, String>> ygcLines = stationRouteRepository.findLineWithYgcByLine(lineCode);
282   - if(ygcLines != null && ygcLines.size() > 0){
283   - int size = ygcLines.size();
284   - Map<String, String> tempMap ;
285   - int num = 1;
286   - String key;
287   - for (int i = 0; i < size; i ++){
288   - tempMap = ygcLines.get(i);
289   - key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
290   - + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
291   - resultMap.put(key,num++);
292   - }
293   - }
294   - return resultMap;
295   - }
296   -
297   - /**
298   - * 上传线路信息(按in_use上传)
299   - */
300   - @Override
301   - public String setXLByInUse(String inUse) {
302   - StringBuffer result = new StringBuffer();
303   - try {
304   - Map<String,Object> map = new HashMap<>();
305   - if(inUse != null && inUse.equals("1")){
306   - map.put("inUse_eq", inUse);
307   - }
308   - List<Line> lines ;
309   - Line line;
310   - lines = lineRepository.findAll(new CustomerSpecs<Line>(map));
311   - if(lines != null && lines.size() > 0){
312   - for(int i = 0 ; i < lines.size() ; i ++){
313   - line = lines.get(i);
314   - if(line != null && line.getId() != null){
315   - result.append(line.getLineCode()).append(":").append(setXL(line.getLineCode())).append(";");
316   - }
317   - }
318   - }
319   - } catch (Exception e) {
320   - result.append("failure");
321   - logger.error("setXLByInUse:",e);
322   - e.printStackTrace();
323   - }
324   - return result.toString();
325   - }
326   -
327   - /**
328   - * 上传车辆信息
329   - */
330   - @Override
331   - public String setCL() {
332   - String result = "failure";
333   - StringBuffer sBuffer =new StringBuffer();
334   - try {
335   - sBuffer.append("<CLs>");
336   - Cars cars = null;
337   - String company;
338   - Iterator<Cars> carsIterator = carsRepository.findAll().iterator();
339   - while(carsIterator.hasNext()){
340   - cars = carsIterator.next();
341   - sBuffer.append("<CL>");
342   - company = cars.getCompany();
343   - setCompanyName(company);// 统一公司名称
344   - sBuffer.append("<GSJC>").append(company).append("</GSJC>");
345   - sBuffer.append("<NBH>").append(cars.getInsideCode()).append("</NBH>");
346   - sBuffer.append("<CPH>").append(cars.getCarPlate()).append("</CPH>");
347   - sBuffer.append("<YYZBH>").append(cars.getServiceNo()).append("</YYZBH>");
348   - sBuffer.append("<CZCPH>").append(cars.getCarPlate()).append("</CZCPH>");//******这个数据没有***********
349   - sBuffer.append("<CZZDBH>").append(cars.getEquipmentCode()).append("</CZZDBH>");
350   - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
351   - sBuffer.append("</CL>");
352   - }
353   - sBuffer.append("</CLs>");
354   - if(ssop.setCL(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
355   - result = "success";
356   - }
357   - } catch (Exception e) {
358   - logger.error("setCL:",e);
359   - e.printStackTrace();
360   - }finally{
361   - logger.info("setCL:"+sBuffer.toString());
362   - logger.info("setCL:"+result);
363   - }
364   - return result;
365   - }
366   -
367   - /**
368   - * 上传司机信息
369   - */
370   - @Override
371   - public String setSJ() {
372   - String result = "failure";
373   - StringBuffer sBuffer =new StringBuffer();
374   - try {
375   - sBuffer.append("<SJs>");
376   - Personnel personnel = null;
377   - String company;
378   - Iterator<Personnel> personIterator = personnelRepository.findAll().iterator();
379   - while(personIterator.hasNext()){
380   - personnel = personIterator.next();
381   - sBuffer.append("<SJ>");
382   - company = personnel.getCompany();
383   - setCompanyName(company);// 统一公司名称
384   - sBuffer.append("<GSJC>").append(company).append("</GSJC>");
385   - sBuffer.append("<SJGH>").append(personnel.getJobCode()).append("</SJGH>");
386   - sBuffer.append("<CYZGZH>").append(personnel.getPapersCode()).append("</CYZGZH>");//***********
387   - sBuffer.append("<XM>").append(personnel.getPersonnelName()).append("</XM>");
388   - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
389   - sBuffer.append("</SJ>");
390   - }
391   - sBuffer.append("</SJs>");
392   - if(ssop.setSJ(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
393   - result = "success";
394   - };
395   - } catch (Exception e) {
396   - logger.error("setSJ:",e);
397   - e.printStackTrace();
398   - }finally{
399   - logger.info("setSJ:"+sBuffer.toString());
400   - logger.info("setSJ:"+result);
401   - }
402   - return result;
403   - }
404   -
405   - /**
406   - * 上传路单 指定日期 yyyy-MM-dd
407   - * @param theDate
408   - * @return
409   - */
410   - public String setLD(String theDate){
411   - return uploadLD(theDate);
412   - }
413   -
414   - /**
415   - * 上传路单 上传前一天的路单
416   - * @return
417   - */
418   - public String setLD(){
419   - return uploadLD(null);
420   - }
421   - /**
422   - * 上传路单
423   - * @return 上传成功标识
424   - */
425   - private String uploadLD(String theDate){
426   - String result = "failure";
427   - countSuccess = 0 ;countFailure = 0;
428   - Line line;
429   - // 取昨天 的日期
430   - String date = theDate == null ?sdfnyr.format(DateUtils.addDays(new Date(), -1)) : theDate;
431   - StringBuffer sf = new StringBuffer();
432   - StringBuffer logSuccess = new StringBuffer("成功:");
433   - StringBuffer logFailure = new StringBuffer("失败:");
434   - HashMap logXlbmSuccessMap = new HashMap();
435   - HashMap logXlbmFailureMap = new HashMap();
436   - HashMap logXlbmMap = new HashMap();
437   - Results results = null;
438   - String str = "",xlbm;
439   - try {
440   - int counter = 0; // 计数器
441   - int per = 10; // 每几条线路上传一次路单
442   -
443   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
444   - List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLDGroup(date);
445   - Map<String,Object> map = new HashMap();
446   - HashMap<String,String> paramMap;
447   - HashMap<String,String> otherMap = new HashMap();
448   - for(Map<String,Object> schRealInfo:listGroup){
449   - if(schRealInfo != null){
450   - //根据车辆自编号查询车牌号
451   - map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
452   - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
453   - // 获取线路是否使用标识,如果未使用,则不查该线路数据
454   - line = lineRepository.findByLineCode(schRealInfo.get("xlBm")+"");
455   - if(line == null || line.getInUse() == null || line.getInUse() == 0){
456   - continue;
457   - }
458   - if(counter % per == 0){
459   - sf = new StringBuffer();
460   - sf.append("<DLDS>");
461   - }
462   - counter ++;
463   - xlbm = BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm")+"");
464   - // 保存一次路单的线路编码,用于发送邮箱
465   - if(logXlbmMap.get(xlbm) == null){
466   - logXlbmMap.put(xlbm,xlbm);
467   - }
468   - sf.append("<DLD>");
469   - sf.append("<RQ>"+date+"</RQ>");
470   - sf.append("<XLBM>"+xlbm+"</XLBM>");
471   - sf.append("<LPBH>"+schRealInfo.get("lpName")+"</LPBH>");
472   - sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
473   - sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
474   - sf.append("<LDList>");
475   - for(ScheduleRealInfo scheduleRealInfo:list){
476   - if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"")
477   - .equals(scheduleRealInfo.getLpName())
478   - && (schRealInfo.get("clZbh")+"").equals(scheduleRealInfo.getClZbh())){
479   -
480   - if(scheduleRealInfo.isDestroy()){
481   - if(scheduleRealInfo.isReissue()){
482   - scheduleRealInfo.setFcsjActualAll(scheduleRealInfo.getDfsj());
483   - scheduleRealInfo.setZdsjActualAll(scheduleRealInfo.getZdsj());
484   - }
485   - else
486   - continue;
487   - }
488   -
489   - if(scheduleRealInfo.getBcType().equals("in")
490   - || scheduleRealInfo.getBcType().equals("out")){
491   - continue;
492   - }
493   -
494   - sf.append("<LD>");
495   - sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>");
496   - sf.append("<SXX>"+scheduleRealInfo.getXlDir()+"</SXX>");
497   - sf.append("<FCZDMC>"+scheduleRealInfo.getQdzName()+"</FCZDMC>");
498   - // 起点站的参数
499   - otherMap.put("stationMark","B");
500   - paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
501   - sf.append("<FCZDXH>" + getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) + "</FCZDXH>");
502   - sf.append("<FCZDBM>"+scheduleRealInfo.getQdzCode()+"</FCZDBM>");
503   - sf.append("<JHFCSJ>"+scheduleRealInfo.getFcsj()+"</JHFCSJ>");
504   - sf.append("<DFSJ>"+scheduleRealInfo.getDfsj()+"</DFSJ>");
505   - sf.append("<SJFCSJ>"+scheduleRealInfo.getFcsjActual()+"</SJFCSJ>");
506   - sf.append("<FCZDLX>"+""+"</FCZDLX>");
507   - sf.append("<DDZDMC>"+scheduleRealInfo.getZdzName()+"</DDZDMC>");
508   - // 终点站的参数
509   - otherMap.put("stationMark","E");
510   - paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
511   - sf.append("<DDZDXH>"+ getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) +"</DDZDXH>");
512   - sf.append("<DDZDBM>"+scheduleRealInfo.getZdzCode()+"</DDZDBM>");
513   - sf.append("<JHDDSJ>"+scheduleRealInfo.getZdsj()+"</JHDDSJ>");
514   - sf.append("<SJDDSJ>"+scheduleRealInfo.getZdsjActual()+"</SJDDSJ>");
515   - sf.append("<DDZDLX>"+""+"</DDZDLX>");
516   - sf.append("<LDSCBZ>"+0+"</LDSCBZ>");
517   - sf.append("<DDBZ>").append(scheduleRealInfo.getRemarks() == null ? "" : scheduleRealInfo.getRemarks()).append("</DDBZ>");
518   - sf.append("</LD>");
519   - }
520   - }
521   - sf.append("</LDList>");
522   - sf.append("</DLD>");
523   - }
524   - if(counter % per == per - 1){
525   - counter = 0;
526   - sf.append("</DLDS>");
527   - str = sf.toString().replace("'","");// 去掉'号
528   - results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
529   - // 记录日志
530   - result = logRecord(results,logXlbmMap,logXlbmSuccessMap,logXlbmFailureMap,logSuccess,logFailure,str);
531   - // 发送到青浦运管处
532   - try {
533   - logger.info("xml:"+StringEscapeUtils.unescapeHtml(str));
534   - com.bsth.webService.trafficManage.qp.Results res
535   - = qp_ssop.setLD(userNameOther_qp,passwordOther_qp,StringEscapeUtils.unescapeHtml(str));
536   - logger.info("青浦路单是否上传成功:"+res.isSuccess());
537   - }catch (Exception e){
538   - e.printStackTrace();
539   - continue;
540   - }
541   - }
542   - }
543   - // 每per条线路上传后剩下的数据再上传
544   - if(counter > 0){
545   - sf.append("</DLDS>");
546   - str = sf.toString().replace("'","");// 去掉'号
547   - results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
548   - // 发送到青浦运管处
549   - try {
550   - logger.info("xml:"+StringEscapeUtils.unescapeHtml(str));
551   - com.bsth.webService.trafficManage.qp.Results res
552   - = qp_ssop.setLD(userNameOther_qp,passwordOther_qp,StringEscapeUtils.unescapeHtml(str));
553   - logger.info("青浦路单是否上传成功:"+res.isSuccess());
554   - }catch (Exception e){
555   - e.printStackTrace();
556   - }
557   - }
558   - // 记录日志
559   - result = logRecord(results,logXlbmMap,logXlbmSuccessMap,logXlbmFailureMap,logSuccess,logFailure,str);
560   - } catch (Exception e) {
561   - logger.error("setLD:",e);
562   - logFailure.append(e).append("<br/>");
563   - for (StackTraceElement traceElement : e.getStackTrace()){
564   - logFailure.append("\r\t").append(traceElement);
565   - }
566   - e.printStackTrace();
567   - }finally{
568   - try {
569   - //发送邮件
570   - EmailBean mail = new EmailBean();
571   - mail.setSubject(InetAddress.getLocalHost().getHostAddress()+":路单日志数据"+date);
572   - mail.setContent("成功数:"+countSuccess+"<br/>失败数:"+countFailure+"<br/>" +logSuccess + "<br/>"+logFailure);
573   - sendEmailController.sendMail(emailSendToAddress, mail);
574   - logger.info("setLD-sendMail:邮件发送成功!");
575   - }catch (Exception e){
576   - e.printStackTrace();
577   - logger.error("setLD-sendMail:",e);
578   - }
579   - }
580   - return result;
581   - }
582   -
583   - /**
584   - * 记录日志
585   - * @param results
586   - * @param logXlbmMap
587   - * @param logXlbmSuccessMap
588   - * @param logXlbmFailureMap
589   - * @param logSuccess
590   - * @param logFailure
591   - * @param str
592   - */
593   - private String logRecord(Results results,HashMap logXlbmMap,HashMap logXlbmSuccessMap,HashMap logXlbmFailureMap,StringBuffer logSuccess,
594   - StringBuffer logFailure,String str){
595   - String result = "failure";
596   - // 记录日志
597   - if(results != null){
598   - if(results.isSuccess()){// 上传成功
599   - // 把上线成功的线路编码放入 logXlbmSuccessMap,并记录logSuccess
600   - countSuccess += fillMailXlbmMap(logXlbmMap,logXlbmSuccessMap,logSuccess);
601   - result = "success";
602   - }else{// 上传失败
603   - // 把上线失败的线路编码放入 logXlbmFailureMap,并记录logFailure
604   - countFailure += fillMailXlbmMap(logXlbmMap,logXlbmFailureMap,logFailure);
605   - result = "failure";
606   - }
607   - logger.info("setLD:"+str);
608   - logger.info("setLD:"+result);
609   - results = null;
610   - logXlbmMap = new HashMap();
611   - }
612   - return result;
613   - }
614   - /**
615   - * 填充线路编码到相应的map
616   - * @param fromMap
617   - * @param toMap
618   - */
619   - private int fillMailXlbmMap(HashMap fromMap,HashMap toMap,StringBuffer logStr){
620   - int tmpCount = 0;
621   - for (Object key : fromMap.keySet()) {
622   - if(toMap.get(key) == null){
623   - toMap.put(key,fromMap.get(key));
624   - logStr.append(key).append(",");
625   - tmpCount ++;
626   - }
627   - }
628   - fromMap = new HashMap();
629   - return tmpCount;
630   - }
631   - /**
632   - * 上传路单 xml来自文件
633   - * @return 上传成功标识
634   - */
635   - public String setLDFile(){
636   - String result = "failure";
637   - try {
638   - String tmp = readXmlFromFile("E:/ld.txt");
639   - Results rss = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(tmp));
640   - if(rss.isSuccess()){
641   - result = "success";
642   - }
643   - } catch (Exception e) {
644   - logger.error("setLD:",e);
645   - e.printStackTrace();
646   - }finally{
647   -
648   - }
649   - return result;
650   - }
651   -
652   - /**
653   - * 从文件中读取xml
654   - * @param fileName 例:D:/test.txt
655   - * @return
656   - * @throws Exception
657   - */
658   - private String readXmlFromFile(String fileName) throws Exception {
659   - StringBuffer sf = new StringBuffer("");
660   - File file = new File(fileName);
661   - InputStreamReader reader = new InputStreamReader(new FileInputStream(file),"GBK");
662   - BufferedReader bufferedReader = new BufferedReader(reader);
663   - String lineTxt = "";
664   - while((lineTxt = bufferedReader.readLine()) != null){
665   - sf.append(lineTxt);
666   - }
667   - reader.close();
668   - return sf.toString().replaceAll("\t","");
669   - }
670   - /**
671   - * 上传里程油耗
672   - * @return 上传成功标识
673   - */
674   - public String setLCYH(){
675   - String result = "failure";
676   - // 取昨天 的日期
677   - String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
678   - StringBuffer sf = new StringBuffer();
679   - try {
680   - sf.append("<LCYHS>");
681   - List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLCYHGroup(date);
682   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
683   - Map<String,Object> map = new HashMap<String,Object>();
684   - for(Map<String,Object> schRealInfo:listGroup){
685   - if(schRealInfo != null){
686   - map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
687   - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
688   - /**
689   - * 如果car==null,则说明该车辆是从线调中换车功能中加进去的,
690   - * 在cars基础信息中查不到车辆的信息,所以忽略该车辆
691   - */
692   - if(car == null){
693   - continue;
694   - }
695   - //计算总公里和空驶公里,营运公里=总公里-空驶公里
696   - double totalKilometers = 0,emptyKilometers =0;
697   - sf.append("<LCYH>");
698   - sf.append("<RQ>"+date+"</RQ>");
699   - sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
700   - sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
701   - if(list != null && list.size() > 0){
702   - for(ScheduleRealInfo scheduleRealInfo:list){
703   - if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("clZbh")+"")
704   - .equals(scheduleRealInfo.getClZbh())){
705   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
706   - //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
707   - if(childTaskPlans.isEmpty()){
708   - if(scheduleRealInfo.getStatus() == 2){
709   - totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
710   - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
711   - || scheduleRealInfo.getBcType().equals("venting")){
712   - emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
713   - }
714   - }
715   - }else{
716   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
717   - while(it.hasNext()){
718   - ChildTaskPlan childTaskPlan = it.next();
719   - if(!childTaskPlan.isDestroy()){
720   - totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
721   - if(childTaskPlan.getMileageType().equals("empty")){
722   - emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
723   - }
724   - }
725   - }
726   - }
727   - }
728   - }
729   - }
730   - sf.append("<ZLC>"+totalKilometers+"</ZLC>");
731   - sf.append("<YYLC>"+emptyKilometers+"</YYLC>");
732   - sf.append("<YH>"+""+"</YH>");
733   - sf.append("<JZYL>"+""+"</JZYL>");
734   - sf.append("<DH>"+""+"</DH>");
735   - sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
736   - sf.append("<BBSCBZ>"+0+"</BBSCBZ>");
737   - sf.append("</LCYH>");
738   - }
739   - }
740   - sf.append("</LCYHS>");
741   - if(ssop.setLCYH(userNameOther, passwordOther, sf.toString()).isSuccess()){
742   - result = "success";
743   - }
744   - } catch (Exception e) {
745   - logger.error("setLCYH:",e);
746   - e.printStackTrace();
747   - }finally{
748   - logger.info("setLCYH:"+sf.toString());
749   - logger.info("setLCYH:"+result);
750   - }
751   - return result;
752   - }
753   -
754   - /**
755   - * 上传线路调度日报
756   - * @return
757   - */
758   - public String setDDRB(){
759   - String result = "failure";
760   - // 取昨天 的日期
761   - String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
762   - StringBuffer sf = new StringBuffer();
763   - try {
764   - sf.append("<DDRBS>");
765   - List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setDDRBGroup(date);
766   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
767   - for(Map<String,Object> schRealInfo:listGroup){
768   - if(schRealInfo != null){
769   - double jhlc = 0,zlc = 0,jhkslc = 0,sjkslc = 0;
770   - int jhbc = 0,sjbc = 0,jhzgfbc = 0,sjzgfbc = 0,jhwgfbc = 0,sjwgfbc = 0;
771   - sf.append("<DDRB>");
772   - sf.append("<RQ>"+date+"</RQ>");
773   - sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
774   - for(ScheduleRealInfo scheduleRealInfo:list){
775   - if(scheduleRealInfo != null){
776   - if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm())){
777   - //计划
778   - if(!scheduleRealInfo.isSflj()){
779   - jhlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
780   - //计划空驶
781   - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")){
782   - jhkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
783   - }
784   - //计划早高峰,计划晚高峰
785   - if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
786   - jhzgfbc++;
787   - } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
788   - jhwgfbc++;
789   - }
790   - }
791   - jhbc++;
792   -
793   - //实际
794   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
795   - //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
796   - if(childTaskPlans.isEmpty()){
797   - if(scheduleRealInfo.getStatus() == 2){
798   - sjbc++;
799   - zlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
800   - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
801   - || scheduleRealInfo.getBcType().equals("venting")){
802   - sjkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;
803   - }
804   - }
805   - }else{
806   - sjbc++;
807   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
808   - while(it.hasNext()){
809   - ChildTaskPlan childTaskPlan = it.next();
810   - if(!childTaskPlan.isDestroy()){
811   - zlc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
812   - if(childTaskPlan.getMileageType().equals("empty")){
813   - sjkslc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
814   - }
815   - }
816   - }
817   - }
818   - //实际早高峰,计划晚高峰
819   - if(scheduleRealInfo.getFcsjActual() != null){
820   - if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
821   - sjzgfbc++;
822   - } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
823   - sjwgfbc++;
824   - }
825   - }
826   - }
827   - }
828   - }
829   - sf.append("<JHLC>"+format.format(jhlc)+"</JHLC>");
830   - sf.append("<SSLC>"+format.format((zlc-sjkslc))+"</SSLC>");
831   - sf.append("<JHKSLC>"+format.format(jhkslc)+"</JHKSLC>");
832   - sf.append("<SJKSLC>"+format.format(sjkslc)+"</SJKSLC>");
833   - sf.append("<JHBC>"+jhbc+"</JHBC>");
834   - sf.append("<SJBC>"+sjbc+"</SJBC>");
835   - sf.append("<JHZGFBC>"+jhzgfbc+"</JHZGFBC>");
836   - sf.append("<SJZGFBC>"+sjzgfbc+"</SJZGFBC>");
837   - sf.append("<JHWGFBC>"+jhwgfbc+"</JHWGFBC>");
838   - sf.append("<SJWGFBC>"+sjwgfbc+"</SJWGFBC>");
839   - sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
840   - sf.append("<RBSCBZ>"+0+"</RBSCBZ>");
841   - sf.append("</DDRB>");
842   - }
843   - }
844   - sf.append("</DDRBS>");
845   - if(ssop.setDDRB(userNameOther, passwordOther, sf.toString()).isSuccess()){
846   - result = "success";
847   - }
848   - } catch (Exception e) {
849   - logger.error("setDDRB:",e);
850   - e.printStackTrace();
851   - }finally{
852   - logger.info("setDDRB:"+sf.toString());
853   - logger.info("setDDRB:"+result);
854   - }
855   - return result;
856   - }
857   -
858   - /**
859   - * 上传计划班次 指定日期 yyyy-MM-dd
860   - * @param theDate
861   - * @return
862   - */
863   - public String setJHBC(String theDate){
864   - return uploadJHBC(theDate);
865   - }
866   -
867   - /**
868   - * 上传计划班次
869   - * @return
870   - */
871   - public String setJHBC(){
872   - return uploadJHBC(null);
873   - }
874   - /**
875   - * 上传线路计划班次表
876   - */
877   -
878   - private String uploadJHBC(String theDate) {
879   - String result = "failure";
880   - Line line;
881   - StringBuffer sBuffer =new StringBuffer();
882   - try {
883   - sBuffer.append("<JHBCs>");
884   - // 声明变量
885   - SchedulePlanInfo schedulePlanInfo;
886   - String xlbm,zbh = "";
887   - Long lp = 0L;
888   - // 取得计划班次时间
889   - String tomorrow = theDate == null ? sdfnyr.format(DateUtils.addDays(new Date(), +1)) : theDate;
890   - // 查询所有班次
891   - List<SchedulePlanInfo> schedulePlanList = schedulePlanInfoRepository.findLineScheduleBc(tomorrow);
892   - int j = 0; // 初始化标识
893   - if(schedulePlanList != null ){
894   - HashMap<String,String> paramMap;
895   - HashMap<String,String> otherMap = new HashMap<String, String>();
896   - int size = schedulePlanList.size();
897   - for (int i = 0; i < size; i++) {
898   - schedulePlanInfo = schedulePlanList.get(i);
899   - xlbm = schedulePlanInfo.getXlBm();
900   - // 获取线路是否使用标识,如果未使用,则不查该线路数据
901   - line = lineRepository.findByLineCode(xlbm);
902   - if(line.getInUse() == null || line.getInUse() == 0){
903   - continue;
904   - }
905   - if(++j == 1){// 第一次,则初始化值
906   - zbh = schedulePlanInfo.getClZbh();
907   - lp = schedulePlanInfo.getLp();
908   - // 拼装XML
909   - assembleJHBC(sBuffer, schedulePlanInfo, xlbm, zbh, lp);
910   - }
911   - // 比较是否为同一条线路同一辆车
912   - if(xlbm.equals(schedulePlanInfo.getXlBm())
913   - && zbh.equals(schedulePlanInfo.getClZbh())
914   - && lp == schedulePlanInfo.getLp()){
915   - if(schedulePlanInfo.getBcType().equals("in") || schedulePlanInfo.getBcType().equals("out")){
916   - continue;
917   - }
918   - sBuffer.append("<BC>");
919   - sBuffer.append("<SJGH>").append(schedulePlanInfo.getjGh()).append("</SJGH>");
920   - sBuffer.append("<SXX>").append(schedulePlanInfo.getXlDir()).append("</SXX>");
921   - sBuffer.append("<FCZDMC>").append(schedulePlanInfo.getQdzName()).append("</FCZDMC>");
922   - // 起点站的参数
923   - otherMap.put("stationMark","B");
924   - paramMap = packageYgcStationNumParam(schedulePlanInfo,otherMap);
925   - sBuffer.append("<ZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</ZDXH>");
926   - sBuffer.append("<JHFCSJ>").append(schedulePlanInfo.getFcsj()).append("</JHFCSJ>");
927   - sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>");
928   - // 起点站的参数
929   - otherMap.put("stationMark","E");
930   - paramMap = packageYgcStationNumParam(schedulePlanInfo,otherMap);
931   - sBuffer.append("<DDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</DDXH>");
932   - sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj()))
933   - .append("</JHDDSJ>");
934   - sBuffer.append("</BC>");
935   - if(i == size -1 ){
936   - sBuffer.append("</BCList>");
937   - sBuffer.append("</JHBC>");
938   - }
939   - }else{
940   - zbh = schedulePlanInfo.getClZbh();
941   - lp = schedulePlanInfo.getLp();
942   - sBuffer.append("</BCList>");
943   - sBuffer.append("</JHBC>");
944   - // 拼装XML
945   - assembleJHBC(sBuffer, schedulePlanInfo, xlbm, zbh, lp);
946   - }
947   - }
948   - }
949   - // 判断XML是否以</BCList>结尾,如果不是,则加上
950   - String regex = "^*</JHBC>$";
951   - Pattern p = Pattern.compile(regex);
952   - Matcher m = p.matcher(sBuffer);
953   - boolean isEndWithTrueFlag = false;
954   - while (m.find()) {
955   - isEndWithTrueFlag = true;
956   - }
957   - // 加上缺失的标签
958   - if(!isEndWithTrueFlag){
959   - sBuffer.append("</BCList>");
960   - sBuffer.append("</JHBC>");
961   - }
962   - sBuffer.append("</JHBCs>");
963   - if(ssop.setJHBC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
964   - result = "success";
965   - }
966   - } catch (Exception e) {
967   - logger.error("setJHBC:",e);
968   - e.printStackTrace();
969   - }finally{
970   - logger.info("setJHBC:"+sBuffer.toString());
971   - logger.info("setJHBC:"+result);
972   - }
973   - return result;
974   - }
975   -
976   - /**
977   - * 上传线路班次时刻表数据
978   - */
979   - @Override
980   - public String setSKB(String ids) {
981   - String result = "上传失败,";
982   - StringBuffer sBuffer = new StringBuffer();
983   - DecimalFormat df = new DecimalFormat("######0.000");
984   - Map<String,String> lsStationCode2NameMap = null;
985   - Map<String, Integer> lsStationName2YgcNumber = null;
986   - try {
987   - String[] idArray = ids.split(",");
988   - StringBuffer sBufferA ,sBufferB ,sBufferC ;
989   - double zlc,yylc,singleLc,emptyLc;// 总里程、营运里程、单程、空放里程
990   - String bcType,sxx;// 班次类型、上下行
991   - // 上传的时刻表集合
992   - List<TTInfo> ttinfoList = new ArrayList<>();
993   - TTInfo ttInfo;
994   - TTInfoDetail ttInfoDetail;
995   - LineInformation lineInformation;
996   - Iterator<TTInfoDetail> ttInfoDetailIterator;
997   - HashMap<String,Object> param ;
998   - sBuffer.append("<SKBs>");
999   - HashMap<String,String> paramMap;
1000   - HashMap<String,String> otherMap = new HashMap<>();
1001   - // 线路编码、周几执行、发车站点名称、发车站点序号、到达站点名称、到达站点序号
1002   - String xlbm,zjzx,fczdmc,zdxh,ddzdmc,ddxh;
1003   - // 得到时刻表版本号
1004   - int lineVersion;
1005   - long ttinfoId;
1006   - // 是否输出站点信息
1007   - boolean isLogStation;
1008   - for (int i = 0; i < idArray.length; i++) {
1009   - ttinfoId = Long.valueOf(idArray[i]);
1010   - ttInfo = ttInfoRepository.findOne(ttinfoId);
1011   - if(ttInfo == null)
1012   - continue;
1013   - ttinfoList.add(ttInfo); // 保存时刻表
1014   - // 得到时刻表版本号
1015   - lineVersion = ttInfo.getLineVersion();
1016   - // 查询历史站点路由
1017   - lsStationCode2NameMap = getLsStationCode(ttInfo.getXl().getLineCode(),lineVersion);
1018   - // 查询历史站点路由
1019   - lsStationName2YgcNumber = getLsStationRoute(ttInfo.getXl().getLineCode(),lineVersion);
1020   - zlc = 0.0f;
1021   - yylc = 0.0f;
1022   - // 获得时刻表
1023   - param = new HashMap();
1024   - param.put("ttinfo.id_eq", ttInfo.getId());
1025   - ttInfoDetailIterator = ttInfoDetailRepository.findAll(new CustomerSpecs<TTInfoDetail>(param),
1026   - new Sort(Direction.ASC, "xlDir")).iterator();
1027   - // 获得lineInformation
1028   - param = new HashMap();
1029   - param.put("line.id_eq", ttInfo.getXl().getId());
1030   - lineInformation = lineInformationRepository.findOne(new CustomerSpecs<LineInformation>(param));
1031   - // 初始化
1032   - isLogStation = true;
1033   - if(ttInfoDetailIterator.hasNext()){
1034   - // 得到线路信息
1035   - Line line = lineRepository.findOne(ttInfo.getXl().getId());
1036   - if(line == null){
1037   - result += "未找到相应的线路信息,请设置线路信息后再上传";
1038   - return result;
1039   - }
1040   - // 得到上海市线路编码
1041   - xlbm = line.getShanghaiLinecode();
1042   - if("".equals(xlbm) || "null".equals(xlbm)){
1043   - result += "线路编码为空,请设置线路编码后再上传";
1044   - return result;
1045   - }
1046   - // 拿到周几执行
1047   - zjzx = changeRuleDay(ttInfo.getRule_days());
1048   - if("".equals(zjzx) || "null".equals(zjzx)){
1049   - result += "时刻表执行时间为空,请设置执行时间后再上传";
1050   - return result;
1051   - }
1052   - sBuffer.append("<SKB>");
1053   - sBuffer.append("<XLBM>").append(xlbm).append("</XLBM>");
1054   - sBufferB = new StringBuffer();
1055   - sBufferC = new StringBuffer();
1056   - sBufferB.append("<KSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</KSRQ>");
1057   - // 结束日期暂时不要,节假日的班次表才需要,如春节的班次表
1058   - sBufferB.append("<JSRQ>").append("").append("</JSRQ>");
1059   - sBufferB.append("<ZJZX>").append(zjzx).append("</ZJZX>");
1060   - sBufferB.append("<TBYY>").append("").append("</TBYY>");
1061   - sBufferB.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
1062   - sBufferB.append("<BCList>");
1063   - while (ttInfoDetailIterator.hasNext()) {
1064   - ttInfoDetail = ttInfoDetailIterator.next();
1065   - bcType = ttInfoDetail.getBcType();
1066   - sxx = ttInfoDetail.getXlDir();
1067   - // 进出场班次的里程,加入总里程
1068   - if(bcType.equals("in") || bcType.equals("out")){
1069   - // 进出班次的计划里程,算空驶里程
1070   - emptyLc = ttInfoDetail.getJhlc();
1071   - // 总里程需要加上空驶里程
1072   - zlc += emptyLc;
1073   - continue;
1074   - }
1075   - // 不是正常班次,不传到运管处
1076   - if(!bcType.equals("normal")){
1077   - continue;
1078   - }
1079   - // 如果发车时间格式错误,忽略此条
1080   - if(changeTimeFormat(ttInfoDetail) == null){
1081   - continue;
1082   - }
1083   - // 发生站点名称
1084   - fczdmc = lsStationCode2NameMap.get(ttInfoDetail.getXl().getLineCode()+"_"+ttInfoDetail.getXlDir()+"_"+ttInfoDetail.getQdzCode());
1085   - if("".equals(fczdmc) || "null".equals(fczdmc)){
1086   - result += "发车站点名称为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
1087   - return result;
1088   - }
1089   - sBufferC.append("<BC>");
1090   - sBufferC.append("<LPBH>").append(ttInfoDetail.getLp().getLpNo()).append("</LPBH>");
1091   - sBufferC.append("<SXX>").append(sxx).append("</SXX>");
1092   - sBufferC.append("<FCZDMC>").append(fczdmc).append("</FCZDMC>");
1093   - // 起点站的参数
1094   - otherMap.put("stationMark","B");
1095   - paramMap = packageYgcStationNumParam(ttInfoDetail,otherMap);
1096   - if(isLogStation){// 输出起点站信息
1097   - logger.info("setSKB:"+"起点站信息:"+paramMap);
1098   - }
1099   - // 发车站点序号
1100   - zdxh = String.valueOf(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,lsStationName2YgcNumber));
1101   - if("".equals(zdxh) || "null".equals(zdxh) || "0".equals(zdxh)){
1102   - result += "发车站点序号为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
1103   - return result;
1104   - }
1105   - // 到达站点名称
1106   - ddzdmc = lsStationCode2NameMap.get(ttInfoDetail.getXl().getLineCode()+"_"+ttInfoDetail.getXlDir()+"_"+ttInfoDetail.getZdzCode());
1107   - if("".equals(ddzdmc) || "null".equals(ddzdmc)){
1108   - result += "到达站点名称为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
1109   - return result;
1110   - }
1111   - sBufferC.append("<ZDXH>").append(zdxh).append("</ZDXH>");
1112   - sBufferC.append("<JHFCSJ>").append(changeTimeFormat(ttInfoDetail)).append("</JHFCSJ>");
1113   - sBufferC.append("<DDZDMC>").append(ddzdmc).append("</DDZDMC>");
1114   - // 终点站的参数
1115   - otherMap.put("stationMark","E");
1116   - paramMap = packageYgcStationNumParam(ttInfoDetail,otherMap);
1117   - if(isLogStation){// 输出终点站信息
1118   - logger.info("setSKB:"+"终点站信息:"+paramMap);
1119   - }
1120   - // 到达站点序号
1121   - ddxh = String.valueOf(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,lsStationName2YgcNumber));
1122   - if("".equals(ddxh) || "null".equals(ddxh) || "0".equals(ddxh)){
1123   - result += "到达站点序号为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
1124   - return result;
1125   - }
1126   - isLogStation = false; // 一条线路只输出一次,后面的不输出了
1127   - sBufferC.append("<DDXH>").append(ddxh).append("</DDXH>");
1128   - sBufferC.append("<JHDDSJ>").append(calcDdsj(ttInfoDetail.getFcsj(),ttInfoDetail.getBcsj())).append("</JHDDSJ>");
1129   - sBufferC.append("</BC>");
1130   - // 0:上行;1:下行
1131   - if("0".equals(sxx)){
1132   - singleLc = lineInformation.getUpMileage();
1133   - }else{
1134   - singleLc = lineInformation.getDownMileage();
1135   - }
1136   - zlc += singleLc ;
1137   - yylc += singleLc;
1138   - }
1139   - sBufferC.append("</BCList>");
1140   - sBufferC.append("</SKB>");
1141   - sBufferA = new StringBuffer();
1142   - sBufferA.append("<JHZLC>").append(df.format(zlc)).append("</JHZLC>");
1143   - sBufferA.append("<JHYYLC>").append(df.format(yylc)).append("</JHYYLC>");
1144   - sBuffer.append(sBufferA).append(sBufferB).append(sBufferC);
1145   - }
1146   - logger.info("setSKB:"+"ttinfoId:"+ttinfoId+";当前站点版本号:"+lineVersion+";查询历史站点路由:"+lsStationCode2NameMap+";查询历史站点编号:"+lsStationName2YgcNumber);
1147   - }
1148   - sBuffer.append("</SKBs>");
1149   - if(ssop.setSKB(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
1150   - result = "上传成功";
1151   - SKBUploadLogger skbUploadLogger ;
1152   - SysUser user = SecurityUtils.getCurrentUser();
1153   - // 保存时刻表上传记录
1154   - for(TTInfo ttInfo1 : ttinfoList){
1155   - skbUploadLogger = new SKBUploadLogger();
1156   - skbUploadLogger.setTtInfo(ttInfo1);
1157   - skbUploadLogger.setUser(user);
1158   - skbUploadLoggerRepository.save(skbUploadLogger);
1159   - }
1160   - }
1161   -
1162   - // 发送到青浦运管处
1163   - try {
1164   - logger.info("xml:",sBuffer);
1165   - com.bsth.webService.trafficManage.qp.Results res =
1166   - qp_ssop.setSKB(userNameOther_qp,passwordOther_qp,sBuffer.toString());
1167   - logger.info("青浦时刻表上传结果:"+ res.isSuccess());
1168   - }catch (Exception e){
1169   - e.printStackTrace();
1170   - }
1171   - } catch (Exception e) {
1172   - logger.error("setSKB:", e);
1173   - e.printStackTrace();
1174   - }finally{
1175   - logger.info("setSKB:"+sBuffer.toString());
1176   - logger.info("setSKB:"+result);
1177   - }
1178   - return result;
1179   - }
1180   -
1181   - /**
1182   - * 上传线路人员车辆配置信息
1183   - */
1184   - @Override
1185   - public String setXLPC() {
1186   - String result = "failure";
1187   - StringBuffer sBuffer =new StringBuffer();
1188   - try {
1189   - sBuffer.append("<XLPCs>");
1190   - // 声明变量
1191   - Line line = null;
1192   - Cars cars = null;
1193   - List<Personnel> personnelList = null;
1194   - List<Cars> carsList = null;
1195   - int totalPersonnel,totalCar ;// 人员数量。车辆数量
1196   - // 查询所有线路
1197   - Iterator<Line> lineIterator = lineRepository.findAll().iterator();
1198   - // 循环查找线路下的信息
1199   - while(lineIterator.hasNext()){
1200   - line = lineIterator.next();
1201   - sBuffer.append("<XLPC>");
1202   - sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");
1203   - // 查询驾驶员数量
1204   - personnelList = personnelRepository.findJsysByLineId(line.getId());
1205   - totalPersonnel = personnelList != null ? personnelList.size():0;
1206   - sBuffer.append("<SJRS>").append(totalPersonnel).append("</SJRS>");
1207   - // 查询售票员人员数量
1208   - personnelList = personnelRepository.findSpysByLineId(line.getId());
1209   - totalPersonnel = personnelList != null ? personnelList.size():0;
1210   - sBuffer.append("<SPYRS>").append(totalPersonnel).append("</SPYRS>");
1211   - // 查询车辆
1212   - carsList = carsRepository.findCarsByLineId(line.getId());
1213   - totalCar = carsList != null ? carsList.size():0;
1214   - sBuffer.append("<PCSL>").append(totalCar).append("</PCSL>");
1215   - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
1216   - int carsNum = 0;
1217   - // 取车牌号
1218   - if(carsList != null){
1219   - carsNum = carsList.size();
1220   - sBuffer.append("<CPHList>");
1221   - for (int i = 0; i < carsNum; i++) {
1222   - cars = carsList.get(i);
1223   - sBuffer.append("<CPH>").append("沪").append(cars.getCarCode()).append("</CPH>");
1224   - }
1225   - sBuffer.append("</CPHList>");
1226   - }
1227   - sBuffer.append("</XLPC>");
1228   - }
1229   - sBuffer.append("</XLPCs>");
1230   - if(ssop.setXLPC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
1231   - result = "success";
1232   - }
1233   - } catch (Exception e) {
1234   - logger.error("setXLPC:",e);
1235   - e.printStackTrace();
1236   - }finally{
1237   - logger.info("setXLPC:"+sBuffer.toString());
1238   - logger.info("setXLPC:"+result);
1239   - }
1240   - return result;
1241   - }
1242   -
1243   -
1244   - /**
1245   - * 上传超速数据
1246   - */
1247   - @Override
1248   - public String setCS() {
1249   - String result = "failure";
1250   - StringBuffer sBuffer =new StringBuffer();
1251   - sBuffer.append("<CSs>");
1252   - String sql = "SELECT * FROM bsth_c_speeding where DATE_FORMAT(create_date,'%Y-%m-%d') = ? order by create_date ";
1253   - Connection conn = null;
1254   - PreparedStatement ps = null;
1255   - ResultSet rs = null;
1256   - // 取昨天 的日期
1257   - String yesterday = sdfnyr.format(DateUtils.addDays(new Date(), -1));
1258   - try {
1259   - conn = DBUtils_MS.getConnection();
1260   - ps = conn.prepareStatement(sql);
1261   - ps.setString(1, yesterday);
1262   - rs = ps.executeQuery();
1263   - Float lon, lat;
1264   - String kssk;
1265   - String speed;
1266   - while (rs.next()) {
1267   - kssk = sdfnyrsfm.format(rs.getLong("TIMESTAMP"));
1268   - speed = rs.getString("SPEED");
1269   - // 经纬度
1270   - lon = rs.getFloat("LON");
1271   - lat = rs.getFloat("LAT");
1272   - sBuffer.append("<CS>");
1273   - sBuffer.append("<RQ>").append(sdfnyr.format(rs.getDate("CREATE_DATE"))).append("</RQ>");
1274   - sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(rs.getString("LINE"))).append("</XLBM>");////////
1275   - sBuffer.append("<CPH>").append(rs.getString("VEHICLE")).append("</CPH>");
1276   - sBuffer.append("<KSSK>").append(kssk).append("</KSSK>");
1277   - sBuffer.append("<KSDDJD>").append(lon).append("</KSDDJD>");
1278   - sBuffer.append("<KSDDWD>").append(lat).append("</KSDDWD>");
1279   - sBuffer.append("<KSLD>").append("").append("</KSLD>");//**********************
1280   - sBuffer.append("<JSSK>").append(kssk).append("</JSSK>");
1281   - sBuffer.append("<JSDDJD>").append(lon).append("</JSDDJD>");
1282   - sBuffer.append("<JSDDWD>").append(lat).append("</JSDDWD>");
1283   - sBuffer.append("<JSLD>").append("").append("</JSLD>");//**********************
1284   - sBuffer.append("<PJSD>").append(speed).append("</PJSD>");
1285   - sBuffer.append("<ZGSS>").append(speed).append("</ZGSS>");
1286   - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
1287   - sBuffer.append("</CS>");
1288   - }
1289   - sBuffer.append("</CSs>");
1290   - if(ssop.setCS(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
1291   - result = "success";
1292   - }
1293   - } catch (Exception e) {
1294   - logger.error("setCS:",e);
1295   - e.printStackTrace();
1296   - } finally {
1297   - logger.info("setCS:"+sBuffer.toString());
1298   - logger.info("setCS:"+result);
1299   - DBUtils_MS.close(rs, ps, conn);
1300   - }
1301   - return result;
1302   - }
1303   -
1304   -
1305   - /**
1306   - * 下载全量的公交基础数据
1307   - */
1308   - public String getDownLoadAllDataFile() {
1309   - String result = "failure";
1310   - try {
1311   - try {
1312   - if(ygcBasicDataService.download("admin","000000","abc.zip")){
1313   - result = "success";
1314   - }
1315   - } catch (Exception e) {
1316   - e.printStackTrace();
1317   - }
1318   - } catch (Exception e) {
1319   - e.printStackTrace();
1320   - }
1321   -
1322   - return result;
1323   - }
1324   -
1325   - /**
1326   - * 下载增量的公交基础数据
1327   - */
1328   - public String getDownLoadIncreaseDataFile() {
1329   - String result = "success";
1330   - try {
1331   - //System.out.println(portType.downloadIncreaseDataFile(args0, args1, args2));
1332   - } catch (Exception e) {
1333   - e.printStackTrace();
1334   - }
1335   -
1336   - return result;
1337   - }
1338   -
1339   - /**
1340   - * 指定线路查询方式公交基础数据下载
1341   - */
1342   - public String getDownLoadWarrantsBusLineStation() {
1343   - String result = "success";
1344   - try {
1345   -
1346   - //portType.setXL(userNameXl, passwordXl, sBuffer.toString());
1347   - } catch (Exception e) {
1348   - e.printStackTrace();
1349   - }
1350   -
1351   - return result;
1352   - }
1353   -
1354   - /**
1355   - * 计算结束时间
1356   - * @param fcsj 发车时间
1357   - * @param bcsj 班次历时
1358   - * @return
1359   - */
1360   - private String calcDdsj(String fcsj,Integer bcsj){
1361   - String result = "";
1362   - if(fcsj.indexOf(":") != -1){
1363   - if(bcsj == null){
1364   - return fcsj;
1365   - }
1366   - // 时和分隔开
1367   - String[] fcsjArray = fcsj.split(":");
1368   - // 分和历时时间相加
1369   - Integer fullTime = Integer.valueOf(fcsjArray[1])+ bcsj;
1370   - int hour,min,sumHour;
1371   - hour = fullTime / 60;
1372   - min = fullTime % 60;
1373   - sumHour = Integer.valueOf(fcsjArray[0])+hour;
1374   - if(sumHour >= 24){
1375   - result = String.format("%02d",sumHour - 24);
1376   - }else{
1377   - result = String.format("%02d",sumHour);;
1378   - }
1379   - result +=":"+String.format("%02d", min);
1380   - }else{
1381   - result = fcsj;
1382   - }
1383   - return result;
1384   - }
1385   -
1386   - /**
1387   - * 改变时间格式
1388   - * @param ttInfoDetail 时刻表详细
1389   - * @return xx:yy
1390   - */
1391   - private String changeTimeFormat(TTInfoDetail ttInfoDetail){
1392   - String result = "00:00";
1393   - String fcsj = ttInfoDetail.getFcsj();
1394   - if(fcsj.indexOf(":") != -1){
1395   - // 时和分隔开
1396   - String[] fcsjArray = fcsj.split(":");
1397   - result = String.format("%02d", Integer.valueOf(fcsjArray[0]))+":";
1398   - result +=String.format("%02d", Integer.valueOf(fcsjArray[1]));
1399   - }else{
1400   - result = null;
1401   - logger.info("setSKB:发车时间错误:ttInfoDetail.id="+ttInfoDetail.getId());
1402   - }
1403   - return result;
1404   - }
1405   -
1406   - /**
1407   - * 拼装线路计划班次表的XML
1408   - * @param sBuffer
1409   - * @param schedulePlanInfo
1410   - * @param xlbm
1411   - * @param zbh
1412   - * @param lp
1413   - */
1414   - private void assembleJHBC(StringBuffer sBuffer,SchedulePlanInfo schedulePlanInfo,String xlbm,String zbh,Long lp){
1415   - sBuffer.append("<JHBC>");
1416   - sBuffer.append("<RQ>").append(sdfnyr.format(schedulePlanInfo.getScheduleDate())).append("</RQ>");
1417   - sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(xlbm)).append("</XLBM>");
1418   - sBuffer.append("<CPH>").append("沪"+zbh).append("</CPH>");
1419   - sBuffer.append("<LPBH>").append(lp).append("</LPBH>");
1420   - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
1421   - sBuffer.append("<BCList>");
1422   - }
1423   - /**
1424   - * 转换排班规则
1425   - * @param ruleDay
1426   - * @return
1427   - */
1428   - private String changeRuleDay(String ruleDay){
1429   - String result = "";
1430   - int flag ;
1431   - String[] ruleDayArray = ruleDay.split(",");
1432   - for (int i = 0; i < ruleDayArray.length; i++) {
1433   - if(ruleDayArray[i].equals("1")){
1434   - flag = i+1;
1435   - }else{
1436   - flag = 0;
1437   - }
1438   - if(flag > 0){
1439   - result += flag + ",";
1440   - }
1441   - }
1442   - // 去掉最后一个字符
1443   - if(StringUtils.endsWith(result,",")){
1444   - result = StringUtils.removeEnd(result,",");
1445   - }
1446   - return result;
1447   - }
1448   - /**
1449   - * 设置统一的公司名称
1450   - * @param company
1451   - */
1452   - private void setCompanyName(String company){
1453   - if(company.equals("闵行公司")){
1454   - company = "浦东闵行公交公司";
1455   - }else if(company.equals("杨高公司")){
1456   - company = "浦东杨高公交公司";
1457   - }else if(company.equals("上南公司")){
1458   - company = "浦东上南公交公司";
1459   - }else if(company.equals("金高公司")){
1460   - company = "浦东金高公交公司";
1461   - }else if(company.equals("南汇公司")){
1462   - company = "浦东南汇公交公司";
1463   - }else if(company.equals("青浦公交")){
1464   - company = "浦东青浦公交公司";
1465   - }
1466   - }
1467   - /**
1468   - * @param stationsList 站点路由集
1469   - * @param sBuffer sBuffer
1470   - * @param startId 站点序号起始ID
1471   - *
1472   - * @return 站点序号累加后的ID
1473   - */
1474   - private int packagStationXml(List<StationRoute> stationsList,StringBuffer sBuffer,int startId,Map<String, Integer> stationNumMap){
1475   - int size = stationsList.size();
1476   - StationRoute srRoute;
1477   - HashMap<String,String> paraMap;
1478   - String zdlx ;// 站点类型:0:起点站、1:终点站、2:中途站
1479   - for (int i = 0; i < size; i++) {
1480   - srRoute = stationsList.get(i);
1481   - zdlx = srRoute.getStationMark();
1482   - if(zdlx.equals("B")){
1483   - zdlx = "0";
1484   - }else if(zdlx.equals("E")){
1485   - zdlx = "1";
1486   - }else{
1487   - zdlx = "2";
1488   - }
1489   - paraMap = packageYgcStationNumParam(srRoute,null);
1490   - sBuffer.append("<Station>");
1491   - sBuffer.append("<ZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paraMap,stationNumMap)).append("</ZDXH>");
1492   - sBuffer.append("<SXX>").append(srRoute.getDirections()).append("</SXX>");
1493   - sBuffer.append("<ZDMC>").append(srRoute.getStationName()).append("</ZDMC>");
1494   - sBuffer.append("<ZDBM>").append(srRoute.getStationCode()).append("</ZDBM>");
1495   - sBuffer.append("<ZDJD>").append(srRoute.getStation().getgLonx()).append("</ZDJD>");
1496   - sBuffer.append("<ZDWD>").append(srRoute.getStation().getgLaty()).append("</ZDWD>");
1497   - sBuffer.append("<ZZ>").append(srRoute.getStation().getAddr() == null ? "" : srRoute.getStation().getAddr()).append("</ZZ>");
1498   - sBuffer.append("<ZDLX>").append(zdlx).append("</ZDLX>");
1499   - sBuffer.append("<ZJLC>").append(srRoute.getDistances()).append("</ZJLC>");
1500   - sBuffer.append("</Station>");
1501   - startId++;
1502   - }
1503   - return startId;
1504   - }
1505   -
1506   - /**
1507   - * @param pointList 站点点位集
1508   - * @param sBuffer sBuffer
1509   - * @param startId 站点序号起始ID
1510   - *
1511   - * @return 站点序号累加后的ID
1512   - */
1513   - private int packagStationPointXml(List<Object[]> pointList,StringBuffer sBuffer,int startId){
1514   - int size = pointList.size();
1515   - Object[] objs;
1516   - String bsection,dir,section;
1517   - String[] sections ;
1518   - for (int i = 0; i < size; i++) {
1519   - objs = pointList.get(i);
1520   - bsection = objs[0]+"";
1521   - dir = objs[1]+"";
1522   - // 取括号内的内容
1523   - Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");
1524   - Matcher matcher = pattern.matcher(bsection);
1525   - if(matcher.find()){
1526   - sections = matcher.group().split(",");
1527   - for (int j = 0 ; j < sections.length ; j ++){
1528   - section = sections[j];
1529   - sBuffer.append("<LinePoint>");
1530   - sBuffer.append("<ZDXH>").append(startId).append("</ZDXH>");
1531   - sBuffer.append("<SXX>").append(dir).append("</SXX>");
1532   - sBuffer.append("<ZDJD>").append(section.split(" ")[0]).append("</ZDJD>");
1533   - sBuffer.append("<ZDWD>").append(section.split(" ")[1]).append("</ZDWD>");
1534   - sBuffer.append("</LinePoint>");
1535   - startId++;
1536   - }
1537   - }
1538   - }
1539   - return startId;
1540   - }
1541   -
1542   - /**
1543   - * 获取运管处站点序号
1544   - * @param map
1545   - * @return 运管处站点序号
1546   - */
1547   - private Integer getYgcStationNumByLineCodeAndDirectionAndStationName(HashMap<String,String> map,Map<String, Integer> stationNumMap){
1548   - // 线路编码
1549   - String lineCode = map.get("lineCode");
1550   - // 线路走向 0:上行 1:下行
1551   - String direction = map.get("direction");
1552   - // 站点编码
1553   - String stationCode = map.get("stationCode");
1554   - // 站点类型:B:起点站 Z:中途站 E:终点站 T:停车场
1555   - String stationMark = map.get("stationMark");
1556   - String[] marks = null;
1557   - // 起点站,先从起点找,找不到再从中途站找,最后从终点找
1558   - if(stationMark.equals("B")){
1559   - marks= new String[]{"B","Z","E"};
1560   - }else if(stationMark.equals("E")){// 终点站相反
1561   - marks= new String[]{"E","Z","B"};
1562   - }else if(stationMark.equals("Z")){
1563   - marks= new String[]{"Z"};
1564   - }
1565   - // 默认从缓存BasicData.stationName2YgcNumber
1566   - Map<String, Integer> tempMap = BasicData.stationName2YgcNumber;
1567   - // 如果传入的stationNumMap不为空,则不是缓存取,而从stationNumMap取
1568   - if(stationNumMap != null){
1569   - tempMap = stationNumMap;
1570   - }
1571   - Integer number = null;
1572   - for (int i = 0 ;i < marks.length ; i ++){
1573   - number = tempMap.get(lineCode+"_"+direction+"_"+stationCode+"_"+marks[i]);
1574   - if(number != null){
1575   - break;
1576   - }
1577   - }
1578   - return number == null ? 0 : number;
1579   - }
1580   -
1581   - /**
1582   - * 封装查询站序条件
1583   - * @param obj
1584   - * @return
1585   - */
1586   - private HashMap packageYgcStationNumParam(Object obj,HashMap<String,String> otherParam){
1587   - HashMap<String,String> map = new HashMap<String,String>();
1588   - String lineCode = "",direction = "",stationCode = "",stationMark = "";
1589   - // 站点路由
1590   - if(obj instanceof StationRoute){
1591   - StationRoute sr = (StationRoute)obj;
1592   - lineCode = sr.getLineCode();
1593   - direction = String.valueOf(sr.getDirections());
1594   - stationCode = sr.getStationCode();
1595   - stationMark = sr.getStationMark();
1596   - }else if(obj instanceof ScheduleRealInfo){ //实际排班计划明细。
1597   - ScheduleRealInfo sri = (ScheduleRealInfo)obj;
1598   - lineCode = sri.getXlBm();
1599   - direction = sri.getXlDir();
1600   - if(otherParam != null && otherParam.get("stationMark") != null){
1601   - stationMark = otherParam.get("stationMark");
1602   - if(stationMark.equals("B")){ // 起点站
1603   - stationCode = sri.getQdzCode();
1604   - }else if(stationMark.equals("E")){ // 终点站
1605   - stationCode = sri.getZdzCode();
1606   - }
1607   - }
1608   - }else if(obj instanceof SchedulePlanInfo){ //排班计划明细
1609   - SchedulePlanInfo spi = (SchedulePlanInfo)obj;
1610   - lineCode = spi.getXlBm();
1611   - direction = spi.getXlDir();
1612   - if(otherParam != null && otherParam.get("stationMark") != null){
1613   - stationMark = otherParam.get("stationMark");
1614   - if(stationMark.equals("B")){ // 起点站
1615   - stationCode = spi.getQdzCode();
1616   - }else if(stationMark.equals("E")){ // 终点站
1617   - stationCode = spi.getZdzCode();
1618   - }
1619   - }
1620   - }else if(obj instanceof TTInfoDetail){ //时刻表明细
1621   - TTInfoDetail ttid = (TTInfoDetail)obj;
1622   - lineCode = ttid.getXl().getLineCode();
1623   - direction = ttid.getXlDir();
1624   - if(otherParam != null && otherParam.get("stationMark") != null){
1625   - stationMark = otherParam.get("stationMark");
1626   - if(stationMark.equals("B")){ // 起点站
1627   - stationCode = ttid.getQdzCode();
1628   - }else if(stationMark.equals("E")){ // 终点站
1629   - stationCode = ttid.getZdzCode();
1630   - }
1631   - }
1632   - }
1633   - map.put("lineCode",lineCode);// 站点编码
1634   - map.put("direction",direction); // 上下行
1635   - map.put("stationCode",stationCode); // 站点编号
1636   - map.put("stationMark",stationMark); // 站点类型
1637   - return map;
1638   - }
1639   -
1640   - /**
1641   - * 取得历史站点编码和站点名称的对应关系
1642   - * @return
1643   - */
1644   - private Map<String, String> getLsStationCode(String lineCode,int lineVersion){
1645   - Map<String,Object> map = new HashMap<>();
1646   - map.put("lineCode_eq", lineCode);
1647   - map.put("versions_eq",lineVersion);
1648   - LsStationRoute lsroute;
1649   - Iterator<LsStationRoute> iterator = lsStationRouteRepository.findAll(new CustomerSpecs<LsStationRoute>(map)).iterator();
1650   - Map<String, String> stationCode2Name = new HashMap<>();
1651   - while (iterator.hasNext()) {
1652   - lsroute = iterator.next();
1653   - stationCode2Name.put(lsroute.getLineCode() + "_" + lsroute.getDirections() + "_" + lsroute.getStationCode(), lsroute.getStationName());
1654   - }
1655   - return stationCode2Name;
1656   - }
1657   -
1658   - private Map<String, Integer> getLsStationRoute(String xlbm,int lineVersion){
1659   - Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();
1660   - /**
1661   - * 加载运管处的站点及序号
1662   - * 上行从1开始,下行顺序续编
1663   - */
1664   - List<Map<String, String>> ygcLines = lsStationRouteRepository.findLineWithLineCode4Ygc(xlbm,lineVersion);
1665   - if(ygcLines != null && ygcLines.size() > 0){
1666   - int size = ygcLines.size();
1667   - Map<String, String> tempMap ;
1668   - int num = 1;
1669   - String key;
1670   - String lineCode = "";
1671   - for (int i = 0; i < size; i ++){
1672   - tempMap = ygcLines.get(i);
1673   - if(lineCode.equals("")){
1674   - lineCode = tempMap.get("lineCode");
1675   - }else if(!lineCode.equals(tempMap.get("lineCode"))){
1676   - num = 1;
1677   - lineCode = tempMap.get("lineCode");
1678   - }
1679   - key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
1680   - + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
1681   - tempStationName2YgcNumber.put(key,num++);
1682   - }
1683   - }
1684   - return tempStationName2YgcNumber;
1685   - }
1686   -}
  1 +package com.bsth.service.impl;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.email.SendEmailController;
  5 +import com.bsth.email.entity.EmailBean;
  6 +import com.bsth.entity.*;
  7 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  8 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  9 +import com.bsth.entity.schedule.SchedulePlanInfo;
  10 +import com.bsth.entity.schedule.TTInfo;
  11 +import com.bsth.entity.schedule.TTInfoDetail;
  12 +import com.bsth.entity.search.CustomerSpecs;
  13 +import com.bsth.entity.sys.SysUser;
  14 +import com.bsth.entity.traffic.SKBUploadLogger;
  15 +import com.bsth.repository.*;
  16 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  17 +import com.bsth.repository.schedule.*;
  18 +import com.bsth.repository.traffic.SKBUploadLoggerRepository;
  19 +import com.bsth.security.util.SecurityUtils;
  20 +import com.bsth.service.TrafficManageService;
  21 +import com.bsth.service.traffic.YgcBasicDataService;
  22 +import com.bsth.util.TimeUtils;
  23 +import com.bsth.util.db.DBUtils_MS;
  24 +import com.bsth.webService.trafficManage.org.tempuri.Results;
  25 +import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator;
  26 +import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap;
  27 +import com.bsth.webService.trafficManage.qp.WebServiceSoap_PortType;
  28 +import org.apache.commons.lang.StringEscapeUtils;
  29 +import org.apache.commons.lang.StringUtils;
  30 +import org.apache.commons.lang.time.DateUtils;
  31 +import org.slf4j.Logger;
  32 +import org.slf4j.LoggerFactory;
  33 +import org.springframework.beans.factory.annotation.Autowired;
  34 +import org.springframework.data.domain.Sort;
  35 +import org.springframework.data.domain.Sort.Direction;
  36 +import org.springframework.stereotype.Service;
  37 +
  38 +import java.io.*;
  39 +import java.net.InetAddress;
  40 +import java.sql.Connection;
  41 +import java.sql.PreparedStatement;
  42 +import java.sql.ResultSet;
  43 +import java.text.DecimalFormat;
  44 +import java.text.SimpleDateFormat;
  45 +import java.util.*;
  46 +import java.util.regex.Matcher;
  47 +import java.util.regex.Pattern;
  48 +
  49 +/**
  50 + *
  51 + * @ClassName: TrafficManageServiceImpl(运管处接口service业务层实现类)
  52 + *
  53 + * @Extends : BaseService
  54 + *
  55 + * @Description: TODO(运管处接口service业务层)
  56 + *
  57 + * @Author bsth@zq
  58 + *
  59 + * @Date 2016年10月28日 上午9:21:17
  60 + *
  61 + * @Version 公交调度系统BS版 0.1
  62 + *
  63 + */
  64 +
  65 +@Service
  66 +public class TrafficManageServiceImpl implements TrafficManageService{
  67 +
  68 + Logger logger = LoggerFactory.getLogger(this.getClass());
  69 +
  70 + // 线路repository
  71 + @Autowired
  72 + private LineRepository lineRepository;
  73 +
  74 + @Autowired
  75 + private LineInformationRepository lineInformationRepository;
  76 +
  77 + // 站点路由repository
  78 + @Autowired
  79 + private StationRouteRepository stationRouteRepository;
  80 +
  81 + // 历史站点路由repository
  82 + @Autowired
  83 + private LsStationRouteRepository lsStationRouteRepository;
  84 +
  85 + @Autowired
  86 + private SectionRepository sectionRepository;
  87 +
  88 + // 车辆repository
  89 + @Autowired
  90 + private CarsRepository carsRepository;
  91 +
  92 + // 人员repository
  93 + @Autowired
  94 + private PersonnelRepository personnelRepository;
  95 +
  96 + // 时刻模板repository
  97 + @Autowired
  98 + private TTInfoRepository ttInfoRepository;
  99 +
  100 + // 时刻模板明细repository
  101 + @Autowired
  102 + private TTInfoDetailRepository ttInfoDetailRepository;
  103 +
  104 + // 排班计划明细repository
  105 + @Autowired
  106 + private SchedulePlanInfoRepository schedulePlanInfoRepository;
  107 +
  108 + // 实际排班计划明细repository
  109 + @Autowired
  110 + private ScheduleRealInfoRepository scheduleRealInfoRepository;
  111 +
  112 + // 时刻表上传记录repository
  113 + @Autowired
  114 + private SKBUploadLoggerRepository skbUploadLoggerRepository;
  115 +
  116 + // 线路站点repository
  117 + @Autowired
  118 + private YgcBasicDataService ygcBasicDataService;
  119 +
  120 + // 发送邮件
  121 + @Autowired
  122 + private SendEmailController sendEmailController;
  123 +
  124 + // 运管处上传接口
  125 + private com.bsth.webService.trafficManage.up.org.tempuri.WebServiceSoap webServiceSoapUp;
  126 + private WebServiceSoap ssop ;
  127 + {
  128 + try {
  129 + ssop = new WebServiceLocator().getWebServiceSoap();
  130 + } catch (Exception e) {
  131 + e.printStackTrace();
  132 + }
  133 + }
  134 + // 青浦接口
  135 + private WebServiceSoap_PortType qp_ssop;
  136 + {
  137 + try {
  138 + qp_ssop = new com.bsth.webService.trafficManage.qp.WebServiceLocator().getWebServiceSoap();
  139 + } catch (Exception e) {
  140 + e.printStackTrace();
  141 + }
  142 + }
  143 + // 格式化 年月日时分秒 nyrsfm是年月日时分秒的拼音首字母
  144 + private SimpleDateFormat sdfnyrsfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  145 +
  146 + // 格式化 年月日
  147 + private SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
  148 +
  149 + // 数字格式化
  150 + DecimalFormat format = new DecimalFormat("0.00");
  151 +
  152 + // 用户名
  153 + private final String userNameOther = "user";
  154 + // 密码
  155 + private final String passwordOther = "user";
  156 +
  157 + private final String userNameOther_qp = "china317";
  158 +
  159 + private final String passwordOther_qp = "china317";
  160 +
  161 + // 用户名
  162 + private final String userNameUp = "user";
  163 + // 密码
  164 + private final String passwordUp = "user";
  165 + // 接收邮件人
  166 + private final String emailSendToAddress = "175912183@qq.com";
  167 + // 记录路单上线的成功、失败线路数
  168 + private Integer countSuccess,countFailure;
  169 +
  170 + private synchronized com.bsth.webService.trafficManage.up.org.tempuri.WebServiceSoap getWebServiceSoapUp(){
  171 + try {
  172 + if(webServiceSoapUp == null){
  173 + webServiceSoapUp = new com.bsth.webService.trafficManage.up.org.tempuri.WebServiceLocator().getWebServiceSoap();
  174 + }
  175 + }catch (Exception e){
  176 + e.printStackTrace();
  177 + }finally {
  178 + return webServiceSoapUp;
  179 + }
  180 + }
  181 + /**
  182 + * 上传线路信息
  183 + */
  184 + @Override
  185 + public String setXL(String ids) {
  186 + String result = "failure";
  187 + StringBuffer sBuffer = new StringBuffer();
  188 + String[] idArray = ids.split(",");
  189 + try {
  190 + for (String id : idArray) {
  191 + if(id == null || id.trim().equals("")){
  192 + continue;
  193 + }
  194 + Map<String,Object> map = new HashMap<>();
  195 + map.put("lineCode_eq", id);
  196 + Line line ;
  197 + LineInformation lineInformation;
  198 + line = lineRepository.findOne(new CustomerSpecs<Line>(map));
  199 + if(line == null){
  200 + continue;
  201 + }
  202 + List<StationRoute> upStationsList ;// 上行站点路由集
  203 + List<StationRoute> downStationsList;// 下行站点路由集
  204 + List<Object[]> downPointList;// 下行站点集
  205 + List<Object[]> upPointList;// 上行站点集
  206 + sBuffer.append("<XLs>");
  207 + sBuffer.append("<XL>");
  208 + if(BasicData.lineId2ShangHaiCodeMap.get(line.getId()) == null){
  209 + return result;
  210 + }
  211 + map = new HashMap<>();
  212 + map.put("line.id_eq",line.getId());
  213 + lineInformation = lineInformationRepository.findOne(new CustomerSpecs<LineInformation>(map));
  214 + if(lineInformation == null){
  215 + continue;
  216 + }
  217 + sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");
  218 + sBuffer.append("<XLMC>").append(line.getName()).append("</XLMC>");
  219 + sBuffer.append("<QDZ>").append(line.getStartStationName()).append("</QDZ>");
  220 + sBuffer.append("<ZDZ>").append(line.getEndStationName()).append("</ZDZ>");
  221 + sBuffer.append("<QZLC>").append(lineInformation.getUpMileage()).append("</QZLC>");
  222 + sBuffer.append("<ZQLC>").append(lineInformation.getDownMileage()).append("</ZQLC>");
  223 + sBuffer.append("<XLGH>").append(line.getLinePlayType()).append("</XLGH>");
  224 + sBuffer.append("<UPDATE_DATE>").append(sdfnyr.format(new Date())).append("</UPDATE_DATE>");
  225 +
  226 + // 循环添加站点信息
  227 + sBuffer.append("<StationList>");
  228 +
  229 + // 先查上行
  230 + upStationsList = stationRouteRepository.findByLine(line.getLineCode(), 0);
  231 + Map<String, Integer> stationNumMap = getStationName2YgcNumberMap(line.getLineCode());
  232 + int startId = 1;
  233 + startId = packagStationXml(upStationsList, sBuffer, startId,stationNumMap);
  234 + // 环线不查下行
  235 + if(line.getLinePlayType() != 1){
  236 + // 再查下行
  237 + downStationsList = stationRouteRepository.findByLine(line.getLineCode(), 1);
  238 + packagStationXml(downStationsList, sBuffer, startId,stationNumMap);
  239 + }
  240 + sBuffer.append("</StationList>");
  241 +
  242 + // 循环添加站点点位信息
  243 + sBuffer.append("<LinePointList>");
  244 + upPointList = sectionRepository.getSectionDirByLineId(line.getId(),0);
  245 + startId = 1;
  246 + startId = packagStationPointXml(upPointList, sBuffer, startId);
  247 + // 环线不查下行
  248 + if(line.getLinePlayType() != 1){
  249 + downPointList = sectionRepository.getSectionDirByLineId(line.getId(),1);
  250 + packagStationPointXml(downPointList, sBuffer, startId);
  251 + }
  252 + sBuffer.append("</LinePointList>");
  253 + sBuffer.append("</XL>");
  254 + sBuffer.append("</XLs>");
  255 + // 临时添加,后面删除
  256 + if(sBuffer.indexOf("<ZDXH>0</ZDXH>") != -1){
  257 + return "0";
  258 + }
  259 + // 调用上传方法
  260 + if(getWebServiceSoapUp().setXL(userNameUp,passwordUp,sBuffer.toString()).isSuccess()){
  261 + result = "success";
  262 + }else{
  263 + result = "failure";
  264 + }
  265 + logger.info("setXL:"+sBuffer.toString());
  266 + logger.info("setXL:"+result);
  267 + }
  268 + } catch (Exception e) {
  269 + logger.error("setXL:",e);
  270 + e.printStackTrace();
  271 + }
  272 + return result;
  273 + }
  274 +
  275 + /**
  276 + * 加载运管处的站点及序号
  277 + * 上行从1开始,下行顺序续编
  278 + */
  279 + private Map<String, Integer> getStationName2YgcNumberMap (String lineCode){
  280 + Map<String, Integer> resultMap = new HashMap<>();
  281 + List<Map<String, String>> ygcLines = stationRouteRepository.findLineWithYgcByLine(lineCode);
  282 + if(ygcLines != null && ygcLines.size() > 0){
  283 + int size = ygcLines.size();
  284 + Map<String, String> tempMap ;
  285 + int num = 1;
  286 + String key;
  287 + for (int i = 0; i < size; i ++){
  288 + tempMap = ygcLines.get(i);
  289 + key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
  290 + + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
  291 + resultMap.put(key,num++);
  292 + }
  293 + }
  294 + return resultMap;
  295 + }
  296 +
  297 + /**
  298 + * 上传线路信息(按in_use上传)
  299 + */
  300 + @Override
  301 + public String setXLByInUse(String inUse) {
  302 + StringBuffer result = new StringBuffer();
  303 + try {
  304 + Map<String,Object> map = new HashMap<>();
  305 + if(inUse != null && inUse.equals("1")){
  306 + map.put("inUse_eq", inUse);
  307 + }
  308 + List<Line> lines ;
  309 + Line line;
  310 + lines = lineRepository.findAll(new CustomerSpecs<Line>(map));
  311 + if(lines != null && lines.size() > 0){
  312 + for(int i = 0 ; i < lines.size() ; i ++){
  313 + line = lines.get(i);
  314 + if(line != null && line.getId() != null){
  315 + result.append(line.getLineCode()).append(":").append(setXL(line.getLineCode())).append(";");
  316 + }
  317 + }
  318 + }
  319 + } catch (Exception e) {
  320 + result.append("failure");
  321 + logger.error("setXLByInUse:",e);
  322 + e.printStackTrace();
  323 + }
  324 + return result.toString();
  325 + }
  326 +
  327 + /**
  328 + * 上传车辆信息
  329 + */
  330 + @Override
  331 + public String setCL() {
  332 + String result = "failure";
  333 + StringBuffer sBuffer =new StringBuffer();
  334 + try {
  335 + sBuffer.append("<CLs>");
  336 + Cars cars = null;
  337 + String company;
  338 + Iterator<Cars> carsIterator = carsRepository.findAll().iterator();
  339 + while(carsIterator.hasNext()){
  340 + cars = carsIterator.next();
  341 + sBuffer.append("<CL>");
  342 + company = cars.getCompany();
  343 + setCompanyName(company);// 统一公司名称
  344 + sBuffer.append("<GSJC>").append(company).append("</GSJC>");
  345 + sBuffer.append("<NBH>").append(cars.getInsideCode()).append("</NBH>");
  346 + sBuffer.append("<CPH>").append(cars.getCarPlate()).append("</CPH>");
  347 + sBuffer.append("<YYZBH>").append(cars.getServiceNo()).append("</YYZBH>");
  348 + sBuffer.append("<CZCPH>").append(cars.getCarPlate()).append("</CZCPH>");//******这个数据没有***********
  349 + sBuffer.append("<CZZDBH>").append(cars.getEquipmentCode()).append("</CZZDBH>");
  350 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  351 + sBuffer.append("</CL>");
  352 + }
  353 + sBuffer.append("</CLs>");
  354 + if(ssop.setCL(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  355 + result = "success";
  356 + }
  357 + } catch (Exception e) {
  358 + logger.error("setCL:",e);
  359 + e.printStackTrace();
  360 + }finally{
  361 + logger.info("setCL:"+sBuffer.toString());
  362 + logger.info("setCL:"+result);
  363 + }
  364 + return result;
  365 + }
  366 +
  367 + /**
  368 + * 上传司机信息
  369 + */
  370 + @Override
  371 + public String setSJ() {
  372 + String result = "failure";
  373 + StringBuffer sBuffer =new StringBuffer();
  374 + try {
  375 + sBuffer.append("<SJs>");
  376 + Personnel personnel = null;
  377 + String company;
  378 + Iterator<Personnel> personIterator = personnelRepository.findAll().iterator();
  379 + while(personIterator.hasNext()){
  380 + personnel = personIterator.next();
  381 + sBuffer.append("<SJ>");
  382 + company = personnel.getCompany();
  383 + setCompanyName(company);// 统一公司名称
  384 + sBuffer.append("<GSJC>").append(company).append("</GSJC>");
  385 + sBuffer.append("<SJGH>").append(personnel.getJobCode()).append("</SJGH>");
  386 + sBuffer.append("<CYZGZH>").append(personnel.getPapersCode()).append("</CYZGZH>");//***********
  387 + sBuffer.append("<XM>").append(personnel.getPersonnelName()).append("</XM>");
  388 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  389 + sBuffer.append("</SJ>");
  390 + }
  391 + sBuffer.append("</SJs>");
  392 + if(ssop.setSJ(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  393 + result = "success";
  394 + };
  395 + } catch (Exception e) {
  396 + logger.error("setSJ:",e);
  397 + e.printStackTrace();
  398 + }finally{
  399 + logger.info("setSJ:"+sBuffer.toString());
  400 + logger.info("setSJ:"+result);
  401 + }
  402 + return result;
  403 + }
  404 +
  405 + /**
  406 + * 上传路单 指定日期 yyyy-MM-dd
  407 + * @param theDate
  408 + * @return
  409 + */
  410 + public String setLD(String theDate){
  411 + return uploadLD(theDate);
  412 + }
  413 +
  414 + /**
  415 + * 上传路单 上传前一天的路单
  416 + * @return
  417 + */
  418 + public String setLD(){
  419 + return uploadLD(null);
  420 + }
  421 + /**
  422 + * 上传路单
  423 + * @return 上传成功标识
  424 + */
  425 + private String uploadLD(String theDate){
  426 + String result = "failure";
  427 + countSuccess = 0 ;countFailure = 0;
  428 + Line line;
  429 + // 取昨天 的日期
  430 + String date = theDate == null ?sdfnyr.format(DateUtils.addDays(new Date(), -1)) : theDate;
  431 + StringBuffer sf = new StringBuffer();
  432 + StringBuffer logSuccess = new StringBuffer("成功:");
  433 + StringBuffer logFailure = new StringBuffer("失败:");
  434 + HashMap logXlbmSuccessMap = new HashMap();
  435 + HashMap logXlbmFailureMap = new HashMap();
  436 + HashMap logXlbmMap = new HashMap();
  437 + Results results = null;
  438 + String str = "",xlbm;
  439 + try {
  440 + int counter = 0; // 计数器
  441 + int per = 10; // 每几条线路上传一次路单
  442 +
  443 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
  444 + List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLDGroup(date);
  445 + Map<String,Object> map = new HashMap();
  446 + HashMap<String,String> paramMap;
  447 + HashMap<String,String> otherMap = new HashMap();
  448 + String oldXlbm = "";
  449 + StringBuilder ygsXml = new StringBuilder();
  450 + for(Map<String,Object> schRealInfo:listGroup){
  451 + if(schRealInfo != null){
  452 + //根据车辆自编号查询车牌号
  453 + map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
  454 + Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
  455 + // 获取线路是否使用标识,如果未使用,则不查该线路数据
  456 + line = lineRepository.findByLineCode(schRealInfo.get("xlBm")+"");
  457 + if(line == null || line.getInUse() == null || line.getInUse() == 0){
  458 + continue;
  459 + }
  460 + if(counter % per == 0){
  461 + sf = new StringBuffer();
  462 + sf.append("<DLDS>");
  463 + }
  464 + counter ++;
  465 + xlbm = BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm")+"");
  466 + // 保存一次路单的线路编码,用于发送邮箱
  467 + if(logXlbmMap.get(xlbm) == null){
  468 + logXlbmMap.put(xlbm,xlbm);
  469 + }
  470 + sf.append("<DLD>");
  471 + sf.append("<RQ>"+date+"</RQ>");
  472 + sf.append("<XLBM>"+xlbm+"</XLBM>");
  473 + sf.append("<LPBH>"+schRealInfo.get("lpName")+"</LPBH>");
  474 + sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
  475 + sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
  476 + sf.append("<LDList>");
  477 +
  478 + for(ScheduleRealInfo scheduleRealInfo:list){
  479 + if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"")
  480 + .equals(scheduleRealInfo.getLpName())
  481 + && (schRealInfo.get("clZbh")+"").equals(scheduleRealInfo.getClZbh())){
  482 +
  483 + if(scheduleRealInfo.isDestroy()){
  484 + if(scheduleRealInfo.isReissue()){
  485 + scheduleRealInfo.setFcsjActualAll(scheduleRealInfo.getDfsj());
  486 + scheduleRealInfo.setZdsjActualAll(scheduleRealInfo.getZdsj());
  487 + }
  488 + else
  489 + continue;
  490 + }
  491 +
  492 + if(scheduleRealInfo.getBcType().equals("in")
  493 + || scheduleRealInfo.getBcType().equals("out")){
  494 + continue;
  495 + }
  496 +
  497 + sf.append("<LD>");
  498 + sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>");
  499 + sf.append("<SXX>"+scheduleRealInfo.getXlDir()+"</SXX>");
  500 + sf.append("<FCZDMC>"+scheduleRealInfo.getQdzName()+"</FCZDMC>");
  501 + // 起点站的参数
  502 + otherMap.put("stationMark","B");
  503 + paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
  504 + sf.append("<FCZDXH>" + getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) + "</FCZDXH>");
  505 + sf.append("<FCZDBM>"+scheduleRealInfo.getQdzCode()+"</FCZDBM>");
  506 + sf.append("<JHFCSJ>"+scheduleRealInfo.getFcsj()+"</JHFCSJ>");
  507 + sf.append("<DFSJ>"+scheduleRealInfo.getDfsj()+"</DFSJ>");
  508 + sf.append("<SJFCSJ>"+scheduleRealInfo.getFcsjActual()+"</SJFCSJ>");
  509 + sf.append("<FCZDLX>"+""+"</FCZDLX>");
  510 + sf.append("<DDZDMC>"+scheduleRealInfo.getZdzName()+"</DDZDMC>");
  511 + // 终点站的参数
  512 + otherMap.put("stationMark","E");
  513 + paramMap = packageYgcStationNumParam(scheduleRealInfo,otherMap);
  514 + sf.append("<DDZDXH>"+ getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null) +"</DDZDXH>");
  515 + sf.append("<DDZDBM>"+scheduleRealInfo.getZdzCode()+"</DDZDBM>");
  516 + sf.append("<JHDDSJ>"+scheduleRealInfo.getZdsj()+"</JHDDSJ>");
  517 + sf.append("<SJDDSJ>"+scheduleRealInfo.getZdsjActual()+"</SJDDSJ>");
  518 + sf.append("<DDZDLX>"+""+"</DDZDLX>");
  519 + sf.append("<LDSCBZ>"+0+"</LDSCBZ>");
  520 + sf.append("<DDBZ>").append(scheduleRealInfo.getRemarks() == null ? "" : scheduleRealInfo.getRemarks()).append("</DDBZ>");
  521 + sf.append("</LD>");
  522 + }
  523 + }
  524 + sf.append("</LDList>");
  525 + sf.append("</DLD>");
  526 + }
  527 + if(counter % per == per - 1){
  528 + counter = 0;
  529 + sf.append("</DLDS>");
  530 + str = sf.toString().replace("'","");// 去掉'号
  531 + results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
  532 + // 记录日志
  533 + result = logRecord(results,logXlbmMap,logXlbmSuccessMap,logXlbmFailureMap,logSuccess,logFailure,str);
  534 + // 发送到青浦运管处
  535 + /*try {
  536 + logger.info("xml:"+StringEscapeUtils.unescapeHtml(str));
  537 + com.bsth.webService.trafficManage.qp.Results res
  538 + = qp_ssop.setLD(userNameOther_qp,passwordOther_qp,StringEscapeUtils.unescapeHtml(str));
  539 + logger.info("青浦路单是否上传成功:"+res.isSuccess());
  540 + }catch (Exception e){
  541 + e.printStackTrace();
  542 + continue;
  543 + }*/
  544 + }
  545 +
  546 + // 青浦运管所需整条线路上传
  547 + if (oldXlbm == null || !oldXlbm.equals(schRealInfo.get("xlBm"))) {
  548 + if (oldXlbm != null) {
  549 + ygsXml.append("</DLDS>");
  550 + try {
  551 + logger.info("xml:"+StringEscapeUtils.unescapeHtml(ygsXml.toString()));
  552 + com.bsth.webService.trafficManage.qp.Results res
  553 + = qp_ssop.setLD(userNameOther_qp,passwordOther_qp,StringEscapeUtils.unescapeHtml(ygsXml.toString().replace("'","")));
  554 + logger.info("青浦路单是否上传成功:"+res.isSuccess());
  555 + }catch (Exception e){
  556 + e.printStackTrace();
  557 + continue;
  558 + }
  559 + }
  560 + ygsXml = new StringBuilder("<DLDS>");
  561 + } else {
  562 + ygsXml.append(sf.toString().replace("<DLDS>", "").replace("</DLDS>", ""));
  563 + }
  564 + }
  565 + // 每per条线路上传后剩下的数据再上传
  566 + if(counter > 0){
  567 + ygsXml.append("</DLDS>");
  568 + sf.append("</DLDS>");
  569 + str = sf.toString().replace("'","");// 去掉'号
  570 + results = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(str));
  571 + // 发送到青浦运管处
  572 + try {
  573 + logger.info("xml:"+StringEscapeUtils.unescapeHtml(str));
  574 + com.bsth.webService.trafficManage.qp.Results res
  575 + = qp_ssop.setLD(userNameOther_qp,passwordOther_qp,StringEscapeUtils.unescapeHtml(ygsXml.toString().replace("'","")));
  576 + logger.info("青浦路单是否上传成功:"+res.isSuccess());
  577 + }catch (Exception e){
  578 + e.printStackTrace();
  579 + }
  580 + }
  581 + // 记录日志
  582 + result = logRecord(results,logXlbmMap,logXlbmSuccessMap,logXlbmFailureMap,logSuccess,logFailure,str);
  583 + } catch (Exception e) {
  584 + logger.error("setLD:",e);
  585 + logFailure.append(e).append("<br/>");
  586 + for (StackTraceElement traceElement : e.getStackTrace()){
  587 + logFailure.append("\r\t").append(traceElement);
  588 + }
  589 + e.printStackTrace();
  590 + }finally{
  591 + try {
  592 + //发送邮件
  593 + EmailBean mail = new EmailBean();
  594 + mail.setSubject(InetAddress.getLocalHost().getHostAddress()+":路单日志数据"+date);
  595 + mail.setContent("成功数:"+countSuccess+"<br/>失败数:"+countFailure+"<br/>" +logSuccess + "<br/>"+logFailure);
  596 + sendEmailController.sendMail(emailSendToAddress, mail);
  597 + logger.info("setLD-sendMail:邮件发送成功!");
  598 + }catch (Exception e){
  599 + e.printStackTrace();
  600 + logger.error("setLD-sendMail:",e);
  601 + }
  602 + }
  603 + return result;
  604 + }
  605 +
  606 + /**
  607 + * 记录日志
  608 + * @param results
  609 + * @param logXlbmMap
  610 + * @param logXlbmSuccessMap
  611 + * @param logXlbmFailureMap
  612 + * @param logSuccess
  613 + * @param logFailure
  614 + * @param str
  615 + */
  616 + private String logRecord(Results results,HashMap logXlbmMap,HashMap logXlbmSuccessMap,HashMap logXlbmFailureMap,StringBuffer logSuccess,
  617 + StringBuffer logFailure,String str){
  618 + String result = "failure";
  619 + // 记录日志
  620 + if(results != null){
  621 + if(results.isSuccess()){// 上传成功
  622 + // 把上线成功的线路编码放入 logXlbmSuccessMap,并记录logSuccess
  623 + countSuccess += fillMailXlbmMap(logXlbmMap,logXlbmSuccessMap,logSuccess);
  624 + result = "success";
  625 + }else{// 上传失败
  626 + // 把上线失败的线路编码放入 logXlbmFailureMap,并记录logFailure
  627 + countFailure += fillMailXlbmMap(logXlbmMap,logXlbmFailureMap,logFailure);
  628 + result = "failure";
  629 + }
  630 + logger.info("setLD:"+str);
  631 + logger.info("setLD:"+result);
  632 + results = null;
  633 + logXlbmMap = new HashMap();
  634 + }
  635 + return result;
  636 + }
  637 + /**
  638 + * 填充线路编码到相应的map
  639 + * @param fromMap
  640 + * @param toMap
  641 + */
  642 + private int fillMailXlbmMap(HashMap fromMap,HashMap toMap,StringBuffer logStr){
  643 + int tmpCount = 0;
  644 + for (Object key : fromMap.keySet()) {
  645 + if(toMap.get(key) == null){
  646 + toMap.put(key,fromMap.get(key));
  647 + logStr.append(key).append(",");
  648 + tmpCount ++;
  649 + }
  650 + }
  651 + fromMap = new HashMap();
  652 + return tmpCount;
  653 + }
  654 + /**
  655 + * 上传路单 xml来自文件
  656 + * @return 上传成功标识
  657 + */
  658 + public String setLDFile(){
  659 + String result = "failure";
  660 + try {
  661 + String tmp = readXmlFromFile("E:/ld.txt");
  662 + Results rss = ssop.setLD(userNameOther, passwordOther, StringEscapeUtils.unescapeHtml(tmp));
  663 + if(rss.isSuccess()){
  664 + result = "success";
  665 + }
  666 + } catch (Exception e) {
  667 + logger.error("setLD:",e);
  668 + e.printStackTrace();
  669 + }finally{
  670 +
  671 + }
  672 + return result;
  673 + }
  674 +
  675 + /**
  676 + * 从文件中读取xml
  677 + * @param fileName 例:D:/test.txt
  678 + * @return
  679 + * @throws Exception
  680 + */
  681 + private String readXmlFromFile(String fileName) throws Exception {
  682 + StringBuffer sf = new StringBuffer("");
  683 + File file = new File(fileName);
  684 + InputStreamReader reader = new InputStreamReader(new FileInputStream(file),"GBK");
  685 + BufferedReader bufferedReader = new BufferedReader(reader);
  686 + String lineTxt = "";
  687 + while((lineTxt = bufferedReader.readLine()) != null){
  688 + sf.append(lineTxt);
  689 + }
  690 + reader.close();
  691 + return sf.toString().replaceAll("\t","");
  692 + }
  693 + /**
  694 + * 上传里程油耗
  695 + * @return 上传成功标识
  696 + */
  697 + public String setLCYH(){
  698 + String result = "failure";
  699 + // 取昨天 的日期
  700 + String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
  701 + StringBuffer sf = new StringBuffer();
  702 + try {
  703 + sf.append("<LCYHS>");
  704 + List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLCYHGroup(date);
  705 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
  706 + Map<String,Object> map = new HashMap<String,Object>();
  707 + for(Map<String,Object> schRealInfo:listGroup){
  708 + if(schRealInfo != null){
  709 + map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
  710 + Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
  711 + /**
  712 + * 如果car==null,则说明该车辆是从线调中换车功能中加进去的,
  713 + * 在cars基础信息中查不到车辆的信息,所以忽略该车辆
  714 + */
  715 + if(car == null){
  716 + continue;
  717 + }
  718 + //计算总公里和空驶公里,营运公里=总公里-空驶公里
  719 + double totalKilometers = 0,emptyKilometers =0;
  720 + sf.append("<LCYH>");
  721 + sf.append("<RQ>"+date+"</RQ>");
  722 + sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
  723 + sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
  724 + if(list != null && list.size() > 0){
  725 + for(ScheduleRealInfo scheduleRealInfo:list){
  726 + if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("clZbh")+"")
  727 + .equals(scheduleRealInfo.getClZbh())){
  728 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  729 + //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
  730 + if(childTaskPlans.isEmpty()){
  731 + if(scheduleRealInfo.getStatus() == 2){
  732 + totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  733 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  734 + || scheduleRealInfo.getBcType().equals("venting")){
  735 + emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  736 + }
  737 + }
  738 + }else{
  739 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  740 + while(it.hasNext()){
  741 + ChildTaskPlan childTaskPlan = it.next();
  742 + if(!childTaskPlan.isDestroy()){
  743 + totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
  744 + if(childTaskPlan.getMileageType().equals("empty")){
  745 + emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
  746 + }
  747 + }
  748 + }
  749 + }
  750 + }
  751 + }
  752 + }
  753 + sf.append("<ZLC>"+totalKilometers+"</ZLC>");
  754 + sf.append("<YYLC>"+emptyKilometers+"</YYLC>");
  755 + sf.append("<YH>"+""+"</YH>");
  756 + sf.append("<JZYL>"+""+"</JZYL>");
  757 + sf.append("<DH>"+""+"</DH>");
  758 + sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
  759 + sf.append("<BBSCBZ>"+0+"</BBSCBZ>");
  760 + sf.append("</LCYH>");
  761 + }
  762 + }
  763 + sf.append("</LCYHS>");
  764 + if(ssop.setLCYH(userNameOther, passwordOther, sf.toString()).isSuccess()){
  765 + result = "success";
  766 + }
  767 + } catch (Exception e) {
  768 + logger.error("setLCYH:",e);
  769 + e.printStackTrace();
  770 + }finally{
  771 + logger.info("setLCYH:"+sf.toString());
  772 + logger.info("setLCYH:"+result);
  773 + }
  774 + return result;
  775 + }
  776 +
  777 + /**
  778 + * 上传线路调度日报
  779 + * @return
  780 + */
  781 + public String setDDRB(){
  782 + String result = "failure";
  783 + // 取昨天 的日期
  784 + String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
  785 + StringBuffer sf = new StringBuffer();
  786 + try {
  787 + sf.append("<DDRBS>");
  788 + List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setDDRBGroup(date);
  789 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
  790 + for(Map<String,Object> schRealInfo:listGroup){
  791 + if(schRealInfo != null){
  792 + double jhlc = 0,zlc = 0,jhkslc = 0,sjkslc = 0;
  793 + int jhbc = 0,sjbc = 0,jhzgfbc = 0,sjzgfbc = 0,jhwgfbc = 0,sjwgfbc = 0;
  794 + sf.append("<DDRB>");
  795 + sf.append("<RQ>"+date+"</RQ>");
  796 + sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
  797 + for(ScheduleRealInfo scheduleRealInfo:list){
  798 + if(scheduleRealInfo != null){
  799 + if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm())){
  800 + //计划
  801 + if(!scheduleRealInfo.isSflj()){
  802 + jhlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  803 + //计划空驶
  804 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")){
  805 + jhkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  806 + }
  807 + //计划早高峰,计划晚高峰
  808 + if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
  809 + jhzgfbc++;
  810 + } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
  811 + jhwgfbc++;
  812 + }
  813 + }
  814 + jhbc++;
  815 +
  816 + //实际
  817 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  818 + //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
  819 + if(childTaskPlans.isEmpty()){
  820 + if(scheduleRealInfo.getStatus() == 2){
  821 + sjbc++;
  822 + zlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  823 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  824 + || scheduleRealInfo.getBcType().equals("venting")){
  825 + sjkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;
  826 + }
  827 + }
  828 + }else{
  829 + sjbc++;
  830 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  831 + while(it.hasNext()){
  832 + ChildTaskPlan childTaskPlan = it.next();
  833 + if(!childTaskPlan.isDestroy()){
  834 + zlc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
  835 + if(childTaskPlan.getMileageType().equals("empty")){
  836 + sjkslc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
  837 + }
  838 + }
  839 + }
  840 + }
  841 + //实际早高峰,计划晚高峰
  842 + if(scheduleRealInfo.getFcsjActual() != null){
  843 + if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
  844 + sjzgfbc++;
  845 + } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
  846 + sjwgfbc++;
  847 + }
  848 + }
  849 + }
  850 + }
  851 + }
  852 + sf.append("<JHLC>"+format.format(jhlc)+"</JHLC>");
  853 + sf.append("<SSLC>"+format.format((zlc-sjkslc))+"</SSLC>");
  854 + sf.append("<JHKSLC>"+format.format(jhkslc)+"</JHKSLC>");
  855 + sf.append("<SJKSLC>"+format.format(sjkslc)+"</SJKSLC>");
  856 + sf.append("<JHBC>"+jhbc+"</JHBC>");
  857 + sf.append("<SJBC>"+sjbc+"</SJBC>");
  858 + sf.append("<JHZGFBC>"+jhzgfbc+"</JHZGFBC>");
  859 + sf.append("<SJZGFBC>"+sjzgfbc+"</SJZGFBC>");
  860 + sf.append("<JHWGFBC>"+jhwgfbc+"</JHWGFBC>");
  861 + sf.append("<SJWGFBC>"+sjwgfbc+"</SJWGFBC>");
  862 + sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
  863 + sf.append("<RBSCBZ>"+0+"</RBSCBZ>");
  864 + sf.append("</DDRB>");
  865 + }
  866 + }
  867 + sf.append("</DDRBS>");
  868 + if(ssop.setDDRB(userNameOther, passwordOther, sf.toString()).isSuccess()){
  869 + result = "success";
  870 + }
  871 + } catch (Exception e) {
  872 + logger.error("setDDRB:",e);
  873 + e.printStackTrace();
  874 + }finally{
  875 + logger.info("setDDRB:"+sf.toString());
  876 + logger.info("setDDRB:"+result);
  877 + }
  878 + return result;
  879 + }
  880 +
  881 + /**
  882 + * 上传计划班次 指定日期 yyyy-MM-dd
  883 + * @param theDate
  884 + * @return
  885 + */
  886 + public String setJHBC(String theDate){
  887 + return uploadJHBC(theDate);
  888 + }
  889 +
  890 + /**
  891 + * 上传计划班次
  892 + * @return
  893 + */
  894 + public String setJHBC(){
  895 + return uploadJHBC(null);
  896 + }
  897 + /**
  898 + * 上传线路计划班次表
  899 + */
  900 +
  901 + private String uploadJHBC(String theDate) {
  902 + String result = "failure";
  903 + Line line;
  904 + StringBuffer sBuffer =new StringBuffer();
  905 + try {
  906 + sBuffer.append("<JHBCs>");
  907 + // 声明变量
  908 + SchedulePlanInfo schedulePlanInfo;
  909 + String xlbm,zbh = "";
  910 + Long lp = 0L;
  911 + // 取得计划班次时间
  912 + String tomorrow = theDate == null ? sdfnyr.format(DateUtils.addDays(new Date(), +1)) : theDate;
  913 + // 查询所有班次
  914 + List<SchedulePlanInfo> schedulePlanList = schedulePlanInfoRepository.findLineScheduleBc(tomorrow);
  915 + int j = 0; // 初始化标识
  916 + if(schedulePlanList != null ){
  917 + HashMap<String,String> paramMap;
  918 + HashMap<String,String> otherMap = new HashMap<String, String>();
  919 + int size = schedulePlanList.size();
  920 + for (int i = 0; i < size; i++) {
  921 + schedulePlanInfo = schedulePlanList.get(i);
  922 + xlbm = schedulePlanInfo.getXlBm();
  923 + // 获取线路是否使用标识,如果未使用,则不查该线路数据
  924 + line = lineRepository.findByLineCode(xlbm);
  925 + if(line.getInUse() == null || line.getInUse() == 0){
  926 + continue;
  927 + }
  928 + if(++j == 1){// 第一次,则初始化值
  929 + zbh = schedulePlanInfo.getClZbh();
  930 + lp = schedulePlanInfo.getLp();
  931 + // 拼装XML
  932 + assembleJHBC(sBuffer, schedulePlanInfo, xlbm, zbh, lp);
  933 + }
  934 + // 比较是否为同一条线路同一辆车
  935 + if(xlbm.equals(schedulePlanInfo.getXlBm())
  936 + && zbh.equals(schedulePlanInfo.getClZbh())
  937 + && lp == schedulePlanInfo.getLp()){
  938 + if(schedulePlanInfo.getBcType().equals("in") || schedulePlanInfo.getBcType().equals("out")){
  939 + continue;
  940 + }
  941 + sBuffer.append("<BC>");
  942 + sBuffer.append("<SJGH>").append(schedulePlanInfo.getjGh()).append("</SJGH>");
  943 + sBuffer.append("<SXX>").append(schedulePlanInfo.getXlDir()).append("</SXX>");
  944 + sBuffer.append("<FCZDMC>").append(schedulePlanInfo.getQdzName()).append("</FCZDMC>");
  945 + // 起点站的参数
  946 + otherMap.put("stationMark","B");
  947 + paramMap = packageYgcStationNumParam(schedulePlanInfo,otherMap);
  948 + sBuffer.append("<ZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</ZDXH>");
  949 + sBuffer.append("<JHFCSJ>").append(schedulePlanInfo.getFcsj()).append("</JHFCSJ>");
  950 + sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>");
  951 + // 起点站的参数
  952 + otherMap.put("stationMark","E");
  953 + paramMap = packageYgcStationNumParam(schedulePlanInfo,otherMap);
  954 + sBuffer.append("<DDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,null)).append("</DDXH>");
  955 + sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj()))
  956 + .append("</JHDDSJ>");
  957 + sBuffer.append("</BC>");
  958 + if(i == size -1 ){
  959 + sBuffer.append("</BCList>");
  960 + sBuffer.append("</JHBC>");
  961 + }
  962 + }else{
  963 + zbh = schedulePlanInfo.getClZbh();
  964 + lp = schedulePlanInfo.getLp();
  965 + sBuffer.append("</BCList>");
  966 + sBuffer.append("</JHBC>");
  967 + // 拼装XML
  968 + assembleJHBC(sBuffer, schedulePlanInfo, xlbm, zbh, lp);
  969 + }
  970 + }
  971 + }
  972 + // 判断XML是否以</BCList>结尾,如果不是,则加上
  973 + String regex = "^*</JHBC>$";
  974 + Pattern p = Pattern.compile(regex);
  975 + Matcher m = p.matcher(sBuffer);
  976 + boolean isEndWithTrueFlag = false;
  977 + while (m.find()) {
  978 + isEndWithTrueFlag = true;
  979 + }
  980 + // 加上缺失的标签
  981 + if(!isEndWithTrueFlag){
  982 + sBuffer.append("</BCList>");
  983 + sBuffer.append("</JHBC>");
  984 + }
  985 + sBuffer.append("</JHBCs>");
  986 + if(ssop.setJHBC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  987 + result = "success";
  988 + }
  989 + } catch (Exception e) {
  990 + logger.error("setJHBC:",e);
  991 + e.printStackTrace();
  992 + }finally{
  993 + logger.info("setJHBC:"+sBuffer.toString());
  994 + logger.info("setJHBC:"+result);
  995 + }
  996 + return result;
  997 + }
  998 +
  999 + /**
  1000 + * 上传线路班次时刻表数据
  1001 + */
  1002 + @Override
  1003 + public String setSKB(String ids) {
  1004 + String result = "上传失败,";
  1005 + StringBuffer sBuffer = new StringBuffer();
  1006 + DecimalFormat df = new DecimalFormat("######0.000");
  1007 + Map<String,String> lsStationCode2NameMap = null;
  1008 + Map<String, Integer> lsStationName2YgcNumber = null;
  1009 + try {
  1010 + String[] idArray = ids.split(",");
  1011 + StringBuffer sBufferA ,sBufferB ,sBufferC ;
  1012 + double zlc,yylc,singleLc,emptyLc;// 总里程、营运里程、单程、空放里程
  1013 + String bcType,sxx;// 班次类型、上下行
  1014 + // 上传的时刻表集合
  1015 + List<TTInfo> ttinfoList = new ArrayList<>();
  1016 + TTInfo ttInfo;
  1017 + TTInfoDetail ttInfoDetail;
  1018 + LineInformation lineInformation;
  1019 + Iterator<TTInfoDetail> ttInfoDetailIterator;
  1020 + HashMap<String,Object> param ;
  1021 + sBuffer.append("<SKBs>");
  1022 + HashMap<String,String> paramMap;
  1023 + HashMap<String,String> otherMap = new HashMap<>();
  1024 + // 线路编码、周几执行、发车站点名称、发车站点序号、到达站点名称、到达站点序号
  1025 + String xlbm,zjzx,fczdmc,zdxh,ddzdmc,ddxh;
  1026 + // 得到时刻表版本号
  1027 + int lineVersion;
  1028 + long ttinfoId;
  1029 + // 是否输出站点信息
  1030 + boolean isLogStation;
  1031 + for (int i = 0; i < idArray.length; i++) {
  1032 + ttinfoId = Long.valueOf(idArray[i]);
  1033 + ttInfo = ttInfoRepository.findOne(ttinfoId);
  1034 + if(ttInfo == null)
  1035 + continue;
  1036 + ttinfoList.add(ttInfo); // 保存时刻表
  1037 + // 得到时刻表版本号
  1038 + lineVersion = ttInfo.getLineVersion();
  1039 + // 查询历史站点路由
  1040 + lsStationCode2NameMap = getLsStationCode(ttInfo.getXl().getLineCode(),lineVersion);
  1041 + // 查询历史站点路由
  1042 + lsStationName2YgcNumber = getLsStationRoute(ttInfo.getXl().getLineCode(),lineVersion);
  1043 + zlc = 0.0f;
  1044 + yylc = 0.0f;
  1045 + // 获得时刻表
  1046 + param = new HashMap();
  1047 + param.put("ttinfo.id_eq", ttInfo.getId());
  1048 + ttInfoDetailIterator = ttInfoDetailRepository.findAll(new CustomerSpecs<TTInfoDetail>(param),
  1049 + new Sort(Direction.ASC, "xlDir")).iterator();
  1050 + // 获得lineInformation
  1051 + param = new HashMap();
  1052 + param.put("line.id_eq", ttInfo.getXl().getId());
  1053 + lineInformation = lineInformationRepository.findOne(new CustomerSpecs<LineInformation>(param));
  1054 + // 初始化
  1055 + isLogStation = true;
  1056 + if(ttInfoDetailIterator.hasNext()){
  1057 + // 得到线路信息
  1058 + Line line = lineRepository.findOne(ttInfo.getXl().getId());
  1059 + if(line == null){
  1060 + result += "未找到相应的线路信息,请设置线路信息后再上传";
  1061 + return result;
  1062 + }
  1063 + // 得到上海市线路编码
  1064 + xlbm = line.getShanghaiLinecode();
  1065 + if("".equals(xlbm) || "null".equals(xlbm)){
  1066 + result += "线路编码为空,请设置线路编码后再上传";
  1067 + return result;
  1068 + }
  1069 + // 拿到周几执行
  1070 + zjzx = changeRuleDay(ttInfo.getRule_days());
  1071 + if("".equals(zjzx) || "null".equals(zjzx)){
  1072 + result += "时刻表执行时间为空,请设置执行时间后再上传";
  1073 + return result;
  1074 + }
  1075 + sBuffer.append("<SKB>");
  1076 + sBuffer.append("<XLBM>").append(xlbm).append("</XLBM>");
  1077 + sBufferB = new StringBuffer();
  1078 + sBufferC = new StringBuffer();
  1079 + sBufferB.append("<KSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</KSRQ>");
  1080 + // 结束日期暂时不要,节假日的班次表才需要,如春节的班次表
  1081 + sBufferB.append("<JSRQ>").append("").append("</JSRQ>");
  1082 + sBufferB.append("<ZJZX>").append(zjzx).append("</ZJZX>");
  1083 + sBufferB.append("<TBYY>").append("").append("</TBYY>");
  1084 + sBufferB.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  1085 + sBufferB.append("<BCList>");
  1086 + while (ttInfoDetailIterator.hasNext()) {
  1087 + ttInfoDetail = ttInfoDetailIterator.next();
  1088 + bcType = ttInfoDetail.getBcType();
  1089 + sxx = ttInfoDetail.getXlDir();
  1090 + // 进出场班次的里程,加入总里程
  1091 + if(bcType.equals("in") || bcType.equals("out")){
  1092 + // 进出班次的计划里程,算空驶里程
  1093 + emptyLc = ttInfoDetail.getJhlc();
  1094 + // 总里程需要加上空驶里程
  1095 + zlc += emptyLc;
  1096 + continue;
  1097 + }
  1098 + // 不是正常班次,不传到运管处
  1099 + if(!bcType.equals("normal")){
  1100 + continue;
  1101 + }
  1102 + // 如果发车时间格式错误,忽略此条
  1103 + if(changeTimeFormat(ttInfoDetail) == null){
  1104 + continue;
  1105 + }
  1106 + // 发生站点名称
  1107 + fczdmc = lsStationCode2NameMap.get(ttInfoDetail.getXl().getLineCode()+"_"+ttInfoDetail.getXlDir()+"_"+ttInfoDetail.getQdzCode());
  1108 + if("".equals(fczdmc) || "null".equals(fczdmc)){
  1109 + result += "发车站点名称为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
  1110 + return result;
  1111 + }
  1112 + sBufferC.append("<BC>");
  1113 + sBufferC.append("<LPBH>").append(ttInfoDetail.getLp().getLpNo()).append("</LPBH>");
  1114 + sBufferC.append("<SXX>").append(sxx).append("</SXX>");
  1115 + sBufferC.append("<FCZDMC>").append(fczdmc).append("</FCZDMC>");
  1116 + // 起点站的参数
  1117 + otherMap.put("stationMark","B");
  1118 + paramMap = packageYgcStationNumParam(ttInfoDetail,otherMap);
  1119 + if(isLogStation){// 输出起点站信息
  1120 + logger.info("setSKB:"+"起点站信息:"+paramMap);
  1121 + }
  1122 + // 发车站点序号
  1123 + zdxh = String.valueOf(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,lsStationName2YgcNumber));
  1124 + if("".equals(zdxh) || "null".equals(zdxh) || "0".equals(zdxh)){
  1125 + result += "发车站点序号为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
  1126 + return result;
  1127 + }
  1128 + // 到达站点名称
  1129 + ddzdmc = lsStationCode2NameMap.get(ttInfoDetail.getXl().getLineCode()+"_"+ttInfoDetail.getXlDir()+"_"+ttInfoDetail.getZdzCode());
  1130 + if("".equals(ddzdmc) || "null".equals(ddzdmc)){
  1131 + result += "到达站点名称为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
  1132 + return result;
  1133 + }
  1134 + sBufferC.append("<ZDXH>").append(zdxh).append("</ZDXH>");
  1135 + sBufferC.append("<JHFCSJ>").append(changeTimeFormat(ttInfoDetail)).append("</JHFCSJ>");
  1136 + sBufferC.append("<DDZDMC>").append(ddzdmc).append("</DDZDMC>");
  1137 + // 终点站的参数
  1138 + otherMap.put("stationMark","E");
  1139 + paramMap = packageYgcStationNumParam(ttInfoDetail,otherMap);
  1140 + if(isLogStation){// 输出终点站信息
  1141 + logger.info("setSKB:"+"终点站信息:"+paramMap);
  1142 + }
  1143 + // 到达站点序号
  1144 + ddxh = String.valueOf(getYgcStationNumByLineCodeAndDirectionAndStationName(paramMap,lsStationName2YgcNumber));
  1145 + if("".equals(ddxh) || "null".equals(ddxh) || "0".equals(ddxh)){
  1146 + result += "到达站点序号为空,请根据时刻表当前的版本号设置好历史站点路由再上传";
  1147 + return result;
  1148 + }
  1149 + isLogStation = false; // 一条线路只输出一次,后面的不输出了
  1150 + sBufferC.append("<DDXH>").append(ddxh).append("</DDXH>");
  1151 + sBufferC.append("<JHDDSJ>").append(calcDdsj(ttInfoDetail.getFcsj(),ttInfoDetail.getBcsj())).append("</JHDDSJ>");
  1152 + sBufferC.append("</BC>");
  1153 + // 0:上行;1:下行
  1154 + if("0".equals(sxx)){
  1155 + singleLc = lineInformation.getUpMileage();
  1156 + }else{
  1157 + singleLc = lineInformation.getDownMileage();
  1158 + }
  1159 + zlc += singleLc ;
  1160 + yylc += singleLc;
  1161 + }
  1162 + sBufferC.append("</BCList>");
  1163 + sBufferC.append("</SKB>");
  1164 + sBufferA = new StringBuffer();
  1165 + sBufferA.append("<JHZLC>").append(df.format(zlc)).append("</JHZLC>");
  1166 + sBufferA.append("<JHYYLC>").append(df.format(yylc)).append("</JHYYLC>");
  1167 + sBuffer.append(sBufferA).append(sBufferB).append(sBufferC);
  1168 + }
  1169 + logger.info("setSKB:"+"ttinfoId:"+ttinfoId+";当前站点版本号:"+lineVersion+";查询历史站点路由:"+lsStationCode2NameMap+";查询历史站点编号:"+lsStationName2YgcNumber);
  1170 + }
  1171 + sBuffer.append("</SKBs>");
  1172 + if(ssop.setSKB(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  1173 + result = "上传成功";
  1174 + SKBUploadLogger skbUploadLogger ;
  1175 + SysUser user = SecurityUtils.getCurrentUser();
  1176 + // 保存时刻表上传记录
  1177 + for(TTInfo ttInfo1 : ttinfoList){
  1178 + skbUploadLogger = new SKBUploadLogger();
  1179 + skbUploadLogger.setTtInfo(ttInfo1);
  1180 + skbUploadLogger.setUser(user);
  1181 + skbUploadLoggerRepository.save(skbUploadLogger);
  1182 + }
  1183 + }
  1184 +
  1185 + // 发送到青浦运管处
  1186 + try {
  1187 + logger.info("xml:",sBuffer);
  1188 + com.bsth.webService.trafficManage.qp.Results res =
  1189 + qp_ssop.setSKB(userNameOther_qp,passwordOther_qp,sBuffer.toString());
  1190 + logger.info("青浦时刻表上传结果:"+ res.isSuccess());
  1191 + }catch (Exception e){
  1192 + e.printStackTrace();
  1193 + }
  1194 + } catch (Exception e) {
  1195 + logger.error("setSKB:", e);
  1196 + e.printStackTrace();
  1197 + }finally{
  1198 + logger.info("setSKB:"+sBuffer.toString());
  1199 + logger.info("setSKB:"+result);
  1200 + }
  1201 + return result;
  1202 + }
  1203 +
  1204 + /**
  1205 + * 上传线路人员车辆配置信息
  1206 + */
  1207 + @Override
  1208 + public String setXLPC() {
  1209 + String result = "failure";
  1210 + StringBuffer sBuffer =new StringBuffer();
  1211 + try {
  1212 + sBuffer.append("<XLPCs>");
  1213 + // 声明变量
  1214 + Line line = null;
  1215 + Cars cars = null;
  1216 + List<Personnel> personnelList = null;
  1217 + List<Cars> carsList = null;
  1218 + int totalPersonnel,totalCar ;// 人员数量。车辆数量
  1219 + // 查询所有线路
  1220 + Iterator<Line> lineIterator = lineRepository.findAll().iterator();
  1221 + // 循环查找线路下的信息
  1222 + while(lineIterator.hasNext()){
  1223 + line = lineIterator.next();
  1224 + sBuffer.append("<XLPC>");
  1225 + sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");
  1226 + // 查询驾驶员数量
  1227 + personnelList = personnelRepository.findJsysByLineId(line.getId());
  1228 + totalPersonnel = personnelList != null ? personnelList.size():0;
  1229 + sBuffer.append("<SJRS>").append(totalPersonnel).append("</SJRS>");
  1230 + // 查询售票员人员数量
  1231 + personnelList = personnelRepository.findSpysByLineId(line.getId());
  1232 + totalPersonnel = personnelList != null ? personnelList.size():0;
  1233 + sBuffer.append("<SPYRS>").append(totalPersonnel).append("</SPYRS>");
  1234 + // 查询车辆
  1235 + carsList = carsRepository.findCarsByLineId(line.getId());
  1236 + totalCar = carsList != null ? carsList.size():0;
  1237 + sBuffer.append("<PCSL>").append(totalCar).append("</PCSL>");
  1238 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  1239 + int carsNum = 0;
  1240 + // 取车牌号
  1241 + if(carsList != null){
  1242 + carsNum = carsList.size();
  1243 + sBuffer.append("<CPHList>");
  1244 + for (int i = 0; i < carsNum; i++) {
  1245 + cars = carsList.get(i);
  1246 + sBuffer.append("<CPH>").append("沪").append(cars.getCarCode()).append("</CPH>");
  1247 + }
  1248 + sBuffer.append("</CPHList>");
  1249 + }
  1250 + sBuffer.append("</XLPC>");
  1251 + }
  1252 + sBuffer.append("</XLPCs>");
  1253 + if(ssop.setXLPC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  1254 + result = "success";
  1255 + }
  1256 + } catch (Exception e) {
  1257 + logger.error("setXLPC:",e);
  1258 + e.printStackTrace();
  1259 + }finally{
  1260 + logger.info("setXLPC:"+sBuffer.toString());
  1261 + logger.info("setXLPC:"+result);
  1262 + }
  1263 + return result;
  1264 + }
  1265 +
  1266 +
  1267 + /**
  1268 + * 上传超速数据
  1269 + */
  1270 + @Override
  1271 + public String setCS() {
  1272 + String result = "failure";
  1273 + StringBuffer sBuffer =new StringBuffer();
  1274 + sBuffer.append("<CSs>");
  1275 + String sql = "SELECT * FROM bsth_c_speeding where DATE_FORMAT(create_date,'%Y-%m-%d') = ? order by create_date ";
  1276 + Connection conn = null;
  1277 + PreparedStatement ps = null;
  1278 + ResultSet rs = null;
  1279 + // 取昨天 的日期
  1280 + String yesterday = sdfnyr.format(DateUtils.addDays(new Date(), -1));
  1281 + try {
  1282 + conn = DBUtils_MS.getConnection();
  1283 + ps = conn.prepareStatement(sql);
  1284 + ps.setString(1, yesterday);
  1285 + rs = ps.executeQuery();
  1286 + Float lon, lat;
  1287 + String kssk;
  1288 + String speed;
  1289 + while (rs.next()) {
  1290 + kssk = sdfnyrsfm.format(rs.getLong("TIMESTAMP"));
  1291 + speed = rs.getString("SPEED");
  1292 + // 经纬度
  1293 + lon = rs.getFloat("LON");
  1294 + lat = rs.getFloat("LAT");
  1295 + sBuffer.append("<CS>");
  1296 + sBuffer.append("<RQ>").append(sdfnyr.format(rs.getDate("CREATE_DATE"))).append("</RQ>");
  1297 + sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(rs.getString("LINE"))).append("</XLBM>");////////
  1298 + sBuffer.append("<CPH>").append(rs.getString("VEHICLE")).append("</CPH>");
  1299 + sBuffer.append("<KSSK>").append(kssk).append("</KSSK>");
  1300 + sBuffer.append("<KSDDJD>").append(lon).append("</KSDDJD>");
  1301 + sBuffer.append("<KSDDWD>").append(lat).append("</KSDDWD>");
  1302 + sBuffer.append("<KSLD>").append("").append("</KSLD>");//**********************
  1303 + sBuffer.append("<JSSK>").append(kssk).append("</JSSK>");
  1304 + sBuffer.append("<JSDDJD>").append(lon).append("</JSDDJD>");
  1305 + sBuffer.append("<JSDDWD>").append(lat).append("</JSDDWD>");
  1306 + sBuffer.append("<JSLD>").append("").append("</JSLD>");//**********************
  1307 + sBuffer.append("<PJSD>").append(speed).append("</PJSD>");
  1308 + sBuffer.append("<ZGSS>").append(speed).append("</ZGSS>");
  1309 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  1310 + sBuffer.append("</CS>");
  1311 + }
  1312 + sBuffer.append("</CSs>");
  1313 + if(ssop.setCS(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  1314 + result = "success";
  1315 + }
  1316 + } catch (Exception e) {
  1317 + logger.error("setCS:",e);
  1318 + e.printStackTrace();
  1319 + } finally {
  1320 + logger.info("setCS:"+sBuffer.toString());
  1321 + logger.info("setCS:"+result);
  1322 + DBUtils_MS.close(rs, ps, conn);
  1323 + }
  1324 + return result;
  1325 + }
  1326 +
  1327 +
  1328 + /**
  1329 + * 下载全量的公交基础数据
  1330 + */
  1331 + public String getDownLoadAllDataFile() {
  1332 + String result = "failure";
  1333 + try {
  1334 + try {
  1335 + if(ygcBasicDataService.download("admin","000000","abc.zip")){
  1336 + result = "success";
  1337 + }
  1338 + } catch (Exception e) {
  1339 + e.printStackTrace();
  1340 + }
  1341 + } catch (Exception e) {
  1342 + e.printStackTrace();
  1343 + }
  1344 +
  1345 + return result;
  1346 + }
  1347 +
  1348 + /**
  1349 + * 下载增量的公交基础数据
  1350 + */
  1351 + public String getDownLoadIncreaseDataFile() {
  1352 + String result = "success";
  1353 + try {
  1354 + //System.out.println(portType.downloadIncreaseDataFile(args0, args1, args2));
  1355 + } catch (Exception e) {
  1356 + e.printStackTrace();
  1357 + }
  1358 +
  1359 + return result;
  1360 + }
  1361 +
  1362 + /**
  1363 + * 指定线路查询方式公交基础数据下载
  1364 + */
  1365 + public String getDownLoadWarrantsBusLineStation() {
  1366 + String result = "success";
  1367 + try {
  1368 +
  1369 + //portType.setXL(userNameXl, passwordXl, sBuffer.toString());
  1370 + } catch (Exception e) {
  1371 + e.printStackTrace();
  1372 + }
  1373 +
  1374 + return result;
  1375 + }
  1376 +
  1377 + /**
  1378 + * 计算结束时间
  1379 + * @param fcsj 发车时间
  1380 + * @param bcsj 班次历时
  1381 + * @return
  1382 + */
  1383 + private String calcDdsj(String fcsj,Integer bcsj){
  1384 + String result = "";
  1385 + if(fcsj.indexOf(":") != -1){
  1386 + if(bcsj == null){
  1387 + return fcsj;
  1388 + }
  1389 + // 时和分隔开
  1390 + String[] fcsjArray = fcsj.split(":");
  1391 + // 分和历时时间相加
  1392 + Integer fullTime = Integer.valueOf(fcsjArray[1])+ bcsj;
  1393 + int hour,min,sumHour;
  1394 + hour = fullTime / 60;
  1395 + min = fullTime % 60;
  1396 + sumHour = Integer.valueOf(fcsjArray[0])+hour;
  1397 + if(sumHour >= 24){
  1398 + result = String.format("%02d",sumHour - 24);
  1399 + }else{
  1400 + result = String.format("%02d",sumHour);;
  1401 + }
  1402 + result +=":"+String.format("%02d", min);
  1403 + }else{
  1404 + result = fcsj;
  1405 + }
  1406 + return result;
  1407 + }
  1408 +
  1409 + /**
  1410 + * 改变时间格式
  1411 + * @param ttInfoDetail 时刻表详细
  1412 + * @return xx:yy
  1413 + */
  1414 + private String changeTimeFormat(TTInfoDetail ttInfoDetail){
  1415 + String result = "00:00";
  1416 + String fcsj = ttInfoDetail.getFcsj();
  1417 + if(fcsj.indexOf(":") != -1){
  1418 + // 时和分隔开
  1419 + String[] fcsjArray = fcsj.split(":");
  1420 + result = String.format("%02d", Integer.valueOf(fcsjArray[0]))+":";
  1421 + result +=String.format("%02d", Integer.valueOf(fcsjArray[1]));
  1422 + }else{
  1423 + result = null;
  1424 + logger.info("setSKB:发车时间错误:ttInfoDetail.id="+ttInfoDetail.getId());
  1425 + }
  1426 + return result;
  1427 + }
  1428 +
  1429 + /**
  1430 + * 拼装线路计划班次表的XML
  1431 + * @param sBuffer
  1432 + * @param schedulePlanInfo
  1433 + * @param xlbm
  1434 + * @param zbh
  1435 + * @param lp
  1436 + */
  1437 + private void assembleJHBC(StringBuffer sBuffer,SchedulePlanInfo schedulePlanInfo,String xlbm,String zbh,Long lp){
  1438 + sBuffer.append("<JHBC>");
  1439 + sBuffer.append("<RQ>").append(sdfnyr.format(schedulePlanInfo.getScheduleDate())).append("</RQ>");
  1440 + sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(xlbm)).append("</XLBM>");
  1441 + sBuffer.append("<CPH>").append("沪"+zbh).append("</CPH>");
  1442 + sBuffer.append("<LPBH>").append(lp).append("</LPBH>");
  1443 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  1444 + sBuffer.append("<BCList>");
  1445 + }
  1446 + /**
  1447 + * 转换排班规则
  1448 + * @param ruleDay
  1449 + * @return
  1450 + */
  1451 + private String changeRuleDay(String ruleDay){
  1452 + String result = "";
  1453 + int flag ;
  1454 + String[] ruleDayArray = ruleDay.split(",");
  1455 + for (int i = 0; i < ruleDayArray.length; i++) {
  1456 + if(ruleDayArray[i].equals("1")){
  1457 + flag = i+1;
  1458 + }else{
  1459 + flag = 0;
  1460 + }
  1461 + if(flag > 0){
  1462 + result += flag + ",";
  1463 + }
  1464 + }
  1465 + // 去掉最后一个字符
  1466 + if(StringUtils.endsWith(result,",")){
  1467 + result = StringUtils.removeEnd(result,",");
  1468 + }
  1469 + return result;
  1470 + }
  1471 + /**
  1472 + * 设置统一的公司名称
  1473 + * @param company
  1474 + */
  1475 + private void setCompanyName(String company){
  1476 + if(company.equals("闵行公司")){
  1477 + company = "浦东闵行公交公司";
  1478 + }else if(company.equals("杨高公司")){
  1479 + company = "浦东杨高公交公司";
  1480 + }else if(company.equals("上南公司")){
  1481 + company = "浦东上南公交公司";
  1482 + }else if(company.equals("金高公司")){
  1483 + company = "浦东金高公交公司";
  1484 + }else if(company.equals("南汇公司")){
  1485 + company = "浦东南汇公交公司";
  1486 + }else if(company.equals("青浦公交")){
  1487 + company = "浦东青浦公交公司";
  1488 + }
  1489 + }
  1490 + /**
  1491 + * @param stationsList 站点路由集
  1492 + * @param sBuffer sBuffer
  1493 + * @param startId 站点序号起始ID
  1494 + *
  1495 + * @return 站点序号累加后的ID
  1496 + */
  1497 + private int packagStationXml(List<StationRoute> stationsList,StringBuffer sBuffer,int startId,Map<String, Integer> stationNumMap){
  1498 + int size = stationsList.size();
  1499 + StationRoute srRoute;
  1500 + HashMap<String,String> paraMap;
  1501 + String zdlx ;// 站点类型:0:起点站、1:终点站、2:中途站
  1502 + for (int i = 0; i < size; i++) {
  1503 + srRoute = stationsList.get(i);
  1504 + zdlx = srRoute.getStationMark();
  1505 + if(zdlx.equals("B")){
  1506 + zdlx = "0";
  1507 + }else if(zdlx.equals("E")){
  1508 + zdlx = "1";
  1509 + }else{
  1510 + zdlx = "2";
  1511 + }
  1512 + paraMap = packageYgcStationNumParam(srRoute,null);
  1513 + sBuffer.append("<Station>");
  1514 + sBuffer.append("<ZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(paraMap,stationNumMap)).append("</ZDXH>");
  1515 + sBuffer.append("<SXX>").append(srRoute.getDirections()).append("</SXX>");
  1516 + sBuffer.append("<ZDMC>").append(srRoute.getStationName()).append("</ZDMC>");
  1517 + sBuffer.append("<ZDBM>").append(srRoute.getStationCode()).append("</ZDBM>");
  1518 + sBuffer.append("<ZDJD>").append(srRoute.getStation().getgLonx()).append("</ZDJD>");
  1519 + sBuffer.append("<ZDWD>").append(srRoute.getStation().getgLaty()).append("</ZDWD>");
  1520 + sBuffer.append("<ZZ>").append(srRoute.getStation().getAddr() == null ? "" : srRoute.getStation().getAddr()).append("</ZZ>");
  1521 + sBuffer.append("<ZDLX>").append(zdlx).append("</ZDLX>");
  1522 + sBuffer.append("<ZJLC>").append(srRoute.getDistances()).append("</ZJLC>");
  1523 + sBuffer.append("</Station>");
  1524 + startId++;
  1525 + }
  1526 + return startId;
  1527 + }
  1528 +
  1529 + /**
  1530 + * @param pointList 站点点位集
  1531 + * @param sBuffer sBuffer
  1532 + * @param startId 站点序号起始ID
  1533 + *
  1534 + * @return 站点序号累加后的ID
  1535 + */
  1536 + private int packagStationPointXml(List<Object[]> pointList,StringBuffer sBuffer,int startId){
  1537 + int size = pointList.size();
  1538 + Object[] objs;
  1539 + String bsection,dir,section;
  1540 + String[] sections ;
  1541 + for (int i = 0; i < size; i++) {
  1542 + objs = pointList.get(i);
  1543 + bsection = objs[0]+"";
  1544 + dir = objs[1]+"";
  1545 + // 取括号内的内容
  1546 + Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");
  1547 + Matcher matcher = pattern.matcher(bsection);
  1548 + if(matcher.find()){
  1549 + sections = matcher.group().split(",");
  1550 + for (int j = 0 ; j < sections.length ; j ++){
  1551 + section = sections[j];
  1552 + sBuffer.append("<LinePoint>");
  1553 + sBuffer.append("<ZDXH>").append(startId).append("</ZDXH>");
  1554 + sBuffer.append("<SXX>").append(dir).append("</SXX>");
  1555 + sBuffer.append("<ZDJD>").append(section.split(" ")[0]).append("</ZDJD>");
  1556 + sBuffer.append("<ZDWD>").append(section.split(" ")[1]).append("</ZDWD>");
  1557 + sBuffer.append("</LinePoint>");
  1558 + startId++;
  1559 + }
  1560 + }
  1561 + }
  1562 + return startId;
  1563 + }
  1564 +
  1565 + /**
  1566 + * 获取运管处站点序号
  1567 + * @param map
  1568 + * @return 运管处站点序号
  1569 + */
  1570 + private Integer getYgcStationNumByLineCodeAndDirectionAndStationName(HashMap<String,String> map,Map<String, Integer> stationNumMap){
  1571 + // 线路编码
  1572 + String lineCode = map.get("lineCode");
  1573 + // 线路走向 0:上行 1:下行
  1574 + String direction = map.get("direction");
  1575 + // 站点编码
  1576 + String stationCode = map.get("stationCode");
  1577 + // 站点类型:B:起点站 Z:中途站 E:终点站 T:停车场
  1578 + String stationMark = map.get("stationMark");
  1579 + String[] marks = null;
  1580 + // 起点站,先从起点找,找不到再从中途站找,最后从终点找
  1581 + if(stationMark.equals("B")){
  1582 + marks= new String[]{"B","Z","E"};
  1583 + }else if(stationMark.equals("E")){// 终点站相反
  1584 + marks= new String[]{"E","Z","B"};
  1585 + }else if(stationMark.equals("Z")){
  1586 + marks= new String[]{"Z"};
  1587 + }
  1588 + // 默认从缓存BasicData.stationName2YgcNumber
  1589 + Map<String, Integer> tempMap = BasicData.stationName2YgcNumber;
  1590 + // 如果传入的stationNumMap不为空,则不是缓存取,而从stationNumMap取
  1591 + if(stationNumMap != null){
  1592 + tempMap = stationNumMap;
  1593 + }
  1594 + Integer number = null;
  1595 + for (int i = 0 ;i < marks.length ; i ++){
  1596 + number = tempMap.get(lineCode+"_"+direction+"_"+stationCode+"_"+marks[i]);
  1597 + if(number != null){
  1598 + break;
  1599 + }
  1600 + }
  1601 + return number == null ? 0 : number;
  1602 + }
  1603 +
  1604 + /**
  1605 + * 封装查询站序条件
  1606 + * @param obj
  1607 + * @return
  1608 + */
  1609 + private HashMap packageYgcStationNumParam(Object obj,HashMap<String,String> otherParam){
  1610 + HashMap<String,String> map = new HashMap<String,String>();
  1611 + String lineCode = "",direction = "",stationCode = "",stationMark = "";
  1612 + // 站点路由
  1613 + if(obj instanceof StationRoute){
  1614 + StationRoute sr = (StationRoute)obj;
  1615 + lineCode = sr.getLineCode();
  1616 + direction = String.valueOf(sr.getDirections());
  1617 + stationCode = sr.getStationCode();
  1618 + stationMark = sr.getStationMark();
  1619 + }else if(obj instanceof ScheduleRealInfo){ //实际排班计划明细。
  1620 + ScheduleRealInfo sri = (ScheduleRealInfo)obj;
  1621 + lineCode = sri.getXlBm();
  1622 + direction = sri.getXlDir();
  1623 + if(otherParam != null && otherParam.get("stationMark") != null){
  1624 + stationMark = otherParam.get("stationMark");
  1625 + if(stationMark.equals("B")){ // 起点站
  1626 + stationCode = sri.getQdzCode();
  1627 + }else if(stationMark.equals("E")){ // 终点站
  1628 + stationCode = sri.getZdzCode();
  1629 + }
  1630 + }
  1631 + }else if(obj instanceof SchedulePlanInfo){ //排班计划明细
  1632 + SchedulePlanInfo spi = (SchedulePlanInfo)obj;
  1633 + lineCode = spi.getXlBm();
  1634 + direction = spi.getXlDir();
  1635 + if(otherParam != null && otherParam.get("stationMark") != null){
  1636 + stationMark = otherParam.get("stationMark");
  1637 + if(stationMark.equals("B")){ // 起点站
  1638 + stationCode = spi.getQdzCode();
  1639 + }else if(stationMark.equals("E")){ // 终点站
  1640 + stationCode = spi.getZdzCode();
  1641 + }
  1642 + }
  1643 + }else if(obj instanceof TTInfoDetail){ //时刻表明细
  1644 + TTInfoDetail ttid = (TTInfoDetail)obj;
  1645 + lineCode = ttid.getXl().getLineCode();
  1646 + direction = ttid.getXlDir();
  1647 + if(otherParam != null && otherParam.get("stationMark") != null){
  1648 + stationMark = otherParam.get("stationMark");
  1649 + if(stationMark.equals("B")){ // 起点站
  1650 + stationCode = ttid.getQdzCode();
  1651 + }else if(stationMark.equals("E")){ // 终点站
  1652 + stationCode = ttid.getZdzCode();
  1653 + }
  1654 + }
  1655 + }
  1656 + map.put("lineCode",lineCode);// 站点编码
  1657 + map.put("direction",direction); // 上下行
  1658 + map.put("stationCode",stationCode); // 站点编号
  1659 + map.put("stationMark",stationMark); // 站点类型
  1660 + return map;
  1661 + }
  1662 +
  1663 + /**
  1664 + * 取得历史站点编码和站点名称的对应关系
  1665 + * @return
  1666 + */
  1667 + private Map<String, String> getLsStationCode(String lineCode,int lineVersion){
  1668 + Map<String,Object> map = new HashMap<>();
  1669 + map.put("lineCode_eq", lineCode);
  1670 + map.put("versions_eq",lineVersion);
  1671 + LsStationRoute lsroute;
  1672 + Iterator<LsStationRoute> iterator = lsStationRouteRepository.findAll(new CustomerSpecs<LsStationRoute>(map)).iterator();
  1673 + Map<String, String> stationCode2Name = new HashMap<>();
  1674 + while (iterator.hasNext()) {
  1675 + lsroute = iterator.next();
  1676 + stationCode2Name.put(lsroute.getLineCode() + "_" + lsroute.getDirections() + "_" + lsroute.getStationCode(), lsroute.getStationName());
  1677 + }
  1678 + return stationCode2Name;
  1679 + }
  1680 +
  1681 + private Map<String, Integer> getLsStationRoute(String xlbm,int lineVersion){
  1682 + Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();
  1683 + /**
  1684 + * 加载运管处的站点及序号
  1685 + * 上行从1开始,下行顺序续编
  1686 + */
  1687 + List<Map<String, String>> ygcLines = lsStationRouteRepository.findLineWithLineCode4Ygc(xlbm,lineVersion);
  1688 + if(ygcLines != null && ygcLines.size() > 0){
  1689 + int size = ygcLines.size();
  1690 + Map<String, String> tempMap ;
  1691 + int num = 1;
  1692 + String key;
  1693 + String lineCode = "";
  1694 + for (int i = 0; i < size; i ++){
  1695 + tempMap = ygcLines.get(i);
  1696 + if(lineCode.equals("")){
  1697 + lineCode = tempMap.get("lineCode");
  1698 + }else if(!lineCode.equals(tempMap.get("lineCode"))){
  1699 + num = 1;
  1700 + lineCode = tempMap.get("lineCode");
  1701 + }
  1702 + key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
  1703 + + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
  1704 + tempStationName2YgcNumber.put(key,num++);
  1705 + }
  1706 + }
  1707 + return tempStationName2YgcNumber;
  1708 + }
  1709 +}
... ...