Commit 4e610d94c06733c653a47f02ac14270bf69eb3ef

Authored by 潘钊
1 parent cbfe66b5

update....

Showing 30 changed files with 1214 additions and 478 deletions
src/main/java/com/bsth/controller/realcontrol/RealChartsController.java
@@ -3,6 +3,7 @@ package com.bsth.controller.realcontrol; @@ -3,6 +3,7 @@ package com.bsth.controller.realcontrol;
3 import com.bsth.service.realcontrol.RealChartsService; 3 import com.bsth.service.realcontrol.RealChartsService;
4 import com.bsth.service.realcontrol.dto.CarOutRate; 4 import com.bsth.service.realcontrol.dto.CarOutRate;
5 import com.bsth.service.realcontrol.dto.DeviceOnlineRate; 5 import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
  6 +import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestMapping;
8 import org.springframework.web.bind.annotation.RequestParam; 9 import org.springframework.web.bind.annotation.RequestParam;
@@ -30,4 +31,9 @@ public class RealChartsController { @@ -30,4 +31,9 @@ public class RealChartsController {
30 public List<CarOutRate> carOutRate(@RequestParam String idx, @RequestParam String month){ 31 public List<CarOutRate> carOutRate(@RequestParam String idx, @RequestParam String month){
31 return realChartsService.carOutRate(month, idx); 32 return realChartsService.carOutRate(month, idx);
32 } 33 }
  34 +
  35 + @RequestMapping("stratEndPunctualityRate")
  36 + public List<StratEndPunctualityRate> stratEndPunctualityRate(@RequestParam String idx, @RequestParam String month){
  37 + return realChartsService.stratEndPunctualityRate(month, idx);
  38 + }
33 } 39 }
src/main/java/com/bsth/controller/sys/util/RSAUtils.java
@@ -10,10 +10,14 @@ import java.security.interfaces.RSAPublicKey; @@ -10,10 +10,14 @@ import java.security.interfaces.RSAPublicKey;
10 import javax.crypto.Cipher; 10 import javax.crypto.Cipher;
11 11
12 import org.apache.commons.net.util.Base64; 12 import org.apache.commons.net.util.Base64;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
13 15
14 public class RSAUtils { 16 public class RSAUtils {
15 private static final KeyPair keyPair = initKey(); 17 private static final KeyPair keyPair = initKey();
16 - 18 +
  19 + static Logger logger = LoggerFactory.getLogger(RSAUtils.class);
  20 +
17 private static KeyPair initKey(){ 21 private static KeyPair initKey(){
18 try { 22 try {
19 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 23 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
@@ -41,6 +45,7 @@ public class RSAUtils { @@ -41,6 +45,7 @@ public class RSAUtils {
41 * @return 45 * @return
42 */ 46 */
43 public static String decryptBase64(String string) { 47 public static String decryptBase64(String string) {
  48 + logger.info("decryptBase64 -[" + string + "]");
44 return new String(decrypt(Base64.decodeBase64(string))); 49 return new String(decrypt(Base64.decodeBase64(string)));
45 } 50 }
46 51
src/main/java/com/bsth/data/arrival/ArrivalData_GPS.java
@@ -50,7 +50,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ @@ -50,7 +50,7 @@ public class ArrivalData_GPS implements CommandLineRunner{
50 50
51 @Override 51 @Override
52 public void run(String... arg0) throws Exception { 52 public void run(String... arg0) throws Exception {
53 - logger.info("ArrivalData_GPS,100,10"); 53 + logger.info("ArrivalData_GPS,100,10 @11-10");
54 //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 100, 10, TimeUnit.SECONDS); 54 //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 100, 10, TimeUnit.SECONDS);
55 } 55 }
56 56
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
@@ -61,7 +61,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -61,7 +61,7 @@ public class ForecastRealServer implements CommandLineRunner {
61 @Override 61 @Override
62 public void run(String... arg0) throws Exception { 62 public void run(String... arg0) throws Exception {
63 //2小时更新一次站点间耗时数据 63 //2小时更新一次站点间耗时数据
64 - //Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS); 64 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
65 } 65 }
66 66
67 /** 67 /**
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
1 package com.bsth.data.schedule; 1 package com.bsth.data.schedule;
2 2
  3 +import java.text.ParseException;
3 import java.text.SimpleDateFormat; 4 import java.text.SimpleDateFormat;
4 import java.util.ArrayList; 5 import java.util.ArrayList;
5 import java.util.Collection; 6 import java.util.Collection;
@@ -14,6 +15,7 @@ import java.util.Set; @@ -14,6 +15,7 @@ import java.util.Set;
14 import java.util.concurrent.TimeUnit; 15 import java.util.concurrent.TimeUnit;
15 16
16 import com.bsth.data.schedule.thread.SubmitToTrafficManage; 17 import com.bsth.data.schedule.thread.SubmitToTrafficManage;
  18 +import org.apache.commons.lang3.StringUtils;
17 import org.joda.time.DateTime; 19 import org.joda.time.DateTime;
18 import org.joda.time.format.DateTimeFormat; 20 import org.joda.time.format.DateTimeFormat;
19 import org.joda.time.format.DateTimeFormatter; 21 import org.joda.time.format.DateTimeFormatter;
@@ -128,9 +130,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -128,9 +130,9 @@ public class DayOfSchedule implements CommandLineRunner {
128 //翻班线程 130 //翻班线程
129 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 131 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
130 //入库 132 //入库
131 - Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); 133 + //Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
132 //首班出场指令补发器 134 //首班出场指令补发器
133 - Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS); 135 + //Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
134 //班次误点扫描 136 //班次误点扫描
135 //Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 137 //Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
136 138
@@ -140,7 +142,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -140,7 +142,7 @@ public class DayOfSchedule implements CommandLineRunner {
140 diff+=(1000*60*60*24); 142 diff+=(1000*60*60*24);
141 143
142 logger.info(diff/1000/60 + "分钟之后提交到运管处"); 144 logger.info(diff/1000/60 + "分钟之后提交到运管处");
143 - Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); 145 + //Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
144 } 146 }
145 147
146 public Map<String, String> getCurrSchDate() { 148 public Map<String, String> getCurrSchDate() {
@@ -320,9 +322,28 @@ public class DayOfSchedule implements CommandLineRunner { @@ -320,9 +322,28 @@ public class DayOfSchedule implements CommandLineRunner {
320 // 转换为实际排班 322 // 转换为实际排班
321 realList = JSONArray.parseArray(JSON.toJSONString(planItr), ScheduleRealInfo.class); 323 realList = JSONArray.parseArray(JSON.toJSONString(planItr), ScheduleRealInfo.class);
322 324
  325 + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
  326 + String fcsj;
323 for (ScheduleRealInfo sch : realList) { 327 for (ScheduleRealInfo sch : realList) {
324 sch.setScheduleDateStr(fmtyyyyMMdd.print(sch.getScheduleDate().getTime())); 328 sch.setScheduleDateStr(fmtyyyyMMdd.print(sch.getScheduleDate().getTime()));
325 sch.setRealExecDate(sch.getScheduleDateStr()); 329 sch.setRealExecDate(sch.getScheduleDateStr());
  330 +
  331 + if(StringUtils.isEmpty(sch.getFcsj()))
  332 + sch.setFcsj("00:00");
  333 +
  334 + fcsj=sch.getFcsj().trim();
  335 + //处理一下发车时间格式没有:号的问题
  336 + if(fcsj.indexOf(":") == -1 && fcsj.length() >= 4){
  337 + sch.setFcsj(fcsj.substring(0, 2) + ":" + fcsj.substring(2, 4));
  338 + }
  339 +
  340 + try {
  341 + sdf.parse(sch.getFcsj());
  342 + } catch (ParseException e) {
  343 + //发车时间仍然校验不过的,直接写成00:00
  344 + sch.setFcsj("00:00");
  345 + }
  346 +
326 // 计划终点时间 347 // 计划终点时间
327 if (sch.getBcsj() != null) { 348 if (sch.getBcsj() != null) {
328 sch.setZdsj(fmtHHmm.print(fmtHHmm.parseMillis(sch.getFcsj()) + (sch.getBcsj() * 60 * 1000))); 349 sch.setZdsj(fmtHHmm.print(fmtHHmm.parseMillis(sch.getFcsj()) + (sch.getBcsj() * 60 * 1000)));
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
1 package com.bsth.service.impl; 1 package com.bsth.service.impl;
2 2
  3 +import java.io.BufferedOutputStream;
  4 +import java.io.File;
  5 +import java.io.FileOutputStream;
  6 +import java.io.IOException;
3 import java.sql.Connection; 7 import java.sql.Connection;
4 import java.sql.PreparedStatement; 8 import java.sql.PreparedStatement;
5 import java.sql.ResultSet; 9 import java.sql.ResultSet;
6 import java.text.DecimalFormat; 10 import java.text.DecimalFormat;
7 import java.text.SimpleDateFormat; 11 import java.text.SimpleDateFormat;
8 -import java.util.ArrayList;  
9 -import java.util.Calendar;  
10 import java.util.Date; 12 import java.util.Date;
11 import java.util.HashMap; 13 import java.util.HashMap;
12 import java.util.Iterator; 14 import java.util.Iterator;
@@ -20,7 +22,6 @@ import org.slf4j.LoggerFactory; @@ -20,7 +22,6 @@ import org.slf4j.LoggerFactory;
20 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.data.domain.Sort; 23 import org.springframework.data.domain.Sort;
22 import org.springframework.data.domain.Sort.Direction; 24 import org.springframework.data.domain.Sort.Direction;
23 -import org.springframework.jdbc.core.JdbcTemplate;  
24 import org.springframework.stereotype.Service; 25 import org.springframework.stereotype.Service;
25 26
26 import com.bsth.data.BasicData; 27 import com.bsth.data.BasicData;
@@ -54,70 +55,70 @@ import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator; @@ -54,70 +55,70 @@ import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator;
54 import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap; 55 import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap;
55 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 56 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
56 /** 57 /**
57 - *  
58 - * @ClassName: LineServiceImpl(线路service业务层实现类)  
59 - * 58 + *
  59 + * @ClassName: TrafficManageServiceImpl(运管处接口service业务层实现类)
  60 + *
60 * @Extends : BaseService 61 * @Extends : BaseService
61 - *  
62 - * @Description: TODO(线路service业务层)  
63 - *  
64 - * @Author bsth@lq  
65 - *  
66 - * @Date 2016年4月28日 上午9:21:17 62 + *
  63 + * @Description: TODO(运管处接口service业务层)
  64 + *
  65 + * @Author bsth@z
  66 + *
  67 + * @Date 2016年10月28日 上午9:21:17
67 * 68 *
68 * @Version 公交调度系统BS版 0.1 69 * @Version 公交调度系统BS版 0.1
69 - * 70 + *
70 */ 71 */
71 72
72 @Service 73 @Service
73 public class TrafficManageServiceImpl implements TrafficManageService{ 74 public class TrafficManageServiceImpl implements TrafficManageService{
74 - 75 +
75 Logger logger = LoggerFactory.getLogger(this.getClass()); 76 Logger logger = LoggerFactory.getLogger(this.getClass());
76 - 77 +
77 // 线路repository 78 // 线路repository
78 @Autowired 79 @Autowired
79 private LineRepository lineRepository; 80 private LineRepository lineRepository;
80 - 81 +
81 // 站点路由repository 82 // 站点路由repository
82 @Autowired 83 @Autowired
83 private StationRouteRepository stationRouteRepository; 84 private StationRouteRepository stationRouteRepository;
84 - 85 +
85 // 线路标准信息repository 86 // 线路标准信息repository
86 @Autowired 87 @Autowired
87 private LineInformationRepository lineInformationRepository; 88 private LineInformationRepository lineInformationRepository;
88 - 89 +
89 // 车辆repository 90 // 车辆repository
90 @Autowired 91 @Autowired
91 private CarsRepository carsRepository; 92 private CarsRepository carsRepository;
92 - 93 +
93 // 人员repository 94 // 人员repository
94 @Autowired 95 @Autowired
95 private PersonnelRepository personnelRepository; 96 private PersonnelRepository personnelRepository;
96 - 97 +
97 // 时刻模板repository 98 // 时刻模板repository
98 @Autowired 99 @Autowired
99 private TTInfoRepository ttInfoRepository; 100 private TTInfoRepository ttInfoRepository;
100 - 101 +
101 // 时刻模板明细repository 102 // 时刻模板明细repository
102 @Autowired 103 @Autowired
103 private TTInfoDetailRepository ttInfoDetailRepository; 104 private TTInfoDetailRepository ttInfoDetailRepository;
104 - 105 +
105 // 车辆配置信息repository 106 // 车辆配置信息repository
106 @Autowired 107 @Autowired
107 private CarConfigInfoRepository carConfigInfoRepository; 108 private CarConfigInfoRepository carConfigInfoRepository;
108 - 109 +
109 // 人员配置信息repository 110 // 人员配置信息repository
110 @Autowired 111 @Autowired
111 private EmployeeConfigInfoRepository employeeConfigInfoRepository; 112 private EmployeeConfigInfoRepository employeeConfigInfoRepository;
112 - 113 +
113 // 排班计划明细repository 114 // 排班计划明细repository
114 @Autowired 115 @Autowired
115 private SchedulePlanInfoRepository schedulePlanInfoRepository; 116 private SchedulePlanInfoRepository schedulePlanInfoRepository;
116 - 117 +
117 // 实际排班计划明细repository 118 // 实际排班计划明细repository
118 @Autowired 119 @Autowired
119 private ScheduleRealInfoRepository scheduleRealInfoRepository; 120 private ScheduleRealInfoRepository scheduleRealInfoRepository;
120 - 121 +
121 // 运管处接口 122 // 运管处接口
122 private InternalPortType portType = new Internal().getInternalHttpSoap11Endpoint(); 123 private InternalPortType portType = new Internal().getInternalHttpSoap11Endpoint();
123 private WebServiceSoap ssop ; 124 private WebServiceSoap ssop ;
@@ -130,18 +131,18 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -130,18 +131,18 @@ public class TrafficManageServiceImpl implements TrafficManageService{
130 } 131 }
131 // 格式化 年月日时分秒 nyrsfm是年月日时分秒的拼音首字母 132 // 格式化 年月日时分秒 nyrsfm是年月日时分秒的拼音首字母
132 private SimpleDateFormat sdfnyrsfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 133 private SimpleDateFormat sdfnyrsfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
133 - 134 +
134 // 格式化 年月日 135 // 格式化 年月日
135 private SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd"); 136 private SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
136 - 137 +
137 // 数字格式化 138 // 数字格式化
138 DecimalFormat format = new DecimalFormat("0.00"); 139 DecimalFormat format = new DecimalFormat("0.00");
139 - 140 +
140 // 用户名 141 // 用户名
141 private final String userNameXl = "pudong"; 142 private final String userNameXl = "pudong";
142 // 密码 143 // 密码
143 private final String passwordXl = "pudong123"; 144 private final String passwordXl = "pudong123";
144 - 145 +
145 // 用户名 146 // 用户名
146 private final String userNameOther = "user"; 147 private final String userNameOther = "user";
147 // 密码 148 // 密码
@@ -151,7 +152,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -151,7 +152,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{
151 */ 152 */
152 @Override 153 @Override
153 public String setXL() { 154 public String setXL() {
154 - String result = "success"; 155 + String result = "failure";
155 try { 156 try {
156 StringBuffer sBuffer = new StringBuffer(); ; 157 StringBuffer sBuffer = new StringBuffer(); ;
157 Iterator<Line> lineIterator = lineRepository.findAll().iterator(); 158 Iterator<Line> lineIterator = lineRepository.findAll().iterator();
@@ -162,6 +163,9 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -162,6 +163,9 @@ public class TrafficManageServiceImpl implements TrafficManageService{
162 sBuffer.append("<XLs>"); 163 sBuffer.append("<XLs>");
163 while(lineIterator.hasNext()){ 164 while(lineIterator.hasNext()){
164 line = lineIterator.next(); 165 line = lineIterator.next();
  166 + if(line.getLinePlayType() == null){
  167 + continue;
  168 + }
165 if(BasicData.lineId2ShangHaiCodeMap.get(line.getId()) == null){ 169 if(BasicData.lineId2ShangHaiCodeMap.get(line.getId()) == null){
166 continue; 170 continue;
167 } 171 }
@@ -199,23 +203,37 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -199,23 +203,37 @@ public class TrafficManageServiceImpl implements TrafficManageService{
199 sBuffer.append("</XL>"); 203 sBuffer.append("</XL>");
200 } 204 }
201 sBuffer.append("</XLs>"); 205 sBuffer.append("</XLs>");
  206 + System.out.println(sBuffer.toString());
202 if(sBuffer.indexOf("<XL>") != -1){ 207 if(sBuffer.indexOf("<XL>") != -1){
203 logger.info("setXL:"+sBuffer.toString()); 208 logger.info("setXL:"+sBuffer.toString());
204 - portType.setXL(userNameXl, passwordXl, sBuffer.toString()); 209 + String portResult = portType.setXL(userNameXl, passwordXl, sBuffer.toString());
  210 + String portArray[] = portResult.split("\n");
  211 + if(portArray.length >= 4){
  212 + // 返回数据的编码
  213 + String returnCode = portArray[1].substring(portArray[1].indexOf(">")+1,portArray[1].indexOf("</"));
  214 + // 返回的信息
  215 + String returnDescription = portArray[2].substring(portArray[2].indexOf(">")+1,portArray[2].indexOf("</"));
  216 + if(returnCode.equals("1")){
  217 + result = "success";
  218 + }else{
  219 + result = returnDescription;
  220 + }
  221 + }
205 } 222 }
206 } catch (Exception e) { 223 } catch (Exception e) {
207 e.printStackTrace(); 224 e.printStackTrace();
  225 + }finally{
  226 + logger.info("setXL:"+result);
208 } 227 }
209 -  
210 return result; 228 return result;
211 } 229 }
212 - 230 +
213 /** 231 /**
214 * 上传车辆信息 232 * 上传车辆信息
215 */ 233 */
216 @Override 234 @Override
217 public String setCL() { 235 public String setCL() {
218 - String result = "success"; 236 + String result = "failure";
219 try { 237 try {
220 StringBuffer sBuffer =new StringBuffer(); 238 StringBuffer sBuffer =new StringBuffer();
221 sBuffer.append("<CLs>"); 239 sBuffer.append("<CLs>");
@@ -238,19 +256,23 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -238,19 +256,23 @@ public class TrafficManageServiceImpl implements TrafficManageService{
238 } 256 }
239 sBuffer.append("</CLs>"); 257 sBuffer.append("</CLs>");
240 logger.info("setCL:"+sBuffer.toString()); 258 logger.info("setCL:"+sBuffer.toString());
241 - ssop.setCL(userNameOther, passwordOther, sBuffer.toString()); 259 + if(ssop.setCL(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  260 + result = "success";
  261 + }
242 } catch (Exception e) { 262 } catch (Exception e) {
243 e.printStackTrace(); 263 e.printStackTrace();
  264 + }finally{
  265 + logger.info("setCL:"+result);
244 } 266 }
245 return result; 267 return result;
246 } 268 }
247 - 269 +
248 /** 270 /**
249 * 上传司机信息 271 * 上传司机信息
250 */ 272 */
251 @Override 273 @Override
252 public String setSJ() { 274 public String setSJ() {
253 - String result = "success"; 275 + String result = "failure";
254 try { 276 try {
255 StringBuffer sBuffer =new StringBuffer(); 277 StringBuffer sBuffer =new StringBuffer();
256 sBuffer.append("<SJs>"); 278 sBuffer.append("<SJs>");
@@ -271,191 +293,274 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -271,191 +293,274 @@ public class TrafficManageServiceImpl implements TrafficManageService{
271 } 293 }
272 sBuffer.append("</SJs>"); 294 sBuffer.append("</SJs>");
273 logger.info("setSJ:"+sBuffer.toString()); 295 logger.info("setSJ:"+sBuffer.toString());
274 - ssop.setSJ(userNameOther, passwordOther, sBuffer.toString()); 296 + if(ssop.setSJ(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  297 + result = "success";
  298 + };
275 } catch (Exception e) { 299 } catch (Exception e) {
276 e.printStackTrace(); 300 e.printStackTrace();
  301 + }finally{
  302 + logger.info("setSJ:"+result);
277 } 303 }
278 return result; 304 return result;
279 } 305 }
280 - 306 +
281 /** 307 /**
282 - * 上传超速数据 308 + * 上传路单
  309 + * @param date
  310 + * @return xml格式的字符串
283 */ 311 */
284 - @Override  
285 - public String setCS() {  
286 - String result = "success";  
287 - StringBuffer sBuffer =new StringBuffer();  
288 - sBuffer.append("<CSs>");  
289 - String sql = "SELECT * FROM bsth_c_speeding where DATE_FORMAT(create_date,'%Y-%m-%d') = ? order by create_date ";  
290 - Connection conn = null;  
291 - PreparedStatement ps = null;  
292 - ResultSet rs = null; 312 + public String setLD(){
  313 + String result = "failure";
293 // 取昨天 的日期 314 // 取昨天 的日期
294 - String yesterday = sdfnyr.format(DateUtils.addDays(new Date(), -1)); 315 + String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
295 try { 316 try {
296 - conn = DBUtils_MS.getConnection();  
297 - ps = conn.prepareStatement(sql);  
298 - ps.setString(1, yesterday);  
299 - rs = ps.executeQuery();  
300 - Float lon, lat;  
301 - String kssk;  
302 - String speed;  
303 - while (rs.next()) {  
304 - kssk = sdfnyrsfm.format(rs.getLong("TIMESTAMP"));  
305 - speed = rs.getString("SPEED");  
306 - // 经纬度  
307 - lon = rs.getFloat("LON");  
308 - lat = rs.getFloat("LAT");  
309 - sBuffer.append("<CS>");  
310 - sBuffer.append("<RQ>").append(sdfnyr.format(rs.getDate("CREATE_DATE"))).append("</RQ>");  
311 - sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(rs.getString("LINE"))).append("</XLBM>");////////  
312 - sBuffer.append("<CPH>").append(rs.getString("VEHICLE")).append("</CPH>");  
313 - sBuffer.append("<KSSK>").append(kssk).append("</KSSK>");  
314 - sBuffer.append("<KSDDJD>").append(lon).append("</KSDDJD>");  
315 - sBuffer.append("<KSDDWD>").append(lat).append("</KSDDWD>");  
316 - sBuffer.append("<KSLD>").append("").append("</KSLD>");//**********************  
317 - sBuffer.append("<JSSK>").append(kssk).append("</JSSK>");  
318 - sBuffer.append("<JSDDJD>").append(lon).append("</JSDDJD>");  
319 - sBuffer.append("<JSDDWD>").append(lat).append("</JSDDWD>");  
320 - sBuffer.append("<JSLD>").append("").append("</JSLD>");//**********************  
321 - sBuffer.append("<PJSD>").append(speed).append("</PJSD>");  
322 - sBuffer.append("<ZGSS>").append(speed).append("</ZGSS>");  
323 - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");  
324 - sBuffer.append("</CS>"); 317 + StringBuffer sf = new StringBuffer();
  318 + sf.append("<DLDS>");
  319 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
  320 + List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setLDGroup(date);
  321 + Map<String,Object> map = new HashMap<String,Object>();
  322 + for(ScheduleRealInfo schRealInfo:listGroup){
  323 + if(schRealInfo != null){
  324 + //根据车辆自编号查询车牌号
  325 + map.put("insideCode_eq", schRealInfo.getClZbh());
  326 + Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
  327 + sf.append("<DLD>");
  328 + sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");
  329 + sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.getXlBm())+"</XLBM>");
  330 + sf.append("<LPBH>"+schRealInfo.getLpName()+"</LPBH>");
  331 + sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
  332 + sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");
  333 + sf.append("<LDList>");
  334 +
  335 + int seqNumber = 0;
  336 + for(ScheduleRealInfo scheduleRealInfo:list){
  337 + if(schRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm()) && schRealInfo.getLpName().equals(scheduleRealInfo.getLpName())
  338 + && schRealInfo.getClZbh().equals(scheduleRealInfo.getClZbh())){
  339 + scheduleRealInfo.getQdzCode();
  340 + sf.append("<LD>");
  341 + sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>");
  342 + sf.append("<SXX>"+scheduleRealInfo.getXlDir()+"</SXX>");
  343 + sf.append("<FCZDMC>"+scheduleRealInfo.getQdzName()+"</FCZDMC>");
  344 + sf.append("<FCZDXH>" + ++seqNumber + "</FCZDXH>");
  345 + sf.append("<FCZDBM>"+scheduleRealInfo.getQdzCode()+"</FCZDBM>");
  346 + sf.append("<JHFCSJ>"+scheduleRealInfo.getFcsj()+"</JHFCSJ>");
  347 + sf.append("<DFSJ>"+scheduleRealInfo.getDfsj()+"</DFSJ>");
  348 + sf.append("<SJFCSJ>"+scheduleRealInfo.getFcsjActual()+"</SJFCSJ>");
  349 + sf.append("<FCZDLX>"+""+"</FCZDLX>");
  350 + sf.append("<DDZDMC>"+scheduleRealInfo.getZdzName()+"</DDZDMC>");
  351 + sf.append("<DDZDXH>"+ seqNumber +"</DDZDXH>");
  352 + sf.append("<DDZDBM>"+scheduleRealInfo.getZdzCode()+"</DDZDBM>");
  353 + sf.append("<JHDDSJ>"+scheduleRealInfo.getZdsj()+"</JHDDSJ>");
  354 + sf.append("<SJDDSJ>"+scheduleRealInfo.getZdsjActual()+"</SJDDSJ>");
  355 + sf.append("<DDZDLX>"+""+"</DDZDLX>");
  356 + sf.append("<LDSCBZ>"+0+"</LDSCBZ>");
  357 + sf.append("<DDBZ>"+scheduleRealInfo.getRemarks()+"</DDBZ>");
  358 + sf.append("</LD>");
  359 + }
  360 + }
  361 +
  362 + sf.append("</LDList>");
  363 + sf.append("</DLD>");
  364 + }
  365 + }
  366 +
  367 + sf.append("</DLDS>");
  368 + logger.info("setLD:"+sf.toString());
  369 + if(ssop.setLD(userNameOther, passwordOther, sf.toString()).isSuccess()){
  370 + result = "success";
325 } 371 }
326 - sBuffer.append("</CSs>");  
327 - logger.info("setCS:"+sBuffer.toString());  
328 - ssop.setCS(userNameOther, passwordOther, sBuffer.toString());  
329 } catch (Exception e) { 372 } catch (Exception e) {
330 e.printStackTrace(); 373 e.printStackTrace();
331 - } finally {  
332 - DBUtils_MS.close(rs, ps, conn); 374 + }finally{
  375 + logger.info("setLD:"+result);
333 } 376 }
334 return result; 377 return result;
335 } 378 }
336 - 379 +
337 /** 380 /**
338 - * 上传线路班次时刻表数据 381 + * 上传里程油耗
  382 + * @param date
  383 + * @return
339 */ 384 */
340 - @Override  
341 - public String setSKB(String ids) {  
342 - String result = "success"; 385 + public String setLCYH(){
  386 + String result = "failure";
  387 + // 取昨天 的日期
  388 + String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
343 try { 389 try {
344 - String[] idArray = ids.split(",");  
345 - StringBuffer sBuffer = new StringBuffer();  
346 - TTInfo ttInfo;  
347 - TTInfoDetail ttInfoDetail;  
348 - Iterator<TTInfoDetail> ttInfoDetailIterator;  
349 - HashMap<String,Object> param = new HashMap<String, Object>();  
350 - String ttinfoJhlc = null;//计划总里程  
351 - sBuffer.append("<SKBs>");  
352 - for (int i = 0; i < idArray.length; i++) {  
353 - ttInfo = ttInfoRepository.findOne(Long.valueOf(idArray[i]));  
354 - param.put("ttinfo.id_eq", ttInfo.getId());  
355 - ttInfoDetailIterator = ttInfoDetailRepository.findAll(new CustomerSpecs<TTInfoDetail>(param),  
356 - new Sort(Direction.ASC, "xlDir")).iterator();  
357 - sBuffer.append("<SKB>");  
358 - sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(ttInfo.getXl())).append("</XLBM>");  
359 - ttinfoJhlc = new String();  
360 - sBuffer.append("<JHZLC>").append(ttinfoJhlc).append("</JHZLC>");  
361 - sBuffer.append("<JHYYLC>").append(ttinfoJhlc).append("</JHYYLC>");  
362 - sBuffer.append("<KSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</KSRQ>");  
363 - sBuffer.append("<JSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</JSRQ>");/////////  
364 - sBuffer.append("<ZJZX>").append(changeRuleDay(ttInfo.getRule_days())).append("</ZJZX>");  
365 - sBuffer.append("<TBYY>").append("").append("</TBYY>");  
366 - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");  
367 - int num = 1;  
368 - while (ttInfoDetailIterator.hasNext()) {  
369 - ttInfoDetail = ttInfoDetailIterator.next();  
370 - ttinfoJhlc = ttInfoDetail.getJhlc()+"";// 设置计划总里程  
371 - sBuffer.append("<BCList>");  
372 - sBuffer.append("<BC>");  
373 - sBuffer.append("<LPBH>").append(ttInfoDetail.getLp().getLpNo()).append("</LPBH>");  
374 - sBuffer.append("<SXX>").append(ttInfoDetail.getXlDir()).append("</SXX>");  
375 - sBuffer.append("<FCZDMC>").append(ttInfoDetail.getQdz()).append("</FCZDMC>");  
376 - sBuffer.append("<ZDXH>").append(num).append("</ZDXH>");  
377 - sBuffer.append("<JHFCSJ>").append(ttInfoDetail.getFcsj()).append("</JHFCSJ>");  
378 - sBuffer.append("<DDZDMC>").append(ttInfoDetail.getZdz()).append("</DDZDMC>");  
379 - sBuffer.append("<ZDXH>").append(num).append("</ZDXH>");  
380 - sBuffer.append("<JHDDSJ>").append(calcDdsj(ttInfoDetail.getFcsj(),ttInfoDetail.getBcsj())).append("</JHDDSJ>");  
381 - sBuffer.append("</BC>");  
382 - sBuffer.append("</BCList>");  
383 - num++; 390 + StringBuffer sf = new StringBuffer();
  391 + sf.append("<LCYHS>");
  392 + List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setLCYHGroup(date);
  393 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
  394 + Map<String,Object> map = new HashMap<String,Object>();
  395 + for(ScheduleRealInfo schRealInfo:listGroup){
  396 + if(schRealInfo != null){
  397 + //计算总公里和空驶公里,营运公里=总公里-空驶公里
  398 + double totalKilometers = 0,emptyKilometers =0;
  399 + sf.append("<LCYH>");
  400 + map.put("insideCode_eq", schRealInfo.getClZbh());
  401 + Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
  402 +// Cars car = carsRepository.findCarByClzbh(schRealInfo.getClZbh());
  403 + sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");
  404 + sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.getXlBm())+"</XLBM>");
  405 + sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
  406 + for(ScheduleRealInfo scheduleRealInfo:list){
  407 + if(schRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm()) && schRealInfo.getClZbh().equals(scheduleRealInfo.getClZbh())){
  408 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  409 + //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
  410 + if(childTaskPlans.isEmpty()){
  411 + if(scheduleRealInfo.getStatus() == 2){
  412 + totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  413 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  414 + || scheduleRealInfo.getBcType().equals("venting")){
  415 + emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;
  416 + }
  417 + }
  418 + }else{
  419 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  420 + while(it.hasNext()){
  421 + ChildTaskPlan childTaskPlan = it.next();
  422 + if(!childTaskPlan.isDestroy()){
  423 + totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
  424 + if(childTaskPlan.getMileageType().equals("empty")){
  425 + emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
  426 + }
  427 + }
  428 + }
  429 + }
  430 + }
  431 + }
  432 + sf.append("<ZLC>"+totalKilometers+"</ZLC>");
  433 + sf.append("<YYLC>"+emptyKilometers+"</YYLC>");
  434 + sf.append("<YH>"+""+"</YH>");
  435 + sf.append("<JZYL>"+""+"</JZYL>");
  436 + sf.append("<DH>"+""+"</DH>");
  437 + sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");
  438 + sf.append("<BBSCBZ>"+0+"</BBSCBZ>");
  439 + sf.append("</LCYH>");
384 } 440 }
385 - sBuffer.append("</SKB>");  
386 } 441 }
387 - sBuffer.append("</SKBs>");  
388 - logger.info("setSKB:"+sBuffer.toString());  
389 - ssop.setSKB(userNameOther, passwordOther, sBuffer.toString()); 442 + sf.append("</LCYHS>");
  443 + logger.info("setLCYH:"+sf.toString());
  444 + if(ssop.setLCYH(userNameOther, passwordOther, sf.toString()).isSuccess()){
  445 + result = "success";
  446 + }
390 } catch (Exception e) { 447 } catch (Exception e) {
391 e.printStackTrace(); 448 e.printStackTrace();
  449 + }finally{
  450 + logger.info("setLCYH:"+result);
392 } 451 }
393 return result; 452 return result;
394 } 453 }
395 - 454 +
396 /** 455 /**
397 - * 上传线路人员车辆配置信息 456 + * 上传线路调度日报
  457 + * @return
398 */ 458 */
399 - @Override  
400 - public String setXLPC() {  
401 - String result = "success"; 459 + public String setDDRB(){
  460 + String result = "failure";
  461 + // 取昨天 的日期
  462 + String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
402 try { 463 try {
403 - StringBuffer sBuffer =new StringBuffer();  
404 - sBuffer.append("<XLPCs>");  
405 - // 声明变量  
406 - Line line = null;  
407 - Cars cars = null;  
408 - List<Personnel> personnelList = null;  
409 - List<Cars> carsList = null;  
410 - int totalPersonnel,totalCar ;// 人员数量。车辆数量  
411 - // 查询所有线路  
412 - Iterator<Line> lineIterator = lineRepository.findAll().iterator();  
413 - // 循环查找线路下的信息  
414 - while(lineIterator.hasNext()){  
415 - line = lineIterator.next();  
416 - sBuffer.append("<XLPC>");  
417 - sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");  
418 - // 查询驾驶员数量  
419 - personnelList = personnelRepository.findJsysByLineId(line.getId());  
420 - totalPersonnel = personnelList != null ? personnelList.size():0;  
421 - sBuffer.append("<SJRS>").append(totalPersonnel).append("</SJRS>");  
422 - // 查询售票员人员数量  
423 - personnelList = personnelRepository.findSpysByLineId(line.getId());  
424 - totalPersonnel = personnelList != null ? personnelList.size():0;  
425 - sBuffer.append("<SPYRS>").append(totalPersonnel).append("</SPYRS>");  
426 - // 查询车辆  
427 - carsList = carsRepository.findCarsByLineId(line.getId());  
428 - totalCar = carsList != null ? carsList.size():0;  
429 - sBuffer.append("<PCSL>").append(totalCar).append("</PCSL>");  
430 - sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");  
431 - int carsNum = 0;  
432 - // 取车牌号  
433 - if(carsList != null){  
434 - carsNum = carsList.size();  
435 - sBuffer.append("<CPHList>");  
436 - for (int i = 0; i < carsNum; i++) {  
437 - cars = carsList.get(i);  
438 - sBuffer.append("<CPH>").append("沪").append(cars.getCarCode()).append("</CPH>"); 464 + StringBuffer sf = new StringBuffer();
  465 + sf.append("<DDRBS>");
  466 + List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setDDRBGroup(date);
  467 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);
  468 + for(ScheduleRealInfo schRealInfo:listGroup){
  469 + if(schRealInfo != null){
  470 + double jhlc = 0,zlc = 0,jhkslc = 0,sjkslc = 0;
  471 + int jhbc = 0,sjbc = 0,jhzgfbc = 0,sjzgfbc = 0,jhwgfbc = 0,sjwgfbc = 0;
  472 + sf.append("<DDRB>");
  473 + sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");
  474 + sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.getXlBm())+"</XLBM>");
  475 + for(ScheduleRealInfo scheduleRealInfo:list){
  476 + if(scheduleRealInfo != null){
  477 + if(scheduleRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm())){
  478 + //计划
  479 + if(!scheduleRealInfo.isSflj()){
  480 + jhlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  481 + //计划空驶
  482 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")){
  483 + jhkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  484 + }
  485 + //计划早高峰,计划晚高峰
  486 + if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
  487 + jhzgfbc++;
  488 + } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
  489 + jhwgfbc++;
  490 + }
  491 + }
  492 + jhbc++;
  493 +
  494 + //实际
  495 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  496 + //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
  497 + if(childTaskPlans.isEmpty()){
  498 + if(scheduleRealInfo.getStatus() == 2){
  499 + sjbc++;
  500 + zlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  501 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  502 + || scheduleRealInfo.getBcType().equals("venting")){
  503 + sjkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;
  504 + }
  505 + }
  506 + }else{
  507 + sjbc++;
  508 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  509 + while(it.hasNext()){
  510 + ChildTaskPlan childTaskPlan = it.next();
  511 + if(!childTaskPlan.isDestroy()){
  512 + zlc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
  513 + if(childTaskPlan.getMileageType().equals("empty")){
  514 + sjkslc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
  515 + }
  516 + }
  517 + }
  518 + }
  519 + //实际早高峰,计划晚高峰
  520 + if(scheduleRealInfo.getFcsjActual() != null){
  521 + if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){
  522 + sjzgfbc++;
  523 + } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){
  524 + sjwgfbc++;
  525 + }
  526 + }
  527 + }
  528 + }
439 } 529 }
440 - sBuffer.append("</CPHList>"); 530 + sf.append("<JHLC>"+format.format(jhlc)+"</JHLC>");
  531 + sf.append("<SSLC>"+format.format((zlc-sjkslc))+"</SSLC>");
  532 + sf.append("<JHKSLC>"+format.format(jhkslc)+"</JHKSLC>");
  533 + sf.append("<SJKSLC>"+format.format(sjkslc)+"</SJKSLC>");
  534 + sf.append("<JHBC>"+jhbc+"</JHBC>");
  535 + sf.append("<SJBC>"+sjbc+"</SJBC>");
  536 + sf.append("<JHZGFBC>"+jhzgfbc+"</JHZGFBC>");
  537 + sf.append("<SJZGFBC>"+sjzgfbc+"</SJZGFBC>");
  538 + sf.append("<JHWGFBC>"+jhwgfbc+"</JHWGFBC>");
  539 + sf.append("<SJWGFBC>"+sjwgfbc+"</SJWGFBC>");
  540 + sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");
  541 + sf.append("<RBSCBZ>"+0+"</RBSCBZ>");
  542 + sf.append("</DDRB>");
441 } 543 }
442 - sBuffer.append("</XLPC>");  
443 } 544 }
444 - sBuffer.append("</XLPCs>");  
445 - logger.info("setXLPC:"+sBuffer.toString());  
446 - ssop.setXLPC(userNameOther, passwordOther, sBuffer.toString()); 545 + sf.append("</DDRBS>");
  546 + logger.info("setDDRB:"+sf.toString());
  547 + if(ssop.setDDRB(userNameOther, passwordOther, sf.toString()).isSuccess()){
  548 + result = "success";
  549 + }
