Commit 7e22204c95439d290252cdc7d7bdb2ca6707bd87

Authored by 王通
1 parent 2ad75091

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

src/main/java/com/bsth/common/SystemParamKeys.java
... ... @@ -52,4 +52,20 @@ public class SystemParamKeys {
52 52 public static final String URL_HTTP_DVR = "url.http.dvr";
53 53  
54 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 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 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 148 @Override
117 149 public void afterPropertiesSet() throws Exception {
118 150 systemParamService1 = systemParamService;
119 151 systemParamService1.refresh();
120 152 }
121 153 -}
  154 +}
122 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 162 \ No newline at end of file
... ...