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 +}