447 } catch (Exception e) { 550 } catch (Exception e) {
448 e.printStackTrace(); 551 e.printStackTrace();
  552 + }finally{
  553 + logger.info("setDDRB:"+result);
449 } 554 }
450 return result; 555 return result;
451 } 556 }
452 - 557 +
453 /** 558 /**
454 * 上传线路计划班次表 559 * 上传线路计划班次表
455 */ 560 */
456 @Override 561 @Override
457 public String setJHBC() { 562 public String setJHBC() {
458 - String result = "success"; 563 + String result = "failure";
459 try { 564 try {
460 StringBuffer sBuffer =new StringBuffer(); 565 StringBuffer sBuffer =new StringBuffer();
461 sBuffer.append("<JHBCs>"); 566 sBuffer.append("<JHBCs>");
@@ -492,7 +597,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -492,7 +597,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{
492 sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>"); 597 sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>");
493 sBuffer.append("<ZDXH>").append(++endSerialNum).append("</ZDXH>"); 598 sBuffer.append("<ZDXH>").append(++endSerialNum).append("</ZDXH>");
494 sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj())) 599 sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj()))
495 - .append("</JHDDSJ>"); 600 + .append("</JHDDSJ>");
496 sBuffer.append("</BC>"); 601 sBuffer.append("</BC>");
497 if(i == size -1 ){ 602 if(i == size -1 ){
498 sBuffer.append("</BCList>"); 603 sBuffer.append("</BCList>");
@@ -513,249 +618,286 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -513,249 +618,286 @@ public class TrafficManageServiceImpl implements TrafficManageService{
513 } 618 }
514 sBuffer.append("</JHBCs>"); 619 sBuffer.append("</JHBCs>");
515 logger.info("setJHBC:"+sBuffer.toString()); 620 logger.info("setJHBC:"+sBuffer.toString());
516 - ssop.setJHBC(userNameOther, passwordOther, sBuffer.toString()); 621 + if(ssop.setJHBC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  622 + result = "success";
  623 + }
517 } catch (Exception e) { 624 } catch (Exception e) {
518 e.printStackTrace(); 625 e.printStackTrace();
  626 + }finally{
  627 + logger.info("setJHBC:"+result);
519 } 628 }
520 return result; 629 return result;
521 } 630 }
522 - 631 +
523 /** 632 /**
524 - * 上传路单  
525 - * @param date  
526 - * @return xml格式的字符串 633 + * 上传线路班次时刻表数据
527 */ 634 */
528 - public String setLD(){  
529 - // 取昨天 的日期  
530 - String date = sdfnyr.format(DateUtils.addDays(new Date(), -1)); 635 + @Override
  636 + public String setSKB(String ids) {
  637 + String result = "failure";
531 try { 638 try {
532 - StringBuffer sf = new StringBuffer();  
533 - sf.append("<DLDS>");  
534 - List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);  
535 - List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setLDGroup(date);  
536 - Map<String,Object> map = new HashMap<String,Object>();  
537 - for(ScheduleRealInfo schRealInfo:listGroup){  
538 - if(schRealInfo != null){  
539 - //根据车辆自编号查询车牌号  
540 - map.put("insideCode_eq", schRealInfo.getClZbh());  
541 - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));  
542 - sf.append("<DLD>");  
543 - sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");  
544 - sf.append("<XLBM>"+schRealInfo.getXlBm()+"</XLBM>");  
545 - sf.append("<LPBH>"+schRealInfo.getLpName()+"</LPBH>");  
546 - sf.append("<CPH>"+car.getCarPlate()+"</CPH>");  
547 - sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");  
548 - sf.append("<LDList>");  
549 -  
550 - int seqNumber = 0;  
551 - for(ScheduleRealInfo scheduleRealInfo:list){  
552 - if(schRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm()) && schRealInfo.getLpName().equals(scheduleRealInfo.getLpName())  
553 - && schRealInfo.getClZbh().equals(scheduleRealInfo.getClZbh())){  
554 - scheduleRealInfo.getQdzCode();  
555 - sf.append("<LD>");  
556 - sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>");  
557 - sf.append("<SXX>"+scheduleRealInfo.getXlDir()+"</SXX>");  
558 - sf.append("<FCZDMC>"+scheduleRealInfo.getQdzName()+"</FCZDMC>");  
559 - sf.append("<FCZDXH>" + ++seqNumber + "</FCZDXH>");  
560 - sf.append("<FCZDBM>"+scheduleRealInfo.getQdzCode()+"</FCZDBM>");  
561 - sf.append("<JHFCSJ>"+scheduleRealInfo.getFcsj()+"</JHFCSJ>");  
562 - sf.append("<DFSJ>"+scheduleRealInfo.getDfsj()+"</DFSJ>");  
563 - sf.append("<SJFCSJ>"+scheduleRealInfo.getFcsjActual()+"</SJFCSJ>");  
564 - sf.append("<FCZDLX>"+""+"</FCZDLX>");  
565 - sf.append("<DDZDMC>"+scheduleRealInfo.getZdzName()+"</DDZDMC>");  
566 - sf.append("<DDZDXH>"+ seqNumber +"</DDZDXH>");  
567 - sf.append("<DDZDBM>"+scheduleRealInfo.getZdzCode()+"</DDZDBM>");  
568 - sf.append("<JHDDSJ>"+scheduleRealInfo.getZdsj()+"</JHDDSJ>");  
569 - sf.append("<SJDDSJ>"+scheduleRealInfo.getZdsjActual()+"</SJDDSJ>");  
570 - sf.append("<DDZDLX>"+""+"</DDZDLX>");  
571 - sf.append("<LDSCBZ>"+0+"</LDSCBZ>");  
572 - sf.append("<DDBZ>"+scheduleRealInfo.getRemarks()+"</DDBZ>");  
573 - sf.append("</LD>");  
574 - }  
575 - }  
576 -  
577 - sf.append("</LDList>");  
578 - sf.append("</DLD>"); 639 + String[] idArray = ids.split(",");
  640 + StringBuffer sBuffer = new StringBuffer();
  641 + TTInfo ttInfo;
  642 + TTInfoDetail ttInfoDetail;
  643 + Iterator<TTInfoDetail> ttInfoDetailIterator;
  644 + HashMap<String,Object> param = new HashMap<String, Object>();
  645 + String ttinfoJhlc = null;//计划总里程
  646 + sBuffer.append("<SKBs>");
  647 + for (int i = 0; i < idArray.length; i++) {
  648 + ttInfo = ttInfoRepository.findOne(Long.valueOf(idArray[i]));
  649 + if(ttInfo == null)
  650 + continue;
  651 + param.put("ttinfo.id_eq", ttInfo.getId());
  652 + ttInfoDetailIterator = ttInfoDetailRepository.findAll(new CustomerSpecs<TTInfoDetail>(param),
  653 + new Sort(Direction.ASC, "xlDir")).iterator();
  654 + sBuffer.append("<SKB>");
  655 + sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(ttInfo.getXl())).append("</XLBM>");
  656 + ttinfoJhlc = new String();
  657 + sBuffer.append("<JHZLC>").append(ttinfoJhlc).append("</JHZLC>");
  658 + sBuffer.append("<JHYYLC>").append(ttinfoJhlc).append("</JHYYLC>");
  659 + sBuffer.append("<KSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</KSRQ>");
  660 + sBuffer.append("<JSRQ>").append(sdfnyr.format(ttInfo.getQyrq())).append("</JSRQ>");/////////
  661 + sBuffer.append("<ZJZX>").append(changeRuleDay(ttInfo.getRule_days())).append("</ZJZX>");
  662 + sBuffer.append("<TBYY>").append("").append("</TBYY>");
  663 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  664 + int num = 1;
  665 + while (ttInfoDetailIterator.hasNext()) {
  666 + ttInfoDetail = ttInfoDetailIterator.next();
  667 + ttinfoJhlc = ttInfoDetail.getJhlc()+"";// 设置计划总里程
  668 + sBuffer.append("<BCList>");
  669 + sBuffer.append("<BC>");
  670 + sBuffer.append("<LPBH>").append(ttInfoDetail.getLp().getLpNo()).append("</LPBH>");
  671 + sBuffer.append("<SXX>").append(ttInfoDetail.getXlDir()).append("</SXX>");
  672 + sBuffer.append("<FCZDMC>").append(ttInfoDetail.getQdz()).append("</FCZDMC>");
  673 + sBuffer.append("<ZDXH>").append(num).append("</ZDXH>");
  674 + sBuffer.append("<JHFCSJ>").append(ttInfoDetail.getFcsj()).append("</JHFCSJ>");
  675 + sBuffer.append("<DDZDMC>").append(ttInfoDetail.getZdz()).append("</DDZDMC>");
  676 + sBuffer.append("<ZDXH>").append(num).append("</ZDXH>");
  677 + sBuffer.append("<JHDDSJ>").append(calcDdsj(ttInfoDetail.getFcsj(),ttInfoDetail.getBcsj())).append("</JHDDSJ>");
  678 + sBuffer.append("</BC>");
  679 + sBuffer.append("</BCList>");
  680 + num++;
579 } 681 }
  682 + sBuffer.append("</SKB>");
  683 + }
  684 + sBuffer.append("</SKBs>");
  685 + logger.info("setSKB:"+sBuffer.toString());
  686 + if(ssop.setSKB(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  687 + result = "success";
580 } 688 }
581 -  
582 - sf.append("</DLDS>");  
583 - logger.info("setLD:"+sf.toString());  
584 - ssop.setLD(userNameOther, passwordOther, sf.toString());  
585 } catch (Exception e) { 689 } catch (Exception e) {
586 e.printStackTrace(); 690 e.printStackTrace();
  691 + }finally{
  692 + logger.info("setSKB:"+result);
587 } 693 }
588 - return ""; 694 + return result;
589 } 695 }
590 - 696 +
591 /** 697 /**
592 - * 上传里程油耗  
593 - * @param date  
594 - * @return 698 + * 上传线路人员车辆配置信息
595 */ 699 */
596 - public String setLCYH(){  
597 - // 取昨天 的日期  
598 - String date = sdfnyr.format(DateUtils.addDays(new Date(), -1)); 700 + @Override
  701 + public String setXLPC() {
  702 + String result = "failure";
599 try { 703 try {
600 - StringBuffer sf = new StringBuffer();  
601 - sf.append("<LCYHS>");  
602 - List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setLCYHGroup(date);  
603 - List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);  
604 - Map<String,Object> map = new HashMap<String,Object>();  
605 - for(ScheduleRealInfo schRealInfo:listGroup){  
606 - if(schRealInfo != null){  
607 - //计算总公里和空驶公里,营运公里=总公里-空驶公里  
608 - double totalKilometers = 0,emptyKilometers =0;  
609 - sf.append("<LCYH>");  
610 - map.put("insideCode_eq", schRealInfo.getClZbh());  
611 - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));  
612 -// Cars car = carsRepository.findCarByClzbh(schRealInfo.getClZbh());  
613 - sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");  
614 - sf.append("<XLBM>"+schRealInfo.getXlBm()+"</XLBM>");  
615 - sf.append("<CPH>"+car.getCarPlate()+"</CPH>");  
616 - for(ScheduleRealInfo scheduleRealInfo:list){  
617 - if(schRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm()) && schRealInfo.getClZbh().equals(scheduleRealInfo.getClZbh())){  
618 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
619 - //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班  
620 - if(childTaskPlans.isEmpty()){  
621 - if(scheduleRealInfo.getStatus() == 2){  
622 - totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();  
623 - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")  
624 - || scheduleRealInfo.getBcType().equals("venting")){  
625 - emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;  
626 - }  
627 - }  
628 - }else{  
629 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
630 - while(it.hasNext()){  
631 - ChildTaskPlan childTaskPlan = it.next();  
632 - if(!childTaskPlan.isDestroy()){  
633 - totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();  
634 - if(childTaskPlan.getMileageType().equals("empty")){  
635 - emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;  
636 - }  
637 - }  
638 - }  
639 - }  
640 - } 704 + StringBuffer sBuffer =new StringBuffer();
  705 + sBuffer.append("<XLPCs>");
  706 + // 声明变量
  707 + Line line = null;
  708 + Cars cars = null;
  709 + List<Personnel> personnelList = null;
  710 + List<Cars> carsList = null;
  711 + int totalPersonnel,totalCar ;// 人员数量。车辆数量
  712 + // 查询所有线路
  713 + Iterator<Line> lineIterator = lineRepository.findAll().iterator();
  714 + // 循环查找线路下的信息
  715 + while(lineIterator.hasNext()){
  716 + line = lineIterator.next();
  717 + sBuffer.append("<XLPC>");
  718 + sBuffer.append("<XLBM>").append(BasicData.lineId2ShangHaiCodeMap.get(line.getId())).append("</XLBM>");
  719 + // 查询驾驶员数量
  720 + personnelList = personnelRepository.findJsysByLineId(line.getId());
  721 + totalPersonnel = personnelList != null ? personnelList.size():0;
  722 + sBuffer.append("<SJRS>").append(totalPersonnel).append("</SJRS>");
  723 + // 查询售票员人员数量
  724 + personnelList = personnelRepository.findSpysByLineId(line.getId());
  725 + totalPersonnel = personnelList != null ? personnelList.size():0;
  726 + sBuffer.append("<SPYRS>").append(totalPersonnel).append("</SPYRS>");
  727 + // 查询车辆
  728 + carsList = carsRepository.findCarsByLineId(line.getId());
  729 + totalCar = carsList != null ? carsList.size():0;
  730 + sBuffer.append("<PCSL>").append(totalCar).append("</PCSL>");
  731 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  732 + int carsNum = 0;
  733 + // 取车牌号
  734 + if(carsList != null){
  735 + carsNum = carsList.size();
  736 + sBuffer.append("<CPHList>");
  737 + for (int i = 0; i < carsNum; i++) {
  738 + cars = carsList.get(i);
  739 + sBuffer.append("<CPH>").append("沪").append(cars.getCarCode()).append("</CPH>");
641 } 740 }
642 - sf.append("<ZLC>"+totalKilometers+"</ZLC>");  
643 - sf.append("<YYLC>"+emptyKilometers+"</YYLC>");  
644 - sf.append("<YH>"+""+"</YH>");  
645 - sf.append("<JZYL>"+""+"</JZYL>");  
646 - sf.append("<DH>"+""+"</DH>");  
647 - sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");  
648 - sf.append("<BBSCBZ>"+0+"</BBSCBZ>");  
649 - sf.append("</LCYH>");  
650 - } 741 + sBuffer.append("</CPHList>");
  742 + }
  743 + sBuffer.append("</XLPC>");
  744 + }
  745 + sBuffer.append("</XLPCs>");
  746 + logger.info("setXLPC:"+sBuffer.toString());
  747 + if(ssop.setXLPC(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  748 + result = "success";
651 } 749 }
652 - sf.append("</LCYHS>");  
653 - logger.info("setLCYH:"+sf.toString());  
654 - ssop.setLCYH(userNameOther, passwordOther, sf.toString());  
655 } catch (Exception e) { 750 } catch (Exception e) {
656 e.printStackTrace(); 751 e.printStackTrace();
  752 + }finally{
  753 + logger.info("setXLPC:"+result);
657 } 754 }
658 - return date; 755 + return result;
659 } 756 }
660 - 757 +
  758 +
