Commit 7e22204c95439d290252cdc7d7bdb2ca6707bd87

Authored by 王通
1 parent 2ad75091

1.加入灾备平台信创链路

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