661 /** 759 /**
662 - * 上传线路调度日报  
663 - * @return 760 + * 上传超速数据
664 */ 761 */
665 - public String setDDRB(){ 762 + @Override
  763 + public String setCS() {
  764 + String result = "failure";
  765 + StringBuffer sBuffer =new StringBuffer();
  766 + sBuffer.append("<CSs>");
  767 + String sql = "SELECT * FROM bsth_c_speeding where DATE_FORMAT(create_date,'%Y-%m-%d') = ? order by create_date ";
  768 + Connection conn = null;
  769 + PreparedStatement ps = null;
  770 + ResultSet rs = null;
666 // 取昨天 的日期 771 // 取昨天 的日期
667 - String date = sdfnyr.format(DateUtils.addDays(new Date(), -1)); 772 + String yesterday = sdfnyr.format(DateUtils.addDays(new Date(), -1));
668 try { 773 try {
669 - StringBuffer sf = new StringBuffer();  
670 - sf.append("<DDRBS>");  
671 - List<ScheduleRealInfo> listGroup = scheduleRealInfoRepository.setDDRBGroup(date);  
672 - List<ScheduleRealInfo> list = scheduleRealInfoRepository.findByDate(date);  
673 - for(ScheduleRealInfo schRealInfo:listGroup){  
674 - if(schRealInfo != null){  
675 - double jhlc = 0,zlc = 0,jhkslc = 0,sjkslc = 0;  
676 - int jhbc = 0,sjbc = 0,jhzgfbc = 0,sjzgfbc = 0,jhwgfbc = 0,sjwgfbc = 0;  
677 - sf.append("<DDRB>");  
678 - sf.append("<RQ>"+schRealInfo.getScheduleDateStr()+"</RQ>");  
679 - sf.append("<XLBM>"+schRealInfo.getXlBm()+"</XLBM>");  
680 - for(ScheduleRealInfo scheduleRealInfo:list){  
681 - if(scheduleRealInfo != null){  
682 - if(scheduleRealInfo.getXlBm().equals(scheduleRealInfo.getXlBm())){  
683 - //计划  
684 - if(!scheduleRealInfo.isSflj()){  
685 - jhlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();  
686 - //计划空驶  
687 - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")){  
688 - jhkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();  
689 - }  
690 - //计划早高峰,计划晚高峰  
691 - if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){  
692 - jhzgfbc++;  
693 - } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){  
694 - jhwgfbc++;  
695 - }  
696 - }  
697 - jhbc++;  
698 -  
699 - //实际  
700 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
701 - //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班  
702 - if(childTaskPlans.isEmpty()){  
703 - if(scheduleRealInfo.getStatus() == 2){  
704 - sjbc++;  
705 - zlc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();  
706 - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")  
707 - || scheduleRealInfo.getBcType().equals("venting")){  
708 - sjkslc += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();;  
709 - }  
710 - }  
711 - }else{  
712 - sjbc++;  
713 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
714 - while(it.hasNext()){  
715 - ChildTaskPlan childTaskPlan = it.next();  
716 - if(!childTaskPlan.isDestroy()){  
717 - zlc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();  
718 - if(childTaskPlan.getMileageType().equals("empty")){  
719 - sjkslc += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;  
720 - }  
721 - }  
722 - }  
723 - }  
724 - //实际早高峰,计划晚高峰  
725 - if(scheduleRealInfo.getFcsjActual() != null){  
726 - if(TimeUtils.morningPeak(scheduleRealInfo.getFcsj())){  
727 - sjzgfbc++;  
728 - } else if(TimeUtils.evenignPeak(scheduleRealInfo.getFcsj())){  
729 - sjwgfbc++;  
730 - }  
731 - }  
732 - }  
733 - } 774 + conn = DBUtils_MS.getConnection();
  775 + ps = conn.prepareStatement(sql);
  776 + ps.setString(1, yesterday);
  777 + rs = ps.executeQuery();
  778 + Float lon, lat;
  779 + String kssk;
  780 + String speed;
  781 + while (rs.next()) {
  782 + kssk = sdfnyrsfm.format(rs.getLong("TIMESTAMP"));
  783 + speed = rs.getString("SPEED");
  784 + // 经纬度
  785 + lon = rs.getFloat("LON");
  786 + lat = rs.getFloat("LAT");
  787 + sBuffer.append("<CS>");
  788 + sBuffer.append("<RQ>").append(sdfnyr.format(rs.getDate("CREATE_DATE"))).append("</RQ>");
  789 + sBuffer.append("<XLBM>").append(BasicData.lineCode2ShangHaiCodeMap.get(rs.getString("LINE"))).append("</XLBM>");////////
  790 + sBuffer.append("<CPH>").append(rs.getString("VEHICLE")).append("</CPH>");
  791 + sBuffer.append("<KSSK>").append(kssk).append("</KSSK>");
  792 + sBuffer.append("<KSDDJD>").append(lon).append("</KSDDJD>");
  793 + sBuffer.append("<KSDDWD>").append(lat).append("</KSDDWD>");
  794 + sBuffer.append("<KSLD>").append("").append("</KSLD>");//**********************
  795 + sBuffer.append("<JSSK>").append(kssk).append("</JSSK>");
  796 + sBuffer.append("<JSDDJD>").append(lon).append("</JSDDJD>");
  797 + sBuffer.append("<JSDDWD>").append(lat).append("</JSDDWD>");
  798 + sBuffer.append("<JSLD>").append("").append("</JSLD>");//**********************
  799 + sBuffer.append("<PJSD>").append(speed).append("</PJSD>");
  800 + sBuffer.append("<ZGSS>").append(speed).append("</ZGSS>");
  801 + sBuffer.append("<UPDT>").append(sdfnyrsfm.format(new Date())).append("</UPDT>");
  802 + sBuffer.append("</CS>");
  803 + }
  804 + sBuffer.append("</CSs>");
  805 + logger.info("setCS:"+sBuffer.toString());
  806 + if(ssop.setCS(userNameOther, passwordOther, sBuffer.toString()).isSuccess()){
  807 + result = "success";
  808 + }
  809 + } catch (Exception e) {
  810 + e.printStackTrace();
  811 + } finally {
  812 + logger.info("setCS:"+result);
  813 + DBUtils_MS.close(rs, ps, conn);
  814 + }
  815 + return result;
  816 + }
  817 +
  818 +
  819 + /**
  820 + * 下载全量的公交基础数据
  821 + */
  822 + public String getDownLoadAllDataFile() {
  823 + String result = "success";
  824 + try {
  825 + Runtime currRuntime = Runtime.getRuntime ();
  826 +
  827 + int nFreeMemory = ( int ) (currRuntime.freeMemory() / 1024 / 1024);
  828 +
  829 + int nTotalMemory = ( int ) (currRuntime.totalMemory() / 1024 / 1024);
  830 +
  831 + System.out.println("zzz:"+nFreeMemory + "M/" + nTotalMemory +"M(free/total)");
  832 +
  833 + byte[] res = portType.downloadAllDataFile("down_pdgj", "down_pdgj123");
  834 + String filePath = "E:\\ygc";
  835 + BufferedOutputStream bos = null;
  836 + FileOutputStream fos = null;
  837 + File file = null;
  838 + try {
  839 + File dir = new File(filePath);
  840 + if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在
  841 + dir.mkdirs();
  842 + }
  843 + file = new File(filePath+"\\abc.rar");
  844 + fos = new FileOutputStream(file);
  845 + bos = new BufferedOutputStream(fos);
  846 + bos.write(res);
  847 + } catch (Exception e) {
  848 + e.printStackTrace();
  849 + } finally {
  850 + if (bos != null) {
  851 + try {
  852 + bos.close();
  853 + } catch (IOException e1) {
  854 + e1.printStackTrace();
734 } 855 }
735 - sf.append("<JHLC>"+format.format(jhlc)+"</JHLC>");  
736 - sf.append("<SSLC>"+format.format((zlc-sjkslc))+"</SSLC>");  
737 - sf.append("<JHKSLC>"+format.format(jhkslc)+"</JHKSLC>");  
738 - sf.append("<SJKSLC>"+format.format(sjkslc)+"</SJKSLC>");  
739 - sf.append("<JHBC>"+jhbc+"</JHBC>");  
740 - sf.append("<SJBC>"+sjbc+"</SJBC>");  
741 - sf.append("<JHZGFBC>"+jhzgfbc+"</JHZGFBC>");  
742 - sf.append("<SJZGFBC>"+sjzgfbc+"</SJZGFBC>");  
743 - sf.append("<JHWGFBC>"+jhwgfbc+"</JHWGFBC>");  
744 - sf.append("<SJWGFBC>"+sjwgfbc+"</SJWGFBC>");  
745 - sf.append("<UPDT>"+sdfnyrsfm.format(schRealInfo.getUpdateDate())+"</UPDT>");  
746 - sf.append("<RBSCBZ>"+0+"</RBSCBZ>");  
747 - sf.append("</DDRB>");  
748 - } 856 + }
  857 + if (fos != null) {
  858 + try {
  859 + fos.close();
  860 + } catch (IOException e1) {
  861 + e1.printStackTrace();
  862 + }
  863 + }
749 } 864 }
750 - sf.append("</DDRBS>");  
751 - logger.info("setDDRB:"+sf.toString());  
752 - ssop.setDDRB(userNameOther, passwordOther, sf.toString());  
753 } catch (Exception e) { 865 } catch (Exception e) {
754 e.printStackTrace(); 866 e.printStackTrace();
755 } 867 }
756 - return date; 868 +
  869 + return result;
  870 + }
  871 +
  872 + /**
  873 + * 下载增量的公交基础数据
  874 + */
  875 + public String getDownLoadIncreaseDataFile() {
  876 + String result = "success";
  877 + try {
  878 + //System.out.println(portType.downloadIncreaseDataFile(args0, args1, args2));
  879 + } catch (Exception e) {
  880 + e.printStackTrace();
  881 + }
  882 +
  883 + return result;
  884 + }
  885 +
  886 + /**
  887 + * 指定线路查询方式公交基础数据下载
  888 + */
  889 + public String getDownLoadWarrantsBusLineStation() {
  890 + String result = "success";
  891 + try {
  892 +
  893 + //portType.setXL(userNameXl, passwordXl, sBuffer.toString());
  894 + } catch (Exception e) {
  895 + e.printStackTrace();
  896 + }
  897 +
  898 + return result;
757 } 899 }
758 - 900 +
759 /** 901 /**
760 * 计算结束时间 902 * 计算结束时间
761 * @param fcsj 发车时间 903 * @param fcsj 发车时间
@@ -787,7 +929,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -787,7 +929,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{
787 } 929 }
788 return result; 930 return result;
789 } 931 }
790 - 932 +
791 /** 933 /**
792 * 拼装线路计划班次表的XML 934 * 拼装线路计划班次表的XML
793 * @param sBuffer 935 * @param sBuffer
src/main/java/com/bsth/service/realcontrol/RealChartsService.java
@@ -2,6 +2,7 @@ package com.bsth.service.realcontrol; @@ -2,6 +2,7 @@ package com.bsth.service.realcontrol;
2 2
3 import com.bsth.service.realcontrol.dto.CarOutRate; 3 import com.bsth.service.realcontrol.dto.CarOutRate;
4 import com.bsth.service.realcontrol.dto.DeviceOnlineRate; 4 import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
  5 +import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
5 6
6 import java.util.List; 7 import java.util.List;
7 import java.util.Map; 8 import java.util.Map;
@@ -13,4 +14,6 @@ public interface RealChartsService { @@ -13,4 +14,6 @@ public interface RealChartsService {
13 List<DeviceOnlineRate> deviceOnlineRate(String month, String idx); 14 List<DeviceOnlineRate> deviceOnlineRate(String month, String idx);
14 15
15 List<CarOutRate> carOutRate(String month, String idx); 16 List<CarOutRate> carOutRate(String month, String idx);
  17 +
  18 + List<StratEndPunctualityRate> stratEndPunctualityRate(String month, String idx);
16 } 19 }
src/main/java/com/bsth/service/realcontrol/dto/StratEndPunctualityRate.java 0 → 100644
  1 +package com.bsth.service.realcontrol.dto;
  2 +
  3 +/**
  4 + * 首末班正点率
  5 + * Created by panzhao on 2016/11/10.
  6 + */
  7 +public class StratEndPunctualityRate {
  8 +
  9 + private String dateStr;
  10 +
  11 + private String lineCode;
  12 +
  13 + private String nbbm;
  14 +
  15 + //首班时间 06:00/06:01
  16 + private String startTime;
  17 +
  18 + //末班时间 20:30/20:31
  19 + private String endTime;
  20 +
  21 + //末班真实执行日期
  22 + private String etRealExecDate;
  23 +
  24 +
  25 + public String getDateStr() {
  26 + return dateStr;
  27 + }
  28 +
  29 + public void setDateStr(String dateStr) {
  30 + this.dateStr = dateStr;
  31 + }
  32 +
  33 + public String getLineCode() {
  34 + return lineCode;
  35 + }
  36 +
  37 + public void setLineCode(String lineCode) {
  38 + this.lineCode = lineCode;
  39 + }
  40 +
  41 + public String getNbbm() {
  42 + return nbbm;
  43 + }
  44 +
  45 + public void setNbbm(String nbbm) {
  46 + this.nbbm = nbbm;
  47 + }
  48 +
  49 + public String getStartTime() {
  50 + return startTime;
  51 + }
  52 +
  53 + public void setStartTime(String startTime) {
  54 + this.startTime = startTime;
  55 + }
  56 +
  57 + public String getEndTime() {
  58 + return endTime;
  59 + }
  60 +
  61 + public void setEndTime(String endTime) {
  62 + this.endTime = endTime;
  63 + }
  64 +
  65 + public String getEtRealExecDate() {
  66 + return etRealExecDate;
  67 + }
  68 +
  69 + public void setEtRealExecDate(String etRealExecDate) {
  70 + this.etRealExecDate = etRealExecDate;
  71 + }
  72 +}
src/main/java/com/bsth/service/realcontrol/impl/RealChartsServiceImpl.java
1 package com.bsth.service.realcontrol.impl; 1 package com.bsth.service.realcontrol.impl;
2 2
3 import com.bsth.data.BasicData; 3 import com.bsth.data.BasicData;
  4 +import com.bsth.data.LineConfigData;
  5 +import com.bsth.entity.realcontrol.LineConfig;
4 import com.bsth.service.realcontrol.RealChartsService; 6 import com.bsth.service.realcontrol.RealChartsService;
5 import com.bsth.service.realcontrol.dto.CarOutRate; 7 import com.bsth.service.realcontrol.dto.CarOutRate;
6 import com.bsth.service.realcontrol.dto.DeviceOnlineRate; 8 import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
7 import com.bsth.service.realcontrol.dto.RealOnline; 9 import com.bsth.service.realcontrol.dto.RealOnline;
  10 +import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
8 import com.bsth.util.db.DBUtils_MS; 11 import com.bsth.util.db.DBUtils_MS;
9 import com.google.common.base.Splitter; 12 import com.google.common.base.Splitter;
10 import org.apache.commons.lang3.StringUtils; 13 import org.apache.commons.lang3.StringUtils;
@@ -30,6 +33,13 @@ public class RealChartsServiceImpl implements RealChartsService { @@ -30,6 +33,13 @@ public class RealChartsServiceImpl implements RealChartsService {
30 @Autowired 33 @Autowired
31 NamedParameterJdbcTemplate jdbcTemplate; 34 NamedParameterJdbcTemplate jdbcTemplate;
32 35
  36 + @Autowired
  37 + LineConfigData lineConfigData;
  38 +
  39 +
  40 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  41 +
  42 + private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
33 /** 43 /**
34 * 设备上线率 44 * 设备上线率
35 * 45 *
@@ -112,6 +122,12 @@ public class RealChartsServiceImpl implements RealChartsService { @@ -112,6 +122,12 @@ public class RealChartsServiceImpl implements RealChartsService {
112 return mustList; 122 return mustList;
113 } 123 }
114 124
  125 + /**
  126 + * 出车率
  127 + * @param month
  128 + * @param idx
  129 + * @return
  130 + */
115 @Override 131 @Override
116 public List<CarOutRate> carOutRate(String month, String idx) { 132 public List<CarOutRate> carOutRate(String month, String idx) {
117 List<String> idArray = Splitter.on(",").splitToList(idx); 133 List<String> idArray = Splitter.on(",").splitToList(idx);
@@ -141,4 +157,56 @@ public class RealChartsServiceImpl implements RealChartsService { @@ -141,4 +157,56 @@ public class RealChartsServiceImpl implements RealChartsService {
141 157
142 return list; 158 return list;
143 } 159 }
  160 +
  161 + /**
  162 + * 首末班次准点率
  163 + * @param month
  164 + * @param idx
  165 + * @return
  166 + */
  167 + @Override
  168 + public List<StratEndPunctualityRate> stratEndPunctualityRate(String month, String idx) {
  169 + List<String> idArray = Splitter.on(",").splitToList(idx);
  170 + //拼接in语句
  171 + String inStr = "";
  172 + for (String code : idArray) {
  173 + inStr += (",'" + code+"'");
  174 + }
  175 + inStr = " (" + inStr.substring(1) + ")";
  176 +
  177 + String sql = "select SCHEDULE_DATE_STR,XL_BM,CL_ZBH, min(sj) as STARTDATE, max(sj) as ENDDATE " +
  178 + "from (select SCHEDULE_DATE_STR,dfsj, concat_ws('/',dfsj, fcsj_actual) as sj,XL_BM,CL_ZBH from bsth_c_s_sp_info_real " +
  179 + "where schedule_date_str like :month and bc_type='normal' and dfsj is not null and xl_bm in "+inStr+") t group by SCHEDULE_DATE_STR,XL_BM,CL_ZBH";
  180 +
  181 +
  182 + MapSqlParameterSource parameters = new MapSqlParameterSource();
  183 + parameters.addValue("month", month+"-%");
  184 +
  185 + List<StratEndPunctualityRate> list = jdbcTemplate.query(sql, parameters, new RowMapper<StratEndPunctualityRate>() {
  186 + @Override
  187 + public StratEndPunctualityRate mapRow(ResultSet rs, int rowNum) throws SQLException {
  188 + StratEndPunctualityRate obj = new StratEndPunctualityRate();
  189 + obj.setLineCode(rs.getString("XL_BM"));
  190 + obj.setDateStr(rs.getString("SCHEDULE_DATE_STR"));
  191 + obj.setNbbm(rs.getString("CL_ZBH"));
  192 + obj.setStartTime(rs.getString("STARTDATE"));
  193 + obj.setEndTime(rs.getString("ENDDATE"));
  194 + obj.setEtRealExecDate(obj.getDateStr());
  195 +
  196 + if(obj.getEndTime().length() == 11){
  197 + //末班真实执行日期
  198 + LineConfig conf =lineConfigData.get(obj.getLineCode());
  199 + String fcsjActual=obj.getEndTime().split("/")[1];
  200 +
  201 + if(fcsjActual.compareTo(conf.getStartOpt()) < 0){
  202 + //加一天
  203 + obj.setEtRealExecDate(fmtyyyyMMdd.print(fmtyyyyMMdd.parseMillis(obj.getEtRealExecDate()) + DAY_TIME));
  204 + }
  205 + }
  206 +
  207 + return obj;
  208 + }
  209 + });
  210 + return list;
  211 + }
144 } 212 }
src/main/resources/application-dev.properties
@@ -8,7 +8,7 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy @@ -8,7 +8,7 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
8 spring.jpa.database= MYSQL 8 spring.jpa.database= MYSQL
9 spring.jpa.show-sql= false 9 spring.jpa.show-sql= false
10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
11 -spring.datasource.url= jdbc:mysql://192.168.168.201:3306/qp_control?useUnicode=true&characterEncoding=utf-8&useSSL=false 11 +spring.datasource.url= jdbc:mysql://192.168.168.201/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 spring.datasource.username= root 12 spring.datasource.username= root
13 spring.datasource.password= 123456 13 spring.datasource.password= 123456
14 #DATASOURCE 14 #DATASOURCE
src/main/resources/application-prod.properties
@@ -8,9 +8,9 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy @@ -8,9 +8,9 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
8 spring.jpa.database= MYSQL 8 spring.jpa.database= MYSQL
9 spring.jpa.show-sql= true 9 spring.jpa.show-sql= true
10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
11 -spring.datasource.url= jdbc:mysql://192.168.40.100:3306/qp_control?useUnicode=true&characterEncoding=utf-8&useSSL=false 11 +spring.datasource.url= jdbc:mysql://192.168.168.171:3306/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 spring.datasource.username= root 12 spring.datasource.username= root
13 -spring.datasource.password= root@JSP2jsp 13 +spring.datasource.password= root2jsp
14 #DATASOURCE 14 #DATASOURCE
15 spring.datasource.max-active=100 15 spring.datasource.max-active=100
16 spring.datasource.max-idle=8 16 spring.datasource.max-idle=8
@@ -26,6 +26,6 @@ spring.datasource.validation-query=select 1 @@ -26,6 +26,6 @@ spring.datasource.validation-query=select 1
26 ## 26 ##
27 #222.66.0.204:5555 27 #222.66.0.204:5555
28 ##\u5B9E\u65F6gps 28 ##\u5B9E\u65F6gps
29 -http.gps.real.url= http://192.168.40.82:8080/transport_server/rtgps/ 29 +http.gps.real.url= http://192.168.168.171:8080/transport_server/rtgps/
30 ##\u6D88\u606F\u4E0B\u53D1 30 ##\u6D88\u606F\u4E0B\u53D1
31 -http.send.directive = http://192.168.40.82:8080/transport_server/message/  
32 \ No newline at end of file 31 \ No newline at end of file
  32 +http.send.directive = http://192.168.168.171:8080/transport_server/message/
33 \ No newline at end of file 33 \ No newline at end of file
src/main/resources/ms-jdbc.properties
1 -#ms.mysql.driver= com.mysql.jdbc.Driver  
2 -#ms.mysql.url= jdbc:mysql://192.168.40.82:3306/ms?useUnicode=true&characterEncoding=utf-8&useSSL=false  
3 -#ms.mysql.username= root  
4 -#ms.mysql.password= 123456  
5 -  
6 ms.mysql.driver= com.mysql.jdbc.Driver 1 ms.mysql.driver= com.mysql.jdbc.Driver
7 ms.mysql.url= jdbc:mysql://192.168.168.201:3306/ms?useUnicode=true&characterEncoding=utf-8&useSSL=false 2 ms.mysql.url= jdbc:mysql://192.168.168.201:3306/ms?useUnicode=true&characterEncoding=utf-8&useSSL=false
8 ms.mysql.username= root 3 ms.mysql.username= root
9 ms.mysql.password= 123456 4 ms.mysql.password= 123456
  5 +
  6 +#ms.mysql.driver= com.mysql.jdbc.Driver
  7 +#ms.mysql.url= jdbc:mysql://192.168.168.171:3306/ms?useUnicode=true&characterEncoding=utf-8
  8 +#ms.mysql.username= root
  9 +#ms.mysql.password= root2jsp
src/main/resources/static/login.html
@@ -238,7 +238,7 @@ window.onload=function(){ @@ -238,7 +238,7 @@ window.onload=function(){
238 $('input', form).on('keyup', checkBtnStatus); 238 $('input', form).on('keyup', checkBtnStatus);
239 239
240 var keys; 240 var keys;
241 - $.get('/user/login/jCryptionKey', function(data){ 241 + $.get('/user/login/jCryptionKey?t='+Math.random(), function(data){
242 keys = data.publickey; 242 keys = data.publickey;
243 }); 243 });
244 244
src/main/resources/static/real_control_v2/css/ct_table.css
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 30
31 .ct_table>.ct_table_body { 31 .ct_table>.ct_table_body {
32 width: 100%; 32 width: 100%;
  33 + border-bottom: 1px solid #dedede;
33 } 34 }
34 35
35 .ct_table dl { 36 .ct_table dl {
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -55,6 +55,12 @@ @@ -55,6 +55,12 @@
55 padding: 0; 55 padding: 0;
56 } 56 }
57 57
  58 +.line_schedule .schedule-wrap i.uk-icon-question-circle{
  59 + cursor: pointer;
  60 + font-size: 14px;
  61 + color: #cccaca;
  62 +}
  63 +
58 .line_schedule .schedule-wrap h3 { 64 .line_schedule .schedule-wrap h3 {
59 margin: 7px 0 5px; 65 margin: 7px 0 5px;
60 text-indent: 5px; 66 text-indent: 5px;
@@ -236,64 +242,40 @@ span.fcsj-diff { @@ -236,64 +242,40 @@ span.fcsj-diff {
236 242
237 /** 图例 */ 243 /** 图例 */
238 244
239 -dd.tl-yzx { 245 +.tl-yzx {
240 background: #c1ddf0; 246 background: #c1ddf0;
241 border-top: 1px solid #ebebeb !important; 247 border-top: 1px solid #ebebeb !important;
242 } 248 }
243 249
244 -dd.tl-xxfc{ 250 +.tl-xxfc{
245 background: #ff7878; 251 background: #ff7878;
246 color: #f1f1f1; 252 color: #f1f1f1;
247 } 253 }
248 254
249 -/*dd.tl-xxfc:before{  
250 - font-family: FontAwesome;  
251 - content: "\f0a1";  
252 - position: absolute;  
253 - top: -10px;  
254 - left: 3px;  
255 - font-size: 11px;  
256 - color: #fbfbfb;  
257 -}*/ 255 +.tl-wd{
  256 + background: #e2e2a0;
  257 +}
258 258
259 -dd.tl-xxsd{ 259 +.tl-xxsd{
260 background: #e2de94; 260 background: #e2de94;
261 } 261 }
262 262
263 -/*dd.tl-xxsd:before{  
264 - font-family: FontAwesome;  
265 - content: "\f0a1";  
266 - position: absolute;  
267 - top: -10px;  
268 - left: 3px;  
269 - font-size: 11px;  
270 -}*/  
271 -  
272 -dd.tl-xxrd{ 263 +.tl-xxrd{
273 background: #c1ddf0; 264 background: #c1ddf0;
274 border-top: 1px solid #ebebeb !important; 265 border-top: 1px solid #ebebeb !important;
275 } 266 }
276 -/*  
277 -dd.tl-xxrd:before{  
278 - font-family: FontAwesome;  
279 - content: "\f00c";  
280 - position: absolute;  
281 - top: -10px;  
282 - left: 3px;  
283 - font-size: 11px;  
284 -}*/  
285 267
286 -dd.tl-qrlb { 268 +.tl-qrlb {
287 background: #7B6B24; 269 background: #7B6B24;
288 color: #EAEBEC; 270 color: #EAEBEC;
289 font-size: 13px; 271 font-size: 13px;
290 } 272 }
291 273
292 -dd.tl-qrlb::before { 274 +.tl-qrlb::before {
293 content: '烂班'; 275 content: '烂班';
294 } 276 }
295 277
296 -dd.tl-zzzx { 278 +.tl-zzzx {
297 background: #96F396; 279 background: #96F396;
298 } 280 }
299 281
@@ -805,4 +787,33 @@ input.i-cbox[type=checkbox]{ @@ -805,4 +787,33 @@ input.i-cbox[type=checkbox]{
805 font-size: 10px; 787 font-size: 10px;
806 color: #bdbdbd; 788 color: #bdbdbd;
807 margin-left: 3px; 789 margin-left: 3px;
  790 +}
  791 +
  792 +
  793 +.tl-tip-panel{
  794 + padding: 3px;
  795 +}
  796 +
  797 +.tl-tip-panel .ct_title{
  798 + display: inline-block;
  799 + width: 42px;
  800 + vertical-align: top;
  801 + margin-top: 5px;
  802 + color: grey;
  803 + font-family: 微软雅黑;
  804 + margin: 5px 0 0 3px;
  805 +}
  806 +.tl-tip-panel span{
  807 + display: inline-block;
  808 + font-size: 11px;
  809 + width: 60px;
  810 + height: 21px;
  811 + line-height: 21px;
  812 + text-align: center;
  813 + margin: 3px 1px;
  814 + border-radius: 3px;
  815 +}
  816 +
  817 +.qtip.sch-tl-tip{
  818 + max-width: 335px;
808 } 819 }
809 \ No newline at end of file 820 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/home/layout.html
@@ -30,4 +30,5 @@ @@ -30,4 +30,5 @@
30 </div> 30 </div>
31 {{/each}} 31 {{/each}}
32 </script> 32 </script>
  33 +
33 </div> 34 </div>
src/main/resources/static/real_control_v2/fragments/home/line_panel.html
@@ -25,15 +25,15 @@ @@ -25,15 +25,15 @@
25 </script> 25 </script>
26 26
27 <script id="home-gps-tbody-temp" type="text/html"> 27 <script id="home-gps-tbody-temp" type="text/html">
28 - <dl id="home_gps_{{deviceId}}" data-device-id="{{deviceId}}">  
29 - <dd title="{{nbbm}}"><a>{{nbbm}}</a></dd>  
30 - <dd>{{speed}}</dd>  
31 - <dd>{{expectStopTime}}</dd>  
32 - <dd title="{{stationName}}">{{stationName}}</dd>  
33 - <dd>东川路地铁站</dd>  
34 - <dd>14:25</dd>  
35 - <dd>张三</dd>  
36 - <dd></dd>  
37 - </dl>  
38 - </script> 28 + <dl id="home_gps_{{deviceId}}" data-device-id="{{deviceId}}">
  29 + <dd title="{{nbbm}}"><a>{{nbbm}}</a></dd>
  30 + <dd>{{speed}}</dd>
  31 + <dd>{{expectStopTime}}</dd>
  32 + <dd title="{{stationName}}">{{stationName}}</dd>
  33 + <dd></dd>
  34 + <dd></dd>
  35 + <dd></dd>
  36 + <dd></dd>
  37 + </dl>
  38 +</script>
39 </div> 39 </div>
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
@@ -2,26 +2,43 @@ @@ -2,26 +2,43 @@
2 <!-- line schedule tab body layout template --> 2 <!-- line schedule tab body layout template -->
3 <script id="cont-line-layout-temp" type="text/html"> 3 <script id="cont-line-layout-temp" type="text/html">
4 <div class="uk-grid top-container"> 4 <div class="uk-grid top-container">
5 - <div class="uk-width-5-6 uk-grid schedule-wrap" > 5 + <div class="uk-width-5-6 uk-grid schedule-wrap">
6 <div class="uk-width-1-2"> 6 <div class="uk-width-1-2">
7 <div class="card-panel"></div> 7 <div class="card-panel"></div>
8 - </div>  
9 -  
10 - <div class="uk-width-1-2">  
11 - <div class="card-panel"></div>  
12 - </div>  
13 </div> 8 </div>
14 - <div class="uk-width-1-6" style="height: calc(100% - 1px);">  
15 - <div class="card-panel sys-mailbox" style="overflow: auto;">  
16 9
17 - </div> 10 + <div class="uk-width-1-2">
  11 + <div class="card-panel"></div>
18 </div> 12 </div>
19 </div> 13 </div>
  14 + <div class="uk-width-1-6" style="height: calc(100% - 1px);">
  15 + <div class="card-panel sys-mailbox" style="overflow: auto;">
20 16
21 - <div class="footer-chart">  
22 - <div class="card-panel">  
23 - <div class="svg-wrap"></div>  
24 </div> 17 </div>
25 </div> 18 </div>
  19 + </div>
  20 +
  21 + <div class="footer-chart">
  22 + <div class="card-panel">
  23 + <div class="svg-wrap"></div>
  24 + </div>
  25 + </div>
  26 + </script>
  27 +
  28 + <script id="sch-table-top-help-temp" type="text/html">
  29 + <div class="tl-tip-panel">
  30 + <div class="ct_title">
  31 + 图例
  32 + </div>
  33 + <div style="display: inline-block;width: calc(100% - 50px)">
  34 + <span class="tl-wd">误点</span>
  35 + <span class="tl-zzzx">正在执行</span>
  36 + <span class="tl-qrlb"></span>
  37 + <span class="tl-yzx">已执行</span>
  38 + <span class="tl-xxfc">消息发出</span>
  39 + <span class="tl-xxsd">消息收到</span>
  40 + <span class="tl-xxrd">消息阅读</span>
  41 + </div>
  42 + </div>
26 </script> 43 </script>
27 - </div> 44 +</div>
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 {{else}} 7 {{else}}
8 下行/{{line.endStationName}} 8 下行/{{line.endStationName}}
9 {{/if}} 9 {{/if}}
  10 + <i class="uk-icon-question-circle" ></i>
10 <div class="search_sch_panel"> 11 <div class="search_sch_panel">
11 <form class="uk-form" onsubmit="javascript:return false;"> 12 <form class="uk-form" onsubmit="javascript:return false;">
12 <div class="uk-autocomplete sch-search-autocom"> 13 <div class="uk-autocomplete sch-search-autocom">
@@ -68,6 +69,8 @@ @@ -68,6 +69,8 @@
68 tl-yzx 69 tl-yzx
69 {{else if sch.status==1}} 70 {{else if sch.status==1}}
70 tl-zzzx 71 tl-zzzx
  72 + {{else if sch.status == 0 && sch.late}}
  73 + tl-wd
71 {{/if}}"> 74 {{/if}}">
72 {{sch.fcsjActual}}<span class="fcsj-diff">{{sch.fcsj_diff}}</span> 75 {{sch.fcsjActual}}<span class="fcsj-diff">{{sch.fcsj_diff}}</span>
73 </dd> 76 </dd>
@@ -102,13 +105,15 @@ @@ -102,13 +105,15 @@
102 105
103 <script id="line-schedule-sfsj-temp" type="text/html"> 106 <script id="line-schedule-sfsj-temp" type="text/html">
104 <dd class=" 107 <dd class="
105 - {{if status==-1}}  
106 - tl-qrlb  
107 - {{else if status==2}}  
108 - tl-yzx  
109 - {{else if status==1}}  
110 - tl-zzzx  
111 - {{/if}}"> 108 +{{if sch.status==-1}}
  109 + tl-qrlb
  110 +{{else if sch.status==2}}
  111 + tl-yzx
  112 +{{else if sch.status==1}}
  113 + tl-zzzx
  114 +{{else if sch.status == 0 && sch.late}}
  115 + tl-wd
  116 +{{/if}}">
112 {{fcsjActual}}<span class="fcsj-diff">{{fcsj_diff}}</span> 117 {{fcsjActual}}<span class="fcsj-diff">{{fcsj_diff}}</span>
113 </dd> 118 </dd>
114 </script> 119 </script>
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
@@ -122,6 +122,7 @@ @@ -122,6 +122,7 @@
122 form.on('submit', function(e) { 122 form.on('submit', function(e) {
123 e.preventDefault(); 123 e.preventDefault();
124 resetPagination = true; 124 resetPagination = true;
  125 + page=0;
125 query(); 126 query();
126 }); 127 });
127 128
src/main/resources/static/real_control_v2/fragments/north/nav/charts/car_out_rate.html
@@ -144,6 +144,8 @@ @@ -144,6 +144,8 @@
144 yAxis: { 144 yAxis: {
145 'type': 'value', 145 'type': 'value',
146 'name': '发车率', 146 'name': '发车率',
  147 + 'min': 0,
  148 + 'max': 100
147 }, 149 },
148 title: { 150 title: {
149 text: date + '发车率', 151 text: date + '发车率',
src/main/resources/static/real_control_v2/fragments/north/nav/charts/device_online_rate.html
@@ -144,6 +144,8 @@ @@ -144,6 +144,8 @@
144 yAxis: { 144 yAxis: {
145 'type': 'value', 145 'type': 'value',
146 'name': '上线率', 146 'name': '上线率',
  147 + 'min': 0,
  148 + 'max': 100
147 }, 149 },
148 title: { 150 title: {
149 text: date + '设备上线率', 151 text: date + '设备上线率',
src/main/resources/static/real_control_v2/fragments/north/nav/charts/strat_end_punctuality_rate.html 0 → 100644
  1 +<div class="uk-modal" id="strat-end-punctuality-rate-modal">
  2 + <div class="uk-modal-dialog" style="width: 1200px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>首末班次准点率</h2></div>
  6 +
  7 + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="margin-bottom: 10px;">
  8 + <form class="uk-form search-form">
  9 + <fieldset data-uk-margin>
  10 + <div class="uk-form-icon">
  11 + <i class="uk-icon-calendar"></i>
  12 + <input type="month" id="monthInput">
  13 + </div>
  14 + <button class="uk-button" id="countBtn" >统计</button>
  15 + </fieldset>
  16 + </form>
  17 + </div>
  18 +
  19 + <div class="chart-wrap" style="height: 570px;">
  20 +
  21 + </div>
  22 +
  23 + <div class="load-panel">
  24 + <i class="uk-icon-spinner uk-icon-spin"></i>
  25 + 正在汇总数据
  26 + </div>
  27 + </div>
  28 +
  29 + <script>
  30 + (function () {
  31 +
  32 + var modal = '#strat-end-punctuality-rate-modal';
  33 + var chartObj;
  34 +
  35 +
  36 + var gb_option = {
  37 + timeline: {
  38 + axisType: 'category',
  39 + label: {
  40 + formatter: function (s, a) {
  41 + return s.slice(8).length==1?'0'+s.slice(8):s.slice(8);
  42 + }
  43 + },
  44 + x: 20,
  45 + x2: 5
  46 + }
  47 + };
  48 +
  49 +
  50 + $(modal).on('init', function (e, data) {
  51 + //默认当前月
  52 + var m = moment().format('YYYY-MM');
  53 + $('#monthInput', modal).val(m);
  54 +
  55 + chartObj = echarts.init($('.chart-wrap', modal)[0]);
  56 + chartObj.on('click', chartObjClickHandler);
  57 + renderChart();
  58 +
  59 + });
  60 +
  61 + //实发准点 -dfsj 待发时间戳(秒),sfsj 实发时间戳(秒)
  62 + function isPunctuality(dfsj, sfsj){
  63 + if(dfsj == sfsj)
  64 + return true;
  65 + //快1
  66 + if(sfsj < dfsj && dfsj - sfsj <= 60*4)
  67 + return true;
  68 + //慢3
  69 + if(dfsj < sfsj && sfsj - dfsj <= 60*6)
  70 + return true;
  71 +
  72 + return false;
  73 + }
  74 +
  75 + //计算准点率
  76 + function calcPunctualityRate(data){
  77 + var line2Reate={}, seff, eeff, fs="YYYY-MM-DDHH:mm";
  78 + for(var lineCode in data){
  79 + seff=0;
  80 + eeff=0;
  81 + $.each(data[lineCode], function(){
  82 + //首班时间
  83 + if(this.startTime.length == 11){
  84 + var arr=this.startTime.split('/');
  85 + var sDfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
  86 + sSfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
  87 +
  88 + if(isPunctuality(sDfsj, sSfsj)){
  89 + this.s_isPunctuality=1;
  90 + seff++;
  91 + }
  92 + }
  93 + else
  94 + this.s_isPunctuality=-1;
  95 + //末班时间
  96 + if(this.endTime.length == 11){
  97 + var arr=this.endTime.split('/');
  98 + var eDfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
  99 + eSfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
  100 +
  101 + if(isPunctuality(eDfsj, eSfsj)){
  102 + this.e_isPunctuality=1;
  103 + eeff++;
  104 + }
  105 + }
  106 + else
  107 + this.e_isPunctuality=-1;
  108 + });
  109 +
  110 + line2Reate[lineCode]={
  111 + seff: (seff/data[lineCode].length*100).toFixed(2),
  112 + eeff: (eeff/data[lineCode].length*100).toFixed(2)
  113 + };
  114 + }
  115 +
  116 + return line2Reate;
  117 + }
  118 +
  119 + $('#countBtn', modal).on('click', renderChart);
  120 +
  121 + var renderData;
  122 + function renderChart(){
  123 + //时间轴数据
  124 + var lastdate = moment().format('DD')
  125 + ,month = $('#monthInput', modal).val();
  126 + if(month!=moment().format('YYYY-MM')){
  127 + //不是当前月
  128 + lastdate = new Date(month.split('-')[0],month.split('-')[1],0).getDate();
  129 + }
  130 +
  131 + var timeData = [];
  132 + for (var i = 0; i < lastdate; i++)
  133 + timeData.push(month + '-' + (i + 1));
  134 + //时间轴
  135 + gb_option.timeline.data = timeData;
  136 + gb_option.timeline.currentIndex=timeData.length-1;
  137 +
  138 + //xAxis
  139 + var xAxisData=[],lineCodeArr=[];
  140 + $.each(gb_data_basic.activeLines, function(){
  141 + xAxisData.push(this.name);
  142 + lineCodeArr.push(this.lineCode);
  143 + });
  144 +
  145 +
  146 + $('.load-panel', modal).show();
  147 + $('#countBtn', modal).attr('disabled', 'disabled');
  148 + //统计数据
  149 + gb_common.$get('/realCharts/stratEndPunctualityRate', {idx: gb_data_basic.line_idx, month: $('#monthInput', modal).val()}, function (rs) {
  150 +
  151 + if(!rs || rs.length==0){
  152 + notify_err("缺少" + month + "的数据");
  153 + $('.load-panel', modal).hide();
  154 + $('#countBtn', modal).removeAttr('disabled');
  155 + return;
  156 + }
  157 +
  158 + //日期分组数据
  159 + var groupList=gb_common.groupBy(rs, 'dateStr')
  160 + ,data=[], opt={};
  161 +
  162 + renderData=groupList;
  163 + var subData,eData;
  164 + for(var date in groupList){
  165 + //lineCode再次分组,计算准点率
  166 + var line2Reate=calcPunctualityRate(gb_common.groupBy(groupList[date],'lineCode'));
  167 +
  168 + sData=[], eData=[];
  169 + //subData=[];
  170 + $.each(lineCodeArr, function(i, code){
  171 + sData.push({
  172 + value: line2Reate[code]?line2Reate[code].seff:0,
  173 + date:date,
  174 + lineCode: code
  175 + });
  176 +
  177 + eData.push({
  178 + value: line2Reate[code]?line2Reate[code].eeff:0,
  179 + date:date,
  180 + lineCode: code
  181 + });
  182 + });
  183 +
  184 + data.push({
  185 + legend: {
  186 + data: ['首班', '末班']
  187 + },
  188 + grid: {x: 30, x2: 5, height: 390, y: 94, y2: 50},
  189 + tooltip: {
  190 + 'trigger': 'axis',
  191 + axisPointer: {
  192 + type: 'shadow'
  193 + }
  194 + },
  195 + toolbox: {'show': false},
  196 + calculable: true,
  197 + xAxis: [{
  198 + 'type': 'category',
  199 + 'data': xAxisData
  200 + }],
  201 + yAxis: {
  202 + 'type': 'value',
  203 + 'name': '准点率',
  204 + 'min': 0,
  205 + 'max': 100
  206 + },
  207 + title: {
  208 + text: date + '首末班次准点率',
  209 + subtext: '车辆的首末班发车数据(只统计正常班次)'
  210 + },
  211 + text: date + '发车率',
  212 + series: [{
  213 + name: '首班',
  214 + type: 'bar',
  215 + data: sData
  216 + },
  217 + {
  218 + name: '末班',
  219 + type: 'bar',
  220 + data: eData
  221 + }]
  222 + });
  223 + }
  224 +
  225 + $('.load-panel', modal).hide();
  226 + $('#countBtn', modal).removeAttr('disabled');
  227 + gb_option.options=data;
  228 + chartObj.setOption(gb_option);
  229 + });
  230 + }
  231 +
  232 + function chartObjClickHandler(obj) {
  233 + if(obj.componentType!='series' || obj.componentSubType!='bar')
  234 + return;
  235 +
  236 + var lineGroupData=gb_common.groupBy(renderData[obj.data.date],'lineCode');
  237 + var list=lineGroupData[obj.data.lineCode];
  238 + //console.log('show list', list);
  239 +
  240 + $.get('/real_control_v2/fragments/north/nav/charts/strat_end_punctuality_rate_dateil.html', function(htmlStr){
  241 + $(document.body).append(htmlStr);
  242 + var detailModal='#s-e-punctuality-rate-dateil-modal';
  243 + var elem = UIkit.modal(detailModal, {bgclose: true,modal:false}).show();
  244 + $(detailModal).trigger('init', {list: list});
  245 + })
  246 + }
  247 + })();
  248 + </script>
  249 +</div>
src/main/resources/static/real_control_v2/fragments/north/nav/charts/strat_end_punctuality_rate_dateil.html 0 → 100644
  1 +<div class="uk-modal" id="s-e-punctuality-rate-dateil-modal">
  2 + <div class="uk-modal-dialog" style="width: 650px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div style="margin:5px 0 -18px;">
  5 + <table class="ct-fixed-table uk-table uk-table-hover">
  6 + <thead>
  7 + <tr>
  8 + <th style="width: 14%;">日期</th>
  9 + <th style="width: 14%;">线路</th>
  10 + <th style="width: 14%;">车辆</th>
  11 + <th style="width: 23%;">首班</th>
  12 + <th style="width: 23%;">末班</th>
  13 + </tr>
  14 + </thead>
  15 + <tbody>
  16 + </tbody>
  17 + </table>
  18 + </div>
  19 + </div>
  20 +
  21 + <script id="s-e-punctuality-rate-dateil-table-temp" type="text/html">
  22 + {{each list as obj i}}
  23 + <tr>
  24 + <td>{{obj.dateStr}}</td>
  25 + <td>{{obj.lineName}}</td>
  26 + <td>{{obj.nbbm}}</td>
  27 + <td>
  28 + {{obj.startTime}}
  29 + {{if obj.s_isPunctuality}}
  30 + {{if obj.s_isPunctuality==-1}}
  31 + <div class="uk-badge uk-badge-danger">无实发</div>
  32 + {{/if}}
  33 + {{else}}
  34 + <div class="uk-badge uk-badge-danger">误点</div>
  35 + {{/if}}
  36 + </td>
  37 +
  38 + <td>
  39 + {{obj.endTime}}
  40 + {{if obj.e_isPunctuality}}
  41 + {{if obj.e_isPunctuality==-1}}
  42 + <div class="uk-badge uk-badge-danger">无实发</div>
  43 + {{/if}}
  44 + {{else}}
  45 + <div class="uk-badge uk-badge-danger">误点</div>
  46 + {{/if}}
  47 + </td>
  48 + </tr>
  49 + {{/each}}
  50 + </script>
  51 +
  52 + <script>
  53 + (function() {
  54 + var modal = '#s-e-punctuality-rate-dateil-modal';
  55 +
  56 + $(modal).on('init', function(e, data) {
  57 + //console.log(data.list);
  58 + var code2Name = gb_data_basic.lineCode2NameAll();
  59 + $.each(data.list, function(){
  60 + this.lineName=code2Name[this.lineCode];
  61 + });
  62 +
  63 + /*data.list.sort(function(a, b){
  64 + if(!a.firstOut)
  65 + return -1;
  66 + if(!b.firstOut)
  67 + return 1;
  68 + return a.firstOut.localeCompare(b.firstOut);
  69 + });*/
  70 +
  71 + var tbodys=template('s-e-punctuality-rate-dateil-table-temp', {list: data.list});
  72 + $('table tbody', modal).html(tbodys);
  73 + });
  74 +
  75 + })();
  76 + </script>
  77 +</div>
src/main/resources/static/real_control_v2/fragments/north/nav/directive_history.html
@@ -124,6 +124,7 @@ @@ -124,6 +124,7 @@
124 form.on('submit', function(e) { 124 form.on('submit', function(e) {
125 e.preventDefault(); 125 e.preventDefault();
126 resetPagination = true; 126 resetPagination = true;
  127 + page=0;
127 query(); 128 query();
128 }); 129 });
129 130
src/main/resources/static/real_control_v2/fragments/north/nav/report_80.html
@@ -93,6 +93,7 @@ @@ -93,6 +93,7 @@
93 form.on('submit', function(e) { 93 form.on('submit', function(e) {
94 e.preventDefault(); 94 e.preventDefault();
95 resetPagination = true; 95 resetPagination = true;
  96 + page=0;
96 query(); 97 query();
97 }); 98 });
98 99
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
@@ -17,6 +17,11 @@ @@ -17,6 +17,11 @@
17 "id": 1.3, 17 "id": 1.3,
18 "text": "设备上线率", 18 "text": "设备上线率",
19 "event": "device_online_rate" 19 "event": "device_online_rate"
  20 + },
  21 + {
  22 + "id": 1.4,
  23 + "text": "首末班次准点率",
  24 + "event": "s_e_punctuality_rate"
20 } 25 }
21 ] 26 ]
22 }, 27 },
src/main/resources/static/real_control_v2/js/home/line_panel.js
@@ -83,7 +83,20 @@ var gb_home_line_panel = (function() { @@ -83,7 +83,20 @@ var gb_home_line_panel = (function() {
83 $(cells[1]).text(t.speed); 83 $(cells[1]).text(t.speed);
84 $(cells[2]).html(t.expectStopTime == null ? '' : t.expectStopTime); 84 $(cells[2]).html(t.expectStopTime == null ? '' : t.expectStopTime);
85 $(cells[3]).text(t.stationName).attr('title', t.stationName); 85 $(cells[3]).text(t.stationName).attr('title', t.stationName);
86 - } 86 +
  87 + //班次信息
  88 + if(t.schId){
  89 + var sch=gb_schedule_table.findScheduleByLine(t.lineId)[t.schId];
  90 + if(!sch)
  91 + return;
  92 +
  93 + $(cells[4]).text(sch.zdzName);
  94 + $(cells[5]).text(sch.zdsj);
  95 + $(cells[6]).text(sch.jName);
  96 + if(sch.sName)
  97 + $(cells[7]).text(sch.sName);
  98 + }
  99 + };
87 100
88 var sortRows = function($tbody) { 101 var sortRows = function($tbody) {
89 var rows = $tbody.find('dl'); 102 var rows = $tbody.find('dl');
src/main/resources/static/real_control_v2/js/line_schedule/layout.js
@@ -21,7 +21,37 @@ var gb_line_layout = (function() { @@ -21,7 +21,37 @@ var gb_line_layout = (function() {
21 21
22 cb && cb(); 22 cb && cb();
23 }); 23 });
24 - } 24 + };
  25 +
  26 + $(document).on('mouseenter', '.schedule-wrap i.uk-icon-question-circle', function() {
  27 + $(this).qtip({
  28 + show: {
  29 + ready: true,
  30 + delay: 300
  31 + },
  32 + content: {
  33 + text: function() {
  34 + return temps['sch-table-top-help-temp']({});
  35 + }
  36 + },
  37 + position: {
  38 + viewport: $(window)
  39 + },
  40 + style: {
  41 + classes: 'qtip-light qtip-rounded qtip-shadow sch-tl-tip'
  42 + },
  43 + hide: {
  44 + fixed: true,
  45 + delay: 300
  46 + },
  47 + events: {
  48 + hidden: function(event, api) {
  49 + //destroy dom
  50 + $(this).qtip('destroy', true);
  51 + }
  52 + }// max-width: 335px;
  53 + });
  54 + });
25 55
26 return { 56 return {
27 layout: layout 57 layout: layout
src/main/resources/static/real_control_v2/js/north/toolbar.js
@@ -59,6 +59,9 @@ var gb_northToolbar = (function() { @@ -59,6 +59,9 @@ var gb_northToolbar = (function() {
59 }, 59 },
60 turnout_rate: function () { 60 turnout_rate: function () {
61 open_modal('/real_control_v2/fragments/north/nav/charts/car_out_rate.html', {}, modal_opts); 61 open_modal('/real_control_v2/fragments/north/nav/charts/car_out_rate.html', {}, modal_opts);
  62 + },
  63 + s_e_punctuality_rate: function () {
  64 + open_modal('/real_control_v2/fragments/north/nav/charts/strat_end_punctuality_rate.html', {}, modal_opts);
62 } 65 }
63 } 66 }
64 })(); 67 })();