Commit 5acbb9c83336b90911063fc503873145a79102bc

Authored by 娄高锋
2 parents 68257dd4 609c1137

Merge branch 'minhang' of 192.168.168.201:panzhaov5/bsth_control into minhang

Showing 104 changed files with 5012 additions and 1123 deletions
@@ -225,6 +225,12 @@ @@ -225,6 +225,12 @@
225 <artifactId>spring-boot-devtools</artifactId> 225 <artifactId>spring-boot-devtools</artifactId>
226 <optional>true</optional> 226 <optional>true</optional>
227 </dependency>--> 227 </dependency>-->
  228 + <dependency>
  229 + <groupId>com.vividsolutions</groupId>
  230 + <artifactId>jts</artifactId>
  231 + <version>1.13</version>
  232 + </dependency>
  233 +
228 </dependencies> 234 </dependencies>
229 235
230 <dependencyManagement> 236 <dependencyManagement>
src/main/java/com/bsth/controller/forms/ExportController.java
@@ -65,10 +65,12 @@ public class ExportController { @@ -65,10 +65,12 @@ public class ExportController {
65 i++; 65 i++;
66 } 66 }
67 67
  68 +
  69 +
68 try { 70 try {
69 listI.add(resList.iterator()); 71 listI.add(resList.iterator());
70 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\"; 72 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
71 - ee.excelReplace(listI, new Object[] { map }, path + "mould\\linepassengerflow.xls", 73 + ee.excelReplace(listI, new Object[] { map }, path + "mould\\linepasswengerflow.xls",
72 path + "export\\线路客流量报表" + sdfSimple.format(sdfMonth.parse(map.get("date").toString())) + ".xls"); 74 path + "export\\线路客流量报表" + sdfSimple.format(sdfMonth.parse(map.get("date").toString())) + ".xls");
73 } catch (Exception e) { 75 } catch (Exception e) {
74 e.printStackTrace(); 76 e.printStackTrace();
@@ -189,7 +191,7 @@ public class ExportController { @@ -189,7 +191,7 @@ public class ExportController {
189 listI.add(resList.iterator()); 191 listI.add(resList.iterator());
190 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\"; 192 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
191 ee.excelReplace(listI, new Object[] { map }, path + "mould\\singledata.xls", 193 ee.excelReplace(listI, new Object[] { map }, path + "mould\\singledata.xls",
192 - path + "export\\路单报表" + sdfSimple.format(sdfMonth.parse(map.get("startDate").toString())) + ".xls"); 194 + path + "export\\路单数据" + sdfSimple.format(sdfMonth.parse(map.get("startDate").toString())) + ".xls");
193 } catch (Exception e) { 195 } catch (Exception e) {
194 e.printStackTrace(); 196 e.printStackTrace();
195 } 197 }
@@ -203,8 +205,8 @@ public class ExportController { @@ -203,8 +205,8 @@ public class ExportController {
203 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 205 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
204 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 206 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
205 ReportUtils ee = new ReportUtils(); 207 ReportUtils ee = new ReportUtils();
206 - List<Vehicleloading> vehicleloading = formsService.vehicleloading(/*map.get("gsdmVehic").toString(),map.get("fgsdmVehic").toString(),*/map.get("line").toString(),  
207 - map.get("date").toString()); 208 + List<Vehicleloading> vehicleloading = formsService.vehicleloading(map.get("gsdmVehic").toString(),map.get("fgsdmVehic").toString(),map.get("line").toString(),
  209 + map.get("data").toString());
208 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 210 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
209 int i = 1; 211 int i = 1;
210 for (Vehicleloading l : vehicleloading) { 212 for (Vehicleloading l : vehicleloading) {
@@ -214,8 +216,8 @@ public class ExportController { @@ -214,8 +216,8 @@ public class ExportController {
214 m.put("gS", l.getgS()); 216 m.put("gS", l.getgS());
215 m.put("xL", l.getxL()); 217 m.put("xL", l.getxL());
216 m.put("clzbh", l.getClzbh()); 218 m.put("clzbh", l.getClzbh());
217 - m.put("hyl", l.getHyl());  
218 m.put("jzl", l.getJzl()); 219 m.put("jzl", l.getJzl());
  220 + m.put("hyl", l.getHyl());
219 m.put("ls", l.getLs()); 221 m.put("ls", l.getLs());
220 m.put("jhlc", l.getJhlc()); 222 m.put("jhlc", l.getJhlc());
221 m.put("unyyyl", l.getUnyyyl()); 223 m.put("unyyyl", l.getUnyyyl());
@@ -229,7 +231,7 @@ public class ExportController { @@ -229,7 +231,7 @@ public class ExportController {
229 listI.add(resList.iterator()); 231 listI.add(resList.iterator());
230 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\"; 232 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
231 ee.excelReplace(listI, new Object[] { map }, path + "mould\\vehicleloading.xls", 233 ee.excelReplace(listI, new Object[] { map }, path + "mould\\vehicleloading.xls",
232 - path + "export\\车辆加注" + sdfSimple.format(sdfMonth.parse(map.get("date").toString())) + ".xls"); 234 + path + "export\\车辆加注" + sdfSimple.format(sdfMonth.parse(map.get("dat").toString())) + ".xls");
233 } catch (Exception e) { 235 } catch (Exception e) {
234 e.printStackTrace(); 236 e.printStackTrace();
235 } 237 }
@@ -417,5 +419,9 @@ public class ExportController { @@ -417,5 +419,9 @@ public class ExportController {
417 } 419 }
418 return resList; 420 return resList;
419 } 421 }
  422 +
  423 +
  424 +
  425 +
420 426
421 } 427 }
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
@@ -80,9 +80,9 @@ public class MCY_FormsController { @@ -80,9 +80,9 @@ public class MCY_FormsController {
80 80
81 // 车辆加注 81 // 车辆加注
82 @RequestMapping(value = "/vehicleloading", method = RequestMethod.POST) 82 @RequestMapping(value = "/vehicleloading", method = RequestMethod.POST)
83 - public List<Vehicleloading> vehicleloading(/*@RequestParam String gsdmVehic, @RequestParam String fgsdmVehic,*/ 83 + public List<Vehicleloading> vehicleloading(@RequestParam String gsdmVehic, @RequestParam String fgsdmVehic,
84 @RequestParam String line, @RequestParam String data) { 84 @RequestParam String line, @RequestParam String data) {
85 - return formsService.vehicleloading(/*gsdmVehic, fgsdmVehic, */line, data); 85 + return formsService.vehicleloading(gsdmVehic, fgsdmVehic, line, data);
86 } 86 }
87 87
88 // 运营服务阶段报表 88 // 运营服务阶段报表
src/main/java/com/bsth/controller/gps/GpsController.java
1 package com.bsth.controller.gps; 1 package com.bsth.controller.gps;
2 2
3 -import java.util.List;  
4 -import java.util.Map;  
5 -  
6 -import org.springframework.beans.factory.annotation.Autowired;  
7 -import org.springframework.web.bind.annotation.*;  
8 -  
9 import com.bsth.data.BasicData; 3 import com.bsth.data.BasicData;
10 import com.bsth.data.gpsdata.GpsEntity; 4 import com.bsth.data.gpsdata.GpsEntity;
11 import com.bsth.data.gpsdata.GpsRealData; 5 import com.bsth.data.gpsdata.GpsRealData;
12 import com.bsth.service.gps.GpsService; 6 import com.bsth.service.gps.GpsService;
13 import com.google.common.base.Splitter; 7 import com.google.common.base.Splitter;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.web.bind.annotation.*;
  10 +
  11 +import java.util.List;
  12 +import java.util.Map;
14 13
15 @RestController 14 @RestController
16 @RequestMapping("gps") 15 @RequestMapping("gps")
@@ -70,7 +69,7 @@ public class GpsController { @@ -70,7 +69,7 @@ public class GpsController {
70 return gpsService.history(nbbmArray, st, et); 69 return gpsService.history(nbbmArray, st, et);
71 } 70 }
72 71
73 - /*@RequestMapping(value = "/arrival/ram") 72 + /*@RequestMapping(value = "/analyse/ram")
74 public List<ArrivalInfo> ramData(@RequestParam String nbbm) { 73 public List<ArrivalInfo> ramData(@RequestParam String nbbm) {
75 return ArrivalDataBuffer.allMap.get(nbbm); 74 return ArrivalDataBuffer.allMap.get(nbbm);
76 }*/ 75 }*/
@@ -84,4 +83,9 @@ public class GpsController { @@ -84,4 +83,9 @@ public class GpsController {
84 public Map<String, Object> findBuffAeraByCode(@RequestParam String code,@RequestParam String type){ 83 public Map<String, Object> findBuffAeraByCode(@RequestParam String code,@RequestParam String type){
85 return gpsService.findBuffAeraByCode(code, type); 84 return gpsService.findBuffAeraByCode(code, type);
86 } 85 }
  86 +
  87 + @RequestMapping(value = "/findRoadSpeed")
  88 + public Map<String, Object> findRoadSpeed(@RequestParam String lineCode){
  89 + return gpsService.findRoadSpeed(lineCode);
  90 + }
87 } 91 }
src/main/java/com/bsth/controller/oil/YlbController.java
@@ -3,7 +3,9 @@ package com.bsth.controller.oil; @@ -3,7 +3,9 @@ package com.bsth.controller.oil;
3 import java.text.ParseException; 3 import java.text.ParseException;
4 import java.text.SimpleDateFormat; 4 import java.text.SimpleDateFormat;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
  6 +import java.util.Calendar;
6 import java.util.Date; 7 import java.util.Date;
  8 +import java.util.GregorianCalendar;
7 import java.util.HashMap; 9 import java.util.HashMap;
8 import java.util.Iterator; 10 import java.util.Iterator;
9 import java.util.List; 11 import java.util.List;
@@ -107,8 +109,16 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{ @@ -107,8 +109,16 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{
107 try { 109 try {
108 String rq=map.get("rq").toString(); 110 String rq=map.get("rq").toString();
109 if(!(rq=="")){ 111 if(!(rq=="")){
  112 +
110 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 113 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
111 - map.put("rq_eq", sdf.parse(rq)); 114 + Calendar calendar = new GregorianCalendar();
  115 + calendar.setTime(sdf.parse(rq));
  116 + calendar.add(calendar.DATE,1);
  117 + Date date=calendar.getTime();
  118 + map.put("rq_ge", rq);
  119 + map.put("rq_le", sdf.format(date));
  120 + System.out.println(rq);
  121 + System.out.println(sdf.format(date));
112 } 122 }
113 } catch (ParseException e) { 123 } catch (ParseException e) {
114 // TODO Auto-generated catch block 124 // TODO Auto-generated catch block
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
@@ -292,8 +292,9 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -292,8 +292,9 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
292 } 292 }
293 293
294 @RequestMapping(value = "/queryUserInfo") 294 @RequestMapping(value = "/queryUserInfo")
295 - public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line, @RequestParam String date) {  
296 - return scheduleRealInfoService.queryUserInfo(line, date); 295 + public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line,
  296 + @RequestParam String date,@RequestParam String state) {
  297 + return scheduleRealInfoService.queryUserInfo(line, date,state);
297 } 298 }
298 299
299 @RequestMapping(value = "/exportWaybill") 300 @RequestMapping(value = "/exportWaybill")
src/main/java/com/bsth/controller/report/ReportController.java
@@ -50,23 +50,28 @@ public class ReportController { @@ -50,23 +50,28 @@ public class ReportController {
50 } 50 }
51 51
52 @RequestMapping(value = "/tbodyTime1", method = RequestMethod.GET) 52 @RequestMapping(value = "/tbodyTime1", method = RequestMethod.GET)
53 - public Map<String, Object> tbodyTime1(@RequestParam String line,@RequestParam String date) {  
54 - return service.tbodyTime1(line, date); 53 + public Map<String, Object> tbodyTime1(@RequestParam String line,@RequestParam String ttinfo) {
  54 + return service.tbodyTime1(line, ttinfo);
55 } 55 }
56 56
57 @RequestMapping(value = "/tbodyTime2", method = RequestMethod.GET) 57 @RequestMapping(value = "/tbodyTime2", method = RequestMethod.GET)
58 - public Map<String, Object> tbodyTime2(@RequestParam String line,@RequestParam String date) {  
59 - return service.tbodyTime2(line, date); 58 + public Map<String, Object> tbodyTime2(@RequestParam String line,@RequestParam String ttinfo) {
  59 + return service.tbodyTime2(line, ttinfo);
60 } 60 }
61 61
62 @RequestMapping(value = "/tbodyTime3", method = RequestMethod.GET) 62 @RequestMapping(value = "/tbodyTime3", method = RequestMethod.GET)
63 - public List<Map<String, Object>> tbodyTime3(@RequestParam String line,@RequestParam String date) {  
64 - return service.tbodyTime3(line, date); 63 + public List<Map<String, Object>> tbodyTime3(@RequestParam String line,@RequestParam String ttinfo) {
  64 + return service.tbodyTime3(line, ttinfo);
65 } 65 }
66 66
67 @RequestMapping(value = "/tbodyTime5", method = RequestMethod.GET) 67 @RequestMapping(value = "/tbodyTime5", method = RequestMethod.GET)
68 - public List<Map<String, Object>> tbodyTime5(@RequestParam String line,@RequestParam String date) {  
69 - return service.tbodyTime5(line, date); 68 + public List<Map<String, Object>> tbodyTime5(@RequestParam String line,@RequestParam String ttinfo) {
  69 + return service.tbodyTime5(line, ttinfo);
  70 + }
  71 +
  72 + @RequestMapping(value="/getTtinfo", method = RequestMethod.GET)
  73 + public List<Map<String,Object>> getTtinfo(@RequestParam Map<String, Object> map){
  74 + return service.getTtinfo(map);
70 } 75 }
71 76
72 } 77 }
src/main/java/com/bsth/data/BasicData.java
1 package com.bsth.data; 1 package com.bsth.data;
2 2
3 import com.bsth.Application; 3 import com.bsth.Application;
  4 +import com.bsth.data.gpsdata.analyse.GeoCacheData;
4 import com.bsth.entity.*; 5 import com.bsth.entity.*;
5 import com.bsth.entity.schedule.CarConfigInfo; 6 import com.bsth.entity.schedule.CarConfigInfo;
6 import com.bsth.repository.*; 7 import com.bsth.repository.*;
@@ -57,7 +58,7 @@ public class BasicData implements CommandLineRunner { @@ -57,7 +58,7 @@ public class BasicData implements CommandLineRunner {
57 public static Map<String, String> lineCode2NameMap; 58 public static Map<String, String> lineCode2NameMap;
58 59
59 //线路编码_站点编码 == 0|1 上下行 60 //线路编码_站点编码 == 0|1 上下行
60 - public static Map<String, Integer> lineStationUpDownMap; 61 + //public static Map<String, Integer> lineStationUpDownMap;
61 62
62 //停车场 63 //停车场
63 public static List<String> parkCodeList; 64 public static List<String> parkCodeList;
@@ -86,7 +87,7 @@ public class BasicData implements CommandLineRunner { @@ -86,7 +87,7 @@ public class BasicData implements CommandLineRunner {
86 87
87 @Override 88 @Override
88 public void run(String... arg0) throws Exception { 89 public void run(String... arg0) throws Exception {
89 - Application.mainServices.scheduleWithFixedDelay(dataLoader, 0, 1, TimeUnit.HOURS); 90 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS);
90 } 91 }
91 92
92 93
@@ -117,6 +118,9 @@ public class BasicData implements CommandLineRunner { @@ -117,6 +118,9 @@ public class BasicData implements CommandLineRunner {
117 @Autowired 118 @Autowired
118 BusinessRepository businessRepository; 119 BusinessRepository businessRepository;
119 120
  121 + @Autowired
  122 + GeoCacheData geoCacheData;
  123 +
120 124
121 @Override 125 @Override
122 public void run() { 126 public void run() {
@@ -138,11 +142,13 @@ public class BasicData implements CommandLineRunner { @@ -138,11 +142,13 @@ public class BasicData implements CommandLineRunner {
138 //车辆和线路映射信息 142 //车辆和线路映射信息
139 loadNbbm2LineInfo(); 143 loadNbbm2LineInfo();
140 //站点路由信息 144 //站点路由信息
141 - loadStationRouteInfo(); 145 + //loadStationRouteInfo();
142 //人员信息 146 //人员信息
143 loadPersonnelInfo(); 147 loadPersonnelInfo();
144 //公司信息 148 //公司信息
145 loadBusinessInfo(); 149 loadBusinessInfo();
  150 +
  151 + geoCacheData.loadData();
146 logger.info("加载基础数据成功!,"); 152 logger.info("加载基础数据成功!,");
147 } catch (Exception e) { 153 } catch (Exception e) {
148 logger.error("加载基础数据时出现异常,", e); 154 logger.error("加载基础数据时出现异常,", e);
@@ -151,7 +157,7 @@ public class BasicData implements CommandLineRunner { @@ -151,7 +157,7 @@ public class BasicData implements CommandLineRunner {
151 } 157 }
152 158
153 159
154 - private void loadStationRouteInfo() { 160 +/* private void loadStationRouteInfo() {
155 Iterator<StationRoute> iterator = stationRouteRepository.findAllEffective().iterator(); 161 Iterator<StationRoute> iterator = stationRouteRepository.findAllEffective().iterator();
156 162
157 Map<String, String> sePointMap = new HashMap<>(); 163 Map<String, String> sePointMap = new HashMap<>();
@@ -172,7 +178,7 @@ public class BasicData implements CommandLineRunner { @@ -172,7 +178,7 @@ public class BasicData implements CommandLineRunner {
172 } 178 }
173 lineStationUpDownMap = map; 179 lineStationUpDownMap = map;
174 lineSEPointMap = sePointMap; 180 lineSEPointMap = sePointMap;
175 - } 181 + }*/
176 182
177 /** 183 /**
178 * loadBusinessInfo 184 * loadBusinessInfo
@@ -280,7 +286,7 @@ public class BasicData implements CommandLineRunner { @@ -280,7 +286,7 @@ public class BasicData implements CommandLineRunner {
280 /** 286 /**
281 * 加载运管处的站点及序号 287 * 加载运管处的站点及序号
282 * 上行从1开始,下行顺序续编 288 * 上行从1开始,下行顺序续编
283 - */ 289 +
284 List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc(); 290 List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();
285 if(ygcLines != null && ygcLines.size() > 0){ 291 if(ygcLines != null && ygcLines.size() > 0){
286 int size = ygcLines.size(); 292 int size = ygcLines.size();
@@ -299,7 +305,7 @@ public class BasicData implements CommandLineRunner { @@ -299,7 +305,7 @@ public class BasicData implements CommandLineRunner {
299 key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2]; 305 key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];
300 tempStationName2YgcNumber.put(key,num++); 306 tempStationName2YgcNumber.put(key,num++);
301 } 307 }
302 - } 308 + }*/
303 } 309 }
304 310
305 lineId2CodeMap = biMap; 311 lineId2CodeMap = biMap;
src/main/java/com/bsth/data/arrival/AnalyseData.java
1 package com.bsth.data.arrival; 1 package com.bsth.data.arrival;
2 2
3 -import java.util.ArrayList;  
4 -import java.util.Collections;  
5 -import java.util.List;  
6 -import java.util.Set;  
7 -  
8 import org.slf4j.Logger; 3 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory; 4 import org.slf4j.LoggerFactory;
10 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
11 6
12 -import com.bsth.data.BasicData; 7 +import java.util.ArrayList;
  8 +import java.util.Collections;
  9 +import java.util.List;
  10 +import java.util.Set;
13 11
14 /** 12 /**
15 * 13 *
@@ -98,14 +96,15 @@ public class AnalyseData { @@ -98,14 +96,15 @@ public class AnalyseData {
98 } 96 }
99 97
100 private boolean effective(ArrivalEntity arr){ 98 private boolean effective(ArrivalEntity arr){
101 - //停车场 99 + /*//停车场
102 if(BasicData.parkCodeList.contains(arr.getStopNo())){ 100 if(BasicData.parkCodeList.contains(arr.getStopNo())){
103 arr.setTcc(true); 101 arr.setTcc(true);
104 return true; 102 return true;
105 } 103 }
106 - 104 +
107 Integer upDown = BasicData.lineStationUpDownMap.get(arr.getLineCode() + "_" + arr.getStopNo()); 105 Integer upDown = BasicData.lineStationUpDownMap.get(arr.getLineCode() + "_" + arr.getStopNo());
108 -  
109 - return arr.getUpDown() == upDown || BasicData.parkCodeList.contains(arr.getStopNo()); 106 +
  107 + return arr.getUpDown() == upDown || BasicData.parkCodeList.contains(arr.getStopNo());*/
  108 + return false;
110 } 109 }
111 } 110 }
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
@@ -70,7 +70,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -70,7 +70,7 @@ public class ForecastRealServer implements CommandLineRunner {
70 /* public void forecast(String nbbm){ 70 /* public void forecast(String nbbm){
71 logger.info("预测," + nbbm); 71 logger.info("预测," + nbbm);
72 //当前执行班次 72 //当前执行班次
73 - ScheduleRealInfo sch = dayOfSchedule.execPlamMap().get(nbbm); 73 + ScheduleRealInfo sch = dayOfSchedule.execPlanMap().get(nbbm);
74 if(null == sch) 74 if(null == sch)
75 return; 75 return;
76 76
@@ -86,7 +86,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -86,7 +86,7 @@ public class ForecastRealServer implements CommandLineRunner {
86 //终点站 86 //终点站
87 String eStation = null; 87 String eStation = null;
88 //当前执行班次 88 //当前执行班次
89 - ScheduleRealInfo sch = dayOfSchedule.execPlamMap().get(nbbm); 89 + ScheduleRealInfo sch = dayOfSchedule.execPlanMap().get(nbbm);
90 if(null != sch) 90 if(null != sch)
91 eStation = sch.getZdzCode(); 91 eStation = sch.getZdzCode();
92 92
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
1 package com.bsth.data.gpsdata; 1 package com.bsth.data.gpsdata;
2 2
  3 +import com.bsth.data.gpsdata.analyse.StationRoute;
  4 +import com.fasterxml.jackson.annotation.JsonIgnore;
  5 +
3 /** 6 /**
4 * 7 *
5 * @ClassName: GpsRealData 8 * @ClassName: GpsRealData
@@ -58,21 +61,32 @@ public class GpsEntity { @@ -58,21 +61,32 @@ public class GpsEntity {
58 /** 预计到达终点时间 */ 61 /** 预计到达终点时间 */
59 private Float expectStopTime; 62 private Float expectStopTime;
60 63
61 - /** 设备是否在线 */ 64 + /** 设备是否在线
62 private boolean online; 65 private boolean online;
63 - 66 + */
64 /** 当前执行班次ID */ 67 /** 当前执行班次ID */
65 private Long schId; 68 private Long schId;
66 69
67 /** 是否异常数据 */ 70 /** 是否异常数据 */
68 private boolean abnormal; 71 private boolean abnormal;
69 -  
70 - private int valid; 72 +/*
  73 + private int valid;*/
71 74
72 private int version; 75 private int version;
73 76
74 - /** 是否起终点站 */ 77 + /** 是否起终点站
75 private boolean sEPoint; 78 private boolean sEPoint;
  79 + */
  80 +
  81 + /** 站内 */
  82 + private boolean instation;
  83 +
  84 + /** 站点信息,站内时有值 */
  85 + @JsonIgnore
  86 + private StationRoute station;
  87 +
  88 + /** 状态 */
  89 + private String state2;
76 90
77 public Integer getCompanyCode() { 91 public Integer getCompanyCode() {
78 return companyCode; 92 return companyCode;
@@ -178,14 +192,6 @@ public class GpsEntity { @@ -178,14 +192,6 @@ public class GpsEntity {
178 this.stationName = stationName; 192 this.stationName = stationName;
179 } 193 }
180 194
181 - public boolean isOnline() {  
182 - return online;  
183 - }  
184 -  
185 - public void setOnline(boolean online) {  
186 - this.online = online;  
187 - }  
188 -  
189 public long getArrTime() { 195 public long getArrTime() {
190 return arrTime; 196 return arrTime;
191 } 197 }
@@ -218,35 +224,44 @@ public class GpsEntity { @@ -218,35 +224,44 @@ public class GpsEntity {
218 this.schId = schId; 224 this.schId = schId;
219 } 225 }
220 226
221 - public boolean isAbnormal() {  
222 - return abnormal; 227 +
  228 + public int getVersion() {
  229 + return version;
223 } 230 }
224 231
225 - public void setAbnormal(boolean abnormal) {  
226 - this.abnormal = abnormal; 232 + public void setVersion(int version) {
  233 + this.version = version;
227 } 234 }
228 235
229 - public int getValid() {  
230 - return valid; 236 + public boolean isInstation() {
  237 + return instation;
231 } 238 }
232 239
233 - public void setValid(int valid) {  
234 - this.valid = valid; 240 + public void setInstation(boolean instation) {
  241 + this.instation = instation;
235 } 242 }
236 243
237 - public int getVersion() {  
238 - return version; 244 + public StationRoute getStation() {
  245 + return station;
239 } 246 }
240 247
241 - public void setVersion(int version) {  
242 - this.version = version; 248 + public void setStation(StationRoute station) {
  249 + this.station = station;
  250 + }
  251 +
  252 + public boolean isAbnormal() {
  253 + return abnormal;
  254 + }
  255 +
  256 + public void setAbnormal(boolean abnormal) {
  257 + this.abnormal = abnormal;
243 } 258 }
244 259
245 - public boolean issEPoint() {  
246 - return sEPoint; 260 + public String getState2() {
  261 + return state2;
247 } 262 }
248 263
249 - public void setsEPoint(boolean sEPoint) {  
250 - this.sEPoint = sEPoint; 264 + public void setState2(String state2) {
  265 + this.state2 = state2;
251 } 266 }
252 } 267 }
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject; @@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
5 import com.bsth.Application; 5 import com.bsth.Application;
6 import com.bsth.data.BasicData; 6 import com.bsth.data.BasicData;
7 import com.bsth.data.forecast.ForecastRealServer; 7 import com.bsth.data.forecast.ForecastRealServer;
  8 +import com.bsth.data.gpsdata.analyse.GpsAnalyse;
  9 +import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
8 import com.bsth.data.schedule.DayOfSchedule; 10 import com.bsth.data.schedule.DayOfSchedule;
9 import com.bsth.entity.realcontrol.ScheduleRealInfo; 11 import com.bsth.entity.realcontrol.ScheduleRealInfo;
10 import com.bsth.util.ConfigUtil; 12 import com.bsth.util.ConfigUtil;
@@ -55,6 +57,9 @@ public class GpsRealData implements CommandLineRunner{ @@ -55,6 +57,9 @@ public class GpsRealData implements CommandLineRunner{
55 57
56 @Autowired 58 @Autowired
57 ForecastRealServer forecastRealServer; 59 ForecastRealServer forecastRealServer;
  60 +
  61 +
  62 +
58 /** 63 /**
59 * 构造函数 64 * 构造函数
60 */ 65 */
@@ -67,13 +72,17 @@ public class GpsRealData implements CommandLineRunner{ @@ -67,13 +72,17 @@ public class GpsRealData implements CommandLineRunner{
67 @Override 72 @Override
68 public void run(String... arg0) throws Exception { 73 public void run(String... arg0) throws Exception {
69 logger.info("gpsDataLoader,20,6"); 74 logger.info("gpsDataLoader,20,6");
70 - Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 5, TimeUnit.SECONDS); 75 + Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 40, 20, TimeUnit.SECONDS);
71 } 76 }
72 77
73 public GpsEntity add(GpsEntity gps) { 78 public GpsEntity add(GpsEntity gps) {
74 String device = gps.getDeviceId(); 79 String device = gps.getDeviceId();
75 GpsEntity old = gpsMap.get(device); 80 GpsEntity old = gpsMap.get(device);
76 81
  82 + //分析gps
  83 + if(isAvailable(gps) && (old == null || old.getTimestamp() != gps.getTimestamp()))
  84 + GpsAnalyse.start(gps);
  85 +
77 if(!StringUtils.isEmpty(gps.getStopNo())){ 86 if(!StringUtils.isEmpty(gps.getStopNo())){
78 //定时定距数据附带站点编码改变 87 //定时定距数据附带站点编码改变
79 if(null == old || !gps.getStopNo().equals(old.getStopNo())){ 88 if(null == old || !gps.getStopNo().equals(old.getStopNo())){
@@ -94,6 +103,11 @@ public class GpsRealData implements CommandLineRunner{ @@ -94,6 +103,11 @@ public class GpsRealData implements CommandLineRunner{
94 return gps; 103 return gps;
95 } 104 }
96 105
  106 + public boolean isAvailable(GpsEntity gps){
  107 + return StringUtils.isNotEmpty(gps.getLineId()) &&
  108 + dayOfSchedule.getCurrSchDate().containsKey(gps.getLineId());
  109 + }
  110 +
97 /** 111 /**
98 * 112 *
99 * @Title: get @Description: TODO(设备号获取GPS) 113 * @Title: get @Description: TODO(设备号获取GPS)
@@ -118,7 +132,7 @@ public class GpsRealData implements CommandLineRunner{ @@ -118,7 +132,7 @@ public class GpsRealData implements CommandLineRunner{
118 if(gps.isAbnormal()) 132 if(gps.isAbnormal())
119 continue; 133 continue;
120 134
121 - sch = dayOfSchedule.execPlamMap().get(gps.getNbbm()); 135 + sch = dayOfSchedule.execPlanMap().get(gps.getNbbm());
122 if(null != sch) 136 if(null != sch)
123 gps.setSchId(sch.getId()); 137 gps.setSchId(sch.getId());
124 rs.add(gps); 138 rs.add(gps);
@@ -161,6 +175,11 @@ public class GpsRealData implements CommandLineRunner{ @@ -161,6 +175,11 @@ public class GpsRealData implements CommandLineRunner{
161 @Override 175 @Override
162 public void run() { 176 public void run() {
163 try{ 177 try{
  178 + //如果正在恢复数据
  179 + if(GpsDataRecovery.run){
  180 + return;
  181 + }
  182 +
164 load(); 183 load();
165 }catch(Exception e){ 184 }catch(Exception e){
166 logger.error("", e); 185 logger.error("", e);
@@ -207,21 +226,7 @@ public class GpsRealData implements CommandLineRunner{ @@ -207,21 +226,7 @@ public class GpsRealData implements CommandLineRunner{
207 gpsRealData.add(gps); 226 gpsRealData.add(gps);
208 227
209 //纠正走向 228 //纠正走向
210 - correctUpdown(gps);  
211 - /*if(issEPoint(gps))  
212 - continue;  
213 -  
214 - //如果走向未知,尝试根据站点纠正走向  
215 - if(gps.getUpDown() == -1){  
216 - updown=stationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo());  
217 - if(updown != null)  
218 - gps.setUpDown(updown);  
219 - }  
220 - //如果站点编码和走向相反(即上行站点ID,走向为下行),尝试根据站点纠正走向  
221 - updown=stationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo());  
222 - if(updown != null && !gps.getUpDown().equals(updown)){  
223 - gps.setUpDown(updown);  
224 - }*/ 229 + //correctUpdown(gps);
225 } 230 }
226 } else 231 } else
227 logger.error("result is null"); 232 logger.error("result is null");
@@ -240,7 +245,7 @@ public class GpsRealData implements CommandLineRunner{ @@ -240,7 +245,7 @@ public class GpsRealData implements CommandLineRunner{
240 * 是否是起终点 245 * 是否是起终点
241 * @param gps 246 * @param gps
242 * @return 247 * @return
243 - */ 248 +
244 public boolean isSEPoint(GpsEntity gps){ 249 public boolean isSEPoint(GpsEntity gps){
245 String key = gps.getLineId()+"_"+gps.getUpDown()+"_" 250 String key = gps.getLineId()+"_"+gps.getUpDown()+"_"
246 ,stationCode; 251 ,stationCode;
@@ -261,29 +266,19 @@ public class GpsRealData implements CommandLineRunner{ @@ -261,29 +266,19 @@ public class GpsRealData implements CommandLineRunner{
261 } 266 }
262 } 267 }
263 return false; 268 return false;
264 - } 269 + }*/
265 270
266 /** 271 /**
267 * 纠正上下行 272 * 纠正上下行
268 * @param gps 273 * @param gps
269 - */ 274 +
270 public void correctUpdown(GpsEntity gps){ 275 public void correctUpdown(GpsEntity gps){
271 Integer updown=BasicData.lineStationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo()); 276 Integer updown=BasicData.lineStationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo());
272 if(updown != null && !updown.equals(gps.getUpDown())) 277 if(updown != null && !updown.equals(gps.getUpDown()))
273 gps.setUpDown(updown); 278 gps.setUpDown(updown);
274 - /*//如果走向未知,尝试根据站点纠正走向  
275 - if(gps.getUpDown() == -1){  
276 -  
277 - }*/  
278 279
279 if(isSEPoint(gps)) 280 if(isSEPoint(gps))
280 return; 281 return;
281 -  
282 - /*//如果站点编码和走向相反(即上行站点ID,走向为下行),尝试根据站点纠正走向  
283 - updown=BasicData.lineStationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo());  
284 - if(updown != null && !gps.getUpDown().equals(updown)){  
285 - gps.setUpDown(updown);  
286 - }*/  
287 - } 282 + }*/
288 } 283 }
289 -} 284 +}
290 \ No newline at end of file 285 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/analyse/CircleQueue.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse;
  2 +
  3 +import java.util.Arrays;
  4 +
  5 +/**
  6 + * 循环队列
  7 + * Created by panzhao on 2016/12/23.
  8 + */
  9 +public class CircleQueue<T> {
  10 +
  11 + /**
  12 + * (循环队列)数组的容量
  13 + */
  14 + public int capacity;
  15 +
  16 + /**
  17 + * 数组:保存循环队列的元素
  18 + */
  19 + public Object[] elementData;
  20 +
  21 + /**
  22 + * 队头(先进先出)
  23 + */
  24 + public int head = 0;
  25 +
  26 + /**
  27 + * 队尾
  28 + */
  29 + public int tail = 0;
  30 +
  31 + /**
  32 + * 以指定长度的数组来创建循环队列
  33 + *
  34 + * @param initSize
  35 + */
  36 + public CircleQueue(final int initSize) {
  37 + capacity = initSize;
  38 + elementData = new Object[capacity];
  39 + }
  40 +
  41 + /**
  42 + * 获取循环队列的大小(包含元素的个数)
  43 + */
  44 + public int size() {
  45 + if (isEmpty()) {
  46 + return 0;
  47 + } else if (isFull()) {
  48 + return capacity;
  49 + } else {
  50 + return tail + 1;
  51 + }
  52 + }
  53 +
  54 + /**
  55 + * 插入队尾一个元素
  56 + */
  57 + public void add(final T element) {
  58 + if (isEmpty()) {
  59 + elementData[0] = element;
  60 + } else if (isFull()) {
  61 + elementData[head] = element;
  62 + head++;
  63 + tail++;
  64 + head = head == capacity ? 0 : head;
  65 + tail = tail == capacity ? 0 : tail;
  66 + } else {
  67 + elementData[tail + 1] = element;
  68 + tail++;
  69 + }
  70 + }
  71 +
  72 + public boolean isEmpty() {
  73 + return tail == head && tail == 0 && elementData[tail] == null;
  74 + }
  75 +
  76 + public boolean isFull() {
  77 + return head != 0 && head - tail == 1 || head == 0 && tail == capacity - 1;
  78 + }
  79 +
  80 + public void clear() {
  81 + Arrays.fill(elementData, null);
  82 + head = 0;
  83 + tail = 0;
  84 + }
  85 +
  86 + /**
  87 + * @return 取 循环队列里的值(先进的index=0)
  88 + */
  89 + public Object[] getQueue() {
  90 + final Object[] elementDataSort = new Object[capacity];
  91 + final Object[] elementDataCopy = elementData.clone();
  92 + if (isEmpty()) {
  93 + } else if (isFull()) {
  94 + int indexMax = capacity;
  95 + int indexSort = 0;
  96 + for (int i = head; i < indexMax;) {
  97 + elementDataSort[indexSort] = elementDataCopy[i];
  98 + indexSort++;
  99 + i++;
  100 + if (i == capacity) {
  101 + i = 0;
  102 + indexMax = head;
  103 + }
  104 + }
  105 + } else {
  106 + for (int i = 0; i < tail; i++) {
  107 + elementDataSort[i] = elementDataCopy[i];
  108 + }
  109 + }
  110 + return elementDataSort;
  111 + }
  112 +
  113 + public T getTail(){
  114 + return elementData[tail] == null?null:(T)elementData[tail];
  115 + }
  116 +}
0 \ No newline at end of file 117 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/analyse/GeoCacheData.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.google.common.collect.ArrayListMultimap;
  5 +import com.vividsolutions.jts.geom.Coordinate;
  6 +import com.vividsolutions.jts.geom.GeometryFactory;
  7 +import com.vividsolutions.jts.geom.LineString;
  8 +import com.vividsolutions.jts.geom.Polygon;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.jdbc.core.JdbcTemplate;
  14 +import org.springframework.jdbc.core.RowMapper;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import java.sql.ResultSet;
  18 +import java.sql.SQLException;
  19 +import java.util.*;
  20 +
  21 +/**
  22 + * Created by panzhao on 2016/12/23.
  23 + */
  24 +@Component
  25 +public class GeoCacheData {
  26 +
  27 + static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
  28 +
  29 + //每辆车缓存最后200条gps
  30 + private static final int CACHE_SIZE = 200;
  31 + private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
  32 +
  33 + //线路路段走向
  34 + private static ArrayListMultimap<String, LineString> sectionCacheMap;
  35 +
  36 + //线路站点路由
  37 + private static ArrayListMultimap<String, StationRoute> stationCacheMap;
  38 +
  39 + //停车场
  40 + public static Map<String, Polygon> tccMap;
  41 +
  42 + @Autowired
  43 + JdbcTemplate jdbcTemplate;
  44 +
  45 + public static CircleQueue<GpsEntity> getGps(String nbbm) {
  46 + return gpsCacheMap.get(nbbm);
  47 + }
  48 +
  49 + public static void putGps(GpsEntity gps) {
  50 + CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm());
  51 + if (queue == null) {
  52 + //第一个点从站内开始
  53 + if(!gps.isInstation())
  54 + return;
  55 +
  56 + queue = new CircleQueue<>(CACHE_SIZE);
  57 + gpsCacheMap.put(gps.getNbbm(), queue);
  58 + }
  59 + queue.add(gps);
  60 + }
  61 +
  62 + public static List<StationRoute> getStationRoute(String lineCode, int directions) {
  63 + return stationCacheMap.get(lineCode + "_" + directions);
  64 + }
  65 +
  66 + public static StationRoute getStation(String lineCode, int directions, String code) {
  67 + List<StationRoute> list = getStationRoute(lineCode, directions);
  68 +
  69 + for (StationRoute sr : list) {
  70 + if (sr.getCode().equals(code)) {
  71 + return sr;
  72 + }
  73 + }
  74 + return null;
  75 + }
  76 +
  77 + public static Polygon getTccPolygon(String code){
  78 + return tccMap.get(code);
  79 + }
  80 +
  81 + public void loadData() {
  82 + final GeometryFactory geometryFactory = new GeometryFactory();
  83 + //加载站点路由
  84 + String sql = "select r.LINE_CODE,r.DIRECTIONS,r.STATION_CODE,r.STATION_MARK,s.SHAPES_TYPE,s.G_LONX,s.G_LATY,ST_AsText(s.G_POLYGON_GRID) as G_POLYGON_GRID,s.RADIUS, r.STATION_ROUTE_CODE from bsth_c_stationroute r left join bsth_c_station s on r.station=s.id where r.destroy=0 order by r.station_route_code";
  85 + List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {
  86 + @Override
  87 + public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {
  88 + StationRoute sRoute = new StationRoute();
  89 + sRoute.setCode(rs.getString("STATION_CODE"));
  90 + sRoute.setLineCode(rs.getString("LINE_CODE"));
  91 + sRoute.setDirections(rs.getInt("DIRECTIONS"));
  92 + sRoute.setPoint(geometryFactory.createPoint(new Coordinate(rs.getFloat("G_LATY"), rs.getFloat("G_LONX"))));
  93 + sRoute.setRadius(rs.getFloat("RADIUS"));
  94 + sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));
  95 + sRoute.setMark(rs.getString("STATION_MARK"));
  96 +
  97 + String shapesType = rs.getString("SHAPES_TYPE");
  98 + //多边形电子围栏
  99 + if (StringUtils.isNotEmpty(shapesType) && shapesType.equals("d")) {
  100 + geometryFactory.createPolygon(parsePolygon(rs.getString("G_POLYGON_GRID")));
  101 + }
  102 + return sRoute;
  103 + }
  104 + });
  105 + //按线路和走向分组
  106 + if (routeList.size() > 0) {
  107 + ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();
  108 + for (StationRoute sr : routeList) {
  109 + tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
  110 + }
  111 +
  112 + StationRouteComp srCom = new StationRouteComp();
  113 + //连接路由
  114 + Set<String> set = tempMap.keySet();
  115 + for (String key : set) {
  116 + Collections.sort(tempMap.get(key), srCom);
  117 + connectStationRoute(tempMap.get(key));
  118 + }
  119 +
  120 + stationCacheMap = tempMap;
  121 + }
  122 +
  123 + //加载停车场数据
  124 + sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null";
  125 + List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);
  126 + Map<String, Polygon> tccTempMap = new HashMap<>();
  127 +
  128 + Polygon polygon;
  129 + for (Map<String, Object> tMap : tccList) {
  130 +
  131 + try {
  132 + polygon = geometryFactory.createPolygon(parsePolygon(tMap.get("G_PARK_POINT").toString()));
  133 + tccTempMap.put(tMap.get("PARK_CODE").toString()
  134 + , polygon);
  135 + } catch (Exception e) {
  136 + logger.error("停车场:" + tMap.get("PARK_CODE") , e);
  137 + }
  138 + }
  139 +
  140 + if(tccTempMap.size() > 0)
  141 + tccMap = tccTempMap;
  142 + }
  143 +
  144 + private void connectStationRoute(List<StationRoute> list) {
  145 + int size = list.size();
  146 + StationRoute sr = null;
  147 + for (int i = 0; i < size; i++) {
  148 + sr = list.get(i);
  149 + //上一个
  150 + if (i > 0)
  151 + sr.setPrve(list.get(i - 1));
  152 + //下一个
  153 + if (i < size - 1)
  154 + sr.setNext(list.get(i + 1));
  155 + }
  156 + }
  157 +
  158 + public Coordinate[] parsePolygon(String polygonStr) {
  159 + String[] coords = polygonStr.substring(9, polygonStr.length() - 2).split(","), temps;
  160 +
  161 + Coordinate[] cds = new Coordinate[coords.length];
  162 + int len = coords.length;
  163 + for (int i = 0; i < len; i++) {
  164 + temps = coords[i].split(" ");
  165 + cds[i] = new Coordinate(Float.parseFloat(temps[1]), Float.parseFloat(temps[0]));
  166 + }
  167 + return cds;
  168 + }
  169 +
  170 +}
0 \ No newline at end of file 171 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/analyse/GpsAnalyse.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.analyse.components.GpsArrival;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
  7 +
  8 +import java.util.concurrent.ExecutorService;
  9 +import java.util.concurrent.Executors;
  10 +
  11 +/**
  12 + * 分析gps状态信息
  13 + * Created by panzhao on 2016/12/23.
  14 + */
  15 +public class GpsAnalyse {
  16 +
  17 + static Logger logger = LoggerFactory.getLogger(GpsAnalyse.class);
  18 +
  19 + //线程池
  20 + static ExecutorService threadPool = Executors.newFixedThreadPool(50);
  21 +
  22 + public static void start(GpsEntity gps) {
  23 + threadPool.execute(new ArrivalMatchThread(gps));
  24 + }
  25 +
  26 + public static class ArrivalMatchThread implements Runnable {
  27 +
  28 + private GpsEntity gps;
  29 +
  30 + public ArrivalMatchThread(GpsEntity gps) {
  31 + this.gps = gps;
  32 + }
  33 +
  34 + @Override
  35 + public void run() {
  36 + GpsArrival.arrival(gps);
  37 + }
  38 + }
  39 +}
0 \ No newline at end of file 40 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/analyse/StationRoute.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse;
  2 +
  3 +import com.vividsolutions.jts.geom.Point;
  4 +import com.vividsolutions.jts.geom.Polygon;
  5 +
  6 +/**
  7 + * Created by panzhao on 2016/12/23.
  8 + */
  9 +public class StationRoute {
  10 +
  11 + /**
  12 + * 线路编码
  13 + */
  14 + private String lineCode;
  15 +
  16 + /**
  17 + * 上下行
  18 + */
  19 + private int directions;
  20 +
  21 + /**
  22 + * 站点编码
  23 + */
  24 + private String code;
  25 +
  26 + /**
  27 + * 路由顺序
  28 + */
  29 + private int routeSort;
  30 +
  31 + /**
  32 + * 站点位置
  33 + */
  34 + private Point point;
  35 +
  36 + /**
  37 + * 圆形半径
  38 + */
  39 + private Float radius;
  40 +
  41 + /**
  42 + * 多边形电子围栏
  43 + */
  44 + private Polygon polygon;
  45 +
  46 + /**
  47 + * 站点标记
  48 + */
  49 + private String mark;
  50 +
  51 + /**
  52 + * 下一站
  53 + */
  54 + private StationRoute next;
  55 +
  56 + /**
  57 + * 上一站
  58 + */
  59 + private StationRoute prve;
  60 +
  61 + public String getCode() {
  62 + return code;
  63 + }
  64 +
  65 + public void setCode(String code) {
  66 + this.code = code;
  67 + }
  68 +
  69 + public int getRouteSort() {
  70 + return routeSort;
  71 + }
  72 +
  73 + public void setRouteSort(int routeSort) {
  74 + this.routeSort = routeSort;
  75 + }
  76 +
  77 + public Point getPoint() {
  78 + return point;
  79 + }
  80 +
  81 + public void setPoint(Point point) {
  82 + this.point = point;
  83 + }
  84 +
  85 + public Float getRadius() {
  86 + return radius;
  87 + }
  88 +
  89 + public void setRadius(Float radius) {
  90 + this.radius = radius;
  91 + }
  92 +
  93 + public Polygon getPolygon() {
  94 + return polygon;
  95 + }
  96 +
  97 + public void setPolygon(Polygon polygon) {
  98 + this.polygon = polygon;
  99 + }
  100 +
  101 + public String getLineCode() {
  102 + return lineCode;
  103 + }
  104 +
  105 + public void setLineCode(String lineCode) {
  106 + this.lineCode = lineCode;
  107 + }
  108 +
  109 + public int getDirections() {
  110 + return directions;
  111 + }
  112 +
  113 + public void setDirections(int directions) {
  114 + this.directions = directions;
  115 + }
  116 +
  117 + public StationRoute getNext() {
  118 + return next;
  119 + }
  120 +
  121 + public void setNext(StationRoute next) {
  122 + this.next = next;
  123 + }
  124 +
  125 + public StationRoute getPrve() {
  126 + return prve;
  127 + }
  128 +
  129 + public void setPrve(StationRoute prve) {
  130 + this.prve = prve;
  131 + }
  132 +
  133 + public String getMark() {
  134 + return mark;
  135 + }
  136 +
  137 + public void setMark(String mark) {
  138 + this.mark = mark;
  139 + }
  140 +}
  141 +
src/main/java/com/bsth/data/gpsdata/analyse/StationRouteComp.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse;
  2 +
  3 +import java.util.Comparator;
  4 +
  5 +/**
  6 + * Created by panzhao on 2016/12/24.
  7 + */
  8 +public class StationRouteComp implements Comparator<StationRoute>{
  9 + @Override
  10 + public int compare(StationRoute s1, StationRoute s2) {
  11 + return s1.getRouteSort() - s2.getRouteSort();
  12 + }
  13 +}
src/main/java/com/bsth/data/gpsdata/analyse/components/GpsArrival.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse.components;
  2 +
  3 +import com.bsth.data.LineConfigData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.analyse.CircleQueue;
  6 +import com.bsth.data.gpsdata.analyse.GeoCacheData;
  7 +import com.bsth.data.gpsdata.analyse.StationRoute;
  8 +import com.bsth.data.gpsdata.analyse.util.GeoUtils;
  9 +import com.bsth.data.schedule.DayOfSchedule;
  10 +import com.bsth.entity.realcontrol.LineConfig;
  11 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.BeansException;
  15 +import org.springframework.context.ApplicationContext;
  16 +import org.springframework.context.ApplicationContextAware;
  17 +import org.springframework.stereotype.Component;
  18 +
  19 +import java.util.List;
  20 +
  21 +/**
  22 + * gps 到离站判断
  23 + * Created by panzhao on 2016/12/24.
  24 + */
  25 +@Component
  26 +public class GpsArrival implements ApplicationContextAware {
  27 +
  28 + static Logger logger = LoggerFactory.getLogger(GpsArrival.class);
  29 +
  30 + static DayOfSchedule dayOfSchedule;
  31 +
  32 + static LineConfigData lineConfigData;
  33 +
  34 + public static void arrival(GpsEntity gps) {
  35 +
  36 + if (gps.getLat() == 0 || gps.getLon() == 0) {
  37 + //logger.error("无效的gps");
  38 + return;
  39 + }
  40 +
  41 + Object task = DayOfSchedule.executeCurr(gps.getNbbm());
  42 + if (task == null)
  43 + return;
  44 + if (task.getClass().isAssignableFrom(ScheduleRealInfo.class)) {
  45 + ScheduleRealInfo sch = (ScheduleRealInfo) task;
  46 + //和班次同步走向
  47 + gps.setUpDown(Integer.parseInt(sch.getXlDir()));
  48 +
  49 + //出场
  50 + if (sch.getBcType().equals("out")) {
  51 + outCarpark(gps, sch);
  52 + }
  53 + else if (sch.getBcType().equals("normal"))
  54 + normalInOut(gps, sch);
  55 + else if(sch.getBcType().equals("in")){
  56 + inCarpark(gps, sch);
  57 + }
  58 + }
  59 +
  60 + GeoCacheData.putGps(gps);
  61 + }
  62 +
  63 + /**
  64 + * 正常班次
  65 + *
  66 + * @param gps
  67 + * @param sch
  68 + */
  69 + private static void normalInOut(GpsEntity gps, ScheduleRealInfo sch) {
  70 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  71 + GpsEntity prev = null;
  72 + if (queue != null)
  73 + prev = queue.getTail();
  74 +
  75 + List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), gps.getUpDown());
  76 + StationRoute station = GeoUtils.gpsInStation(gps, srs);
  77 +
  78 + if (station != null) {
  79 + //站内
  80 + gps.setStopNo(station.getCode());
  81 + gps.setInstation(true);
  82 + stationInside(gps, prev, sch);
  83 + } else {
  84 + //站外
  85 + stationOutside(gps, prev, sch);
  86 + }
  87 + }
  88 +
  89 + /**
  90 + * GPS在站点内
  91 + *
  92 + * @param gps
  93 + * @param prev
  94 + * @param sch
  95 + */
  96 + private static void stationInside(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch) {
  97 + if(prev == null)
  98 + return;
  99 +
  100 + if (gps.getStopNo().equals(sch.getZdzCode()) && sch.getZdsjActual() == null) {
  101 + //到终点站
  102 + arriveEnd(sch, gps);
  103 + return;
  104 + }
  105 +
  106 + //上一个点在站外
  107 + if(!prev.isInstation())
  108 + return;
  109 + //超过 (待发时间 + 90%的单程运送时间),还在起点站。默认烂一圈
  110 + if (prev.getStopNo().equals(gps.getStopNo())){
  111 + if(gps.getStopNo().equals(sch.getQdzCode())
  112 + && gps.getTimestamp() > sch.getDfsjT() + (sch.getBcsj() * 60 * 1000 * 0.9)){
  113 +
  114 + ScheduleRealInfo next = dayOfSchedule.next(dayOfSchedule.next(sch));
  115 + dayOfSchedule.addExecPlan(next);
  116 + }
  117 + return;
  118 + }
  119 +
  120 + //发车
  121 + if (prev.getStopNo().equals(sch.getQdzCode())) {
  122 + busWillDepart(sch, gps);
  123 + return;
  124 + }
  125 +
  126 + //中途站
  127 + StationRoute prevStation = GeoCacheData.getStation(prev.getLineId(), prev.getUpDown(), prev.getStopNo());
  128 + StationRoute currStation = GeoCacheData.getStation(gps.getLineId(), gps.getUpDown(), gps.getStopNo());
  129 + if (currStation.getRouteSort() < prevStation.getRouteSort()) {
  130 + //开始下一个班次
  131 + finishPlan(sch);
  132 +
  133 + logger.info("路由反向。。。。。。:" + gps.getTimestamp());
  134 + //为班次补上实际时间
  135 +
  136 + }
  137 + }
  138 +
  139 + /**
  140 + * GPS在站点外
  141 + *
  142 + * @param gps
  143 + * @param prev
  144 + * @param sch
  145 + */
  146 + private static void stationOutside(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch) {
  147 + if(prev == null)
  148 + return;
  149 +
  150 + gps.setStopNo(prev.getStopNo());
  151 + if (prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {
  152 + //发车
  153 + busWillDepart(sch, gps);
  154 + return;
  155 + }
  156 + }
  157 +
  158 + /**
  159 + * 公交车起点发出
  160 + */
  161 + final static long DRIFT_VAL_TIME = 1000 * 60 * 10;
  162 + //班次最大差值1小时
  163 + final static long MAX_DIFF = 1000 * 60 * 60;
  164 + private static void busWillDepart(ScheduleRealInfo sch, GpsEntity gps) {
  165 + //实发时间不覆盖
  166 + if (sch.getFcsjActual() == null && Math.abs(gps.getTimestamp() - sch.getDfsjT()) < MAX_DIFF) {
  167 +
  168 + //提前10分钟以上发出,判断一下是否是漂移
  169 + if(sch.getDfsjT() - gps.getTimestamp() > DRIFT_VAL_TIME){
  170 + ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
  171 + if(schPrev != null && schPrev.getZdsjActual() != null){
  172 + //计划停站时间
  173 + long stopTimeJH = sch.getDfsjT() - schPrev.getZdsjT();
  174 + //实际停站时间
  175 + long actualStopTime = gps.getTimestamp() - schPrev.getZdsjActualTime();
  176 + /*
  177 + 没停够计划百分之60的,算漂移
  178 + (这里出现的误判,由程序在车辆到中途站的时候进行补偿)
  179 + */
  180 + if(stopTimeJH * 0.6 < actualStopTime){
  181 + logger.info("漂移.... 车辆:" + gps.getNbbm() + " ts: " + gps.getTimestamp());
  182 + return;
  183 + }
  184 + }
  185 + }
  186 +
  187 + LineConfig config = lineConfigData.get(sch.getXlBm());
  188 + if(config != null && config.getOutConfig() == 2){
  189 + //出站既出场
  190 + ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
  191 + if(schPrev.getBcType().equals("out")){
  192 + schPrev.setFcsjActualAll(schPrev.getDfsjT());
  193 + schPrev.setZdsjActualAll(schPrev.getZdsjT());
  194 + }
  195 + }
  196 +
  197 + sch.setFcsjActualAll(gps.getTimestamp());
  198 + logger.info("(站外)班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
  199 + }
  200 + }
  201 +
  202 + /**
  203 + * 公交车到达终点
  204 + *
  205 + * @param sch
  206 + * @param gps
  207 + */
  208 + private static void arriveEnd(ScheduleRealInfo sch, GpsEntity gps) {
  209 + sch.setZdsjActualAll(gps.getTimestamp());
  210 + ScheduleRealInfo next = finishPlan(sch);
  211 + logger.info("班次:" + sch.getDfsj() + "到达终点, 时间:" + sch.getZdsjActual());
  212 +
  213 + if (next == null)
  214 + return;
  215 +
  216 + //将gps转换为下一个班次走向的站内信号
  217 + int updown = Integer.parseInt(next.getXlDir());
  218 + List<StationRoute> srs = GeoCacheData.getStationRoute(next.getXlBm(), updown);
  219 + StationRoute station = GeoUtils.gpsInStation(gps, srs);
  220 + if (station != null) {
  221 + gps.setUpDown(updown);
  222 + gps.setStopNo(station.getCode());
  223 + }
  224 + }
  225 +
  226 + /**
  227 + * 出场班次
  228 + *
  229 + * @param gps
  230 + * @param sch
  231 + */
  232 + private static void outCarpark(GpsEntity gps, ScheduleRealInfo sch) {
  233 + String carpark = GeoUtils.gpsInCarpark(gps);
  234 + if (carpark != null) {
  235 + gps.setInstation(true);
  236 + gps.setStopNo(carpark);
  237 + return; // 还在场内
  238 + }
  239 +
  240 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  241 + if (queue == null)
  242 + return;
  243 + //上一个gps
  244 + GpsEntity prev = queue.getTail();
  245 +
  246 + if (carpark == null && prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {
  247 + gps.setStopNo(prev.getStopNo());
  248 + //停车场发出
  249 + busWillDepart(sch, gps);
  250 + return;
  251 + }
  252 +
  253 + List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), gps.getUpDown());
  254 + StationRoute station = GeoUtils.gpsInStation(gps, srs);
  255 +
  256 + if (station != null && station.getCode().equals(sch.getZdzCode())) {
  257 + gps.setStopNo(station.getCode());
  258 + //到达终点
  259 + arriveEnd(sch, gps);
  260 + }
  261 + }
  262 +
  263 +
  264 + /**
  265 + * 进场班次
  266 + * @param gps
  267 + * @param sch
  268 + */
  269 + private static void inCarpark(GpsEntity gps, ScheduleRealInfo sch) {
  270 + String carpark = GeoUtils.gpsInCarpark(gps);
  271 + if (carpark != null && carpark.equals(sch.getZdzCode())) {
  272 + //进场班次取第一个实际进场时间
  273 + if(sch.getZdsjActual() != null)
  274 + return;
  275 +
  276 + //进场
  277 + arriveEnd(sch, gps);
  278 + return;
  279 + }
  280 +
  281 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  282 + if (queue == null)
  283 + return;
  284 + //上一个gps
  285 + GpsEntity prev = queue.getTail();
  286 +
  287 + if (carpark == null && prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {
  288 + gps.setStopNo(prev.getStopNo());
  289 + //进场班次发出
  290 + busWillDepart(sch, gps);
  291 + return;
  292 + }
  293 + }
  294 +
  295 + /**
  296 + * 完成班次 -返回下一个班次
  297 + *
  298 + * @param sch
  299 + */
  300 + private static ScheduleRealInfo finishPlan(ScheduleRealInfo sch) {
  301 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  302 + if (next != null) {
  303 + next.setQdzArrDatesj(sch.getZdsjActual());
  304 + dayOfSchedule.addExecPlan(next);
  305 + }
  306 + return next;
  307 + }
  308 +
  309 + @Override
  310 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  311 + dayOfSchedule = applicationContext.getBean(DayOfSchedule.class);
  312 + lineConfigData = applicationContext.getBean(LineConfigData.class);
  313 + }
  314 +}
src/main/java/com/bsth/data/gpsdata/analyse/components/GpsStateCorrective.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse.components;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.vividsolutions.jts.geom.GeometryFactory;
  7 +import org.joda.time.format.DateTimeFormat;
  8 +import org.joda.time.format.DateTimeFormatter;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.beans.BeansException;
  12 +import org.springframework.context.ApplicationContext;
  13 +import org.springframework.context.ApplicationContextAware;
  14 +import org.springframework.stereotype.Component;
  15 +
  16 +/**
  17 + * GPS状态纠正
  18 + * Created by panzhao on 2016/12/23.
  19 + */
  20 +@Component
  21 +public class GpsStateCorrective implements ApplicationContextAware {
  22 +
  23 + static Logger logger = LoggerFactory.getLogger(GpsStateCorrective.class);
  24 +
  25 + static DayOfSchedule dayOfSchedule;
  26 +
  27 + private static GeometryFactory geometryFactory = new GeometryFactory();
  28 +
  29 + public static void correct(GpsEntity gps, ScheduleRealInfo sch){
  30 +/* int upDown = Integer.parseInt(sch.getXlDir());
  31 + gps.setUpDown(upDown);
  32 + List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), upDown);
  33 +
  34 + Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
  35 +
  36 + //之前的点位
  37 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  38 + GpsEntity prev = null;
  39 + if(queue != null)
  40 + prev = queue.getTail();
  41 +
  42 + //线路上,站点间
  43 + StationRoute station = GeoUtils.pointInStation(point, srs);
  44 + //在站内
  45 + if(station != null){
  46 + gps.setStopNo(station.getCode());
  47 + gps.setInstation(true);
  48 + gps.setStation(station);
  49 +
  50 + if(prev != null && prev.getUpDown() == upDown){
  51 + StationRoute prevStation = GeoCacheData.getStation(prev.getLineId(), upDown, prev.getStopNo());
  52 +
  53 + //倒着开??
  54 + if(prevStation.getRouteSort() > station.getRouteSort()){
  55 + reversalHandle(gps, prev, sch);
  56 + }
  57 + }
  58 + }
  59 + else{
  60 + if(prev != null)
  61 + gps.setStopNo(prev.getStopNo());
  62 + }
  63 +
  64 + //是否在停车场内
  65 + Map<String, Polygon> carparkMap = GeoCacheData.tccMap;
  66 + Set<String> codes = carparkMap.keySet();
  67 + Polygon p;
  68 + for(String code : codes){
  69 + p = carparkMap.get(code);
  70 + //场内
  71 + if(p.contains(point)){
  72 + gps.setCarparkNo(code);
  73 + if(sch.getBcType().equals("out")){
  74 + gps.setInstation(true);
  75 + gps.setStopNo(code);
  76 + }
  77 + }
  78 + }*/
  79 + }
  80 +
  81 + private static DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm");
  82 +
  83 + private static void reversalHandle(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch){
  84 + /*if(sch.getBcType().equals("out") && gps.getTimestamp() < sch.getZdsjT())
  85 + return;
  86 +
  87 + //先假设没到终点,直接开始了下一个班次
  88 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  89 + String log = "倒着开??? nbbm: " + gps.getNbbm() + " 当前:" + gps.getStopNo() + " 上一站:" + prev.getStopNo() + " 当前班次:" + sch.getDfsj();
  90 + if(next != null){
  91 + dayOfSchedule.addExecPlan(next);
  92 +
  93 + log += (" 下一个班次:" + next.getDfsj());
  94 + }
  95 +
  96 + log += (" GPS时间:" + fmt.print(gps.getTimestamp()));
  97 +
  98 + logger.info(log);*/
  99 + }
  100 +
  101 + @Override
  102 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  103 + dayOfSchedule = applicationContext.getBean(DayOfSchedule.class);
  104 + }
  105 +}
src/main/java/com/bsth/data/gpsdata/analyse/util/GeoUtils.java 0 → 100644
  1 +package com.bsth.data.gpsdata.analyse.util;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.analyse.GeoCacheData;
  5 +import com.bsth.data.gpsdata.analyse.StationRoute;
  6 +import com.vividsolutions.jts.geom.Coordinate;
  7 +import com.vividsolutions.jts.geom.GeometryFactory;
  8 +import com.vividsolutions.jts.geom.Point;
  9 +import com.vividsolutions.jts.geom.Polygon;
  10 +
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.Set;
  14 +
  15 +/**
  16 + * Created by panzhao on 2016/12/23.
  17 + */
  18 +public class GeoUtils {
  19 +
  20 + private final static double EARTHRADIUS = 6378137;
  21 +
  22 + private static GeometryFactory geometryFactory = new GeometryFactory();
  23 + /**
  24 + * gps是否在路由上的某个站内
  25 + *
  26 + * @param gps
  27 + * @param srs
  28 + * @return
  29 + */
  30 + public static StationRoute gpsInStation(GpsEntity gps, List<StationRoute> srs) {
  31 + Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
  32 + double min = -1, distance, distance2;
  33 + StationRoute stationRoute = null;
  34 +
  35 + for (StationRoute sr : srs) {
  36 + if (sr.getPolygon() == null) {
  37 + //圆形
  38 + distance = getDistance(sr.getPoint(), point);//sr.getPoint().distance(point);
  39 +
  40 + if (distance > sr.getRadius())
  41 + continue;
  42 +
  43 + if (min > distance || min == -1) {
  44 + min = distance;
  45 + stationRoute = sr;
  46 + }
  47 + } else {
  48 + //多边形
  49 + if (sr.getPolygon().contains(point)) {
  50 + stationRoute = sr;
  51 + break;
  52 + }
  53 + }
  54 + }
  55 + return stationRoute;
  56 + }
  57 +
  58 + public static double getDistance(Point p1, Point p2) {
  59 + double lng1 = getLoop(p1.getY(), -180, 180), lat1 = getRange(
  60 + p1.getX(), -74, 74);
  61 + double lng2 = getLoop(p2.getY(), -180, 180), lat2 = getRange(
  62 + p2.getX(), -74, 74);
  63 +
  64 + double x1, x2, y1, y2;
  65 + x1 = degreeToRad(lng1);
  66 + y1 = degreeToRad(lat1);
  67 + x2 = degreeToRad(lng2);
  68 + y2 = degreeToRad(lat2);
  69 + return EARTHRADIUS
  70 + * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1)
  71 + * Math.cos(y2) * Math.cos(x2 - x1)));
  72 + }
  73 +
  74 + private static double getLoop(double v, double a, double b) {
  75 + while (v > b) {
  76 + v -= b - a;
  77 + }
  78 + while (v < a) {
  79 + v += b - a;
  80 + }
  81 + return v;
  82 + }
  83 +
  84 + private static double getRange(double v, double a, double b) {
  85 + v = Math.min(Math.max(v, a), b);
  86 + return v;
  87 + }
  88 +
  89 + private static double degreeToRad(double degree) {
  90 + return Math.PI * degree / 180;
  91 + }
  92 +
  93 +
  94 + /**
  95 + * gps 是否在某个停车场内
  96 + * @param gps
  97 + * @return
  98 + */
  99 + public static String gpsInCarpark(GpsEntity gps){
  100 + Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
  101 +
  102 + Map<String, Polygon> carparkMap = GeoCacheData.tccMap;
  103 + Set<String> codes = carparkMap.keySet();
  104 + Polygon polygon;
  105 + for(String code : codes){
  106 + polygon = carparkMap.get(code);
  107 + if(point.within(polygon)){
  108 + return code;
  109 + }
  110 + }
  111 + return null;
  112 + }
  113 +
  114 + /**
  115 + * 是否是有效的连续点
  116 + * @param prevGps
  117 + * @param gps
  118 + * @return
  119 + */
  120 + public static boolean overdue(GpsEntity prevGps, GpsEntity gps) {
  121 + return gps.getTimestamp() - prevGps.getTimestamp() < 120000;
  122 + }
  123 +}
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java 0 → 100644
  1 +package com.bsth.data.gpsdata.recovery;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.analyse.components.GpsArrival;
  6 +import com.bsth.util.db.DBUtils_MS;
  7 +import com.google.common.collect.ArrayListMultimap;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.jdbc.core.JdbcTemplate;
  11 +import org.springframework.jdbc.core.RowMapper;
  12 +
  13 +import java.sql.ResultSet;
  14 +import java.sql.SQLException;
  15 +import java.util.*;
  16 +import java.util.concurrent.CountDownLatch;
  17 +import java.util.concurrent.ExecutorService;
  18 +import java.util.concurrent.Executors;
  19 +
  20 +/**
  21 + * 数据恢复
  22 + * Created by panzhao on 2016/12/24.
  23 + */
  24 +public class GpsDataRecovery {
  25 +
  26 + static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class);
  27 +
  28 + public static boolean run;
  29 +
  30 + static ExecutorService threadPool = Executors.newFixedThreadPool(50);
  31 +
  32 + private static CountDownLatch count;
  33 +
  34 + public static void recovery() {
  35 + List<GpsEntity> list = loadData();
  36 +
  37 + //按车辆分组数据
  38 + ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
  39 + for (GpsEntity gps : list) {
  40 + if(gps.getNbbm() != null)
  41 + listMap.put(gps.getNbbm(), gps);
  42 + }
  43 +
  44 + count = new CountDownLatch(listMap.keySet().size());
  45 +
  46 + Set<String> keys = listMap.keySet();
  47 + for (String nbbm : keys) {
  48 + threadPool.execute(new RecoveryDataThread(listMap.get(nbbm), count));
  49 + /*if(nbbm.equals("W9A-250"))
  50 + new RecoveryDataThread(listMap.get(nbbm), count).run();*/
  51 + }
  52 + try {
  53 + //等待子线程结束
  54 + count.await();
  55 + logger.info("GPS 数据恢复完成....");
  56 + } catch (InterruptedException e) {
  57 + logger.error("", e);
  58 + }
  59 + }
  60 +
  61 + /**
  62 + * 加载当天的gps数据
  63 + *
  64 + * @return
  65 + */
  66 + public static List<GpsEntity> loadData() {
  67 + Calendar calendar = Calendar.getInstance();
  68 + int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
  69 +
  70 + String sql = "select DEVICE_ID,LAT,LON,TS,SPEED_GPS,LINE_ID,SERVICE_STATE from BSTH_C_GPS_INFO where days_year=" + dayOfYear;
  71 + JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_MS.getDataSource());
  72 +
  73 + List<GpsEntity> list =
  74 + jdbcTemplate.query(sql, new RowMapper<GpsEntity>() {
  75 + @Override
  76 + public GpsEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
  77 + GpsEntity gps = new GpsEntity();
  78 +
  79 + gps.setDeviceId(rs.getString("DEVICE_ID"));
  80 + gps.setNbbm(BasicData.deviceId2NbbmMap.get(gps.getDeviceId()));
  81 + gps.setSpeed(rs.getFloat("SPEED_GPS"));
  82 + gps.setLat(rs.getFloat("LAT"));
  83 + gps.setLon(rs.getFloat("LON"));
  84 + gps.setLineId(rs.getString("LINE_ID"));
  85 + gps.setTimestamp(rs.getLong("TS"));
  86 + gps.setUpDown(getUpOrDown(rs.getLong("SERVICE_STATE")));
  87 + return gps;
  88 + }
  89 + });
  90 + return list;
  91 + }
  92 +
  93 + /**
  94 + * 王通 2016/6/29 9:23:24 获取车辆线路上下行
  95 + *
  96 + * @return -1无效 0上行 1下行
  97 + */
  98 + public static int getUpOrDown(long serviceState) {
  99 + if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000
  100 + || (serviceState & 0x01000000) == 0x01000000 || (serviceState & 0x08000000) == 0x08000000)
  101 + return -1;
  102 + return (((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);
  103 + }
  104 +
  105 + public static class RecoveryDataThread implements Runnable {
  106 +
  107 + List<GpsEntity> list;
  108 + CountDownLatch count;
  109 +
  110 + public RecoveryDataThread(List<GpsEntity> list, CountDownLatch count) {
  111 + this.list = list;
  112 + this.count = count;
  113 + }
  114 +
  115 + @Override
  116 + public void run() {
  117 + try {
  118 + //排序
  119 + Collections.sort(list, new GpsComp());
  120 + //依次跑完gps
  121 + //int i = 0;
  122 + for(GpsEntity gps : list){
  123 + /* i++;
  124 + if(i == 383){
  125 + System.out.println("aaa");
  126 + }*/
  127 + GpsArrival.arrival(gps);
  128 + }
  129 + } catch (Exception e) {
  130 + logger.error("", e);
  131 + } finally {
  132 + count.countDown();
  133 + }
  134 + }
  135 + }
  136 +
  137 + public static class GpsComp implements Comparator<GpsEntity>{
  138 +
  139 + @Override
  140 + public int compare(GpsEntity g1, GpsEntity g2) {
  141 + return (int) (g1.getTimestamp() - g2.getTimestamp());
  142 + }
  143 + }
  144 +}
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -3,9 +3,11 @@ package com.bsth.data.schedule; @@ -3,9 +3,11 @@ package com.bsth.data.schedule;
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONArray;
5 import com.bsth.Application; 5 import com.bsth.Application;
  6 +import com.bsth.data.BasicData;
6 import com.bsth.data.LineConfigData; 7 import com.bsth.data.LineConfigData;
7 import com.bsth.data.directive.FirstScheduleCheckThread; 8 import com.bsth.data.directive.FirstScheduleCheckThread;
8 import com.bsth.data.gpsdata.GpsRealData; 9 import com.bsth.data.gpsdata.GpsRealData;
  10 +import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
9 import com.bsth.data.schedule.thread.ScheduleLateThread; 11 import com.bsth.data.schedule.thread.ScheduleLateThread;
10 import com.bsth.data.schedule.thread.SchedulePstThread; 12 import com.bsth.data.schedule.thread.SchedulePstThread;
11 import com.bsth.data.schedule.thread.ScheduleRefreshThread; 13 import com.bsth.data.schedule.thread.ScheduleRefreshThread;
@@ -111,19 +113,30 @@ public class DayOfSchedule implements CommandLineRunner { @@ -111,19 +113,30 @@ public class DayOfSchedule implements CommandLineRunner {
111 @Autowired 113 @Autowired
112 SubmitToTrafficManage submitToTrafficManage; 114 SubmitToTrafficManage submitToTrafficManage;
113 115
  116 + @Autowired
  117 + LineConfigData lineConfigs;
  118 +
  119 + @Autowired
  120 + BasicData.BasicDataLoader dataLoader;
  121 +
114 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd") 122 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd")
115 ,fmtHHmm = DateTimeFormat.forPattern("HH:mm"); 123 ,fmtHHmm = DateTimeFormat.forPattern("HH:mm");
116 124
117 @Override 125 @Override
118 public void run(String... arg0) throws Exception { 126 public void run(String... arg0) throws Exception {
  127 + //加载基础数据
  128 + dataLoader.loadAllData();
  129 + //从数据库恢复排班
  130 + //dataRecovery();
  131 +
119 //翻班线程 132 //翻班线程
120 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 133 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
121 //入库 134 //入库
122 -// Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); 135 + Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
123 //首班出场指令补发器 136 //首班出场指令补发器
124 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS); 137 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
125 //班次误点扫描 138 //班次误点扫描
126 -// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 139 + Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
127 140
128 //每天凌晨2点20提交数据到运管处 141 //每天凌晨2点20提交数据到运管处
129 long diff = (DateUtils.getTimestamp() + 1000*60*140) - System.currentTimeMillis(); 142 long diff = (DateUtils.getTimestamp() + 1000*60*140) - System.currentTimeMillis();
@@ -134,6 +147,23 @@ public class DayOfSchedule implements CommandLineRunner { @@ -134,6 +147,23 @@ public class DayOfSchedule implements CommandLineRunner {
134 //Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); 147 //Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
135 } 148 }
136 149
  150 + //数据恢复
  151 + private void dataRecovery() {
  152 + GpsDataRecovery.run = true;
  153 +
  154 + Collection<LineConfig> confs = lineConfigs.getAll();
  155 + String lineCode, currSchDate;
  156 + for(LineConfig conf : confs){
  157 + lineCode = conf.getLine().getLineCode();
  158 + currSchDate = calcSchDate(lineCode);
  159 + //加载班次数据
  160 + reloadSch(lineCode, currSchDate, false);
  161 + }
  162 +
  163 + //恢复gps数据
  164 + GpsDataRecovery.recovery();
  165 + }
  166 +
137 public Map<String, String> getCurrSchDate() { 167 public Map<String, String> getCurrSchDate() {
138 return currSchDateMap; 168 return currSchDateMap;
139 } 169 }
@@ -189,17 +219,20 @@ public class DayOfSchedule implements CommandLineRunner { @@ -189,17 +219,20 @@ public class DayOfSchedule implements CommandLineRunner {
189 putAll(list); 219 putAll(list);
190 220
191 Set<String> cars = searchAllCars(list); 221 Set<String> cars = searchAllCars(list);
192 - //计算“起点站应到”时间  
193 - for(String nbbm : cars) 222 + for(String nbbm : cars){
  223 + //计算“起点站应到”时间
194 schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm)); 224 schAttrCalculator.calcQdzTimePlan(nbbmScheduleMap.get(nbbm));
195 - 225 + //车辆 ——> 要执行的班次对照
  226 + carExecutePlanMap.put(nbbm, schAttrCalculator.calcCurrentExecSch(nbbmScheduleMap.get(nbbm)));
  227 + }
  228 +
196 //是否是出站即出场 229 //是否是出站即出场
197 LineConfig conf = lineConfigData.get(lineCode); 230 LineConfig conf = lineConfigData.get(lineCode);
198 if(conf.getOutConfig() == 2){ 231 if(conf.getOutConfig() == 2){
199 for(String nbbm : cars) 232 for(String nbbm : cars)
200 schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm)); 233 schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm));
201 } 234 }
202 - 235 +
203 // 页面 翻班通知 236 // 页面 翻班通知
204 sendUtils.shiftSchedule(lineCode); 237 sendUtils.shiftSchedule(lineCode);
205 } catch (Exception e) { 238 } catch (Exception e) {
@@ -451,6 +484,10 @@ public class DayOfSchedule implements CommandLineRunner { @@ -451,6 +484,10 @@ public class DayOfSchedule implements CommandLineRunner {
451 public ScheduleRealInfo next(ScheduleRealInfo sch) { 484 public ScheduleRealInfo next(ScheduleRealInfo sch) {
452 485
453 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh()); 486 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  487 + int outConfig = -1;
  488 + LineConfig config = lineConfigData.get(sch.getXlBm());
  489 + if(config != null)
  490 + outConfig = config.getOutConfig();
454 491
455 boolean flag = false; 492 boolean flag = false;
456 ScheduleRealInfo next = null; 493 ScheduleRealInfo next = null;
@@ -462,6 +499,10 @@ public class DayOfSchedule implements CommandLineRunner { @@ -462,6 +499,10 @@ public class DayOfSchedule implements CommandLineRunner {
462 //忽略烂班 499 //忽略烂班
463 if(temp.isDestroy()) 500 if(temp.isDestroy())
464 continue; 501 continue;
  502 +
  503 + //出站既出场,忽略出场班次
  504 + if(outConfig == 2 && temp.getBcType().equals("out"))
  505 + continue;
465 506
466 if(flag){ 507 if(flag){
467 next = temp; 508 next = temp;
@@ -471,6 +512,30 @@ public class DayOfSchedule implements CommandLineRunner { @@ -471,6 +512,30 @@ public class DayOfSchedule implements CommandLineRunner {
471 return next; 512 return next;
472 } 513 }
473 514
  515 + /**
  516 + * 上一个班次
  517 + * @param sch
  518 + * @return
  519 + */
  520 + public ScheduleRealInfo prev(ScheduleRealInfo sch){
  521 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  522 +
  523 + //boolean flag = false;
  524 + ScheduleRealInfo prev = null;
  525 + int size = list.size();
  526 +
  527 + for(int i = 0; i < size; i ++){
  528 + if(list.get(i).isDestroy())
  529 + continue;
  530 +
  531 + if(list.get(i).getId().equals(sch.getId())){
  532 + return prev;
  533 + }
  534 + prev = list.get(i);
  535 + }
  536 + return prev;
  537 + }
  538 +
474 public void put(ScheduleRealInfo sch) { 539 public void put(ScheduleRealInfo sch) {
475 schAttrCalculator 540 schAttrCalculator
476 .calcRealDate(sch) 541 .calcRealDate(sch)
@@ -666,9 +731,18 @@ public class DayOfSchedule implements CommandLineRunner { @@ -666,9 +731,18 @@ public class DayOfSchedule implements CommandLineRunner {
666 carExecutePlanMap.remove(clzbh); 731 carExecutePlanMap.remove(clzbh);
667 } 732 }
668 733
669 - public Map<String, ScheduleRealInfo> execPlamMap(){ 734 + public Map<String, ScheduleRealInfo> execPlanMap(){
670 return carExecutePlanMap; 735 return carExecutePlanMap;
671 } 736 }
  737 +
  738 + /**
  739 + * 车辆当前执行的班次
  740 + * @param nbbm
  741 + * @return
  742 + */
  743 + public static ScheduleRealInfo executeCurr(String nbbm){
  744 + return carExecutePlanMap.get(nbbm);
  745 + }
672 746
673 /** 747 /**
674 * @Title: changeCar 748 * @Title: changeCar
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
@@ -215,4 +215,30 @@ public class SchAttrCalculator { @@ -215,4 +215,30 @@ public class SchAttrCalculator {
215 if(sch.getZdsjActualTime() == null && sch.getZdsjActual() != null) 215 if(sch.getZdsjActualTime() == null && sch.getZdsjActual() != null)
216 sch.setZdsjActualAll(sch.getZdsjActual()); 216 sch.setZdsjActualAll(sch.getZdsjActual());
217 } 217 }
  218 +
  219 + /**
  220 + * 计算当前要执行的班次
  221 + * @param list
  222 + * @return
  223 + */
  224 + public ScheduleRealInfo calcCurrentExecSch(List<ScheduleRealInfo> list){
  225 + String lineCode = list.get(0).getXlBm();
  226 + LineConfig conf = lineConfigData.get(lineCode);
  227 + int outConfig = -1;
  228 + if(conf != null)
  229 + outConfig = conf.getOutConfig();
  230 +
  231 + for(ScheduleRealInfo sch : list){
  232 + //如果是出站既出场,忽略出场班次
  233 + if(outConfig == 2 && sch.getBcType().equals("out"))
  234 + continue;
  235 +
  236 + //已执行
  237 + if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  238 + continue;
  239 +
  240 + return sch;
  241 + }
  242 + return null;
  243 + }
218 } 244 }
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
1 package com.bsth.data.schedule.thread; 1 package com.bsth.data.schedule.thread;
2 2
3 -import java.util.Collection;  
4 -import java.util.Set;  
5 -  
6 -import org.slf4j.Logger;  
7 -import org.slf4j.LoggerFactory;  
8 -import org.springframework.beans.factory.annotation.Autowired;  
9 -import org.springframework.stereotype.Component;  
10 -  
11 import com.bsth.data.BasicData; 3 import com.bsth.data.BasicData;
12 import com.bsth.data.LineConfigData; 4 import com.bsth.data.LineConfigData;
13 import com.bsth.data.arrival.ArrivalData_GPS; 5 import com.bsth.data.arrival.ArrivalData_GPS;
@@ -15,6 +7,13 @@ import com.bsth.data.directive.DayOfDirectives; @@ -15,6 +7,13 @@ import com.bsth.data.directive.DayOfDirectives;
15 import com.bsth.data.pilot80.PilotReport; 7 import com.bsth.data.pilot80.PilotReport;
16 import com.bsth.data.schedule.DayOfSchedule; 8 import com.bsth.data.schedule.DayOfSchedule;
17 import com.bsth.entity.realcontrol.LineConfig; 9 import com.bsth.entity.realcontrol.LineConfig;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.stereotype.Component;
  14 +
  15 +import java.util.Collection;
  16 +import java.util.Set;
18 17
19 /** 18 /**
20 * 19 *
@@ -57,6 +56,7 @@ public class ScheduleRefreshThread extends Thread{ @@ -57,6 +56,7 @@ public class ScheduleRefreshThread extends Thread{
57 currSchDate = dayOfSchedule.calcSchDate(lineCode); 56 currSchDate = dayOfSchedule.calcSchDate(lineCode);
58 57
59 if(oldSchDate == null || !oldSchDate.equals(currSchDate)){ 58 if(oldSchDate == null || !oldSchDate.equals(currSchDate)){
  59 +
60 logger.info(lineCode + "开始翻班, " + currSchDate); 60 logger.info(lineCode + "开始翻班, " + currSchDate);
61 //清除进出站数据 61 //清除进出站数据
62 arrivalData.clearRAMData(lineCode); 62 arrivalData.clearRAMData(lineCode);
src/main/java/com/bsth/entity/mcy_forms/Changetochange.java
1 package com.bsth.entity.mcy_forms; 1 package com.bsth.entity.mcy_forms;
2 2
3 -import java.util.Date;  
4 -  
5 import javax.persistence.Entity; 3 import javax.persistence.Entity;
6 import javax.persistence.GeneratedValue; 4 import javax.persistence.GeneratedValue;
7 import javax.persistence.Id; 5 import javax.persistence.Id;
src/main/java/com/bsth/entity/realcontrol/ScheduleType.java 0 → 100644
  1 +package com.bsth.entity.realcontrol;
  2 +
  3 +/**
  4 + * 班次类型
  5 + * Created by panzhao on 2016/12/23.
  6 + */
  7 +public enum ScheduleType {
  8 +
  9 + normal, //正常班次
  10 + out, //出场
  11 + in, //进场
  12 + region, //区间
  13 + venting,//直放
  14 + major //放站
  15 +}
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -24,6 +24,9 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -24,6 +24,9 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
24 @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName order by (lpName+1)") 24 @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName order by (lpName+1)")
25 List<ScheduleRealInfo> queryUserInfo2(String line,String date); 25 List<ScheduleRealInfo> queryUserInfo2(String line,String date);
26 26
  27 + @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName order by (lpName+1)")
  28 + List<ScheduleRealInfo> queryUserInfo3(String line,String date);
  29 +
27 @Query(value="select s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 order by bcs") 30 @Query(value="select s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 order by bcs")
28 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName); 31 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName);
29 32
src/main/java/com/bsth/service/forms/FormsService.java
@@ -30,7 +30,7 @@ public interface FormsService { @@ -30,7 +30,7 @@ public interface FormsService {
30 30
31 public List<Singledata> singledata(Map<String, Object> map); 31 public List<Singledata> singledata(Map<String, Object> map);
32 32
33 - public List<Vehicleloading> vehicleloading(/*String gsdmVehic,String fgsdmVehic,*/String line,String data); 33 + public List<Vehicleloading> vehicleloading(String gsdmVehic,String fgsdmVehic,String line,String data);
34 34
35 public List<Operationservice> operationservice(Map<String, Object> map); 35 public List<Operationservice> operationservice(Map<String, Object> map);
36 36
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -26,6 +26,7 @@ import com.bsth.entity.mcy_forms.Waybillday; @@ -26,6 +26,7 @@ import com.bsth.entity.mcy_forms.Waybillday;
26 import com.bsth.entity.mcy_forms.Allline; 26 import com.bsth.entity.mcy_forms.Allline;
27 import com.bsth.entity.mcy_forms.Changetochange; 27 import com.bsth.entity.mcy_forms.Changetochange;
28 import com.bsth.entity.mcy_forms.Executionrate; 28 import com.bsth.entity.mcy_forms.Executionrate;
  29 +import com.bsth.service.forms.CommonService;
29 import com.bsth.service.forms.FormsService; 30 import com.bsth.service.forms.FormsService;
30 import com.bsth.service.realcontrol.ScheduleRealInfoService; 31 import com.bsth.service.realcontrol.ScheduleRealInfoService;
31 32
@@ -38,20 +39,32 @@ public class FormsServiceImpl implements FormsService { @@ -38,20 +39,32 @@ public class FormsServiceImpl implements FormsService {
38 @Autowired 39 @Autowired
39 ScheduleRealInfoService scheduleRealInfoService; 40 ScheduleRealInfoService scheduleRealInfoService;
40 41
  42 + @Autowired
  43 + CommonService commonService;
  44 +
41 // 行车路单日报表 45 // 行车路单日报表
42 @Override 46 @Override
43 public List<Waybillday> waybillday(Map<String, Object> map) { 47 public List<Waybillday> waybillday(Map<String, Object> map) {
  48 +
44 String sql ="select x.j_gh,x.cl_zbh,z.JZL,z.YH,z.personnel_name,x.schedule_date,x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name " 49 String sql ="select x.j_gh,x.cl_zbh,z.JZL,z.YH,z.personnel_name,x.schedule_date,x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name "
45 + " from bsth_c_s_sp_info_real x INNER join " 50 + " from bsth_c_s_sp_info_real x INNER join "
46 + " ( select y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH,c.personnel_name from" 51 + " ( select y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH,c.personnel_name from"
47 + " bsth_c_ylb y LEFT JOIN bsth_c_personnel c ON c.job_code=y.JSY " 52 + " bsth_c_ylb y LEFT JOIN bsth_c_personnel c ON c.job_code=y.JSY "
48 - + " where to_days(y.RQ)=to_days('"+map.get("date").toString() + "') and y.XLBM= '"+ map.get("line").toString()+"' GROUP BY y.NBBM) "  
49 - + " z on x.cl_zbh=z.nbbm where to_days( x.schedule_date)=to_days('"+map.get("date").toString()+"') "  
50 - + " and x.xl_bm='"+map.get("line").toString()+"'"  
51 - /*+ " and x.gs_bm='"+map.get("gsdmWaybillday").toString()+"'"  
52 - + " and x.fgs_bm='"+map.get("fgsdmWaybillday").toString()+"'"*/  
53 - + " GROUP BY x.j_gh,x.cl_zbh,z.JZL,z.YH,z.personnel_name,x.schedule_date,x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name";  
54 - //x.cl_zbh,j_gh 53 + + " where 1=1 ";
  54 + if(map.get("date").toString()!=""){
  55 + sql+=" and to_days(y.RQ)=to_days('"+map.get("date").toString() + "') ";
  56 + }
  57 + if( map.get("line").toString()!=""){
  58 + sql+=" and y.XLBM= '"+ map.get("line").toString()+"' GROUP BY y.NBBM) ";
  59 + }
  60 + sql+= " z on x.cl_zbh=z.nbbm where to_days( x.schedule_date)=to_days('"+map.get("date").toString()+"') ";
  61 + if(map.get("gsdmWaybillday").toString()!=""){
  62 + sql+=" and x.gs_bm='"+map.get("gsdmWaybillday").toString()+"'";
  63 + }
  64 + if(map.get("fgsdmWaybillday").toString()!=""){
  65 + sql+=" and x.fgs_bm='"+map.get("fgsdmWaybillday").toString()+"'";
  66 + }
  67 + sql += " GROUP BY x.j_gh,x.cl_zbh,z.JZL,z.YH,z.personnel_name,x.schedule_date,x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name ";
55 List<Waybillday> list = jdbcTemplate.query(sql, new RowMapper<Waybillday>() { 68 List<Waybillday> list = jdbcTemplate.query(sql, new RowMapper<Waybillday>() {
56 @Override 69 @Override
57 public Waybillday mapRow(ResultSet arg0, int arg1) throws SQLException { 70 public Waybillday mapRow(ResultSet arg0, int arg1) throws SQLException {
@@ -60,21 +73,16 @@ public class FormsServiceImpl implements FormsService { @@ -60,21 +73,16 @@ public class FormsServiceImpl implements FormsService {
60 wbd.setJzl(arg0.getString("JZL")); 73 wbd.setJzl(arg0.getString("JZL"));
61 wbd.setYh(arg0.getString("YH")); 74 wbd.setYh(arg0.getString("YH"));
62 wbd.setjName(arg0.getString("personnel_name")); 75 wbd.setjName(arg0.getString("personnel_name"));
63 - // wbd.setZlc(arg0.getInt("zlc"));  
64 - // System.out.println(arg0.getObject("yl"));  
65 - // wbd.setYl(arg0.getString("yl"));  
66 - // wbd.setNbbm(arg0.getString("nbbm"));  
67 wbd.setRq(arg0.getString("schedule_date")); 76 wbd.setRq(arg0.getString("schedule_date"));
68 wbd.setJgh(arg0.getString("j_gh")); 77 wbd.setJgh(arg0.getString("j_gh"));
69 return wbd; 78 return wbd;
70 -  
71 } 79 }
72 }); 80 });
73 81
74 for(int i=0;i<list.size();i++){ 82 for(int i=0;i<list.size();i++){
75 Waybillday w=list.get(i); 83 Waybillday w=list.get(i);
76 Map<String, Object> maps = new HashMap<>(); 84 Map<String, Object> maps = new HashMap<>();
77 - maps = scheduleRealInfoService.findKMBC2(w.getJgh(), w.getCarPlate(), 85 + maps = commonService.findKMBC2(w.getJgh(), w.getCarPlate(),
78 w.getRq()); 86 w.getRq());
79 w.setJzl1(maps.get("ksgl").toString()); 87 w.setJzl1(maps.get("ksgl").toString());
80 w.setZlc(maps.get("realMileage").toString()); 88 w.setZlc(maps.get("realMileage").toString());
@@ -86,18 +94,25 @@ public class FormsServiceImpl implements FormsService { @@ -86,18 +94,25 @@ public class FormsServiceImpl implements FormsService {
86 // 线路客流量报表 94 // 线路客流量报表
87 @Override 95 @Override
88 public List<Linepasswengerflow> linepasswengerflow(Map<String, Object> map) { 96 public List<Linepasswengerflow> linepasswengerflow(Map<String, Object> map) {
89 - String sql = " SELECT s.station_name,l.name,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name" 97 + String sql = " SELECT r.schedule_date,s.station_name,l.name,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name"
90 + " from bsth_c_stationroute s " 98 + " from bsth_c_stationroute s "
91 + " LEFT JOIN bsth_c_line l on s.line_code=l.line_code " 99 + " LEFT JOIN bsth_c_line l on s.line_code=l.line_code "
92 + " LEFT JOIN bsth_c_s_sp_info_real r on r.xl_bm=l.line_code" 100 + " LEFT JOIN bsth_c_s_sp_info_real r on r.xl_bm=l.line_code"
93 - + " where to_days(l.create_date)=to_days('"+map.get("date").toString() + "') "  
94 - + " and l.line_code=" + map.get("line").toString()  
95 - + " AND r.gs_bm is not null"  
96 - /*+ " and r.gs_bm='"+map.get("gsdmLine").toString()+"'"  
97 - + " and r.fgs_bm='"+map.get("fgsdmLine").toString()+"'"*/  
98 - + " GROUP BY s.station_name,l.name,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";  
99 -  
100 - //s.station_name 101 + + " where 1=1 ";
  102 + if(map.get("date").toString()!=""){
  103 + sql+="and to_days(r.schedule_date)=to_days('"+map.get("date").toString() + "') ";
  104 + }
  105 + if( map.get("line").toString()!=""){
  106 + sql+=" and l.line_code=" + map.get("line").toString();
  107 + }
  108 + sql+= " AND r.gs_bm is not null";
  109 + if(map.get("gsdmLine").toString()!=""){
  110 + sql+=" and r.gs_bm='"+map.get("gsdmLine").toString()+"' ";
  111 + }
  112 + if(map.get("fgsdmLine").toString()!=""){
  113 + sql+=" and r.fgs_bm='"+map.get("fgsdmLine").toString()+"'";
  114 + }
  115 + sql += " GROUP BY s.station_name,l.name,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";
101 List<Linepasswengerflow> list = jdbcTemplate.query(sql, new RowMapper<Linepasswengerflow>() { 116 List<Linepasswengerflow> list = jdbcTemplate.query(sql, new RowMapper<Linepasswengerflow>() {
102 117
103 @Override 118 @Override
@@ -109,8 +124,6 @@ public class FormsServiceImpl implements FormsService { @@ -109,8 +124,6 @@ public class FormsServiceImpl implements FormsService {
109 } 124 }
110 }); 125 });
111 126
112 -  
113 -  
114 return list; 127 return list;
115 } 128 }
116 129
@@ -122,16 +135,26 @@ public class FormsServiceImpl implements FormsService { @@ -122,16 +135,26 @@ public class FormsServiceImpl implements FormsService {
122 public List<Shiftuehiclemanth> shiftuehiclemanth(Map<String, Object> map) { 135 public List<Shiftuehiclemanth> shiftuehiclemanth(Map<String, Object> map) {
123 String sql = "select r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type " 136 String sql = "select r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "
124 + " from bsth_c_s_sp_info_real r " 137 + " from bsth_c_s_sp_info_real r "
125 - + " where to_days(r.schedule_date_str) BETWEEN to_days('" + map.get("startDate").toString() + "') "  
126 - + " and to_days('" + map.get("endDate").toString() + "') "  
127 - + " and r.xl_bm='"+ map.get("line").toString() + "'"  
128 - + " AND r.gs_bm is not null"  
129 - + " and r.bc_type not in('in','out')"  
130 - /* + " and r.gs_bm='"+map.get("gsdmManth").toString()+"'"  
131 - + " and r.fgs_bm='"+map.get("fgsdmManth").toString()+"'"*/  
132 - + " GROUP BY r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name"  
133 - + " ORDER BY r.j_name";  
134 - //r.j_name 138 + + " where 1=1 ";
  139 + if(map.get("startDate").toString()!=""){
  140 + sql+=" and to_days(r.schedule_date_str) BETWEEN to_days('" + map.get("startDate").toString() + "') ";
  141 + }
  142 +
  143 + if(map.get("endDate").toString()!=""){
  144 + sql+=" and to_days('" + map.get("endDate").toString() + "') ";
  145 + }
  146 + if( map.get("line").toString()!=""){
  147 + sql+=" and r.xl_bm='"+ map.get("line").toString() + "' ";
  148 + }
  149 + sql+= " AND r.gs_bm is not null and r.bc_type not in('in','out')";
  150 + if(map.get("gsdmManth").toString()!=""){
  151 + sql+=" and r.gs_bm='"+map.get("gsdmManth").toString()+"' ";
  152 + }
  153 + if(map.get("fgsdmManth").toString()!=""){
  154 + sql+=" and r.fgs_bm='"+map.get("fgsdmManth").toString()+"' ";
  155 + }
  156 + sql += " GROUP BY r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type ";
  157 +
135 startDate = map.get("startDate").toString(); 158 startDate = map.get("startDate").toString();
136 endDate = map.get("endDate").toString(); 159 endDate = map.get("endDate").toString();
137 List<Shiftuehiclemanth> list = jdbcTemplate.query(sql, new RowMapper<Shiftuehiclemanth>() { 160 List<Shiftuehiclemanth> list = jdbcTemplate.query(sql, new RowMapper<Shiftuehiclemanth>() {
@@ -150,7 +173,7 @@ public class FormsServiceImpl implements FormsService { @@ -150,7 +173,7 @@ public class FormsServiceImpl implements FormsService {
150 Shiftuehiclemanth s=list.get(i); 173 Shiftuehiclemanth s=list.get(i);
151 Map<String, Object> maps = new HashMap<>(); 174 Map<String, Object> maps = new HashMap<>();
152 175
153 - maps = scheduleRealInfoService.findKMBC1(s.getjName(),s.getZbh(), startDate, 176 + maps = commonService.findKMBC1(s.getjName(),s.getZbh(), startDate,
154 endDate); 177 endDate);
155 178
156 s.setJhlc(maps.get("jhlc").toString()); 179 s.setJhlc(maps.get("jhlc").toString());
@@ -172,13 +195,22 @@ public class FormsServiceImpl implements FormsService { @@ -172,13 +195,22 @@ public class FormsServiceImpl implements FormsService {
172 String sql = " select r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm," 195 String sql = " select r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm,"
173 + " r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type " 196 + " r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "
174 + " FROM bsth_c_s_sp_info_real r " 197 + " FROM bsth_c_s_sp_info_real r "
175 - + " where to_days(r.schedule_date)=to_days('"  
176 - + map.get("date").toString() + "') and r.xl_bm=" + map.get("line").toString()  
177 - + " and r.bc_type not in('in','out')"  
178 - /*+ " and r.gs_bm='"+map.get("gsdmShif").toString()+"'"  
179 - + " and r.fgs_bm='"+map.get("fgsdmShif").toString()+"'"*/  
180 - + " GROUP BY r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm,r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "  
181 - + " ORDER BY r.lp_name asc"; 198 + + " where 1=1 ";
  199 + if(map.get("date").toString()!=""){
  200 + sql+=" and to_days(r.schedule_date)=to_days('"+ map.get("date").toString() + "') ";
  201 + }
  202 + if( map.get("line").toString()!=""){
  203 + sql+=" and r.xl_bm=" + map.get("line").toString();
  204 + }
  205 + sql+= " and r.bc_type not in('in','out')";
  206 + if(map.get("gsdmShif").toString()!=""){
  207 + sql+=" and r.gs_bm='"+map.get("gsdmShif").toString()+"'";
  208 + }
  209 + if(map.get("fgsdmShif").toString()!=""){
  210 + sql+=" and r.fgs_bm='"+map.get("fgsdmShif").toString()+"'";
  211 + }
  212 + sql += " GROUP BY r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm,r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "
  213 + + " ORDER BY r.lp_name asc";
182 214
183 List<Shifday> list = jdbcTemplate.query(sql, new RowMapper<Shifday>() { 215 List<Shifday> list = jdbcTemplate.query(sql, new RowMapper<Shifday>() {
184 216
@@ -200,7 +232,7 @@ public class FormsServiceImpl implements FormsService { @@ -200,7 +232,7 @@ public class FormsServiceImpl implements FormsService {
200 for(int i=0;i<list.size();i++){ 232 for(int i=0;i<list.size();i++){
201 Shifday shi=list.get(i); 233 Shifday shi=list.get(i);
202 Map<String, Object> maps = new HashMap<>(); 234 Map<String, Object> maps = new HashMap<>();
203 - maps = scheduleRealInfoService.findKMBC2(shi.getJgh(), shi.getCarPlate(), 235 + maps = commonService.findKMBC2(shi.getJgh(), shi.getCarPlate(),
204 shi.getRq()); 236 shi.getRq());
205 shi.setJhlc(maps.get("jhlc").toString());// 计划里程 237 shi.setJhlc(maps.get("jhlc").toString());// 计划里程
206 //shifday.setSjjhlc(map.get("remMileage").toString());//实际计划里程 238 //shifday.setSjjhlc(map.get("remMileage").toString());//实际计划里程
@@ -261,7 +293,6 @@ public class FormsServiceImpl implements FormsService { @@ -261,7 +293,6 @@ public class FormsServiceImpl implements FormsService {
261 @Override 293 @Override
262 public Changetochange mapRow(ResultSet arg0, int arg1) throws SQLException { 294 public Changetochange mapRow(ResultSet arg0, int arg1) throws SQLException {
263 Changetochange chan = new Changetochange(); 295 Changetochange chan = new Changetochange();
264 -  
265 chan.setRq(rq); 296 chan.setRq(rq);
266 chan.setGs(arg0.getString("gs")); 297 chan.setGs(arg0.getString("gs"));
267 chan.setFgs(arg0.getString("fgs")); 298 chan.setFgs(arg0.getString("fgs"));
@@ -302,18 +333,22 @@ public class FormsServiceImpl implements FormsService { @@ -302,18 +333,22 @@ public class FormsServiceImpl implements FormsService {
302 333
303 rq = rq2 + "-" + rq3; 334 rq = rq2 + "-" + rq3;
304 335
305 - String sql = " SELECT r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name " 336 + String sql = " SELECT r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "
306 + " FROM bsth_c_s_sp_info_real r " 337 + " FROM bsth_c_s_sp_info_real r "
307 - + " INNER join ( select y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH from bsth_c_ylb y "  
308 - + " where y.RQ BETWEEN '" + map.get("startDate").toString() + "' and '"+ map.get("endDate").toString() + "'"  
309 - + " and y.XLBM= '" + map.get("line").toString() + "' GROUP BY y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH) y on r.cl_zbh=y.nbbm " 338 + + " left join bsth_c_ylb y"
  339 + + " ON r.cl_zbh = y.nbbm "
310 + " where r.schedule_date_str BETWEEN '" + map.get("startDate").toString() + "'" 340 + " where r.schedule_date_str BETWEEN '" + map.get("startDate").toString() + "'"
311 + " and '"+ map.get("endDate").toString() + "'" 341 + " and '"+ map.get("endDate").toString() + "'"
312 + " and r.xl_bm='" + map.get("line").toString() + "'" 342 + " and r.xl_bm='" + map.get("line").toString() + "'"
313 - + " AND r.gs_bm is not null"  
314 - /* + " and r.gs_bm='"+map.get("gsdmSing").toString()+"'"  
315 - + " and r.fgs_bm='"+map.get("fgsdmSing").toString()+"'"*/  
316 - + " GROUP BY r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "; 343 + + " AND r.gs_bm is not null";
  344 +
  345 + if(map.get("gsdmSing").toString()!=""){
  346 + sql+=" and r.gs_bm='"+map.get("gsdmSing").toString()+"'";
  347 + }
  348 + if(map.get("fgsdmSing").toString()!=""){
  349 + sql+=" and r.fgs_bm='"+map.get("fgsdmSing").toString()+"'";
  350 + }
  351 + sql += " GROUP BY r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";
317 352
318 startDate = map.get("startDate").toString(); 353 startDate = map.get("startDate").toString();
319 endDate = map.get("endDate").toString(); 354 endDate = map.get("endDate").toString();
@@ -324,7 +359,7 @@ public class FormsServiceImpl implements FormsService { @@ -324,7 +359,7 @@ public class FormsServiceImpl implements FormsService {
324 Singledata sin = new Singledata(); 359 Singledata sin = new Singledata();
325 sin.setrQ(rq); 360 sin.setrQ(rq);
326 sin.setgS(arg0.getString("gs_name")); 361 sin.setgS(arg0.getString("gs_name"));
327 - sin.setxL(arg0.getString("xl_bm")); 362 + sin.setxL(arg0.getString("xl_name"));
328 sin.setClzbh(arg0.getString("cl_zbh")); 363 sin.setClzbh(arg0.getString("cl_zbh"));
329 sin.setJsy(arg0.getString("j_gh")); 364 sin.setJsy(arg0.getString("j_gh"));
330 sin.setjName(arg0.getString("j_name")); 365 sin.setjName(arg0.getString("j_name"));
@@ -339,7 +374,7 @@ public class FormsServiceImpl implements FormsService { @@ -339,7 +374,7 @@ public class FormsServiceImpl implements FormsService {
339 for(int i=0;i<list.size();i++){ 374 for(int i=0;i<list.size();i++){
340 Singledata si=list.get(i); 375 Singledata si=list.get(i);
341 Map<String, Object> maps = new HashMap<>(); 376 Map<String, Object> maps = new HashMap<>();
342 - maps = scheduleRealInfoService.findKMBC1(si.getjName(),si.getClzbh(), startDate, 377 + maps = commonService.findKMBC1(si.getjName(),si.getClzbh(), startDate,
343 endDate); 378 endDate);
344 //sin.setjName(maps.get("j_name") == null ? "" : maps.get("j_name").toString()); 379 //sin.setjName(maps.get("j_name") == null ? "" : maps.get("j_name").toString());
345 si.setSgh(maps.get("s_gh") == null ? "" : maps.get("s_gh").toString()); 380 si.setSgh(maps.get("s_gh") == null ? "" : maps.get("s_gh").toString());
@@ -356,24 +391,30 @@ public class FormsServiceImpl implements FormsService { @@ -356,24 +391,30 @@ public class FormsServiceImpl implements FormsService {
356 @Override 391 @Override
357 public List<Operationservice> operationservice(Map<String, Object> map) { 392 public List<Operationservice> operationservice(Map<String, Object> map) {
358 393
359 - String sql = " SELECT r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type " 394 + String sql = " SELECT r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "
360 + " FROM bsth_c_s_sp_info_real r " 395 + " FROM bsth_c_s_sp_info_real r "
361 // + "LEFT JOIN bsth_c_s_sp_info_real r on r.cl_zbh=y.NBBM" 396 // + "LEFT JOIN bsth_c_s_sp_info_real r on r.cl_zbh=y.NBBM"
362 - + " INNER join ( select y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH from bsth_c_ylb y "  
363 - + " where y.RQ BETWEEN '" + map.get("startDate").toString() + "' and '"+ map.get("endDate").toString() + "'"  
364 - + " and y.XLBM= '" + map.get("line").toString() + "' GROUP BY y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH) y on r.cl_zbh=y.nbbm "  
365 - + " where r.schedule_date_str BETWEEN '"+ map.get("startDate").toString()  
366 - + "'" + " and '" + map.get("endDate").toString() + "'"  
367 - + " and r.xl_bm='" + map.get("line").toString() + "'"  
368 - + " and r.bc_type not in('in','out')"  
369 - /* + " and r.gs_bm='"+map.get("gsdmOperat").toString()+"'"  
370 - + " and r.fgs_bm='"+map.get("fgsdmOperat").toString()+"'"*/  
371 - + " AND r.gs_bm is not null"  
372 - + " GROUP BY r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name"; 397 + + " left join bsth_c_ylb y ON r.cl_zbh = y.nbbm "
  398 + + " where 1=1 ";
  399 + if(map.get("startDate").toString()!=""){
  400 + sql+=" and to_days(r.schedule_date_str) BETWEEN to_days('" + map.get("startDate").toString() + "') ";
  401 + }
373 402
374 - //r.j_name  
375 - startDate = map.get("startDate").toString();  
376 - endDate = map.get("endDate").toString(); 403 + if(map.get("endDate").toString()!=""){
  404 + sql+=" and to_days('" + map.get("endDate").toString() + "') ";
  405 + }
  406 + sql+=" and r.xl_bm='" + map.get("line").toString() + "'" ;
  407 + sql+=" and r.bc_type not in('in','out')";
  408 + if(map.get("gsdmOperat").toString()!=""){
  409 + sql+=" and r.gs_bm='"+map.get("gsdmOperat").toString()+"'";
  410 + }
  411 + if(map.get("fgsdmOperat").toString()!=""){
  412 + sql+=" and r.fgs_bm='"+map.get("fgsdmOperat").toString()+"'";
  413 + }
  414 + sql += " AND r.gs_bm is not null";
  415 + sql += " GROUP BY r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,y.JZL,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name";
  416 + startDate = map.get("startDate").toString();
  417 + endDate = map.get("endDate").toString();
377 List<Operationservice> list = jdbcTemplate.query(sql, new RowMapper<Operationservice>() { 418 List<Operationservice> list = jdbcTemplate.query(sql, new RowMapper<Operationservice>() {
378 419
379 @Override 420 @Override
@@ -392,9 +433,9 @@ public class FormsServiceImpl implements FormsService { @@ -392,9 +433,9 @@ public class FormsServiceImpl implements FormsService {
392 for(int i=0;i<list.size();i++){ 433 for(int i=0;i<list.size();i++){
393 Operationservice o=list.get(i); 434 Operationservice o=list.get(i);
394 Map<String, Object> maps = new HashMap<>(); 435 Map<String, Object> maps = new HashMap<>();
395 - maps = scheduleRealInfoService.findKMBC1(o.getJname(), o.getClzbh(), startDate, 436 + maps = commonService.findKMBC1(o.getJname(), o.getClzbh(), startDate,
396 endDate); 437 endDate);
397 - o.setXsgl(maps.get("yygl").toString() == null ? "" : maps.get("yygl").toString()); 438 + o.setXsgl(maps.get("jhlc").toString() == null ? "" : maps.get("jhlc").toString());
398 o.setEmptMileage(maps.get("ksgl").toString() == null ? "" : maps.get("ksgl").toString()); 439 o.setEmptMileage(maps.get("ksgl").toString() == null ? "" : maps.get("ksgl").toString());
399 o.setSjbc(maps.get("sjbc").toString() == null ? "" : maps.get("sjbc").toString()); 440 o.setSjbc(maps.get("sjbc").toString() == null ? "" : maps.get("sjbc").toString());
400 } 441 }
@@ -404,7 +445,7 @@ public class FormsServiceImpl implements FormsService { @@ -404,7 +445,7 @@ public class FormsServiceImpl implements FormsService {
404 445
405 // 车辆加注 446 // 车辆加注
406 @Override 447 @Override
407 - public List<Vehicleloading> vehicleloading(/*String gsdmVehic,String fgsdmVehic,*/String line, String date) { 448 + public List<Vehicleloading> vehicleloading(String gsdmVehic,String fgsdmVehic,String line, String date) {
408 449
409 String sql = " SELECT r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type " 450 String sql = " SELECT r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "
410 + " FROM bsth_c_s_sp_info_real r " 451 + " FROM bsth_c_s_sp_info_real r "
@@ -414,13 +455,14 @@ public class FormsServiceImpl implements FormsService { @@ -414,13 +455,14 @@ public class FormsServiceImpl implements FormsService {
414 + " where to_days(r.schedule_date_str)=to_days('" + date + "')" 455 + " where to_days(r.schedule_date_str)=to_days('" + date + "')"
415 + " and r.xl_bm='" + line + "' " 456 + " and r.xl_bm='" + line + "' "
416 + " AND r.gs_bm is not null" 457 + " AND r.gs_bm is not null"
417 - + " and r.bc_type not in('in','out')"  
418 - /* + " and r.gs_bm='"+gsdmVehic +"'"  
419 - + " and r.fgs_bm='"+fgsdmVehic +"'"*/  
420 - + " GROUP BY r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";  
421 -  
422 -  
423 - //r.cl_zbh 458 + + " and r.bc_type not in('in','out')";
  459 + if(gsdmVehic.toString()!=""){
  460 + sql+=" and r.gs_bm='"+gsdmVehic+"'";
  461 + }
  462 + if(fgsdmVehic.toString()!=""){
  463 + sql+=" and r.fgs_bm='"+fgsdmVehic +"'";
  464 + }
  465 + sql += " GROUP BY r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";
424 List<Vehicleloading> list = jdbcTemplate.query(sql, new RowMapper<Vehicleloading>() { 466 List<Vehicleloading> list = jdbcTemplate.query(sql, new RowMapper<Vehicleloading>() {
425 @Override 467 @Override
426 public Vehicleloading mapRow(ResultSet arg0, int arg1) throws SQLException { 468 public Vehicleloading mapRow(ResultSet arg0, int arg1) throws SQLException {
@@ -429,8 +471,8 @@ public class FormsServiceImpl implements FormsService { @@ -429,8 +471,8 @@ public class FormsServiceImpl implements FormsService {
429 ve.setgS(arg0.getString("gs_name")); 471 ve.setgS(arg0.getString("gs_name"));
430 ve.setxL(arg0.getString("xl_name")); 472 ve.setxL(arg0.getString("xl_name"));
431 ve.setClzbh(arg0.getString("cl_zbh")); 473 ve.setClzbh(arg0.getString("cl_zbh"));
432 - ve.setHyl(arg0.getString("YH"));  
433 ve.setJzl(arg0.getString("JZL")); 474 ve.setJzl(arg0.getString("JZL"));
  475 + ve.setHyl(arg0.getString("YH"));
434 // ve.setLs(arg0.getString("").toString());//尿素 476 // ve.setLs(arg0.getString("").toString());//尿素
435 ve.setJgh(arg0.getString("j_gh").toString()); 477 ve.setJgh(arg0.getString("j_gh").toString());
436 return ve; 478 return ve;
@@ -440,9 +482,9 @@ public class FormsServiceImpl implements FormsService { @@ -440,9 +482,9 @@ public class FormsServiceImpl implements FormsService {
440 for(int i=0;i<list.size();i++){ 482 for(int i=0;i<list.size();i++){
441 Vehicleloading v=list.get(i); 483 Vehicleloading v=list.get(i);
442 Map<String, Object> maps = new HashMap<>(); 484 Map<String, Object> maps = new HashMap<>();
443 - maps = scheduleRealInfoService.findKMBC2(v.getJgh(), line,  
444 - date);  
445 - v.setJhlc(maps.get("yygl") == null ? "" : maps.get("yygl").toString()); 485 + maps = commonService.findKMBC2(v.getJgh(), v.getClzbh(),
  486 + v.getrQ());
  487 + v.setJhlc(maps.get("jhlc") == null ? "" : maps.get("jhlc").toString());
446 v.setJhbc(maps.get("jhbc").toString() == null ? "" : maps.get("jhbc").toString());// 计划班次 488 v.setJhbc(maps.get("jhbc").toString() == null ? "" : maps.get("jhbc").toString());// 计划班次
447 v.setSjbc(maps.get("sjbc").toString() == null ? "" : maps.get("sjbc").toString());// 实际班次 489 v.setSjbc(maps.get("sjbc").toString() == null ? "" : maps.get("sjbc").toString());// 实际班次
448 } 490 }
@@ -476,8 +518,8 @@ public class FormsServiceImpl implements FormsService { @@ -476,8 +518,8 @@ public class FormsServiceImpl implements FormsService {
476 + " and '" + map.get("endDate").toString() + "' and xl_bm='"+ map.get("line").toString() + "' " 518 + " and '" + map.get("endDate").toString() + "' and xl_bm='"+ map.get("line").toString() + "' "
477 + " AND gs_bm is not null " 519 + " AND gs_bm is not null "
478 + " AND bc_type NOT IN ('in', 'out')" 520 + " AND bc_type NOT IN ('in', 'out')"
479 - /*+ " and gs_bm='"+ map.get("gsdmTurn").toString() + "'"  
480 - + " and fgs_bm='"+ map.get("fgsdmTurn").toString() + "'"*/ 521 + + " and gs_bm='"+ map.get("gsdmTurn").toString() + "'"
  522 + + " and fgs_bm='"+ map.get("fgsdmTurn").toString() + "'"
481 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN (" 523 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN ("
482 + " SELECT COUNT(*) as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b.gs_name,b.fgs_name, b.sbc,b.sxl ,b.scl,t.warrant_car " 524 + " SELECT COUNT(*) as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b.gs_name,b.fgs_name, b.sbc,b.sxl ,b.scl,t.warrant_car "
483 + " from bsth_c_line t RIGHT JOIN (select gs_bm,fgs_bm,xl_bm,gs_name,fgs_name, count(*) as sbc,COUNT(DISTINCT xl_bm) as sxl ,COUNT(DISTINCT cl_zbh) as scl,bc_type from bsth_c_s_sp_info_real " 525 + " from bsth_c_line t RIGHT JOIN (select gs_bm,fgs_bm,xl_bm,gs_name,fgs_name, count(*) as sbc,COUNT(DISTINCT xl_bm) as sxl ,COUNT(DISTINCT cl_zbh) as scl,bc_type from bsth_c_s_sp_info_real "
@@ -510,7 +552,7 @@ public class FormsServiceImpl implements FormsService { @@ -510,7 +552,7 @@ public class FormsServiceImpl implements FormsService {
510 tu.setBcjh(arg0.getString("jbc").toString()); 552 tu.setBcjh(arg0.getString("jbc").toString());
511 tu.setBcsj(arg0.getString("sbc").toString()); 553 tu.setBcsj(arg0.getString("sbc").toString());
512 tu.setBbzxl(result2 + "%");// 班次执行率 554 tu.setBbzxl(result2 + "%");// 班次执行率
513 - // tu.setSm(arg0.getString("gs_name").toString()); 555 + tu.setSm(arg0.getString("gs_name").toString());
514 tu.setGsgs(arg0.getString("gslsbm").toString()); 556 tu.setGsgs(arg0.getString("gslsbm").toString());
515 tu.setFgsgs(arg0.getString("fgsbm").toString()); 557 tu.setFgsgs(arg0.getString("fgsbm").toString());
516 return tu; 558 return tu;
@@ -547,8 +589,8 @@ public class FormsServiceImpl implements FormsService { @@ -547,8 +589,8 @@ public class FormsServiceImpl implements FormsService {
547 + " from bsth_c_s_sp_info" + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '" 589 + " from bsth_c_s_sp_info" + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '"
548 + map.get("startDate").toString() + "' and '" + map.get("endDate").toString() + "' and xl_bm='" 590 + map.get("startDate").toString() + "' and '" + map.get("endDate").toString() + "' and xl_bm='"
549 + map.get("line").toString() + "' AND gs_bm is not null AND bc_type NOT IN ('in', 'out')" 591 + map.get("line").toString() + "' AND gs_bm is not null AND bc_type NOT IN ('in', 'out')"
550 - /*+ " and gs_bm='"+ map.get("gsdmEcecut").toString() + "'"  
551 - + " and fgs_bm='"+ map.get("fgsdmEcecut").toString() + "'"*/ 592 + + " and gs_bm='"+ map.get("gsdmEcecut").toString() + "'"
  593 + + " and fgs_bm='"+ map.get("fgsdmEcecut").toString() + "'"
552 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN (" 594 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN ("
553 + "SELECT COUNT(*) as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b.xl_name,b.gs_name,b.fgs_name, b.sbc,b.sxl ,b.scl " 595 + "SELECT COUNT(*) as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b.xl_name,b.gs_name,b.fgs_name, b.sbc,b.sxl ,b.scl "
554 + "from bsth_c_line t RIGHT JOIN (select gs_bm,fgs_bm,xl_bm,xl_name,gs_name,fgs_name, count(*) as sbc,COUNT(DISTINCT xl_bm) as sxl ,COUNT(DISTINCT cl_zbh) as scl,bc_type from bsth_c_s_sp_info_real " 596 + "from bsth_c_line t RIGHT JOIN (select gs_bm,fgs_bm,xl_bm,xl_name,gs_name,fgs_name, count(*) as sbc,COUNT(DISTINCT xl_bm) as sxl ,COUNT(DISTINCT cl_zbh) as scl,bc_type from bsth_c_s_sp_info_real "
@@ -618,8 +660,8 @@ public class FormsServiceImpl implements FormsService { @@ -618,8 +660,8 @@ public class FormsServiceImpl implements FormsService {
618 + " from bsth_c_s_sp_info" + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '" 660 + " from bsth_c_s_sp_info" + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') BETWEEN '"
619 + map.get("startDate").toString() + "' and '" + map.get("endDate").toString() + "' and xl_bm='" 661 + map.get("startDate").toString() + "' and '" + map.get("endDate").toString() + "' and xl_bm='"
620 + map.get("line").toString() + "' AND gs_bm is not null AND bc_type NOT IN ('in', 'out') " 662 + map.get("line").toString() + "' AND gs_bm is not null AND bc_type NOT IN ('in', 'out') "
621 - /*+ " and gs_bm='"+ map.get("gsdmAllline").toString() + "'"  
622 - + " and fgs_bm='"+ map.get("fgsdmAllline").toString() + "'"*/ 663 + + " and gs_bm='"+ map.get("gsdmAllline").toString() + "'"
  664 + + " and fgs_bm='"+ map.get("fgsdmAllline").toString() + "'"
623 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN (" 665 + " GROUP BY gs_bm,fgs_bm,xl_bm,gs_name,fgs_name,bc_type ) a left JOIN ("
624 + "SELECT COUNT(*" 666 + "SELECT COUNT(*"
625 + ") as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b." 667 + ") as xlgs,b.gs_bm,b.fgs_bm,b.xl_bm,b."
@@ -655,18 +697,13 @@ public class FormsServiceImpl implements FormsService { @@ -655,18 +697,13 @@ public class FormsServiceImpl implements FormsService {
655 tu.setBcsj(arg0.getString("sbc").toString()); 697 tu.setBcsj(arg0.getString("sbc").toString());
656 tu.setBbzxl(result2 + "%");// 班次执行率 698 tu.setBbzxl(result2 + "%");// 班次执行率
657 699
658 - // tu.setSm(arg0.getString("xl_name").toString()); 700 + tu.setSm(arg0.getString("xl_name").toString());
659 tu.setGsgs(arg0.getString("gslsbm").toString()); 701 tu.setGsgs(arg0.getString("gslsbm").toString());
660 tu.setFgsgs(arg0.getString("fgsbm").toString()); 702 tu.setFgsgs(arg0.getString("fgsbm").toString());
661 return tu; 703 return tu;
662 - }  
663 -  
664 - 704 + }
665 }); 705 });
666 706
667 -  
668 -  
669 -  
670 return list; 707 return list;
671 } 708 }
672 } 709 }
src/main/java/com/bsth/service/gps/GpsService.java
@@ -14,4 +14,6 @@ public interface GpsService { @@ -14,4 +14,6 @@ public interface GpsService {
14 Map<String, Object> search(Map<String, Object> map, int page, int size, String order, String direction); 14 Map<String, Object> search(Map<String, Object> map, int page, int size, String order, String direction);
15 15
16 Map<String,Object> removeRealGps(String device); 16 Map<String,Object> removeRealGps(String device);
  17 +
  18 + Map<String,Object> findRoadSpeed(String lineCode);
17 } 19 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
1 package com.bsth.service.gps; 1 package com.bsth.service.gps;
2 2
3 -import java.lang.reflect.Field;  
4 -import java.sql.Connection;  
5 -import java.sql.PreparedStatement;  
6 -import java.sql.ResultSet;  
7 -import java.util.ArrayList;  
8 -import java.util.Calendar;  
9 -import java.util.Collection;  
10 -import java.util.Collections;  
11 -import java.util.Comparator;  
12 -import java.util.Date;  
13 -import java.util.HashMap;  
14 -import java.util.List;  
15 -import java.util.Map;  
16 -  
17 -import org.apache.commons.lang3.StringUtils;  
18 -import org.slf4j.Logger;  
19 -import org.slf4j.LoggerFactory;  
20 -import org.springframework.beans.factory.annotation.Autowired;  
21 -import org.springframework.stereotype.Service;  
22 -  
23 import com.bsth.common.ResponseCode; 3 import com.bsth.common.ResponseCode;
24 import com.bsth.data.BasicData; 4 import com.bsth.data.BasicData;
25 import com.bsth.data.arrival.ArrivalEntity; 5 import com.bsth.data.arrival.ArrivalEntity;
@@ -31,6 +11,19 @@ import com.bsth.util.DateUtils; @@ -31,6 +11,19 @@ import com.bsth.util.DateUtils;
31 import com.bsth.util.TransGPS; 11 import com.bsth.util.TransGPS;
32 import com.bsth.util.TransGPS.Location; 12 import com.bsth.util.TransGPS.Location;
33 import com.bsth.util.db.DBUtils_MS; 13 import com.bsth.util.db.DBUtils_MS;
  14 +import org.apache.commons.lang3.StringUtils;
  15 +import org.slf4j.Logger;
  16 +import org.slf4j.LoggerFactory;
  17 +import org.springframework.beans.factory.annotation.Autowired;
  18 +import org.springframework.dao.DataAccessException;
  19 +import org.springframework.jdbc.core.JdbcTemplate;
  20 +import org.springframework.stereotype.Service;
  21 +
  22 +import java.lang.reflect.Field;
  23 +import java.sql.Connection;
  24 +import java.sql.PreparedStatement;
  25 +import java.sql.ResultSet;
  26 +import java.util.*;
34 27
35 @Service 28 @Service
36 public class GpsServiceImpl implements GpsService { 29 public class GpsServiceImpl implements GpsService {
@@ -51,6 +44,9 @@ public class GpsServiceImpl implements GpsService { @@ -51,6 +44,9 @@ public class GpsServiceImpl implements GpsService {
51 @Autowired 44 @Autowired
52 GpsRealData gpsRealData; 45 GpsRealData gpsRealData;
53 46
  47 + @Autowired
  48 + JdbcTemplate jdbcTemplate;
  49 +
54 // 历史gps查询 50 // 历史gps查询
55 @Override 51 @Override
56 public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) { 52 public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) {
@@ -199,9 +195,9 @@ public class GpsServiceImpl implements GpsService { @@ -199,9 +195,9 @@ public class GpsServiceImpl implements GpsService {
199 inv = inv.substring(0, inv.length() - 1); 195 inv = inv.substring(0, inv.length() - 1);
200 196
201 // 查询到离站数据 197 // 查询到离站数据
202 - Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv); 198 + //Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv);
203 199
204 - String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO from bsth_c_gps_info where days_year=? and device_id in (" 200 + String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in ("
205 + inv + ") and ts > ? and ts < ?"; 201 + inv + ") and ts > ? and ts < ?";
206 try { 202 try {
207 conn = DBUtils_MS.getConnection(); 203 conn = DBUtils_MS.getConnection();
@@ -235,15 +231,19 @@ public class GpsServiceImpl implements GpsService { @@ -235,15 +231,19 @@ public class GpsServiceImpl implements GpsService {
235 map.put("ts", rs.getLong("TS")); 231 map.put("ts", rs.getLong("TS"));
236 map.put("timestamp", rs.getLong("TS")); 232 map.put("timestamp", rs.getLong("TS"));
237 map.put("stopNo", rs.getString("STOP_NO")); 233 map.put("stopNo", rs.getString("STOP_NO"));
  234 + map.put("direction", rs.getFloat("DIRECTION"));
  235 +
  236 + map.put("lineId", rs.getString("LINE_ID"));
  237 + map.put("speed", rs.getFloat("SPEED_GPS"));
238 238
239 inOutStop = rs.getInt("INOUT_STOP"); 239 inOutStop = rs.getInt("INOUT_STOP");
240 map.put("inout_stop", inOutStop); 240 map.put("inout_stop", inOutStop);
241 241
242 - arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));  
243 - if (arrival != null) {  
244 - map.put("inout_stop_info", arrival);  
245 - map.put("inout_stop", arrival.getInOut());  
246 - } 242 + /*analyse = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));
  243 + if (analyse != null) {
  244 + map.put("inout_stop_info", analyse);
  245 + map.put("inout_stop", analyse.getInOut());
  246 + }*/
247 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID"))); 247 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID")));
248 map.put("state", 0); 248 map.put("state", 0);
249 // 上下行 249 // 上下行
@@ -388,6 +388,22 @@ public class GpsServiceImpl implements GpsService { @@ -388,6 +388,22 @@ public class GpsServiceImpl implements GpsService {
388 return rs; 388 return rs;
389 } 389 }
390 390
  391 + @Override
  392 + public Map<String, Object> findRoadSpeed(String lineCode) {
  393 + Map<String, Object> rs = new HashMap<>();
  394 +
  395 + try {
  396 + String sql = "select ID, ST_AsText(GROAD_VECTOR) as GROAD_VECTOR,ROAD_CODE,ROAD_NAME,SPEED from bsth_c_road where road_code in(select section_code from bsth_c_sectionroute where line_code=? and destroy=0)";
  397 + List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, lineCode);
  398 + rs.put("status", ResponseCode.SUCCESS);
  399 + rs.put("roads", list);
  400 + } catch (DataAccessException e) {
  401 + logger.error("", e);
  402 + rs.put("status", ResponseCode.ERROR);
  403 + }
  404 + return rs;
  405 + }
  406 +
391 private void sortGpsList(final Field f, List<GpsEntity> rs) { 407 private void sortGpsList(final Field f, List<GpsEntity> rs) {
392 Collections.sort(rs, new Comparator<GpsEntity>() { 408 Collections.sort(rs, new Comparator<GpsEntity>() {
393 409
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
@@ -131,6 +131,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -131,6 +131,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
131 t.setXlbm(map.get("xlBm")==null?"":map.get("xlBm").toString()); 131 t.setXlbm(map.get("xlBm")==null?"":map.get("xlBm").toString());
132 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString())); 132 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString()));
133 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString()); 133 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString());
  134 + t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString());
134 t.setRq(dBefore); 135 t.setRq(dBefore);
135 repository.save(t); 136 repository.save(t);
136 result = "success"; 137 result = "success";
@@ -216,6 +217,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -216,6 +217,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
216 t.setXlbm(map.get("xlBm")==null?"":map.get("xlBm").toString()); 217 t.setXlbm(map.get("xlBm")==null?"":map.get("xlBm").toString());
217 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString())); 218 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString()));
218 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString()); 219 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString());
  220 + t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString());
219 t.setRq(sdf.parse(rq)); 221 t.setRq(sdf.parse(rq));
220 repository.save(t); 222 repository.save(t);
221 newMap.put("status", ResponseCode.SUCCESS); 223 newMap.put("status", ResponseCode.SUCCESS);
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
@@ -59,7 +59,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -59,7 +59,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
59 */ 59 */
60 void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName); 60 void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName);
61 61
62 - List<ScheduleRealInfo> queryUserInfo(String line,String date); 62 + List<ScheduleRealInfo> queryUserInfo(String line,String date,String state);
63 63
64 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName,String date); 64 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName,String date);
65 65
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -459,8 +459,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -459,8 +459,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
459 } 459 }
460 460
461 @Override 461 @Override
462 - public List<ScheduleRealInfo> queryUserInfo(String line, String date) {  
463 - return scheduleRealInfoRepository.queryUserInfo2(line, date); 462 + public List<ScheduleRealInfo> queryUserInfo(String line, String date,String state) {
  463 + if(state.equals("2")){
  464 + return scheduleRealInfoRepository.queryUserInfo2(line, date);
  465 + }else{
  466 + return scheduleRealInfoRepository.queryUserInfo3(line, date);
  467 + }
  468 +
464 } 469 }
465 /** 470 /**
466 * 471 *
@@ -613,13 +618,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -613,13 +618,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
613 618
614 @Override 619 @Override
615 public List<Object[]> historyMessage(String line, String date, String code) { 620 public List<Object[]> historyMessage(String line, String date, String code) {
616 -  
617 - String sql="select t.car_code,d.sender,d.txt_content,d.timestamp from ("  
618 - + " select equipment_code,car_code from bsth_c_cars where id in("  
619 - + " select cl from bsth_c_s_ccinfo where xl in ( "  
620 - + " select id from bsth_c_line where line_code=?1 ))) t"  
621 - + " left join bsth_v_directive_60 d on t.equipment_code=d.device_id "  
622 - + " where d.timestamp >=?2 and d.timestamp <=?3 and t.car_code like '%?4%'";  
623 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 621 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
624 long d= 0; 622 long d= 0;
625 long t=0; 623 long t=0;
@@ -1182,7 +1180,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1182,7 +1180,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1182 while(it.hasNext()){ 1180 while(it.hasNext()){
1183 ChildTaskPlan childTaskPlan = it.next(); 1181 ChildTaskPlan childTaskPlan = it.next();
1184 if(childTaskPlan.getMileageType().equals("empty")){ 1182 if(childTaskPlan.getMileageType().equals("empty")){
1185 - ksgl += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); 1183 + if(childTaskPlan.isDestroy()){
  1184 + remMileage += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  1185 + }else{
  1186 + ksgl += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  1187 + }
1186 }else{ 1188 }else{
1187 if(childTaskPlan.isDestroy()){ 1189 if(childTaskPlan.isDestroy()){
1188 remMileage += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); 1190 remMileage += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
@@ -1240,11 +1242,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1240,11 +1242,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1240 @Override 1242 @Override
1241 public List<ScheduleRealInfo> queryListWaybill(String jName, String clZbh, 1243 public List<ScheduleRealInfo> queryListWaybill(String jName, String clZbh,
1242 String lpName,String date,String type) { 1244 String lpName,String date,String type) {
  1245 + List <ScheduleRealInfo> list=null;
1243 if(type.equals("qp")){ 1246 if(type.equals("qp")){
1244 - return scheduleRealInfoRepository.queryListWaybill2(jName,clZbh,lpName,date); 1247 + list= scheduleRealInfoRepository.queryListWaybill2(jName,clZbh,lpName,date);
1245 }else{ 1248 }else{
1246 - return scheduleRealInfoRepository.queryListWaybill(jName,clZbh,lpName,date); 1249 + list= scheduleRealInfoRepository.queryListWaybill(jName,clZbh,lpName,date);
1247 } 1250 }
  1251 + for (int i = 0; i < list.size(); i++) {
  1252 + ScheduleRealInfo s=list.get(i);
  1253 + String remarks="";
  1254 + if(s.getRemarks()!=null){
  1255 + remarks +=s.getRemarks();
  1256 + }
  1257 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  1258 + if(!childTaskPlans.isEmpty()){
  1259 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  1260 + while(it.hasNext()){
  1261 + ChildTaskPlan c = it.next();
  1262 + if(c.getRemarks()!=null && c.getRemarks().length()>0){
  1263 + remarks += c.getRemarks();
  1264 + }
  1265 +
  1266 + }
  1267 + }
  1268 + s.setRemarks(remarks);
  1269 + }
  1270 +
  1271 + return list;
1248 } 1272 }
1249 1273
1250 @Override 1274 @Override
@@ -1325,11 +1349,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1325,11 +1349,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1325 }else{ 1349 }else{
1326 ssgl_other += tempJhlc; 1350 ssgl_other += tempJhlc;
1327 } 1351 }
1328 -  
1329 -  
1330 - }else{  
1331 - ssgl += tempJhlc;  
1332 - ssgl_other += tempJhlc;  
1333 } 1352 }
1334 }else{ 1353 }else{
1335 Iterator<ChildTaskPlan> it = childTaskPlans.iterator(); 1354 Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
@@ -1570,6 +1589,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1570,6 +1589,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1570 //根据线路代码获取公司 1589 //根据线路代码获取公司
1571 Line li = lineRepository.findByLineCode(scheduleRealInfo.getXlBm()); 1590 Line li = lineRepository.findByLineCode(scheduleRealInfo.getXlBm());
1572 yesterdayDataList.get(i).put("company", li.getCompany()); 1591 yesterdayDataList.get(i).put("company", li.getCompany());
  1592 + yesterdayDataList.get(i).put("bCompany", li.getBrancheCompany());
1573 //计算总公里 1593 //计算总公里
1574 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); 1594 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
1575 //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班 1595 //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
src/main/java/com/bsth/service/report/ReportService.java
@@ -19,11 +19,13 @@ public interface ReportService { @@ -19,11 +19,13 @@ public interface ReportService {
19 19
20 List<Object[]> historyMessageCount(String line, String date, String code); 20 List<Object[]> historyMessageCount(String line, String date, String code);
21 21
22 - Map<String, Object> tbodyTime1(String line ,String date); 22 + Map<String, Object> tbodyTime1(String line ,String ttinfo);
23 23
24 - Map<String, Object> tbodyTime2(String line ,String date); 24 + Map<String, Object> tbodyTime2(String line ,String ttinfo);
25 25
26 - List<Map<String, Object>> tbodyTime3(String line ,String date);  
27 - List<Map<String, Object>> tbodyTime5(String line ,String date); 26 + List<Map<String, Object>> tbodyTime3(String line ,String ttinfo);
  27 + List<Map<String, Object>> tbodyTime5(String line ,String ttinfo);
  28 +
  29 + List<Map<String, Object>> getTtinfo(Map<String, Object> map);
28 30
29 } 31 }
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
@@ -257,16 +257,18 @@ public class ReportServiceImpl implements ReportService{ @@ -257,16 +257,18 @@ public class ReportServiceImpl implements ReportService{
257 return list; 257 return list;
258 } 258 }
259 @Override 259 @Override
260 - public Map<String, Object> tbodyTime1(String line, String date) { 260 + public Map<String, Object> tbodyTime1(String line, String ttinfo) {
261 DecimalFormat df = new DecimalFormat("#0.00"); 261 DecimalFormat df = new DecimalFormat("#0.00");
262 // TODO Auto-generated method stub 262 // TODO Auto-generated method stub
263 //查询配车 263 //查询配车
264 - String sqlPc=" SELECT cl_zbh FROM bsth_c_s_sp_info "  
265 - +" where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' "  
266 - + " and xl_bm='"+line+"' and bc_type='normal' "  
267 - + " group by cl_zbh "; 264 + String sqlPc=" select count(*) from bsth_c_cars where id in("
  265 + + " select cl from bsth_c_s_ccinfo where xl in ( "
  266 + + " select id from bsth_c_line where line_code='"+line+"' )"
  267 + + " group by equipment_code ) ";
  268 +
268 Map<String, Object> map=new HashMap<String,Object>(); 269 Map<String, Object> map=new HashMap<String,Object>();
269 - List<Map<String, Object>> listPc= jdbcTemplate.query(sqlPc, 270 +
  271 + /*List<Map<String, Object>> listPc= jdbcTemplate.query(sqlPc,
270 new RowMapper<Map<String, Object>>(){ 272 new RowMapper<Map<String, Object>>(){
271 @Override 273 @Override
272 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { 274 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
@@ -274,13 +276,12 @@ public class ReportServiceImpl implements ReportService{ @@ -274,13 +276,12 @@ public class ReportServiceImpl implements ReportService{
274 m.put("zbh", rs.getString("cl_zbh")); 276 m.put("zbh", rs.getString("cl_zbh"));
275 return m; 277 return m;
276 } 278 }
277 - }); 279 + });*/
278 //配车 280 //配车
279 - int pcs=listPc.size();  
280 -  
281 -  
282 - String sqlPlan="select jhlc, bc_type ,fcsj from bsth_c_s_sp_info "  
283 - + "where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"'"; 281 + int pcs=jdbcTemplate.queryForObject(sqlPc, Integer.class);
  282 +
  283 + String sqlPlan=" SELECT jhlc,bc_type,fcsj FROM bsth_c_s_ttinfo_detail "
  284 + +" where ttinfo ='"+ttinfo+"' ";
284 285
285 //班次 286 //班次
286 int zgf_0 = 6*60+31,zgf_1 = 8*60+30,wgf_0 = 16*60+1,wgf_1 = 18*60; 287 int zgf_0 = 6*60+31,zgf_1 = 8*60+30,wgf_0 = 16*60+1,wgf_1 = 18*60;
@@ -306,17 +307,10 @@ public class ReportServiceImpl implements ReportService{ @@ -306,17 +307,10 @@ public class ReportServiceImpl implements ReportService{
306 String fcsjs[]=m.get("fcsj").toString().split(":"); 307 String fcsjs[]=m.get("fcsj").toString().split(":");
307 308
308 zlc +=jhlc; 309 zlc +=jhlc;
309 - if(bcType.equals("normal")){  
310 - qcBc ++;  
311 - if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > zgf_0  
312 - && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < zgf_1){  
313 - zqcBc++;  
314 - }else if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > wgf_0  
315 - && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < wgf_1){  
316 - wqcBc++;  
317 - }  
318 - yylc +=jhlc;  
319 - }else if(bcType.equals("region")){ 310 + if(bcType.equals("in") || bcType.equals("out")){
  311 + kslc+=jhlc;
  312 + }
  313 + else if(bcType.equals("region")){
320 qjBc++; 314 qjBc++;
321 if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > zgf_0 315 if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > zgf_0
322 && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < zgf_1){ 316 && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < zgf_1){
@@ -328,7 +322,15 @@ public class ReportServiceImpl implements ReportService{ @@ -328,7 +322,15 @@ public class ReportServiceImpl implements ReportService{
328 322
329 yylc+=jhlc; 323 yylc+=jhlc;
330 }else{ 324 }else{
331 - kslc+=jhlc; 325 + qcBc ++;
  326 + if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > zgf_0
  327 + && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < zgf_1){
  328 + zqcBc++;
  329 + }else if((Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) > wgf_0
  330 + && (Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1])) < wgf_1){
  331 + wqcBc++;
  332 + }
  333 + yylc +=jhlc;
332 } 334 }
333 } 335 }
334 336
@@ -346,30 +348,91 @@ public class ReportServiceImpl implements ReportService{ @@ -346,30 +348,91 @@ public class ReportServiceImpl implements ReportService{
346 return map; 348 return map;
347 } 349 }
348 @Override 350 @Override
349 - public Map<String, Object> tbodyTime2(String line, String date) { 351 + public Map<String, Object> tbodyTime2(String line, String ttinfo) {
350 DecimalFormat df = new DecimalFormat("#0.00"); 352 DecimalFormat df = new DecimalFormat("#0.00");
351 // TODO Auto-generated method stub 353 // TODO Auto-generated method stub
352 - //查询配车  
353 - String sqlPc=" SELECT sum(bcsj) as yysj ,sum(jhlc) as yygl FROM bsth_c_s_sp_info "  
354 - +" where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' "  
355 - + " and xl_bm='"+line+"' and bc_type in ('normal' ,'region' )"; 354 + //最早营运时间 区分夜宵线
  355 + String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";
  356 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  357 + String[] minSjs = minfcsj.split(":");
  358 + int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
  359 + //查询时间里程
  360 + String sqlPc=" (SELECT jhlc,fcsj,bc_type,lp,2 as xh FROM bsth_c_s_ttinfo_detail "
  361 + + " where ttinfo ='"+ttinfo+"' and fcsj <='"+minfcsj+"' ) "
  362 + + " union "
  363 + + " (SELECT jhlc,fcsj,bc_type,lp,1 as xh FROM bsth_c_s_ttinfo_detail "
  364 + + " where ttinfo ='"+ttinfo+"' and fcsj > '"+minfcsj+"') order by lp,xh,fcsj";
  365 +
356 Map<String, Object> map=new HashMap<String,Object>(); 366 Map<String, Object> map=new HashMap<String,Object>();
357 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc, 367 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
358 new RowMapper<Map<String, Object>>(){ 368 new RowMapper<Map<String, Object>>(){
359 @Override 369 @Override
360 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { 370 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
361 Map<String, Object> m=new HashMap<String,Object>(); 371 Map<String, Object> m=new HashMap<String,Object>();
362 - m.put("yysj", rs.getInt("yysj"));  
363 - m.put("yygl", rs.getString("yygl")==null?"0":rs.getString("yygl")); 372 + m.put("fcsj", rs.getString("fcsj"));
  373 + m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
  374 + m.put("bcType", rs.getString("bc_type"));
  375 + m.put("lp", rs.getString("lp"));
364 return m; 376 return m;
365 } 377 }
366 }); 378 });
367 int yysj=0 ; 379 int yysj=0 ;
368 double yycs=0 ,yygl=0; 380 double yycs=0 ,yygl=0;
369 - if(list.size()>0){  
370 - Map<String, Object> m=list.get(0);  
371 - yysj=Integer.parseInt((m.get("yysj").toString()));  
372 - yygl=Double.parseDouble(m.get("yygl").toString()); 381 + String lp ="0";
  382 + int sj=0;
  383 +
  384 + for(int i=0;i<list.size();i++){
  385 + Map<String, Object> m=list.get(i);
  386 + String time=m.get("fcsj").toString();
  387 + String[] times = time.split(":");
  388 + if(lp.equals(m.get("lp").toString())){
  389 + if(Integer.parseInt(times[0])*60+Integer.parseInt(times[1]) <=minSj){
  390 + if(m.get("bcType").equals("in") || m.get("bcType").equals("out")){
  391 + if(m.get("bcType").equals("in")){
  392 + if(sj!=0){
  393 + yysj +=(Integer.parseInt(times[0])+24)*60+Integer.parseInt(times[1])-sj;
  394 + }
  395 + sj=0;
  396 + }
  397 + }else{
  398 + yygl += Double.parseDouble(m.get("yygl").toString());
  399 +
  400 + if(sj==0){
  401 + sj=(Integer.parseInt(times[0])+24)*60+Integer.parseInt(times[1]);
  402 + }else{
  403 + yysj +=(Integer.parseInt(times[0])+24)*60+Integer.parseInt(times[1])-sj;
  404 + sj=(Integer.parseInt(times[0])+24)*60+Integer.parseInt(times[1]);
  405 + }
  406 + }
  407 + }else{
  408 + if(m.get("bcType").equals("in") || m.get("bcType").equals("out")){
  409 + if(m.get("bcType").equals("in")){
  410 + if(sj!=0){
  411 + yysj +=Integer.parseInt(times[0])*60+Integer.parseInt(times[1])-sj;
  412 + }
  413 + sj=0;
  414 + }
  415 + }else{
  416 + yygl += Double.parseDouble(m.get("yygl").toString());
  417 +
  418 + if(sj==0){
  419 + sj=Integer.parseInt(times[0])*60+Integer.parseInt(times[1]);
  420 + }else{
  421 + yysj +=Integer.parseInt(times[0])*60+Integer.parseInt(times[1])-sj;
  422 + sj=Integer.parseInt(times[0])*60+Integer.parseInt(times[1]);
  423 + }
  424 + }
  425 + }
  426 + }else{
  427 + if( !(m.get("bcType").equals("in") || m.get("bcType").equals("out"))){
  428 + yygl += Double.parseDouble(m.get("yygl").toString());
  429 + sj =Integer.parseInt(times[0])*60+Integer.parseInt(times[1]);
  430 + }else{
  431 + sj=0;
  432 + }
  433 + lp=m.get("lp").toString();
  434 +
  435 + }
373 } 436 }
374 if(yysj>0){ 437 if(yysj>0){
375 yycs =yygl/(yysj*1.0/60); 438 yycs =yygl/(yysj*1.0/60);
@@ -767,4 +830,34 @@ public class ReportServiceImpl implements ReportService{ @@ -767,4 +830,34 @@ public class ReportServiceImpl implements ReportService{
767 newList.add(newmap5); 830 newList.add(newmap5);
768 return newList; 831 return newList;
769 } 832 }
  833 + @Override
  834 + public List<Map<String, Object>> getTtinfo(Map<String, Object> map) {
  835 + // TODO Auto-generated method stub
  836 + List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  837 + String line = map.get("line").toString();
  838 + try {
  839 + String sql = "select tt.id, tt.name from bsth_c_s_ttinfo tt "
  840 + + "left join bsth_c_line cl on cl.id = tt.xl "
  841 + + " where tt.is_cancel = 0 and tt.is_enable_dis_template = 1";
  842 + if(line.length() != 0){
  843 + sql += " and cl.line_code = '"+line+"'";
  844 + }
  845 + sql += " order by tt.create_date desc";
  846 +
  847 + list = jdbcTemplate.query(sql,
  848 + new RowMapper<Map<String, Object>>(){
  849 + @Override
  850 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  851 + Map<String, Object> map = new HashMap<String, Object>();
  852 + map.put("id", rs.getString("id"));
  853 + map.put("name", rs.getString("name"));
  854 + return map;
  855 + }
  856 + });
  857 + }catch (Exception e) {
  858 + // TODO Auto-generated catch block
  859 + e.printStackTrace();
  860 + }
  861 + return list;
  862 + }
770 } 863 }
src/main/resources/static/pages/control/lineallot/allot.html
@@ -404,8 +404,8 @@ $(function(){ @@ -404,8 +404,8 @@ $(function(){
404 var f = arguments.callee 404 var f = arguments.callee
405 ,item = lsData[i]; 405 ,item = lsData[i];
406 406
407 - //$.get('/realMap/findRouteByLine', {lineCode: item.lineCode}, function(rs){  
408 - $.get('/realSchedule/findRouteByLine', {lineCode: item.lineCode}, function(rs){ 407 + $.get('/realMap/findRouteByLine', {lineCode: item.lineCode}, function(rs){
  408 + //$.get('/realSchedule/findRouteByLine', {lineCode: item.lineCode}, function(rs){
409 if(rs && rs.lineId){ 409 if(rs && rs.lineId){
410 cacheData[item.lineCode] = rs; 410 cacheData[item.lineCode] = rs;
411 i ++; 411 i ++;
src/main/resources/static/pages/forms/mould/linepasswengerflow.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/operationservice.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/shifday.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/shiftuehiclemanth.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/singledata.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/vehicleloading.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/statement/allline.html
@@ -43,14 +43,18 @@ @@ -43,14 +43,18 @@
43 <div class="portlet light porttlet-fit bordered"> 43 <div class="portlet light porttlet-fit bordered">
44 <div class="portlet-title"> 44 <div class="portlet-title">
45 <form class="form-inline" action="" method="post"> 45 <form class="form-inline" action="" method="post">
46 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_allline">  
47 - <span class="item-label" style="width: 80px;">公司: </span>  
48 - <select class="form-control" name="company" id="gsdmAllline" style="width: 140px;"></select>  
49 - </div>  
50 - <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_allline">  
51 - <span class="item-label" style="width: 80px;">分公司: </span>  
52 - <select class="form-control" name="subCompany" id="fgsdmAllline" style="width: 140px;"></select>  
53 - </div> --> 46 + <div style="display: inline-block; margin-left: 33px;"
  47 + id="gsdmDiv_allline">
  48 + <span class="item-label" style="width: 80px;">公司: </span> <select
  49 + class="form-control" name="company" id="gsdmAllline"
  50 + style="width: 140px;"></select>
  51 + </div>
  52 + <div style="display: inline-block; margin-left: 24px;"
  53 + id="fgsdmDiv_allline">
  54 + <span class="item-label" style="width: 80px;">分公司: </span> <select
  55 + class="form-control" name="subCompany" id="fgsdmAllline"
  56 + style="width: 140px;"></select>
  57 + </div>
54 <div style="display: inline-block;"> 58 <div style="display: inline-block;">
55 <span class="item-label" style="width: 80px;">线路: </span> <select 59 <span class="item-label" style="width: 80px;">线路: </span> <select
56 class="form-control" name="line" id="line" style="width: 120px;"></select> 60 class="form-control" name="line" id="line" style="width: 120px;"></select>
@@ -188,15 +192,20 @@ @@ -188,15 +192,20 @@
188 var endDate; 192 var endDate;
189 var gsdmAllline; 193 var gsdmAllline;
190 var fgsdmAllline; 194 var fgsdmAllline;
191 - $("#query").on("click",function() { 195 + $("#query")
  196 + .on(
  197 + "click",
  198 + function() {
192 line = $("#line").val(); 199 line = $("#line").val();
193 startDate1 = $("#startDate").val(); 200 startDate1 = $("#startDate").val();
194 endDate1 = $("#endDate").val(); 201 endDate1 = $("#endDate").val();
195 gsdmAllline = $("#gsdmAllline").val(); 202 gsdmAllline = $("#gsdmAllline").val();
196 fgsdmAllline = $("#fgsdmAllline").val(); 203 fgsdmAllline = $("#fgsdmAllline").val();
197 if (startDate1 != '' && endDate1 != '') { 204 if (startDate1 != '' && endDate1 != '') {
198 - $post('/mcy_forms/allline',{  
199 - /* gsdmAllline:gsdmAllline,fgsdmAllline:fgsdmAllline, */ 205 + $post(
  206 + '/mcy_forms/allline',
  207 + {
  208 + gsdmAllline:gsdmAllline,fgsdmAllline:fgsdmAllline,
200 line : line, 209 line : line,
201 startDate : $("#startDate").val(), 210 startDate : $("#startDate").val(),
202 endDate : $("#endDate").val(), 211 endDate : $("#endDate").val(),
@@ -285,7 +294,14 @@ @@ -285,7 +294,14 @@
285 $("#export").on( 294 $("#export").on(
286 "click", 295 "click",
287 function() { 296 function() {
  297 + line = $("#line").val();
  298 + startDate1 = $("#startDate").val();
  299 + endDate1 = $("#endDate").val();
  300 + gsdmAllline = $("#gsdmAllline").val();
  301 + fgsdmAllline = $("#fgsdmAllline").val();
288 $post('/mcy_export/alllineExport', { 302 $post('/mcy_export/alllineExport', {
  303 + gsdmAllline : gsdmAllline,
  304 + fgsdmAllline : fgsdmAllline,
289 line : line, 305 line : line,
290 startDate : startDate, 306 startDate : startDate,
291 endDate : endDate, 307 endDate : endDate,
src/main/resources/static/pages/forms/statement/changetochange.html
@@ -43,18 +43,22 @@ @@ -43,18 +43,22 @@
43 <div class="portlet light porttlet-fit bordered"> 43 <div class="portlet light porttlet-fit bordered">
44 <div class="portlet-title"> 44 <div class="portlet-title">
45 <form class="form-inline" action="" method="post"> 45 <form class="form-inline" action="" method="post">
46 - <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_change">  
47 - <span class="item-label" style="width: 80px;">公司: </span>  
48 - <select class="form-control" name="company" id="gsdmChange" style="width: 140px;"></select>  
49 - </div>  
50 - <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_change">  
51 - <span class="item-label" style="width: 80px;">分公司: </span>  
52 - <select class="form-control" name="subCompany" id="fgsdmChange" style="width: 140px;"></select>  
53 - </div> 46 + <div style="display: inline-block; margin-left: 33px;"
  47 + id="gsdmDiv_change">
  48 + <span class="item-label" style="width: 80px;">公司: </span> <select
  49 + class="form-control" name="company" id="gsdmChange"
  50 + style="width: 140px;"></select>
  51 + </div>
  52 + <div style="display: inline-block; margin-left: 24px;"
  53 + id="fgsdmDiv_change">
  54 + <span class="item-label" style="width: 80px;">分公司: </span> <select
  55 + class="form-control" name="subCompany" id="fgsdmChange"
  56 + style="width: 140px;"></select>
  57 + </div>
54 <div style="display: inline-block;"> 58 <div style="display: inline-block;">
55 - <span class="item-label" style="width: 80px;">线路: </span>  
56 - <select class="form-control" name="line" id="line" style="width: 180px;"></select>  
57 - </div> 59 + <span class="item-label" style="width: 80px;">线路: </span> <select
  60 + class="form-control" name="line" id="line" style="width: 180px;"></select>
  61 + </div>
58 <div style="display: inline-block; margin-left: 15px;"> 62 <div style="display: inline-block; margin-left: 15px;">
59 <span class="item-label" style="width: 80px;">开始时间: </span> <input 63 <span class="item-label" style="width: 80px;">开始时间: </span> <input
60 class="form-control" type="text" id="startDate" 64 class="form-control" type="text" id="startDate"
@@ -139,51 +143,55 @@ @@ -139,51 +143,55 @@
139 locale : 'zh-cn' 143 locale : 'zh-cn'
140 }); 144 });
141 145
142 -  
143 var obj = []; 146 var obj = [];
144 - $.get('/user/companyData', function(result){ 147 + $.get('/user/companyData', function(result) {
145 obj = result; 148 obj = result;
146 var options = ''; 149 var options = '';
147 - for(var i = 0; i < obj.length; i++){  
148 - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>'; 150 + for (var i = 0; i < obj.length; i++) {
  151 + options += '<option value="'+obj[i].companyCode+'">'
  152 + + obj[i].companyName + '</option>';
149 } 153 }
150 - if(obj.length ==0){  
151 - $("#gsdmDiv_change").css('display','none');  
152 - $('#fgsdmDiv_change').css('display','none');  
153 - }else if(obj.length ==1){  
154 - $("#gsdmDiv_change").css('display','none');  
155 - if(obj[0].children.length == 1 || obj[0].children.length ==0)  
156 - $('#fgsdmDiv_change').css('display','none'); 154 + if (obj.length == 0) {
  155 + $("#gsdmDiv_change").css('display', 'none');
  156 + $('#fgsdmDiv_change').css('display', 'none');
  157 + } else if (obj.length == 1) {
  158 + $("#gsdmDiv_change").css('display', 'none');
  159 + if (obj[0].children.length == 1 || obj[0].children.length == 0)
  160 + $('#fgsdmDiv_change').css('display', 'none');
157 } 161 }
158 $('#gsdmChange').html(options); 162 $('#gsdmChange').html(options);
159 updateCompany(); 163 updateCompany();
160 }); 164 });
161 165
162 - $("#gsdmChange").on("change",updateCompany);  
163 - function updateCompany(){ 166 + $("#gsdmChange").on("change", updateCompany);
  167 + function updateCompany() {
164 var company = $('#gsdmChange').val(); 168 var company = $('#gsdmChange').val();
165 var options = ''; 169 var options = '';
166 - for(var i = 0; i < obj.length; i++){  
167 - if(obj[i].companyCode == company){ 170 + for (var i = 0; i < obj.length; i++) {
  171 + if (obj[i].companyCode == company) {
168 var children = obj[i].children; 172 var children = obj[i].children;
169 - for(var j = 0; j < children.length; j++){  
170 - options += '<option value="'+children[j].code+'">'+children[j].name+'</option>'; 173 + for (var j = 0; j < children.length; j++) {
  174 + options += '<option value="'+children[j].code+'">'
  175 + + children[j].name + '</option>';
171 } 176 }
172 } 177 }
173 } 178 }
174 $('#fgsdmChange').html(options); 179 $('#fgsdmChange').html(options);
175 - } 180 + }
  181 +
  182 + $.get('/basic/lineCode2Name', function(result) {
  183 + var data = [];
176 184
177 - $.get('/basic/lineCode2Name',function(result){  
178 - var data=[];  
179 -  
180 - for(var code in result){  
181 - data.push({id: code, text: result[code]}); 185 + for ( var code in result) {
  186 + data.push({
  187 + id : code,
  188 + text : result[code]
  189 + });
182 } 190 }
183 - initPinYinSelect2('#line',data,'');  
184 - 191 + initPinYinSelect2('#line', data, '');
  192 +
185 }) 193 })
186 - 194 +
187 var line; 195 var line;
188 var startDate; 196 var startDate;
189 var endDate; 197 var endDate;
@@ -194,7 +202,8 @@ @@ -194,7 +202,8 @@
194 sel = $("#sel").val(); 202 sel = $("#sel").val();
195 var startDate1 = $("#startDate").val(); 203 var startDate1 = $("#startDate").val();
196 var endDate1 = $("#endDate").val(); 204 var endDate1 = $("#endDate").val();
197 - 205 + var gsdmChange= $("#gsdmChange").val();
  206 + var fgsdmChange= $("#fgsdmChange").val();
198 if (startDate1 != '' && endDate1 != '') { 207 if (startDate1 != '' && endDate1 != '') {
199 $post('/mcy_forms/changetochange', { 208 $post('/mcy_forms/changetochange', {
200 sel : sel, 209 sel : sel,
@@ -235,7 +244,17 @@ @@ -235,7 +244,17 @@
235 $("#export").on( 244 $("#export").on(
236 "click", 245 "click",
237 function() { 246 function() {
  247 + var sel = $("#sel").val();
  248 + var startDate = $("#startDate").val();
  249 + var endDate = $("#endDate").val();
  250 + var lpName = $("#lpName").val();
  251 + var gsdmChange= $("#gsdmChange").val();
  252 + var fgsdmChange= $("#fgsdmChange").val();
238 $post('/mcy_export/changetochangeExport', { 253 $post('/mcy_export/changetochangeExport', {
  254 + sel:sel,
  255 + line:line,
  256 + gsdmChange:gsdmChange,
  257 + fgsdmChange:fgsdmChange,
239 startDate : startDate, 258 startDate : startDate,
240 endDate : endDate, 259 endDate : endDate,
241 type : 'export' 260 type : 'export'
src/main/resources/static/pages/forms/statement/correctForm.html
@@ -226,8 +226,8 @@ @@ -226,8 +226,8 @@
226 // 把渲染好的模版html文本追加到表格中 226 // 把渲染好的模版html文本追加到表格中
227 $('#forms .list_correctForm').html(list_correctForm); 227 $('#forms .list_correctForm').html(list_correctForm);
228 228
229 - var list_correctForm_statistics = template('list_correctForm_statistics',temp);  
230 - $('#forms .list_correctForm_statistics').html(list_correctForm_statistics); 229 + /* var list_correctForm_statistics = template('list_correctForm_statistics',temp);
  230 + $('#forms .list_correctForm_statistics').html(list_correctForm_statistics); */
231 }); 231 });
232 }); 232 });
233 }); 233 });
src/main/resources/static/pages/forms/statement/executionrate.html
@@ -37,14 +37,14 @@ @@ -37,14 +37,14 @@
37 <div class="portlet light porttlet-fit bordered"> 37 <div class="portlet light porttlet-fit bordered">
38 <div class="portlet-title"> 38 <div class="portlet-title">
39 <form class="form-inline" action="" method="post"> 39 <form class="form-inline" action="" method="post">
40 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_ececut"> 40 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_ececut">
41 <span class="item-label" style="width: 80px;">公司: </span> 41 <span class="item-label" style="width: 80px;">公司: </span>
42 <select class="form-control" name="company" id="gsdmEcecut" style="width: 140px;"></select> 42 <select class="form-control" name="company" id="gsdmEcecut" style="width: 140px;"></select>
43 </div> 43 </div>
44 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_ececut"> 44 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_ececut">
45 <span class="item-label" style="width: 80px;">分公司: </span> 45 <span class="item-label" style="width: 80px;">分公司: </span>
46 <select class="form-control" name="subCompany" id="fgsdmEcecut" style="width: 140px;"></select> 46 <select class="form-control" name="subCompany" id="fgsdmEcecut" style="width: 140px;"></select>
47 - </div> --> 47 + </div>
48 <div style="display: inline-block;"> 48 <div style="display: inline-block;">
49 <span class="item-label" style="width: 80px;">线路: </span> 49 <span class="item-label" style="width: 80px;">线路: </span>
50 <select class="form-control" name="line" id="line" style="width: 120px;"></select> 50 <select class="form-control" name="line" id="line" style="width: 120px;"></select>
@@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
71 <th colspan="11">班次执行率统计表</th> 71 <th colspan="11">班次执行率统计表</th>
72 </tr> 72 </tr>
73 <tr> 73 <tr>
74 - <td rowspan="2" style=" padding-top: 20px;">日期</td> 74 + <td rowspan="2" style=" padding-top: 20px;">日期</td>
75 <td rowspan="2" style=" padding-top: 20px;">公司</td> 75 <td rowspan="2" style=" padding-top: 20px;">公司</td>
76 <td rowspan="2" style=" padding-top: 20px;">直属公司</td> 76 <td rowspan="2" style=" padding-top: 20px;">直属公司</td>
77 <td rowspan="2" style=" padding-top: 20px;">线路条数</td> 77 <td rowspan="2" style=" padding-top: 20px;">线路条数</td>
@@ -181,15 +181,15 @@ @@ -181,15 +181,15 @@
181 gsdmEcecut=$("#gsdmEcecut").val(); 181 gsdmEcecut=$("#gsdmEcecut").val();
182 fgsdmEcecut=$("#fgsdmEcecut").val(); 182 fgsdmEcecut=$("#fgsdmEcecut").val();
183 if(startDate1!=''&&endDate1!=''){ 183 if(startDate1!=''&&endDate1!=''){
184 - $post('/mcy_forms/executionrate',{/* gsdmEcecut:gsdmEcecut,fgsdmEcecut:fgsdmEcecut, */line:line,startDate:$("#startDate").val(),endDate:$("#endDate").val(),type:'query'},function(result){ 184 + $post('/mcy_forms/executionrate',{ gsdmEcecut:gsdmEcecut,fgsdmEcecut:fgsdmEcecut, line:line,startDate:$("#startDate").val(),endDate:$("#endDate").val(),type:'query'},function(result){
185 // 把数据填充到模版中 185 // 把数据填充到模版中
186 var tbodyHtml = template('executionrate',{list:result}); 186 var tbodyHtml = template('executionrate',{list:result});
187 // 把渲染好的模版html文本追加到表格中 187 // 把渲染好的模版html文本追加到表格中
188 $('#tbody').html(tbodyHtml); 188 $('#tbody').html(tbodyHtml);
189 - line = $("#line").val(); 189 + line = $("#line").val();
190 190
191 - startDate = $("#startDate").val();  
192 - endDate = $("#endDate").val(); 191 + startDate = $("#startDate").val();
  192 + endDate = $("#endDate").val();
193 $("#sDate").text(startDate); 193 $("#sDate").text(startDate);
194 $("#eDate").text(endDate); 194 $("#eDate").text(endDate);
195 195
@@ -240,7 +240,12 @@ @@ -240,7 +240,12 @@
240 }); 240 });
241 241
242 $("#export").on("click",function(){ 242 $("#export").on("click",function(){
243 - $post('/mcy_export/executionrateExport',{line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){ 243 + line = $("#line").val();
  244 + startDate=$("#startDate").val();
  245 + endDate=$("#endDate").val();
  246 + gsdmEcecut=$("#gsdmEcecut").val();
  247 + fgsdmEcecut=$("#fgsdmEcecut").val();
  248 + $post('/mcy_export/executionrateExport',{gsdmEcecut:gsdmEcecut,fgsdmEcecut:fgsdmEcecut,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
244 window.open("/downloadFile/download?fileName=班次执行率统计表"+moment(startDate).format("YYYYMMDD")); 249 window.open("/downloadFile/download?fileName=班次执行率统计表"+moment(startDate).format("YYYYMMDD"));
245 }); 250 });
246 }); 251 });
src/main/resources/static/pages/forms/statement/linepassengerflow.html
@@ -27,14 +27,14 @@ @@ -27,14 +27,14 @@
27 <div class="portlet light porttlet-fit bordered"> 27 <div class="portlet light porttlet-fit bordered">
28 <div class="portlet-title"> 28 <div class="portlet-title">
29 <form class="form-inline" action=""> 29 <form class="form-inline" action="">
30 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_line"> 30 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_line">
31 <span class="item-label" style="width: 80px;">公司: </span> 31 <span class="item-label" style="width: 80px;">公司: </span>
32 <select class="form-control" name="company" id="gsdmLine" style="width: 140px;"></select> 32 <select class="form-control" name="company" id="gsdmLine" style="width: 140px;"></select>
33 </div> 33 </div>
34 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_line"> 34 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_line">
35 <span class="item-label" style="width: 80px;">分公司: </span> 35 <span class="item-label" style="width: 80px;">分公司: </span>
36 <select class="form-control" name="subCompany" id="fgsdmLine" style="width: 140px;"></select> 36 <select class="form-control" name="subCompany" id="fgsdmLine" style="width: 140px;"></select>
37 - </div> --> 37 + </div>
38 <div style="display: inline-block;"> 38 <div style="display: inline-block;">
39 <span class="item-label" style="width: 80px;">线路: </span> 39 <span class="item-label" style="width: 80px;">线路: </span>
40 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 40 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -140,7 +140,7 @@ @@ -140,7 +140,7 @@
140 var date = $("#date").val(); 140 var date = $("#date").val();
141 var gsdmLine = $("#gsdmLine").val(); 141 var gsdmLine = $("#gsdmLine").val();
142 var fgsdmLine = $("#fgsdmLine").val(); 142 var fgsdmLine = $("#fgsdmLine").val();
143 - $post('/mcy_forms/linepasswengerflow',{/* gsdmLine:gsdmLine,fgsdmLine:fgsdmLine, */line:line,date:date,type:'query'},function(result){ 143 + $post('/mcy_forms/linepasswengerflow',{ gsdmLine:gsdmLine,fgsdmLine:fgsdmLine,line:line,date:date,type:'query'},function(result){
144 $.each(result, function(i, obj) { 144 $.each(result, function(i, obj) {
145 obj.requestType = reqCodeMap[obj.requestType]; 145 obj.requestType = reqCodeMap[obj.requestType];
146 }); 146 });
@@ -150,6 +150,16 @@ @@ -150,6 +150,16 @@
150 $('#forms tbody').html(tbodyHtml); 150 $('#forms tbody').html(tbodyHtml);
151 }); 151 });
152 }); 152 });
  153 +
  154 + $("#export").on("click",function(){
  155 + var line = $("#line").val();
  156 + var date = $("#date").val();
  157 + var gsdmLine = $("#gsdmLine").val();
  158 + var fgsdmLine = $("#fgsdmLine").val();
  159 + $post('/mcy_export/linepasswengerflowExport',{gsdmLine:gsdmLine,fgsdmLine:fgsdmLine,line:line,date:date,type:'export'},function(result){
  160 + window.open("/downloadFile/download?fileName=线路客流量报表"+moment(date).format("YYYYMMDD"));
  161 + });
  162 + });
153 }); 163 });
154 </script> 164 </script>
155 <script type="text/html" id="list_linepasswengerflow"> 165 <script type="text/html" id="list_linepasswengerflow">
src/main/resources/static/pages/forms/statement/operationservice.html
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <div class="portlet light porttlet-fit bordered"> 30 <div class="portlet light porttlet-fit bordered">
31 <div class="portlet-title"> 31 <div class="portlet-title">
32 <form class="form-inline" action="" method="post"> 32 <form class="form-inline" action="" method="post">
33 - <!--<div style="display: inline-block; margin-left: 33px;" 33 + <div style="display: inline-block; margin-left: 33px;"
34 id="gsdmDiv_operat"> 34 id="gsdmDiv_operat">
35 <span class="item-label" style="width: 80px;">公司: </span> <select 35 <span class="item-label" style="width: 80px;">公司: </span> <select
36 class="form-control" name="company" id="gsdmOperat" 36 class="form-control" name="company" id="gsdmOperat"
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <span class="item-label" style="width: 80px;">分公司: </span> <select 41 <span class="item-label" style="width: 80px;">分公司: </span> <select
42 class="form-control" name="subCompany" id="fgsdmOperat" 42 class="form-control" name="subCompany" id="fgsdmOperat"
43 style="width: 140px;"></select> 43 style="width: 140px;"></select>
44 - </div> --> 44 + </div>
45 <div style="display: inline-block;"> 45 <div style="display: inline-block;">
46 <span class="item-label" style="width: 80px;">线路: </span> <select 46 <span class="item-label" style="width: 80px;">线路: </span> <select
47 class="form-control" name="line" id="line" style="width: 180px;"></select> 47 class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -173,11 +173,11 @@ @@ -173,11 +173,11 @@
173 var startDate = $("#startDate").val(); 173 var startDate = $("#startDate").val();
174 var endDate = $("#endDate").val(); 174 var endDate = $("#endDate").val();
175 var lpName = $("#lpName").val(); 175 var lpName = $("#lpName").val();
176 - /* var gsdmOperat = $("#gsdmOperat").val();  
177 - var fgsdmOperat = $("#fgsdmOperat").val(); */ 176 + var gsdmOperat = $("#gsdmOperat").val();
  177 + var fgsdmOperat = $("#fgsdmOperat").val();
178 $post("/mcy_forms/operationservice", { 178 $post("/mcy_forms/operationservice", {
179 - /* gsdmOperat : gsdmOperat,  
180 - fgsdmOperat : fgsdmOperat, */ 179 + gsdmOperat : gsdmOperat,
  180 + fgsdmOperat : fgsdmOperat,
181 line : line, 181 line : line,
182 startDate : startDate, 182 startDate : startDate,
183 endDate : endDate, 183 endDate : endDate,
@@ -206,6 +206,18 @@ @@ -206,6 +206,18 @@
206 206
207 }); 207 });
208 }); 208 });
  209 + $("#export").on("click",function(){
  210 + line = $("#line").val();
  211 + startDate=$("#startDate").val();
  212 + endDate=$("#endDate").val();
  213 + gsdmOperat=$("#gsdmOperat").val();
  214 + fgsdmOperat=$("#fgsdmOperat").val();
  215 + $post('/mcy_export/operationserviceExport',{gsdmOperat:gsdmOperat,fgsdmOperat:fgsdmOperat,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
  216 + window.open("/downloadFile/download?fileName=运营服务阶段报表"+moment(startDate).format("YYYYMMDD"));
  217 + });
  218 + });
  219 +
  220 +
209 }); 221 });
210 </script> 222 </script>
211 <script type="text/html" id="operationservice"> 223 <script type="text/html" id="operationservice">
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
42 </form> 42 </form>
43 </div> 43 </div>
44 <div class="portlet-body"> 44 <div class="portlet-body">
45 - <div class="table-container" style="margin-top: 10px;overflow:auto;min-width: 906px"> 45 + <div class="table-container" style="margin-top: 10px;overflow:auto;min-width: 906px;height: 400px">
46 <label>早高峰:6:31~8:30&nbsp;&nbsp;&nbsp;&nbsp;晚高峰:16:01~18:00</label> 46 <label>早高峰:6:31~8:30&nbsp;&nbsp;&nbsp;&nbsp;晚高峰:16:01~18:00</label>
47 <table class="table table-bordered table-hover table-checkable" id="forms"> 47 <table class="table table-bordered table-hover table-checkable" id="forms">
48 <thead> 48 <thead>
src/main/resources/static/pages/forms/statement/scheduleDailyQp.html 0 → 100644
  1 +<style type="text/css">
  2 + .table-bordered {
  3 + border: 1px solid; }
  4 + .table-bordered > thead > tr > th,
  5 + .table-bordered > thead > tr > td,
  6 + .table-bordered > tbody > tr > th,
  7 + .table-bordered > tbody > tr > td,
  8 + .table-bordered > tfoot > tr > th,
  9 + .table-bordered > tfoot > tr > td {
  10 + border: 1px solid; }
  11 + .table-bordered > thead > tr > th,
  12 + .table-bordered > thead > tr > td {
  13 + border-bottom-width: 2px; }
  14 +
  15 + .table > tbody + tbody {
  16 + border-top: 1px solid; }
  17 +</style>
  18 +
  19 +<div class="page-head">
  20 + <div class="page-title">
  21 + <h1>调度工作日报表</h1>
  22 + </div>
  23 +</div>
  24 +
  25 +<div class="row">
  26 + <div class="col-md-12">
  27 + <div class="portlet light porttlet-fit bordered">
  28 + <div class="portlet-title">
  29 + <form id="history" class="form-inline" action="">
  30 + <div style="display: inline-block; margin-left: 10px;" id="company1">
  31 + <span class="item-label" style="width: 80px;">公司: </span>
  32 + <select class="form-control" name="company" id="company" style="width: 160px;"></select>
  33 + </div>
  34 + <div style="display: inline-block; margin-left: 10px;" id="subCompany1">
  35 + <span class="item-label" style="width: 80px;">分公司: </span>
  36 + <select class="form-control" name="subCompany" id="subCompany" style="width: 160px;"></select>
  37 + </div>
  38 + <div style="display: inline-block; margin-left: 10px;">
  39 + <span class="item-label" style="width: 80px;">线路: </span>
  40 + <select class="form-control" name="line" id="line" style="width: 180px;"></select>
  41 + </div>
  42 + <div style="display: inline-block;margin-left: 10px;">
  43 + <span class="item-label" style="width: 80px;">时间: </span>
  44 + <input class="form-control" type="text" id="date" style="width: 180px;"/>
  45 + </div>
  46 + <div class="form-group">
  47 + <input class="btn btn-default" type="button" id="query" value="筛选"/>
  48 + <input class="btn btn-default" type="button" id="export" value="导出"/>
  49 + </div>
  50 + </form>
  51 + </div>
  52 + <div class="portlet-body" >
  53 + <div class="table-container" style="margin-top: 10px;overflow:auto;min-width: 506px;height: 400px">
  54 + <table class="table table-bordered table-hover table-checkable" id="forms">
  55 + <thead>
  56 + <tr >
  57 + <th style="text-align:center;vertical-align:middle;" rowspan="3">路牌</th>
  58 + <th style="text-align:center;vertical-align:middle;"
  59 + rowspan="2" colspan="2">车号</th>
  60 + <th rowspan="3">班别</th>
  61 + <th colspan="3" style="text-align:center;vertical-align:middle;">驾驶员</th>
  62 + <th colspan="3" style="text-align:center;vertical-align:middle;">售票员</th>
  63 + <th rowspan="3" style="text-align:center;vertical-align:middle;">路牌</th>
  64 + <th rowspan="3" style="text-align:center;vertical-align:middle;">记录项目</th>
  65 + <th colspan="3" style="text-align:center;vertical-align:middle;">1</th>
  66 + <th colspan="3" style="text-align:center;vertical-align:middle;">2</th>
  67 + <th colspan="3" style="text-align:center;vertical-align:middle;">3</th>
  68 + <th colspan="3" style="text-align:center;vertical-align:middle;">4</th>
  69 + <th colspan="3" style="text-align:center;vertical-align:middle;">5</th>
  70 + <th colspan="3" style="text-align:center;vertical-align:middle;">6</th>
  71 + <th colspan="3" style="text-align:center;vertical-align:middle;">7</th>
  72 + <th colspan="3" style="text-align:center;vertical-align:middle;">8</th>
  73 + <th colspan="3" style="text-align:center;vertical-align:middle;">9</th>
  74 + <th colspan="3" style="text-align:center;vertical-align:middle;">10</th>
  75 + <th colspan="3" style="text-align:center;vertical-align:middle;">11</th>
  76 + <th colspan="3" style="text-align:center;vertical-align:middle;">12</th>
  77 + <th colspan="3" style="text-align:center;vertical-align:middle;">13</th>
  78 +
  79 + </tr>
  80 + <tr>
  81 +
  82 + <th rowspan="2">职号</th>
  83 + <th colspan="2">接班时间</th>
  84 + <th rowspan="2">职号</th>
  85 + <th colspan="2">接班时间</th>
  86 + <th rowspan="2">到达</th>
  87 + <th rowspan="2">早/迟</th>
  88 + <th rowspan="2">开出</th>
  89 + <th rowspan="2">到达</th>
  90 + <th rowspan="2">早/迟</th>
  91 + <th rowspan="2">开出</th>
  92 + <th rowspan="2">到达</th>
  93 + <th rowspan="2">早/迟</th>
  94 + <th rowspan="2">开出</th>
  95 + <th rowspan="2">到达</th>
  96 + <th rowspan="2">早/迟</th>
  97 + <th rowspan="2">开出</th>
  98 + <th rowspan="2">到达</th>
  99 + <th rowspan="2">早/迟</th>
  100 + <th rowspan="2">开出</th>
  101 + <th rowspan="2">到达</th>
  102 + <th rowspan="2">早/迟</th>
  103 + <th rowspan="2">开出</th>
  104 + <th rowspan="2">到达</th>
  105 + <th rowspan="2">早/迟</th>
  106 + <th rowspan="2">开出</th>
  107 + <th rowspan="2">到达</th>
  108 + <th rowspan="2">早/迟</th>
  109 + <th rowspan="2">开出</th>
  110 + <th rowspan="2">到达</th>
  111 + <th rowspan="2">早/迟</th>
  112 + <th rowspan="2">开出</th>
  113 + <th rowspan="2">到达</th>
  114 + <th rowspan="2">早/迟</th>
  115 + <th rowspan="2">开出</th>
  116 + <th rowspan="2">到达</th>
  117 + <th rowspan="2">早/迟</th>
  118 + <th rowspan="2">开出</th>
  119 + <th rowspan="2">到达</th>
  120 + <th rowspan="2">早/迟</th>
  121 + <th rowspan="2">开出</th>
  122 + <th rowspan="2">到达</th>
  123 + <th rowspan="2">早/迟</th>
  124 + <th rowspan="2">开出</th>
  125 + </tr>
  126 + <tr>
  127 + <th>出场</th>
  128 + <th>调换</th>
  129 + <th>1</th>
  130 + <th>2</th>
  131 + <th>1</th>
  132 + <th>2</th>
  133 + </tr>
  134 + </thead>
  135 + <tbody>
  136 + <tr >
  137 + <td></td>
  138 + <td>
  139 + </td>
  140 + <td></td>
  141 + <td></td>
  142 + <td></td>
  143 + <td colspan="46">
  144 + <div>
  145 +
  146 + </div>
  147 + </td>
  148 + </tr>
  149 +
  150 + </tbody>
  151 + </table>
  152 + <div style="text-align: right;">
  153 + <ul id="pagination" class="pagination"></ul>
  154 + </div>
  155 + </div>
  156 + </div>
  157 + </div>
  158 + </div>
  159 +</div>
  160 +
  161 +<script>
  162 + $(function(){
  163 +
  164 + // 关闭左侧栏
  165 + if (!$('body').hasClass('page-sidebar-closed'))
  166 + $('.menu-toggler.sidebar-toggler').click();
  167 +
  168 + $("#date").datetimepicker({
  169 + format : 'YYYY-MM-DD',
  170 + locale : 'zh-cn'
  171 + });
  172 +
  173 + var d = new Date();
  174 + var year = d.getFullYear();
  175 + var month = d.getMonth() + 1;
  176 + var day = d.getDate();
  177 + if(month < 10)
  178 + month = "0" + month;
  179 + if(day < 10)
  180 + day = "0" + day;
  181 + $("#date").val(year + "-" + month + "-" + day);
  182 +
  183 + $.get('/basic/lineCode2Name',function(result){
  184 + var data=[];
  185 +
  186 + data.push({id: " ", text: "全部线路"});
  187 + for(var code in result){
  188 + data.push({id: code, text: result[code]});
  189 + }
  190 + initPinYinSelect2('#line',data,'');
  191 + })
  192 +
  193 + var obj = [];
  194 + $.get('/user/companyData', function(result){
  195 + obj = result;
  196 + var options = '';
  197 + for(var i = 0; i < obj.length; i++){
  198 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  199 + }
  200 + if(obj.length == 1){
  201 + $('#company1').hide();
  202 + if(obj[0].children.length == 1)
  203 + $('#subCompany1').hide();
  204 + }
  205 + $('#company').html(options);
  206 + updateCompany();
  207 + });
  208 + $("#company").on("change",updateCompany);
  209 + function updateCompany(){
  210 + var company = $('#company').val();
  211 + var options = '';
  212 + for(var i = 0; i < obj.length; i++){
  213 + if(obj[i].companyCode == company){
  214 + var children = obj[i].children;
  215 + for(var j = 0; j < children.length; j++){
  216 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  217 + }
  218 + }
  219 + }
  220 + $('#subCompany').html(options);
  221 + }
  222 +
  223 +
  224 + $("#query").on("click",jsDoQuery);
  225 +
  226 + var line = $("#line").val();
  227 + var date = $("#date").val();
  228 + var company = $("#company").val();
  229 + var subCompany = $("#subCompany").val();
  230 + function jsDoQuery(pagination){
  231 + var params = {};
  232 + line = $("#line").val();
  233 + date = $("#date").val();
  234 + company = $("#company").val();
  235 + subCompany = $("#subCompany").val();
  236 + if(line == " ")
  237 + line = "";
  238 + params['line'] = line;
  239 + params['date'] = date;
  240 + params['type'] = "query";
  241 + params['company'] = company;
  242 + params['subCompany'] = subCompany;
  243 + $(".hidden").removeClass("hidden");
  244 + /* $get('/pcpc/workDaily', params, function(result){
  245 + // 把数据填充到模版中
  246 + var tbodyHtml = template('list_workDaily',{list:result});
  247 + // 把渲染好的模版html文本追加到表格中
  248 + $('#forms tbody').html(tbodyHtml);
  249 +
  250 + }); */
  251 + }
  252 +
  253 + $("#export").on("click",function(){
  254 + $get('/pcpc/workDaily',{line:line,date:date,type:'export'},function(result){
  255 + window.open("/downloadFile/download?fileName=营运服务日报表"+moment(date).format("YYYYMMDD"));
  256 + });
  257 + });
  258 +
  259 +
  260 + });
  261 +
  262 +</script>
  263 +<script type="text/html" id="list_workDaily">
  264 + {{each list as obj i}}
  265 + <tr>
  266 + <td>{{obj.date}}</td>
  267 + <td>{{obj.line}}</td>
  268 + <td>{{obj.jhbc}}</td>
  269 + <td>{{obj.dftz}}</td>
  270 + <td>{{obj.dftzl}}</td>
  271 + <td>{{obj.ccl}}</td>
  272 + <td>{{obj.upfk}}</td>
  273 + <td>{{obj.updk}}</td>
  274 + <td>{{obj.dnfk}}</td>
  275 + <td>{{obj.dndk}}</td>
  276 + <td>{{obj.upfm}}</td>
  277 + <td>{{obj.updm}}</td>
  278 + <td>{{obj.dnfm}}</td>
  279 + <td>{{obj.dndm}}</td>
  280 + <td>{{obj.wdzs}}</td>
  281 + <td>{{obj.smbzdl}}</td>
  282 + <td>{{obj.gfbczxl}}</td>
  283 + </tr>
  284 + {{/each}}
  285 + {{if list.length == 0}}
  286 + <tr>
  287 + <td colspan="17"><h6 class="muted">没有找到相关数据</h6></td>
  288 + </tr>
  289 + {{/if}}
  290 +</script>
src/main/resources/static/pages/forms/statement/shifday.html
@@ -28,14 +28,14 @@ @@ -28,14 +28,14 @@
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 <form class="form-inline" action="" method="post"> 30 <form class="form-inline" action="" method="post">
31 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_shif"> 31 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_shif">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmShif" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmShif" style="width: 140px;"></select>
34 </div> 34 </div>
35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_shif"> 35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_shif">
36 <span class="item-label" style="width: 80px;">分公司: </span> 36 <span class="item-label" style="width: 80px;">分公司: </span>
37 <select class="form-control" name="subCompany" id="fgsdmShif" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmShif" style="width: 140px;"></select>
38 - </div> --> 38 + </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 <span class="item-label" style="width: 80px;">线路: </span> 40 <span class="item-label" style="width: 80px;">线路: </span>
41 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 41 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -154,9 +154,9 @@ $(function(){ @@ -154,9 +154,9 @@ $(function(){
154 $("#query").on("click",function(){ 154 $("#query").on("click",function(){
155 var line = $("#line").val(); 155 var line = $("#line").val();
156 var date = $("#date").val(); 156 var date = $("#date").val();
157 - /* var gsdmShif = $("#gsdmShif").val();  
158 - var fgsdmShif = $("#fgsdmShif").val(); */  
159 - $post('/mcy_forms/shifday',{/* gsdmShif:gsdmShif,fgsdmShif:fgsdmShif, */line:line,date:date},function(result){ 157 + var gsdmShif = $("#gsdmShif").val();
  158 + var fgsdmShif = $("#fgsdmShif").val();
  159 + $post('/mcy_forms/shifday',{gsdmShif:gsdmShif,fgsdmShif:fgsdmShif, line:line,date:date},function(result){
160 $.each(result, function(i, obj) { 160 $.each(result, function(i, obj) {
161 obj.requestType = reqCodeMap[obj.requestType]; 161 obj.requestType = reqCodeMap[obj.requestType];
162 }); 162 });
@@ -166,6 +166,16 @@ $(function(){ @@ -166,6 +166,16 @@ $(function(){
166 $('#forms tbody').html(tbodyHtml); 166 $('#forms tbody').html(tbodyHtml);
167 }); 167 });
168 }); 168 });
  169 +
  170 + $("#export").on("click",function(){
  171 + var line = $("#line").val();
  172 + var date = $("#date").val();
  173 + var gsdmShif = $("#gsdmShif").val();
  174 + var fgsdmShif = $("#fgsdmShif").val();
  175 + $post('/mcy_export/shifdayExport',{gsdmShif:gsdmShif,fgsdmShif:fgsdmShif,line:line,date:date,type:'export'},function(result){
  176 + window.open("/downloadFile/download?fileName=班次车辆人员日报表"+moment(date).format("YYYYMMDD"));
  177 + });
  178 + });
169 }); 179 });
170 </script> 180 </script>
171 <script type="text/html" id="shifday"> 181 <script type="text/html" id="shifday">
@@ -175,7 +185,6 @@ $(function(){ @@ -175,7 +185,6 @@ $(function(){
175 <td>{{obj.sName}}</td> 185 <td>{{obj.sName}}</td>
176 <td>{{obj.lpName}}</td> 186 <td>{{obj.lpName}}</td>
177 <td>{{obj.carPlate}}</td> 187 <td>{{obj.carPlate}}</td>
178 -  
179 <td>{{obj.jhlc}}</td> 188 <td>{{obj.jhlc}}</td>
180 <td>{{obj.sjjhlc}}</td> 189 <td>{{obj.sjjhlc}}</td>
181 <td>{{obj.yygl}}</td> 190 <td>{{obj.yygl}}</td>
src/main/resources/static/pages/forms/statement/shiftuehiclemanth.html
@@ -28,14 +28,14 @@ @@ -28,14 +28,14 @@
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 <form class="form-inline" action=""> 30 <form class="form-inline" action="">
31 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_manth"> 31 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_manth">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmManth" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmManth" style="width: 140px;"></select>
34 </div> 34 </div>
35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_manth"> 35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_manth">
36 <span class="item-label" style="width: 80px;">分公司: </span> 36 <span class="item-label" style="width: 80px;">分公司: </span>
37 <select class="form-control" name="subCompany" id="fgsdmManth" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmManth" style="width: 140px;"></select>
38 - </div> --> 38 + </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 <span class="item-label" style="width: 80px;">线路: </span> 40 <span class="item-label" style="width: 80px;">线路: </span>
41 <select class="form-control" name="line" id="line" style="width: 136px;"></select> 41 <select class="form-control" name="line" id="line" style="width: 136px;"></select>
@@ -183,9 +183,9 @@ @@ -183,9 +183,9 @@
183 var startDate = $("#startDate").val(); 183 var startDate = $("#startDate").val();
184 var endDate = $("#endDate").val(); 184 var endDate = $("#endDate").val();
185 var lpName = $("#lpName").val(); 185 var lpName = $("#lpName").val();
186 - /* var gsdmManth= $("#gsdmManth").val();  
187 - var fgsdmManth= $("#fgsdmManth").val(); */  
188 - $post("/mcy_forms/shiftuehiclemanth",{/* gsdmManth:gsdmManth,fgsdmManth:fgsdmManth, */line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){ 186 + var gsdmManth= $("#gsdmManth").val();
  187 + var fgsdmManth= $("#fgsdmManth").val();
  188 + $post("/mcy_forms/shiftuehiclemanth",{gsdmManth:gsdmManth,fgsdmManth:fgsdmManth, line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){
189 $("#sDate").text(startDate); 189 $("#sDate").text(startDate);
190 $("#eDate").text(endDate); 190 $("#eDate").text(endDate);
191 var temp = {}; 191 var temp = {};
@@ -203,7 +203,20 @@ @@ -203,7 +203,20 @@
203 $('#forms tbody').html(list_shiftuehiclemanth); 203 $('#forms tbody').html(list_shiftuehiclemanth);
204 204
205 }); 205 });
206 - }); 206 + });
  207 +
  208 + $("#export").on("click",function(){
  209 + var line = $("#line").val();
  210 + var startDate = $("#startDate").val();
  211 + var endDate = $("#endDate").val();
  212 + var lpName = $("#lpName").val();
  213 + var gsdmManth= $("#gsdmManth").val();
  214 + var fgsdmManth= $("#fgsdmManth").val();
  215 + $post('/mcy_export/shiftuehiclemanthExport',{gsdmManth:gsdmManth,fgsdmManth:fgsdmManth,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
  216 + window.open("/downloadFile/download?fileName=班次车辆人员月报表"+moment(startDate).format("YYYYMMDD"));
  217 + });
  218 + });
  219 +
207 }); 220 });
208 </script> 221 </script>
209 <script type="text/html" id="list_shiftuehiclemanth"> 222 <script type="text/html" id="list_shiftuehiclemanth">
src/main/resources/static/pages/forms/statement/singledata.html
@@ -28,14 +28,14 @@ @@ -28,14 +28,14 @@
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 <form class="form-inline" action=""> 30 <form class="form-inline" action="">
31 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_sing"> 31 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_sing">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmSing" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmSing" style="width: 140px;"></select>
34 </div> 34 </div>
35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_sing"> 35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_sing">
36 <span class="item-label" style="width: 80px;">分公司: </span> 36 <span class="item-label" style="width: 80px;">分公司: </span>
37 <select class="form-control" name="subCompany" id="fgsdmSing" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmSing" style="width: 140px;"></select>
38 - </div> --> 38 + </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 <span class="item-label" style="width: 80px;">线路: </span> 40 <span class="item-label" style="width: 80px;">线路: </span>
41 <select class="form-control" name="line" id="line" style="width: 136px;"></select> 41 <select class="form-control" name="line" id="line" style="width: 136px;"></select>
@@ -152,9 +152,9 @@ @@ -152,9 +152,9 @@
152 var startDate = $("#startDate").val(); 152 var startDate = $("#startDate").val();
153 var endDate = $("#endDate").val(); 153 var endDate = $("#endDate").val();
154 var lpName = $("#lpName").val(); 154 var lpName = $("#lpName").val();
155 - /* var gsdmSing = $("#gsdmSing").val();  
156 - var fgsdmSing = $("#fgsdmSing").val(); */  
157 - $post("/mcy_forms/singledata",{/* gsdmSing:gsdmSing,fgsdmSing:fgsdmSing, */line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){ 155 + var gsdmSing = $("#gsdmSing").val();
  156 + var fgsdmSing = $("#fgsdmSing").val();
  157 + $post("/mcy_forms/singledata",{ gsdmSing:gsdmSing,fgsdmSing:fgsdmSing, line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){
158 $("#sDate").text(startDate); 158 $("#sDate").text(startDate);
159 $("#eDate").text(endDate); 159 $("#eDate").text(endDate);
160 var temp = {}; 160 var temp = {};
@@ -172,6 +172,18 @@ @@ -172,6 +172,18 @@
172 172
173 }); 173 });
174 }); 174 });
  175 +
  176 + $("#export").on("click",function(){
  177 + var line = $("#line").val();
  178 + var startDate = $("#startDate").val();
  179 + var endDate = $("#endDate").val();
  180 + var lpName = $("#lpName").val();
  181 + var gsdmSing = $("#gsdmSing").val();
  182 + var fgsdmSing = $("#fgsdmSing").val();
  183 + $post('/mcy_export/singledataExport',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
  184 + window.open("/downloadFile/download?fileName=路单数据"+moment(startDate).format("YYYYMMDD"));
  185 + });
  186 + });
175 }); 187 });
176 </script> 188 </script>
177 <script type="text/html" id="singledata"> 189 <script type="text/html" id="singledata">
src/main/resources/static/pages/forms/statement/turnoutrate.html
@@ -37,14 +37,14 @@ @@ -37,14 +37,14 @@
37 <div class="portlet light porttlet-fit bordered"> 37 <div class="portlet light porttlet-fit bordered">
38 <div class="portlet-title"> 38 <div class="portlet-title">
39 <form class="form-inline" action="" method="post"> 39 <form class="form-inline" action="" method="post">
40 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_turn"> 40 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_turn">
41 <span class="item-label" style="width: 80px;">公司: </span> 41 <span class="item-label" style="width: 80px;">公司: </span>
42 <select class="form-control" name="company" id="gsdmTurn" style="width: 140px;"></select> 42 <select class="form-control" name="company" id="gsdmTurn" style="width: 140px;"></select>
43 </div> 43 </div>
44 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_turn"> 44 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_turn">
45 <span class="item-label" style="width: 80px;">分公司: </span> 45 <span class="item-label" style="width: 80px;">分公司: </span>
46 <select class="form-control" name="subCompany" id="fgsdmTurn" style="width: 140px;"></select> 46 <select class="form-control" name="subCompany" id="fgsdmTurn" style="width: 140px;"></select>
47 - </div> --> 47 + </div>
48 <div style="display: inline-block;"> 48 <div style="display: inline-block;">
49 <span class="item-label" style="width: 80px;">线路: </span> 49 <span class="item-label" style="width: 80px;">线路: </span>
50 <select class="form-control" name="line" id="line" style="width: 120px;"></select> 50 <select class="form-control" name="line" id="line" style="width: 120px;"></select>
@@ -183,7 +183,7 @@ @@ -183,7 +183,7 @@
183 gsdmTurn=$("#gsdmTurn").val(); 183 gsdmTurn=$("#gsdmTurn").val();
184 fgsdmTurn=$("#fgsdmTurn").val(); 184 fgsdmTurn=$("#fgsdmTurn").val();
185 if(startDate1!=''&&endDate1!=''){ 185 if(startDate1!=''&&endDate1!=''){
186 - $post('/mcy_forms/turnoutrate',{/* gsdmTurn:gsdmTurn,fgsdmTurn:fgsdmTurn, */line:line,startDate:$("#startDate").val(),endDate:$("#endDate").val(),type:'query'},function(result){ 186 + $post('/mcy_forms/turnoutrate',{ gsdmTurn:gsdmTurn,fgsdmTurn:fgsdmTurn, line:line,startDate:$("#startDate").val(),endDate:$("#endDate").val(),type:'query'},function(result){
187 // 把数据填充到模版中 187 // 把数据填充到模版中
188 var tbodyHtml = template('turnoutrate',{list:result}); 188 var tbodyHtml = template('turnoutrate',{list:result});
189 // 把渲染好的模版html文本追加到表格中 189 // 把渲染好的模版html文本追加到表格中
@@ -243,7 +243,12 @@ @@ -243,7 +243,12 @@
243 }); 243 });
244 244
245 $("#export").on("click",function(){ 245 $("#export").on("click",function(){
246 - $post('/mcy_export/turnoutrateExport',{line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){ 246 + line = $("#line").val();
  247 + startDate=$("#startDate").val();
  248 + endDate=$("#endDate").val();
  249 + gsdmTurn=$("#gsdmTurn").val();
  250 + fgsdmTurn=$("#fgsdmTurn").val();
  251 + $post('/mcy_export/turnoutrateExport',{gsdmTurn:gsdmTurn,fgsdmTurn:fgsdmTurn,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
247 window.open("/downloadFile/download?fileName=营运线路出车率统计表"+moment(startDate).format("YYYYMMDD")); 252 window.open("/downloadFile/download?fileName=营运线路出车率统计表"+moment(startDate).format("YYYYMMDD"));
248 }); 253 });
249 }); 254 });
src/main/resources/static/pages/forms/statement/vehicleloading.html
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 19
20 <div class="page-head"> 20 <div class="page-head">
21 <div class="page-title"> 21 <div class="page-title">
22 - <h1>车辆加注/消耗量</h1> 22 + <h1>车辆加注</h1>
23 </div> 23 </div>
24 </div> 24 </div>
25 25
@@ -28,14 +28,14 @@ @@ -28,14 +28,14 @@
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 <form class="form-inline" action="" method="post"> 30 <form class="form-inline" action="" method="post">
31 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_vehic"> 31 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_vehic">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmVehic" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmVehic" style="width: 140px;"></select>
34 </div> 34 </div>
35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_vehic"> 35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_vehic">
36 <span class="item-label" style="width: 80px;">分公司: </span> 36 <span class="item-label" style="width: 80px;">分公司: </span>
37 <select class="form-control" name="subCompany" id="fgsdmVehic" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmVehic" style="width: 140px;"></select>
38 - </div> --> 38 + </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 <span class="item-label" style="width: 80px;">线路: </span> 40 <span class="item-label" style="width: 80px;">线路: </span>
41 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 41 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -135,18 +135,32 @@ @@ -135,18 +135,32 @@
135 }) 135 })
136 136
137 137
  138 + var line ;
  139 + var date ;
  140 + var gsdmVehic ;
  141 + var fgsdmVehic ;
138 $("#query").on("click",function(){ 142 $("#query").on("click",function(){
139 - var line = $("#line").val();  
140 - var date = $("#date").val();  
141 - /* var gsdmVehic = $("#gsdmVehic").val();  
142 - var fgsdmVehic = $("#fgsdmVehic").val(); */  
143 - $post('/mcy_forms/vehicleloading',{line:line,data:date},function(result){ 143 + line = $("#line").val();
  144 + date = $("#date").val();
  145 + gsdmVehic = $("#gsdmVehic").val();
  146 + fgsdmVehic = $("#fgsdmVehic").val();
  147 + $post('/mcy_forms/vehicleloading',{line:line,data:date, gsdmVehic: gsdmVehic,fgsdmVehic:fgsdmVehic},function(result){
144 // 把数据填充到模版中 148 // 把数据填充到模版中
145 var tbodyHtml = template('vehicleloading',{list:result}); 149 var tbodyHtml = template('vehicleloading',{list:result});
146 // 把渲染好的模版html文本追加到表格中 150 // 把渲染好的模版html文本追加到表格中
147 $('#forms tbody').html(tbodyHtml); 151 $('#forms tbody').html(tbodyHtml);
148 }); 152 });
149 - }); 153 + });
  154 +
  155 + $("#export").on("click",function(){
  156 + line = $("#line").val();
  157 + date = $("#date").val();
  158 + gsdmVehic = $("#gsdmVehic").val();
  159 + fgsdmVehic = $("#fgsdmVehic").val();
  160 + $post('/mcy_export/vehicleloadingExport',{line:line,data:date,gsdmVehic: gsdmVehic,fgsdmVehic:fgsdmVehic,type:'export'},function(result){
  161 + window.open("/downloadFile/download?fileName=车辆加注"+moment(date).format("YYYYMMDD"));
  162 + });
  163 + });
150 }); 164 });
151 </script> 165 </script>
152 <script type="text/html" id="vehicleloading"> 166 <script type="text/html" id="vehicleloading">
@@ -157,8 +171,8 @@ @@ -157,8 +171,8 @@
157 <td>{{obj.gS}}</td> 171 <td>{{obj.gS}}</td>
158 <td>{{obj.xL}}</td> 172 <td>{{obj.xL}}</td>
159 <td>{{obj.clzbh}}</td> 173 <td>{{obj.clzbh}}</td>
  174 + <td>{{obj.jzl}}</td>
160 <td>{{obj.hyl}}</td> 175 <td>{{obj.hyl}}</td>
161 - <td>{{obj.jzl}}</td>  
162 <td> </td> 176 <td> </td>
163 <td>{{obj.jhlc}}</td> 177 <td>{{obj.jhlc}}</td>
164 <td> </td> 178 <td> </td>
src/main/resources/static/pages/forms/statement/waybill.html
@@ -152,7 +152,7 @@ @@ -152,7 +152,7 @@
152 var line = $("#line").val(); 152 var line = $("#line").val();
153 date = $("#date").val(); 153 date = $("#date").val();
154 $(".hidden").removeClass("hidden"); 154 $(".hidden").removeClass("hidden");
155 - $get('/realSchedule/queryUserInfo',{line:line,date:date},function(result){ 155 + $get('/realSchedule/queryUserInfo',{line:line,date:date,state:2},function(result){
156 // 把数据填充到模版中 156 // 把数据填充到模版中
157 var tbodyHtml = template('list_info',{list:result}); 157 var tbodyHtml = template('list_info',{list:result});
158 // 把渲染好的模版html文本追加到表格中 158 // 把渲染好的模版html文本追加到表格中
src/main/resources/static/pages/forms/statement/waybillQp.html
@@ -152,7 +152,7 @@ @@ -152,7 +152,7 @@
152 var line = $("#line").val(); 152 var line = $("#line").val();
153 date = $("#date").val(); 153 date = $("#date").val();
154 $(".hidden").removeClass("hidden"); 154 $(".hidden").removeClass("hidden");
155 - $get('/realSchedule/queryUserInfo',{line:line,date:date},function(result){ 155 + $get('/realSchedule/queryUserInfo',{line:line,date:date,state:3},function(result){
156 // 把数据填充到模版中 156 // 把数据填充到模版中
157 var tbodyHtml = template('list_info',{list:result}); 157 var tbodyHtml = template('list_info',{list:result});
158 // 把渲染好的模版html文本追加到表格中 158 // 把渲染好的模版html文本追加到表格中
src/main/resources/static/pages/forms/statement/waybillday.html
@@ -28,14 +28,14 @@ @@ -28,14 +28,14 @@
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 <form class="form-inline" action="" method="post"> 30 <form class="form-inline" action="" method="post">
31 - <!-- <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_waybillday"> 31 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_waybillday">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmWaybillday" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmWaybillday" style="width: 140px;"></select>
34 </div> 34 </div>
35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_waybillday"> 35 <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_waybillday">
36 <span class="item-label" style="width: 80px;">分公司: </span> 36 <span class="item-label" style="width: 80px;">分公司: </span>
37 <select class="form-control" name="subCompany" id="fgsdmWaybillday" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmWaybillday" style="width: 140px;"></select>
38 - </div> --> 38 + </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 <span class="item-label" style="width: 80px;">线路: </span> 40 <span class="item-label" style="width: 80px;">线路: </span>
41 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 41 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -142,7 +142,7 @@ @@ -142,7 +142,7 @@
142 gsdmWaybillday=$("#gsdmWaybillday").val(); 142 gsdmWaybillday=$("#gsdmWaybillday").val();
143 fgsdmWaybillday = $("#fgsdmWaybillday").val(); 143 fgsdmWaybillday = $("#fgsdmWaybillday").val();
144 144
145 - $post('/mcy_forms/waybillday',{/* gsdmWaybillday:gsdmWaybillday,fgsdmWaybillday:fgsdmWaybillday, */line:line,date:$("#date").val(),type:'query'},function(result){ 145 + $post('/mcy_forms/waybillday',{gsdmWaybillday:gsdmWaybillday,fgsdmWaybillday:fgsdmWaybillday, line:line,date:$("#date").val(),type:'query'},function(result){
146 $.each(result, function(i, obj) { 146 $.each(result, function(i, obj) {
147 obj.requestType = reqCodeMap[obj.requestType]; 147 obj.requestType = reqCodeMap[obj.requestType];
148 }); 148 });
@@ -154,7 +154,11 @@ @@ -154,7 +154,11 @@
154 }); 154 });
155 155
156 $("#export").on("click",function(){ 156 $("#export").on("click",function(){
157 - $post('/mcy_export/waybilldayExport',{line:line,date:date,type:'export'},function(result){ 157 + line = $("#line").val();
  158 + date = $("#date").val();
  159 + gsdmWaybillday=$("#gsdmWaybillday").val();
  160 + fgsdmWaybillday = $("#fgsdmWaybillday").val();
  161 + $post('/mcy_export/waybilldayExport',{gsdmWaybillday:gsdmWaybillday,fgsdmWaybillday:fgsdmWaybillday,line:line,date:date,type:'export'},function(result){
158 window.open("/downloadFile/download?fileName=行车路单日报表"+moment(date).format("YYYYMMDD")); 162 window.open("/downloadFile/download?fileName=行车路单日报表"+moment(date).format("YYYYMMDD"));
159 }); 163 });
160 }); 164 });
src/main/resources/static/pages/mapmonitor/real/js/map/platform/baidu.js
@@ -57,37 +57,39 @@ var baiduMap = (function(){ @@ -57,37 +57,39 @@ var baiduMap = (function(){
57 57
58 map.clearOverlays(); 58 map.clearOverlays();
59 linePolyline = []; 59 linePolyline = [];
60 - //从localStorage里读取路由信息  
61 var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} 60 var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}
62 ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5}; 61 ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};
63 62
64 - var upPos = [], downPos = [], tempArray;  
65 var route = opts.route; 63 var route = opts.route;
66 - //上行 64 + var pos,temps, polyline;
67 if(route.up){ 65 if(route.up){
68 - $.each(route.up.split(','), function(){  
69 - tempArray = this.split(' ');  
70 - upPos.push(new BMap.Point(tempArray[0], tempArray[1])); 66 + $.each(route.up_bd, function (i, item) {
  67 + pos = [];
  68 + $.each(item.split(','), function () {
  69 + temps = this.split(' ');
  70 + pos.push(new BMap.Point(temps[0], temps[1]));
  71 + });
  72 + polyline = new BMap.Polyline(pos, upLineOps);
  73 + map.addOverlay(polyline);
  74 +
  75 + linePolyline.push(polyline);
71 }); 76 });
72 77
73 - var upLine = new BMap.Polyline(upPos, upLineOps);  
74 - map.addOverlay(upLine);  
75 -  
76 - linePolyline.push(upLine);  
77 -  
78 - map.panTo(upPos[parseInt(upPos.length / 2)]); 78 + map.panTo(pos[parseInt(pos.length / 2)]);
79 } 79 }
80 - //下行 80 +
81 if(route.down){ 81 if(route.down){
82 - $.each(route.down.split(','), function(){  
83 - tempArray = this.split(' ');  
84 - downPos.push(new BMap.Point(tempArray[0], tempArray[1])); 82 + $.each(route.down_bd, function (i, item) {
  83 + pos = [];
  84 + $.each(item.split(','), function () {
  85 + temps = this.split(' ');
  86 + pos.push(new BMap.Point(temps[0], temps[1]));
  87 + });
  88 + polyline = new BMap.Polyline(pos, downLineOps);
  89 + map.addOverlay(polyline);
  90 +
  91 + linePolyline.push(polyline);
85 }); 92 });
86 -  
87 - var downLine = new BMap.Polyline(downPos, downLineOps);  
88 - map.addOverlay(downLine);  
89 -  
90 - linePolyline.push(downLine);  
91 } 93 }
92 }, 94 },
93 //绘制GPS信号 95 //绘制GPS信号
src/main/resources/static/pages/mapmonitor/real/js/map/platform/gaode.js
@@ -77,11 +77,43 @@ var gaodeMap = (function() { @@ -77,11 +77,43 @@ var gaodeMap = (function() {
77 77
78 map.clearMap(); 78 map.clearMap();
79 79
80 - var upArr = [], downArr = [];  
81 - var upLineOps = {path: upArr, strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}  
82 - ,downLineOps = {path: downArr, strokeColor:"red", strokeWeight:6, strokeOpacity:0.5}; 80 + //var upArr = [], downArr = [];
  81 + var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}
  82 + ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};
83 var route = opts.route; 83 var route = opts.route;
84 - //上行 84 +
  85 + var pos,temps;
  86 + if(route.up){
  87 + $.each(route.up_gcj, function (i, item) {
  88 + pos = [];
  89 + $.each(item.split(','), function () {
  90 + temps = this.split(' ');
  91 + pos.push([temps[0], temps[1]]);
  92 + });
  93 + upLineOps.path=pos;
  94 + var polyline = new AMap.Polyline(upLineOps);
  95 + polyline.setMap(map);
  96 +
  97 + linePolyline.push(polyline);
  98 + });
  99 + map.setCenter(pos[parseInt(pos.length / 2)]);
  100 + }
  101 +
  102 + if(route.down){
  103 + $.each(route.down_gcj, function (i, item) {
  104 + pos = [];
  105 + $.each(item.split(','), function () {
  106 + temps = this.split(' ');
  107 + pos.push([temps[0], temps[1]]);
  108 + });
  109 + downLineOps.path=pos;
  110 + var polyline = new AMap.Polyline(downLineOps);
  111 + polyline.setMap(map);
  112 +
  113 + linePolyline.push(polyline);
  114 + });
  115 + }
  116 + /*//上行
85 if(route.up){ 117 if(route.up){
86 $.each(route.up_gcj.split(','), function(){ 118 $.each(route.up_gcj.split(','), function(){
87 tempArray = this.split(' '); 119 tempArray = this.split(' ');
@@ -104,7 +136,7 @@ var gaodeMap = (function() { @@ -104,7 +136,7 @@ var gaodeMap = (function() {
104 //保存线条引用 136 //保存线条引用
105 linePolyline.push(downLine); 137 linePolyline.push(downLine);
106 downLine.setMap(map); 138 downLine.setMap(map);
107 - } 139 + }*/
108 //实时路况下不显示 140 //实时路况下不显示
109 if(traffVisible) 141 if(traffVisible)
110 hideLinePolyline(); 142 hideLinePolyline();
src/main/resources/static/pages/oil/list.html
@@ -330,7 +330,6 @@ @@ -330,7 +330,6 @@
330 $('tr.filter .filter-submit').on('click', function () { 330 $('tr.filter .filter-submit').on('click', function () {
331 var ylbGsdm=$("#ylbListGsdmId").val(); 331 var ylbGsdm=$("#ylbListGsdmId").val();
332 var ylbFgsdm=$("#ylbListFgsdmId").val(); 332 var ylbFgsdm=$("#ylbListFgsdmId").val();
333 - console.log();  
334 if ($("#rq").val() == "" || $("#rq").val() ==null){ 333 if ($("#rq").val() == "" || $("#rq").val() ==null){
335 layer.msg('请选择日期.'); 334 layer.msg('请选择日期.');
336 }else if(ylbGsdm=="" || ylbGsdm==null || ylbFgsdm=="" ||ylbFgsdm==null){ 335 }else if(ylbGsdm=="" || ylbGsdm==null || ylbFgsdm=="" ||ylbFgsdm==null){
src/main/resources/static/pages/oil/list_ph.html 0 → 100644
  1 +<div class="page-head">
  2 + <div class="page-title">
  3 + <h1>进出场存油量</h1>
  4 + </div>
  5 +</div>
  6 +
  7 +<ul class="page-breadcrumb breadcrumb">
  8 + <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li>
  9 + <li><span class="active">用油管理</span> <i class="fa fa-circle"></i></li>
  10 + <li><span class="active">进出场存油量</span></li>
  11 +</ul>
  12 +
  13 +<div class="row" id="ll_oil_list">
  14 + <div class="col-md-12">
  15 + <!-- Begin: life time stats -->
  16 + <div class="portlet light portlet-fit portlet-datatable bordered">
  17 + <div class="portlet-title">
  18 + <div class="caption">
  19 + <i class="fa fa-fire-extinguisher"></i> <span
  20 + class="caption-subject font-dark sbold uppercase">进出场存油量表</span>
  21 + </div>
  22 + <div class="actions">
  23 + <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加</a>
  24 + <!-- <button type="button" class="btn btn-circle blue" id="removeButton"><i class="fa fa-trash-o"></i> 删除</button> -->
  25 + <button type="button" class="btn btn-circle blue" id="sortButton"><i class="fa fa-minus-square"></i>
  26 + 拆分/保存
  27 + </button>
  28 + <!-- <button type="button" class="btn btn-circle red" disabled="disabled" id="removeButton"><i class="fa fa-trash"></i> 删除用户</button> -->
  29 + <div class="btn-group">
  30 + <a class="btn red btn-outline btn-circle" href="javascript:;"
  31 + data-toggle="dropdown"> <i class="fa fa-share"></i> <span
  32 + class="hidden-xs"> 系统工具 </span> <i class="fa fa-angle-down"></i>
  33 + </a>
  34 + <ul class="dropdown-menu pull-right" id="datatable_ajax_tools">
  35 + <li><a href="javascript:;" data-action="0"
  36 + class="tool-action" id="obtain"> <i class="fa fa-hourglass-half"></i> 获取加/存油信息
  37 + </a></li>
  38 + <li><a href="javascript:;" data-action="1"
  39 + class="tool-action" id="outAndIn"> <i class="fa fa-pencil"></i> 油耗计算(进场=出场)
  40 + </a></li>
  41 + <li><a href="javascript:;" id="checkYl" data-action="3"
  42 + class="tool-action"> <i class="fa fa-gg-circle"></i>
  43 + 核对加注量(有加油无里程)
  44 + </a></li>
  45 + <li class="divider"></li>
  46 + <li><a href="javascript:;" data-action="3"
  47 + class="tool-action" id="export"> <i class="fa fa-file-excel-o"></i>
  48 + 导出Excel
  49 + </a></li>
  50 + </ul>
  51 + </div>
  52 + </div>
  53 + </div>
  54 + <div class="portlet-body">
  55 + <div class="table-container" style="margin-top: 10px">
  56 + <table
  57 + class="table table-striped table-bordered table-hover table-checkable"
  58 + id="datatable_ylb">
  59 + <thead>
  60 + <tr role="row" class="filter">
  61 + <td> 公司:</td>
  62 + <td colspan="2">
  63 +
  64 + <select class="form-control" name="ssgsdm_like" id="ylbListGsdmId" ></select>
  65 +
  66 + </td>
  67 + <td>
  68 + 分公司:
  69 + </td>
  70 + <td colspan="2">
  71 +
  72 + <select class="form-control" name="fgsdm_like" id="ylbListFgsdmId" ></select>
  73 + </td>
  74 +
  75 + <td>
  76 + 日期:
  77 + </td>
  78 + <td>
  79 + <input type="text" style="width: 80px" name="rq" id="rq"/>
  80 + </td>
  81 + <td >
  82 + 线路:
  83 + </td>
  84 + <td colspan="3">
  85 + <select class="form-control" name="xlbm_eq" id="xlbm" style="width: 120px;"></select>
  86 + &nbsp;
  87 + </td>
  88 + <td >
  89 + 内部编码:
  90 + </td>
  91 + <td colspan="3">
  92 + <select class="form-control" name="nbbm_eq" id="nbbm" style="width: 120px;"></select>
  93 + </td>
  94 + <td colspan="4">
  95 + <button class="btn btn-sm green btn-outline filter-submit margin-bottom" style="margin-right:0px">
  96 + <i class="fa fa-search"></i> 搜索
  97 + </button>
  98 +
  99 + <button class="btn btn-sm red btn-outline filter-cancel" style="margin-right:0px">
  100 + <i class="fa fa-times"></i> 重置
  101 + </button>
  102 +
  103 + </td>
  104 + </tr>
  105 + <tr role="row" class="heading">
  106 + <th width="2%">#</th>
  107 + <th width="8%">日期</th>
  108 + <th width="5%">公司</th>
  109 + <th width="8%">线路</th>
  110 + <th width="5%">自编号</th>
  111 + <th width="6%">驾驶员</th>
  112 + <th width="4%">加油量</th>
  113 + <th width="5%">出场公里</th>
  114 + <th width="4%">进场公里</th>
  115 + <th width="4%">出场存油</th>
  116 + <th width="4%">进场存油</th>
  117 + <th width="5%">油耗</th>
  118 + <th width="5%">燃油类型</th>
  119 + <th width="4%">尿素</th>
  120 + <th width="5%">耗损原因</th>
  121 + <th width="5%">耗损油量</th>
  122 + <th width="5%">当日总里程</th>
  123 + <th width="5%">数据类型</th>
  124 + <th width="5%">百公里油耗</th>
  125 + <!-- <th width="5%">操作</th> -->
  126 + </tr>
  127 + </thead>
  128 + <tbody></tbody>
  129 + </table>
  130 + <div style="text-align: right;">
  131 + <ul id="pagination" class="pagination"></ul>
  132 + </div>
  133 + </div>
  134 + </div>
  135 + </div>
  136 + </div>
  137 +</div>
  138 +
  139 +<script id="ylb_list_temp" type="text/html">
  140 + {{each list as obj i}}
  141 + <tr>
  142 + <td style="vertical-align: middle;">
  143 + <input type="radio" name="id" class="group-checkable icheck" data-id="{{obj.id}}">
  144 + </td>
  145 +
  146 + <td>
  147 + {{obj.rq}}
  148 + </td>
  149 + <td>
  150 + {{obj.gsname}}
  151 + </td>
  152 + <td>
  153 + {{obj.xlname}}
  154 + </td>
  155 + <td>
  156 + {{obj.nbbm}}
  157 + </td>
  158 + <td>
  159 + {{obj.jsy}}
  160 + </td>
  161 + <td>
  162 + {{obj.jzl}}
  163 + </td>
  164 + <td>
  165 + {{obj.czlc}}
  166 + </td>
  167 + <td>
  168 + {{obj.jzlc}}
  169 + </td>
  170 + <td>
  171 + {{obj.czyl}}
  172 + </td>
  173 + <td>
  174 + <a data-id="{{obj.id}}" href="javascript:;" class="in_carpark_jzyl">
  175 + {{obj.jzyl}}
  176 + </a>
  177 + </td>
  178 + <td>
  179 + {{obj.yh}}
  180 + </td>
  181 + <td>
  182 + {{obj.rylx}}
  183 + </td>
  184 + <td>
  185 + {{obj.ns}}
  186 + </td>
  187 + <td>
  188 + {{obj.shyy}}
  189 + </td>
  190 + <td>
  191 + {{obj.sh}}
  192 + </td>
  193 + <td>
  194 + {{obj.zlc}}
  195 + </td>
  196 + <td>
  197 + {{obj.yhlx}}
  198 + </td>
  199 + <td>
  200 + {{obj.bglyh}}
  201 + </td>
  202 + <td>
  203 + <!--<a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a>-->
  204 + </td>
  205 + </tr>
  206 + {{/each}}
  207 + {{if list.length == 0}}
  208 + <tr>
  209 + <td colspan=20><h6 class="muted">没有找到相关数据</h6></td>
  210 + </tr>
  211 + {{/if}}
  212 +</script>
  213 +
  214 +<script>
  215 + $(function () {
  216 + //var id = 15;
  217 + //$('.in_carpark_jzyl[data-id='+id+']', '#ll_oil_list')
  218 +
  219 + $("#checkYl").on('click', function () {
  220 + console.log("核对加注量");
  221 + if ($("#rq").val() != "") {
  222 + var cells = $('tr.filter')[0].cells
  223 + , params = {}
  224 + , name;
  225 + $.each(cells, function (i, cell) {
  226 + var items = $('input,select', cell);
  227 + for (var j = 0, item; item = items[j++];) {
  228 + name = $(item).attr('name');
  229 + if (name) {
  230 + params[name] = $(item).val();
  231 + }
  232 + }
  233 + });
  234 + $get('/ylb/checkYl', params, function () {
  235 + jsDoQuery(null, true);
  236 + });
  237 + } else {
  238 + layer.msg('请选择日期.');
  239 + }
  240 + })
  241 +
  242 + //进场等于出场
  243 + $("#outAndIn").on('click', function () {
  244 + console.log("进场油量等于出场油量");
  245 + if ($("#rq").val() != "") {
  246 + var cells = $('tr.filter')[0].cells
  247 + , params = {}
  248 + , name;
  249 + $.each(cells, function (i, cell) {
  250 + var items = $('input,select', cell);
  251 + for (var j = 0, item; item = items[j++];) {
  252 + name = $(item).attr('name');
  253 + if (name) {
  254 + params[name] = $(item).val();
  255 + }
  256 + }
  257 + });
  258 + $get('/ylb/outAndIn', params, function () {
  259 + jsDoQuery(null, true);
  260 + });
  261 + } else {
  262 + layer.msg('请选择日期.');
  263 + }
  264 + })
  265 + //拆分
  266 + $("#sortButton").on('click', function () {
  267 + if ($("#rq").val() != "") {
  268 + var id = $('input.icheck:checked').data('id');
  269 +
  270 + if (typeof(id) == 'undefined') {
  271 + layer.msg("请选择一行进行拆分");
  272 + } else {
  273 + //获取输入的进场存油
  274 + var jzyl = $('.in_carpark_jzyl[data-id='+id+']', '#ll_oil_list').html();
  275 + // $("#jzyl" + id).html();
  276 + console.log(jzyl);
  277 + var params = {};
  278 + params['jzyl'] = jzyl;
  279 + params['id'] = id;
  280 + $get('/ylb/sort', params, function () {
  281 + jsDoQuery(null, true);
  282 + });
  283 +
  284 + }
  285 + } else {
  286 + layer.msg('请选择日期.');
  287 + }
  288 + })
  289 + //获取加存信息
  290 + $("#obtain").on('click', function () {
  291 + console.log("获取加存");
  292 + if ($("#rq").val() != "") {
  293 + var cells = $('tr.filter')[0].cells
  294 + , params = {}
  295 + , name;
  296 + $.each(cells, function (i, cell) {
  297 + var items = $('input,select', cell);
  298 + for (var j = 0, item; item = items[j++];) {
  299 + name = $(item).attr('name');
  300 + if (name) {
  301 + params[name] = $(item).val();
  302 + }
  303 + }
  304 + });
  305 + $get('/ylb/obtain', params, function () {
  306 + jsDoQuery(params, true);
  307 + });
  308 + } else {
  309 + layer.msg('请选择日期.');
  310 + }
  311 +
  312 + })
  313 + $("#rq").datetimepicker({
  314 + format: 'YYYY-MM-DD',
  315 + locale: 'zh-cn'
  316 + });
  317 +
  318 + var page = 0, initPagination;
  319 + var icheckOptions = {
  320 + radioClass: 'iradio_square-blue icheck',
  321 + increaseArea: '20%'
  322 + }
  323 +
  324 + //重置
  325 + $('tr.filter .filter-cancel').on('click', function () {
  326 + $('tr.filter input, select').val('').change();
  327 + });
  328 +
  329 + //提交
  330 + $('tr.filter .filter-submit').on('click', function () {
  331 + var ylbGsdm=$("#ylbListGsdmId").val();
  332 + var ylbFgsdm=$("#ylbListFgsdmId").val();
  333 + if ($("#rq").val() == "" || $("#rq").val() ==null){
  334 + layer.msg('请选择日期.');
  335 + }else if(ylbGsdm=="" || ylbGsdm==null || ylbFgsdm=="" ||ylbFgsdm==null){
  336 + layer.msg('请选择公司和分公司.');
  337 + }else {
  338 + var cells = $('tr.filter')[0].cells
  339 + , params = {}
  340 + , name;
  341 + $.each(cells, function (i, cell) {
  342 + var items = $('input,select', cell);
  343 + for (var j = 0, item; item = items[j++];) {
  344 + name = $(item).attr('name');
  345 + if (name) {
  346 + params[name] = $(item).val();
  347 + }
  348 + }
  349 + });
  350 + page = 0;
  351 + jsDoQuery(params, true);
  352 + }
  353 + });
  354 +
  355 +
  356 +// var gsqxdm="";
  357 +
  358 +
  359 + $.get('/user/companyData', function(result){
  360 + obj = result;
  361 + var options="";
  362 +// = '<option value="">请选择</option>';
  363 + for(var i = 0; i < obj.length; i++){
  364 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  365 +// setFgsqx(obj[i].companyCode);
  366 + }
  367 + $('#ylbListGsdmId').html(options);
  368 + updateCompany();
  369 + });
  370 + /* function setFgsqx(gs){
  371 + var company =gs
  372 + var options = '';
  373 + for(var i = 0; i < obj.length; i++){
  374 + if(obj[i].companyCode == company){
  375 + var children = obj[i].children;
  376 + for(var j = 0; j < children.length; j++){
  377 + gsqxdm +=company+""+children[j].code+",";
  378 + }
  379 + }
  380 + }
  381 + } */
  382 + $("#ylbListGsdmId").on("change",updateCompany);
  383 + function updateCompany(){
  384 + var company = $('#ylbListGsdmId').val();
  385 + var options ="";
  386 +// = '<option value="">请选择</option>';
  387 + for(var i = 0; i < obj.length; i++){
  388 + if(obj[i].companyCode == company){
  389 + var children = obj[i].children;
  390 + for(var j = 0; j < children.length; j++){
  391 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  392 + }
  393 + }
  394 + }
  395 + $('#ylbListFgsdmId').html(options);
  396 + }
  397 + /*
  398 + * 获取数据 p: 要提交的参数, pagination: 是否重新分页
  399 + */
  400 + function jsDoQuery(p, pagination) {
  401 + var params = {};
  402 + if (p)
  403 + params = p;
  404 + //更新时间排序
  405 + params['order'] = 'nbbm';
  406 + params['page'] = page;
  407 + params['rq'] = $("#rq").val();
  408 +
  409 + /* var ylbGsdm=$("#ylbListGsdmId").val();
  410 + var ylbFgsdm=$("#ylbListFgsdmId").val();
  411 + if(ylbGsdm==''|| ylbGsdm==null){
  412 + params['concat(ssgsdm,fgsdm)_in']=gsqxdm;
  413 + }else{
  414 + if(ylbFgsdm==''||ylbFgsdm==null){
  415 + var fgsqx1='';
  416 + for(var i = 0; i < obj.length; i++){
  417 + if(obj[i].companyCode == ylbGsdm){
  418 + var children = obj[i].children;
  419 + for(var j = 0; j < children.length; j++){
  420 + fgsqx1 +=children[j].code+",";
  421 + }
  422 + }
  423 + }
  424 + params['fgsdm_in']=fgsqx1;
  425 + }
  426 + } */
  427 + var i = layer.load(2);
  428 + $get('/ylb', params, function (data) {
  429 + $.each(data.content, function (i, obj) {
  430 + obj.rq = moment(obj.rq).format("YYYY-MM-DD");
  431 + });
  432 + var bodyHtm = template('ylb_list_temp', {list: data.content});
  433 +
  434 + $('#datatable_ylb tbody').html(bodyHtm)
  435 + .find('.icheck').iCheck(icheckOptions)
  436 + .on('ifChanged', iCheckChange);
  437 + if (pagination && data.content.length > 0) {
  438 + //重新分页
  439 + initPagination = true;
  440 + showPagination(data);
  441 + }
  442 + layer.close(i);
  443 +
  444 + startOptJzylLink($('#ll_oil_list .in_carpark_jzyl'));
  445 + });
  446 + }
  447 +
  448 + //改变状态
  449 + function startOptJzylLink(es) {
  450 + es.editable({
  451 + type: 'text',
  452 + placement: 'right',
  453 + width: 100,
  454 + display: false,
  455 + validate: function (value) {
  456 + if (!value)
  457 + return '值不能为空!';
  458 + if (isNaN(value))
  459 + return '只能为数字!';
  460 + if (value < 0)
  461 + return '值不能小于0!';
  462 + },
  463 + inputclass: 'form-control input-medium input-edtable-sm'
  464 + })
  465 + .on('save', function (e, params) {
  466 + $(this).text(params.newValue);
  467 + });
  468 + }
  469 +
  470 + function iCheckChange() {
  471 + var tr = $(this).parents('tr');
  472 + if (this.checked)
  473 + tr.addClass('row-active');
  474 + else
  475 + tr.removeClass('row-active');
  476 +
  477 + /* if($('#datatable_resource input.icheck:checked').length == 1)
  478 + $('#removeButton').removeAttr('disabled');
  479 + else
  480 + $('#removeButton').attr('disabled', 'disabled'); */
  481 + }
  482 +
  483 + function showPagination(data) {
  484 + //分页
  485 + $('#pagination').jqPaginator({
  486 + totalPages: data.totalPages,
  487 + visiblePages: 6,
  488 + currentPage: page + 1,
  489 + first: '<li class="first"><a href="javascript:void(0);">首页<\/a><\/li>',
  490 + prev: '<li class="prev"><a href="javascript:void(0);">上一页<\/a><\/li>',
  491 + next: '<li class="next"><a href="javascript:void(0);">下一页<\/a><\/li>',
  492 + last: '<li class="last"><a href="javascript:void(0);">尾页<\/a><\/li>',
  493 + page: '<li class="page"><a href="javascript:void(0);">{{page}}<\/a><\/li>',
  494 + onPageChange: function (num, type) {
  495 + if (initPagination) {
  496 + initPagination = false;
  497 + return;
  498 + }
  499 +
  500 + var cells = $('tr.filter')[0].cells
  501 + , params = {}
  502 + , name;
  503 + $.each(cells, function (i, cell) {
  504 + var items = $('input,select', cell);
  505 + for (var j = 0, item; item = items[j++];) {
  506 + name = $(item).attr('name');
  507 + if (name) {
  508 + params[name] = $(item).val();
  509 + }
  510 + }
  511 + });
  512 + page = num - 1;
  513 + jsDoQuery(params, true);
  514 + }
  515 + });
  516 + }
  517 +
  518 +
  519 + //删除
  520 + $('#removeButton').on('click', function () {
  521 + if ($(this).attr('disabled'))
  522 + return;
  523 +
  524 + var id = $('input.icheck:checked').data('id');
  525 + removeConfirm('确定要删除选中的数据?', '/resource/' + id, function () {
  526 + $('tr.filter .filter-submit').click();
  527 + });
  528 + });
  529 +
  530 + //搜索线路
  531 + $.get('/basic/lineCode2Name',function(result){
  532 + var data=[];
  533 +
  534 + for(var code in result){
  535 + data.push({id: code, text: result[code]});
  536 + }
  537 + console.log(data);
  538 + initPinYinSelect2('#xlbm',data,'');
  539 +
  540 + })
  541 +
  542 + $('#nbbm').select2({
  543 + placeholder: '搜索车辆...',
  544 + ajax: {
  545 + url: '/realSchedule/sreachVehic',
  546 + dataType: 'json',
  547 + delay: 150,
  548 + data: function (params) {
  549 + return {nbbm: params.term};
  550 + },
  551 + processResults: function (data) {
  552 + return {
  553 + results: data
  554 + };
  555 + },
  556 + cache: true
  557 + },
  558 + templateResult: function (repo) {
  559 + if (repo.loading) return repo.text;
  560 + var h = '<span>' + repo.text + '</span>';
  561 + h += (repo.lineName ? '&nbsp;<span class="select2-desc">' + repo.lineName + '</span>' : '');
  562 + return h;
  563 + },
  564 + escapeMarkup: function (markup) {
  565 + return markup;
  566 + },
  567 + minimumInputLength: 1,
  568 + templateSelection: function (repo) {
  569 + return repo.text;
  570 + },
  571 + language: {
  572 + noResults: function () {
  573 + return '<span style="color:red;font-size: 12px;">没有搜索到车辆!</span>';
  574 + },
  575 + inputTooShort: function (e) {
  576 + return '<span style="color:gray;font-size: 12px;"><i class="fa fa-search"></i> 输入自编号搜索车辆</span>';
  577 + },
  578 + searching: function () {
  579 + return '<span style="color:gray;font-size: 12px;"> 正在搜索车辆...</span>';
  580 + }
  581 + }
  582 + })
  583 +
  584 +
  585 +//导出
  586 +
  587 + $("#export").on("click", function () {
  588 + if ($("#rq").val() != "") {
  589 + var cells = $('tr.filter')[0].cells
  590 + , params = {}
  591 + , name;
  592 + $.each(cells, function (i, cell) {
  593 + var items = $('input,select', cell);
  594 + for (var j = 0, item; item = items[j++];) {
  595 + name = $(item).attr('name');
  596 + if (name) {
  597 + params[name] = $(item).val();
  598 + }
  599 + }
  600 + });
  601 + console.log(params);
  602 + $post('/ylb/listExport', params, function (result) {
  603 + console.log(result);
  604 + window.open("/downloadFile/download?fileName=进出场存油量" + moment($("#rq").val()).format("YYYYMMDD"));
  605 + });
  606 + } else {
  607 + layer.msg('请选择日期.');
  608 + }
  609 + });
  610 +
  611 + });
  612 +</script>
0 \ No newline at end of file 613 \ No newline at end of file
src/main/resources/static/pages/report/timetable/timetable.html
@@ -40,8 +40,8 @@ @@ -40,8 +40,8 @@
40 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 40 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
41 </div> 41 </div>
42 <div style="display: inline-block;margin-left: 15px;"> 42 <div style="display: inline-block;margin-left: 15px;">
43 - <span class="item-label" style="width: 80px;">时间: </span>  
44 - <input class="form-control" type="text" id="date" style="width: 180px;"/> 43 + <span class="item-label" style="width: 80px;">时刻表: </span>
  44 + <select class="form-control" name="ttinfo" id="ttinfo" style="width: 180px;"></select>
45 </div> 45 </div>
46 <div class="form-group"> 46 <div class="form-group">
47 <input class="btn btn-default" type="button" id="query" value="查询"/> 47 <input class="btn btn-default" type="button" id="query" value="查询"/>
@@ -196,10 +196,6 @@ @@ -196,10 +196,6 @@
196 if (!$('body').hasClass('page-sidebar-closed')) 196 if (!$('body').hasClass('page-sidebar-closed'))
197 $('.menu-toggler.sidebar-toggler').click(); 197 $('.menu-toggler.sidebar-toggler').click();
198 198
199 - $("#date").datetimepicker({  
200 - format : 'YYYY-MM-DD',  
201 - locale : 'zh-cn'  
202 - });  
203 199
204 var obj = []; 200 var obj = [];
205 $.get('/user/companyData', function(result){ 201 $.get('/user/companyData', function(result){
@@ -246,27 +242,49 @@ @@ -246,27 +242,49 @@
246 242
247 }) 243 })
248 244
  245 +
  246 + var flag = 0;
  247 + function updateTtinfo(){
  248 + if(flag == 1)
  249 + return;
  250 + flag = 1;
  251 + var treeData = [];
  252 + var params = {};
  253 + params['line'] = $("#line").val();
  254 + $get('/report/getTtinfo', params, function(result){
  255 + treeData = createTreeData(result);
  256 + var options = '<option value="">请选择...</option>';
  257 + $.each(treeData, function(i, g){
  258 + options += '<option value="'+g.id+'">'+g.name+'</option>';
  259 + });
  260 + $('#ttinfo').html(options)/* .select2() */;
  261 + flag = 0;
  262 + });
  263 + }
  264 +
  265 + $("#line").on("change", function(){
  266 + updateTtinfo();
  267 + })
  268 +
249 //查询 269 //查询
250 $("#query").on('click',function(){ 270 $("#query").on('click',function(){
251 - console.log($("#gsdmTime").val());  
252 - console.log($("#fgsdmTime").val());  
253 var line = $("#line").val(); 271 var line = $("#line").val();
254 var xlName = $("#select2-line-container").html(); 272 var xlName = $("#select2-line-container").html();
255 - var date = $("#date").val();  
256 - if(date==null|| date==""){  
257 - layer.msg('请选择日期.');  
258 - }else if(line==null || line ==""){ 273 + var ttinfo = $("#ttinfo").val();
  274 + if(line==null || line ==""){
259 layer.msg('请选择线路.'); 275 layer.msg('请选择线路.');
  276 + }else if(ttinfo==null|| ttinfo==""){
  277 + layer.msg('请选择时刻表.');
260 }else{ 278 }else{
261 - $get('/report/tbodyTime1',{line:line,date:date},function(result){ 279 + $get('/report/tbodyTime1',{line:line,ttinfo:ttinfo},function(result){
262 var tbodyTime1 = template('tbodyTime1',{map:result}); 280 var tbodyTime1 = template('tbodyTime1',{map:result});
263 $('#formsTime1 .tbody_time_1').html(tbodyTime1); 281 $('#formsTime1 .tbody_time_1').html(tbodyTime1);
264 }); 282 });
265 - $.get('/report/tbodyTime2',{line:line,date:date},function(result){ 283 + $.get('/report/tbodyTime2',{line:line,ttinfo:ttinfo},function(result){
266 var tbodyTime2 = template('tbodyTime2',{map:result}); 284 var tbodyTime2 = template('tbodyTime2',{map:result});
267 $('#formsTime2 .tbody_time_2').html(tbodyTime2); 285 $('#formsTime2 .tbody_time_2').html(tbodyTime2);
268 - });  
269 - $.get('/report/tbodyTime3',{line:line,date:date},function(result){ 286 + });/*
  287 + $.get('/report/tbodyTime3',{line:line,ttinfo:ttinfo},function(result){
270 288
271 var tbodyTime3 = template('tbodyTime3',{list:result}); 289 var tbodyTime3 = template('tbodyTime3',{list:result});
272 $('#formsTime3 .tbody_time_3').html(tbodyTime3); 290 $('#formsTime3 .tbody_time_3').html(tbodyTime3);
@@ -274,15 +292,17 @@ @@ -274,15 +292,17 @@
274 var divTime2 = window.document.getElementById('formsTime2'); 292 var divTime2 = window.document.getElementById('formsTime2');
275 console.log(divTime3.offsetHeight); 293 console.log(divTime3.offsetHeight);
276 divTime2.style.height=divTime3.offsetHeight+"px"; 294 divTime2.style.height=divTime3.offsetHeight+"px";
277 - });/* 295 + }); */
  296 +
  297 + /*
278 $.get('/report/tbodyTime4',{line:line,date:date},function(result){ 298 $.get('/report/tbodyTime4',{line:line,date:date},function(result){
279 var scheduleDaily_3 = template('scheduleDaily_3',{list:result}); 299 var scheduleDaily_3 = template('scheduleDaily_3',{list:result});
280 $('#forms .scheduleDaily_3').html(scheduleDaily_3); 300 $('#forms .scheduleDaily_3').html(scheduleDaily_3);
281 });*/ 301 });*/
282 - $.get('/report/tbodyTime5',{line:line,date:date},function(result){ 302 + /* $.get('/report/tbodyTime5',{line:line,ttinfo:ttinfo},function(result){
283 var tbodyTime5 = template('tbodyTime5',{list:result}); 303 var tbodyTime5 = template('tbodyTime5',{list:result});
284 $('#formsTime5 .tbody_time_5').html(tbodyTime5); 304 $('#formsTime5 .tbody_time_5').html(tbodyTime5);
285 - }); 305 + }); */
286 } 306 }
287 307
288 308
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/list.html
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().equipmentCode_like" placeholder="输入设备编号..."/> 26 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().equipmentCode_like" placeholder="输入设备编号..."/>
27 </td> 27 </td>
28 <td> 28 <td>
29 - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carCode_like" placeholder="输入车牌号..."/> 29 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carPlate_like" placeholder="输入车牌号..."/>
30 </td> 30 </td>
31 <td> 31 <td>
32 <div> 32 <div>
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice-legacy.js
@@ -158,12 +158,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun @@ -158,12 +158,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun
158 } 158 }
159 ), 159 ),
160 ttInfo: $resource( 160 ttInfo: $resource(
161 - '/tic/:type', 161 + '/tic_ec/:type',
162 {order: "name", direction: 'ASC'}, 162 {order: "name", direction: 'ASC'},
163 { 163 {
164 list: { 164 list: {
165 method: 'GET', 165 method: 'GET',
166 - isArray: true 166 + isArray: true,
  167 + transformResponse: function(rs) {
  168 + var dst = angular.fromJson(rs);
  169 + if (dst.status == 'SUCCESS') {
  170 + return dst.data;
  171 + } else {
  172 + return dst; // 业务错误留给控制器处理
  173 + }
  174 + }
167 } 175 }
168 } 176 }
169 ), 177 ),
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
@@ -522,78 +522,86 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -522,78 +522,86 @@ angular.module(&#39;ScheduleApp&#39;).factory(
522 ); 522 );
523 523
524 // 时刻表明细管理service 524 // 时刻表明细管理service
525 -angular.module('ScheduleApp').factory('TimeTableDetailManageService_g', ['$resource', function($resource) {  
526 - return {  
527 - rest: $resource(  
528 - '/tidc/:id',  
529 - {order: 'createDate', direction: 'DESC', id: '@id_route'},  
530 - {  
531 - get: {  
532 - method: 'GET'  
533 - },  
534 - save: {  
535 - method: 'POST'  
536 - }  
537 - }  
538 - ),  
539 - import: $resource(  
540 - '/tidc/importfile',  
541 - {},  
542 - {  
543 - do: {  
544 - method: 'POST',  
545 - headers: {  
546 - 'Content-Type': 'application/x-www-form-urlencoded'  
547 - },  
548 - transformRequest: function(obj) {  
549 - var str = [];  
550 - for (var p in obj) {  
551 - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 525 +angular.module('ScheduleApp').factory(
  526 + 'TimeTableDetailManageService_g',
  527 + [
  528 + '$resource',
  529 + function($resource) {
  530 + return {
  531 + rest: $resource(
  532 + '/tidc/:id',
  533 + {order: 'createDate', direction: 'DESC', id: '@id'},
  534 + {
  535 + get: {
  536 + method: 'GET'
  537 + },
  538 + save: {
  539 + method: 'POST'
552 } 540 }
553 - return str.join("&");  
554 } 541 }
555 - }  
556 - }  
557 - ),  
558 - edit: $resource(  
559 - '/tidc/edit/:xlid/:ttid',  
560 - {},  
561 - {  
562 - list: {  
563 - method: 'GET'  
564 - }  
565 - }  
566 - ),  
567 - bcdetails: $resource(  
568 - '/tidc/bcdetail',  
569 - {},  
570 - {  
571 - list: {  
572 - method: 'GET',  
573 - isArray: true  
574 - }  
575 - }  
576 - ),  
577 - dataTools: $resource(  
578 - '/tidc/:type',  
579 - {},  
580 - {  
581 - dataExport: {  
582 - method: 'GET',  
583 - responseType: "arraybuffer",  
584 - params: {  
585 - type: "dataExportExt"  
586 - },  
587 - transformResponse: function(data, headers){  
588 - return {data : data}; 542 + ),
  543 + import: $resource(
  544 + '/tidc/importfile',
  545 + {},
  546 + {
  547 + do: {
  548 + method: 'POST',
  549 + headers: {
  550 + 'Content-Type': 'application/x-www-form-urlencoded'
  551 + },
  552 + transformRequest: function(obj) {
  553 + var str = [];
  554 + for (var p in obj) {
  555 + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  556 + }
  557 + return str.join("&");
  558 + }
  559 + }
589 } 560 }
590 - }  
591 - }  
592 - ) 561 + ),
  562 + edit: $resource(
  563 + '/tidc/edit/:xlid/:ttid',
  564 + {},
  565 + {
  566 + list: {
  567 + method: 'GET'
  568 + }
  569 + }
  570 + ),
  571 + bcdetails: $resource(
  572 + '/tidc/bcdetail',
  573 + {},
  574 + {
  575 + list: {
  576 + method: 'GET',
  577 + isArray: true
  578 + }
  579 + }
  580 + ),
  581 + dataTools: $resource(
  582 + '/tidc/:type',
  583 + {},
  584 + {
  585 + dataExport: {
  586 + method: 'GET',
  587 + responseType: "arraybuffer",
  588 + params: {
  589 + type: "dataExportExt"
  590 + },
  591 + transformResponse: function(data, headers){
  592 + return {data : data};
  593 + }
  594 + }
  595 + }
  596 + )
593 597
594 - // TODO:导入数据  
595 - };  
596 -}]); 598 + // TODO:导入数据
  599 + };
  600 +
  601 + }
  602 +
  603 + ]
  604 +);
597 // 项目通用的全局service服务,供不同的controller使用,自定义指令不使用 605 // 项目通用的全局service服务,供不同的controller使用,自定义指令不使用
598 606
599 // 文件下载服务 607 // 文件下载服务
@@ -754,12 +762,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun @@ -754,12 +762,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun
754 } 762 }
755 ), 763 ),
756 ttInfo: $resource( 764 ttInfo: $resource(
757 - '/tic/:type', 765 + '/tic_ec/:type',
758 {order: "name", direction: 'ASC'}, 766 {order: "name", direction: 'ASC'},
759 { 767 {
760 list: { 768 list: {
761 method: 'GET', 769 method: 'GET',
762 - isArray: true 770 + isArray: true,
  771 + transformResponse: function(rs) {
  772 + var dst = angular.fromJson(rs);
  773 + if (dst.status == 'SUCCESS') {
  774 + return dst.data;
  775 + } else {
  776 + return dst; // 业务错误留给控制器处理
  777 + }
  778 + }
763 } 779 }
764 } 780 }
765 ), 781 ),
src/main/resources/static/pages/scheduleApp/module/common/prj-common-ui-route-state.js
@@ -1096,7 +1096,7 @@ ScheduleApp.config([ @@ -1096,7 +1096,7 @@ ScheduleApp.config([
1096 } 1096 }
1097 }) 1097 })
1098 .state("ttInfoDetailManage_edit", { // 时刻表详细信息编辑 1098 .state("ttInfoDetailManage_edit", { // 时刻表详细信息编辑
1099 - url: '/ttInfoDetailManage_edit/:xlid/:ttid/:xlname/:ttname', 1099 + url: '/ttInfoDetailManage_edit/:xlid/:ttid/:xlname/:ttname/:rflag',
1100 views: { 1100 views: {
1101 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit.html'} 1101 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit.html'}
1102 }, 1102 },
@@ -1123,7 +1123,7 @@ ScheduleApp.config([ @@ -1123,7 +1123,7 @@ ScheduleApp.config([
1123 name: 'ttInfoDetailManage_edit_module', 1123 name: 'ttInfoDetailManage_edit_module',
1124 insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 1124 insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
1125 files: [ 1125 files: [
1126 - "pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js" 1126 + "pages/scheduleApp/module/core/ttInfoManage/detailedit/module2.js"
1127 ] 1127 ]
1128 }); 1128 });
1129 }] 1129 }]
@@ -1147,6 +1147,25 @@ ScheduleApp.config([ @@ -1147,6 +1147,25 @@ ScheduleApp.config([
1147 }); 1147 });
1148 }] 1148 }]
1149 } 1149 }
  1150 + })
  1151 + .state("ttInfoDetailManage_detail_edit2", { // 时刻表详细信息批量单元格修改
  1152 + url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname',
  1153 + views: {
  1154 + "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html'}
  1155 + },
  1156 + resolve: {
  1157 + deps: ['$ocLazyLoad', function($ocLazyLoad) {
  1158 + return $ocLazyLoad.load({
  1159 + name: 'ttInfoDetailManage_detail_edit_module',
  1160 + insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
  1161 + files: [
  1162 + "assets/bower_components/angular-ui-select/dist/select.min.css",
  1163 + "assets/bower_components/angular-ui-select/dist/select.min.js",
  1164 + "pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js"
  1165 + ]
  1166 + });
  1167 + }]
  1168 + }
1150 }); 1169 });
1151 1170
1152 } 1171 }
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/edit.html
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 cmaps="{'rerunTtinfo.id' : 'id'}" 69 cmaps="{'rerunTtinfo.id' : 'id'}"
70 dcname="rerunTtinfo.id" 70 dcname="rerunTtinfo.id"
71 icname="id" 71 icname="id"
72 - dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id, 'isCancel_eq': false}, atype:'ttInfo' } | json }}" 72 + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id, 'isCancel_eq': false, 'isEnableDisTemplate_eq': true}, atype:'ttInfo' } | json }}"
73 dsparamsextra="{'type':'all'}" 73 dsparamsextra="{'type':'all'}"
74 iterobjname="item" 74 iterobjname="item"
75 iterobjexp="item.name + '-' + item.xl.name" 75 iterobjexp="item.name + '-' + item.xl.name"
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/form.html
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 cmaps="{'rerunTtinfo.id' : 'id'}" 69 cmaps="{'rerunTtinfo.id' : 'id'}"
70 dcname="rerunTtinfo.id" 70 dcname="rerunTtinfo.id"
71 icname="id" 71 icname="id"
72 - dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id, 'isCancel_eq': false}, atype:'ttInfo' } | json }}" 72 + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id, 'isCancel_eq': false, 'isEnableDisTemplate_eq': true}, atype:'ttInfo' } | json }}"
73 dsparamsextra="{'type':'all'}" 73 dsparamsextra="{'type':'all'}"
74 iterobjname="item" 74 iterobjname="item"
75 iterobjexp="item.name + '-' + item.xl.name" 75 iterobjexp="item.name + '-' + item.xl.name"
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/list_info.html
@@ -77,7 +77,7 @@ @@ -77,7 +77,7 @@
77 <span ng-bind="info.fcsj"></span> 77 <span ng-bind="info.fcsj"></span>
78 </td> 78 </td>
79 <td> 79 <td>
80 - <abbr title="info.ttInfoName">{{info.ttInfoName}}</abbr> 80 + <abbr title="{{info.ttInfoName}}"><span>{{info.ttInfoName}}</span></abbr>
81 </td> 81 </td>
82 82
83 </tr> 83 </tr>
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html 0 → 100644
  1 +<div ng-controller="TimeTableDetailManageFormCtrl_old2 as ctrl">
  2 + <div class="page-head">
  3 + <div class="page-title">
  4 + <h1>修改班次信息</h1>
  5 + </div>
  6 + </div>
  7 +
  8 + <ul class="page-breadcrumb breadcrumb">
  9 + <li>
  10 + <a href="/pages/home.html" data-pjax>首页</a>
  11 + <i class="fa fa-circle"></i>
  12 + </li>
  13 + <li>
  14 + <span class="active">运营计划管理</span>
  15 + <i class="fa fa-circle"></i>
  16 + </li>
  17 + <li>
  18 + <a ui-sref="ttInfoManage">时刻表管理</a>
  19 + <i class="fa fa-circle"></i>
  20 + </li>
  21 + <li>
  22 + <a ui-sref="ttInfoDetailManage_edit({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname})"><span ng-bind="ctrl.title1"></span></a>
  23 + <i class="fa fa-circle"></i>
  24 + </li>
  25 + <li>
  26 + <span class="active">修改班次信息</span>
  27 + </li>
  28 + </ul>
  29 +
  30 + <div class="portlet light bordered">
  31 + <div class="portlet-title">
  32 + <div class="caption">
  33 + <i class="icon-equalizer font-red-sunglo"></i> <span
  34 + class="caption-subject font-red-sunglo bold uppercase" >批量信息修改</span>
  35 + </div>
  36 + </div>
  37 +
  38 + <div class="portlet-body form">
  39 + <form ng-submit="ctrl.submit()" class="form-horizontal" novalidate name="myForm">
  40 + <div class="form-body">
  41 +
  42 + <div class="form-group has-success has-feedback">
  43 + <label class="col-md-3 control-label">方向:</label>
  44 + <div class="col-md-7">
  45 + <sa-Radiogroup model="ctrl.TimeTableDetailForSave.xlDir" dicgroup="LineTrend" name="xlDir"></sa-Radiogroup>
  46 + </div>
  47 +
  48 + </div>
  49 + <div class="form-group">
  50 + <label class="col-md-3 control-label">起点站:</label>
  51 + <div class="col-md-7">
  52 + <sa-Select3 model="ctrl.TimeTableDetailForSave"
  53 + name="qdz"
  54 + placeholder="请输拼音..."
  55 + dcvalue="{{ctrl.TimeTableDetailForSave.qdz.id}}"
  56 + dcname="qdz.id"
  57 + icname="stationid"
  58 + icnames="stationname"
  59 + datatype="zd"
  60 + dataassociate="true"
  61 + dataparam="{{ {'xlid': ctrl.xlid, 'xldir': ctrl.TimeTableDetailForSave.xlDir} | json }}"
  62 + mlp="true"
  63 + >
  64 + </sa-Select3>
  65 + </div>
  66 + </div>
  67 + <div class="form-group">
  68 + <label class="col-md-3 control-label">终点站:</label>
  69 + <div class="col-md-7">
  70 + <sa-Select3 model="ctrl.TimeTableDetailForSave"
  71 + name="zdz"
  72 + placeholder="请输拼音..."
  73 + dcvalue="{{ctrl.TimeTableDetailForSave.zdz.id}}"
  74 + dcname="zdz.id"
  75 + icname="stationid"
  76 + icnames="stationname"
  77 + datatype="zd"
  78 + dataassociate="true"
  79 + dataparam="{{ {'xlid': ctrl.xlid, 'xldir': ctrl.TimeTableDetailForSave.xlDir} | json }}"
  80 + mlp="true"
  81 + >
  82 + </sa-Select3>
  83 + </div>
  84 + </div>
  85 + <div class="form-group">
  86 + <label class="col-md-3 control-label">停车场:</label>
  87 + <div class="col-md-7">
  88 + <sa-Select3 model="ctrl.TimeTableDetailForSave"
  89 + name="tcc"
  90 + placeholder="请输拼音..."
  91 + dcvalue="{{ctrl.TimeTableDetailForSave.tcc.id}}"
  92 + dcname="tcc.id"
  93 + icname="id"
  94 + icnames="parkName"
  95 + datatype="tcc"
  96 + mlp="true"
  97 + >
  98 + </sa-Select3>
  99 + </div>
  100 + </div>
  101 +
  102 + <div class="form-group has-success has-feedback">
  103 + <label class="col-md-3 control-label">发车时间:</label>
  104 + <div class="col-md-7">
  105 + <input type="text" class="form-control"
  106 + ng-model="ctrl.TimeTableDetailForSave.fcsj"
  107 + />
  108 + </div>
  109 +
  110 + </div>
  111 + <div class="form-group">
  112 + <label class="col-md-3 control-label">计划里程:</label>
  113 + <div class="col-md-7">
  114 + <input type="text" class="form-control"
  115 + ng-model="ctrl.TimeTableDetailForSave.jhlc"
  116 + />
  117 + </div>
  118 +
  119 + </div>
  120 + <div class="form-group">
  121 + <label class="col-md-3 control-label">班次历时:</label>
  122 + <div class="col-md-7">
  123 + <input type="text" class="form-control"
  124 + ng-model="ctrl.TimeTableDetailForSave.bcsj"
  125 + />
  126 + </div>
  127 +
  128 + </div>
  129 +
  130 + </div>
  131 +
  132 + <div class="form-actions">
  133 + <div class="row">
  134 + <div class="col-md-offset-3 col-md-4">
  135 + <button type="submit" class="btn green"
  136 + ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button>
  137 + <a type="button" class="btn default"
  138 + ui-sref="ttInfoDetailManage_edit({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname})" ><i class="fa fa-times"></i> 取消</a>
  139 + </div>
  140 + </div>
  141 + </div>
  142 + </form>
  143 +
  144 + </div>
  145 + </div>
  146 +
  147 +
  148 +
  149 +
  150 +</div>
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit.html
@@ -55,9 +55,9 @@ @@ -55,9 +55,9 @@
55 </a> 55 </a>
56 <ul class="dropdown-menu pull-right"> 56 <ul class="dropdown-menu pull-right">
57 <li> 57 <li>
58 - <a href="javascript:" class="tool-action"> 58 + <a href="javascript:" class="tool-action" ng-click="ctrl.editInfos()">
59 <i class="fa fa-file-excel-o"></i> 59 <i class="fa fa-file-excel-o"></i>
60 - 导出excel 60 + 批量修改
61 </a> 61 </a>
62 </li> 62 </li>
63 <li class="divider"></li> 63 <li class="divider"></li>
@@ -79,20 +79,21 @@ @@ -79,20 +79,21 @@
79 <table style="width: 2000px" class="table table-striped table-bordered table-hover table-checkable order-column"> 79 <table style="width: 2000px" class="table table-striped table-bordered table-hover table-checkable order-column">
80 <thead> 80 <thead>
81 <tr> 81 <tr>
82 - <th ng-repeat="head in ctrl.detailHeads track by $index"> 82 + <th ng-repeat="head in ctrl.getDetailHeads() track by $index">
83 <span ng-bind="head"></span> 83 <span ng-bind="head"></span>
84 </th> 84 </th>
85 85
86 </tr> 86 </tr>
87 </thead> 87 </thead>
88 <tbody> 88 <tbody>
89 - <tr ng-repeat="info in ctrl.detailInfos"> 89 + <tr ng-repeat="info in ctrl.getDetailInfos()">
90 <td ng-repeat="cell in info track by $index"> 90 <td ng-repeat="cell in info track by $index">
91 91
92 <!--<span ng-bind="cell.fcsj"></span>--> 92 <!--<span ng-bind="cell.fcsj"></span>-->
93 <span ng-if="!cell.ttdid" ng-bind="cell.fcsj"></span> 93 <span ng-if="!cell.ttdid" ng-bind="cell.fcsj"></span>
94 94
95 <div ng-if="cell.ttdid" class="btn-group"> 95 <div ng-if="cell.ttdid" class="btn-group">
  96 + <input type="checkbox" ng-model="cell.sel"/>
96 <a href="javascript:" class="btn blue btn-outline btn-circle" data-toggle="dropdown"> 97 <a href="javascript:" class="btn blue btn-outline btn-circle" data-toggle="dropdown">
97 <!-- 上下行图标 --> 98 <!-- 上下行图标 -->
98 <i ng-if="cell.xldir == '0'" class="fa fa-arrow-up" aria-hidden="true"></i> 99 <i ng-if="cell.xldir == '0'" class="fa fa-arrow-up" aria-hidden="true"></i>
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit2.html
1 -<h1>测试handsontable</h1> 1 +<div class="page-head">
  2 + <div class="page-title">
  3 + <h1>时刻表管理</h1>
  4 + </div>
  5 +</div>
2 6
3 -<div ng-controller="tt_edit2 as ctrl">  
4 - <hot-table col-headers="ctrl.colHeaders" datarows="ctrl.data">  
5 - <hot-column ng-repeat="column in ctrl.columns" data="{{column.data}}"  
6 - title="column.title" read-only="column.readOnly"></hot-column>  
7 - </hot-table> 7 +<ul class="page-breadcrumb breadcrumb">
  8 + <li>
  9 + <a href="/pages/home.html" data-pjax>首页</a>
  10 + <i class="fa fa-circle"></i>
  11 + </li>
  12 + <li>
  13 + <span class="active">运营计划管理</span>
  14 + <i class="fa fa-circle"></i>
  15 + </li>
  16 + <li>
  17 + <a ui-sref="ttInfoManage">时刻表管理</a>
  18 + <i class="fa fa-circle"></i>
  19 + </li>
  20 + <li>
  21 + <span class="active">编辑时刻表明细信息</span>
  22 + </li>
  23 +</ul>
  24 +
  25 +<div class="row" id="timeTableDetail" ng-controller="TTInfoDetailManageCtrl as ctrl">
  26 + <div class="col-md-12">
  27 + <div class="portlet light bordered">
  28 + <div class="portlet-title">
  29 + <div class="caption font-dark">
  30 + <i class="fa fa-database font-dark"></i>
  31 + <span class="caption-subject bold uppercase" ng-bind="ctrl.title"></span>
  32 + </div>
  33 + <div class="actions">
  34 + <i class="fa fa-arrow-up" aria-hidden="true"></i>
  35 + <span style="padding-right: 10px;">上行班次</span>
  36 + <i class="fa fa-arrow-down" aria-hidden="true"></i>
  37 + <span style="padding-right: 10px;">下行班次</span>
  38 + <i class="fa fa-circle-o-notch" aria-hidden="true"></i>
  39 + <span style="padding-right: 10px;">区间班次</span>
  40 + <i class="fa fa-adjust" aria-hidden="true"></i>
  41 + <span style="padding-right: 10px;">分班班次</span>
  42 +
  43 + <div class="btn-group">
  44 + <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
  45 + <i class="fa fa-share"></i>
  46 + <span>数据工具</span>
  47 + <i class="fa fa-angle-down"></i>
  48 + </a>
  49 + <ul class="dropdown-menu pull-right">
  50 + <li>
  51 + <a href="javascript:" class="tool-action">
  52 + <i class="fa fa-file-excel-o"></i>
  53 + 导出excel
  54 + </a>
  55 + </li>
  56 + <li class="divider"></li>
  57 + <li>
  58 + <a href="javascript:" class="tool-action" ng-click="ctrl.refresh()">
  59 + <i class="fa fa-refresh"></i>
  60 + 刷行数据
  61 + </a>
  62 + </li>
  63 + </ul>
  64 + </div>
  65 +
  66 + </div>
  67 + </div>
  68 +
  69 + <div class="portlet-body">
  70 + <!--<div ng-view></div>-->
  71 + <div class="fixDiv">
  72 +
  73 + <hot-table datarows="ctrl.getData()" settings="ctrl.settings">
  74 + <hot-column ng-repeat="column in ctrl.getColHeaders()"
  75 + data="{{column.data}}"
  76 + title="column.title" read-only="column.readOnly"></hot-column>
  77 + </hot-table>
  78 +
  79 + </div>
  80 +
  81 +
  82 + </div>
  83 + </div>
  84 + </div>
8 </div> 85 </div>
9 \ No newline at end of file 86 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/module2.js 0 → 100644
  1 +// 保存时刻表明细编辑信息
  2 +angular.module('ScheduleApp').factory(
  3 + '$$TTInfoDetail_edit2_info',
  4 + [
  5 + 'TimeTableDetailManageService_g',
  6 + function(service) {
  7 + var editInfo = {}; // 转换好的内部明细数据
  8 + editInfo.colHeaders = [ // 这个要动态生成的
  9 + {
  10 + data: 'lpName',
  11 + title: '路牌',
  12 + type: 'text',
  13 + readOnly: true
  14 + },
  15 + {
  16 + data: 'fcsj1',
  17 + id: 'detailId1',
  18 + title: '出场',
  19 + type: 'text',
  20 + readOnly: true
  21 + },
  22 + {
  23 + data: 'fcsj2',
  24 + id: 'detailId2',
  25 + title: '和静路安亭老街',
  26 + type: 'text',
  27 + readOnly: true
  28 + },
  29 + {
  30 + data: 'fcsj3',
  31 + id: 'detailId3',
  32 + title: '福泉路天山西路',
  33 + type: 'text',
  34 + readOnly: true
  35 + },
  36 + {
  37 + data: 'fcsj4',
  38 + id: 'detailId4',
  39 + title: '和静路安亭老街',
  40 + type: 'text',
  41 + readOnly: true
  42 + },
  43 + {
  44 + data: 'fcsj5',
  45 + id: 'detailId5',
  46 + title: '福泉路天山西路',
  47 + type: 'text',
  48 + readOnly: true
  49 + },
  50 + {
  51 + data: 'fcsj6',
  52 + id: 'detailId6',
  53 + title: '进场',
  54 + type: 'text',
  55 + readOnly: true
  56 + }
  57 +
  58 +
  59 + ];
  60 + editInfo.items= [
  61 + {
  62 + lpName: '1',
  63 + fcsj1: '0615',
  64 + detailId1: 1,
  65 + fcsj2: '0615',
  66 + detailId2: 1,
  67 + fcsj3: '0615',
  68 + detailId3: 1,
  69 + fcsj4: '0615',
  70 + detailId4: 1,
  71 + fcsj5: '0615',
  72 + detailId5: 1,
  73 + fcsj6: '0615',
  74 + detailId6: 1,
  75 + },
  76 + {
  77 + lpName: '2',
  78 + fcsj1: '0615',
  79 + detailId1: 1,
  80 + fcsj2: '0615',
  81 + detailId2: 1,
  82 + fcsj3: '0615',
  83 + detailId3: 1,
  84 + fcsj4: '0615',
  85 + detailId4: 1,
  86 + fcsj5: '0615',
  87 + detailId5: 1,
  88 + fcsj6: '0615',
  89 + detailId6: 1,
  90 + },
  91 + {
  92 + lpName: '3',
  93 + fcsj1: '0615',
  94 + detailId1: 1,
  95 + fcsj2: '0615',
  96 + detailId2: 1,
  97 + fcsj3: '0615',
  98 + detailId3: 1,
  99 + fcsj4: '0615',
  100 + detailId4: 1,
  101 + fcsj5: '0615',
  102 + detailId5: 1,
  103 + fcsj6: '0615',
  104 + detailId6: 1,
  105 + },
  106 + {
  107 + lpName: '4',
  108 + fcsj1: '0615',
  109 + detailId1: 1,
  110 + fcsj2: '0615',
  111 + detailId2: 1,
  112 + fcsj3: '0615',
  113 + detailId3: 1,
  114 + fcsj4: '0615',
  115 + detailId4: 1,
  116 + fcsj5: '0615',
  117 + detailId5: 1,
  118 + fcsj6: '0615',
  119 + detailId6: 1,
  120 + },
  121 + {
  122 + lpName: '5',
  123 + fcsj1: '0615',
  124 + detailId1: 1,
  125 + fcsj2: '0615',
  126 + detailId2: 1,
  127 + fcsj3: '0615',
  128 + detailId3: 1,
  129 + fcsj4: '0615',
  130 + detailId4: 1,
  131 + fcsj5: '0615',
  132 + detailId5: 1,
  133 + fcsj6: '0615',
  134 + detailId6: 1,
  135 + },
  136 + {
  137 + lpName: '6',
  138 + fcsj1: '0615',
  139 + detailId1: 1,
  140 + fcsj2: '0615',
  141 + detailId2: 1,
  142 + fcsj3: '0615',
  143 + detailId3: 1,
  144 + fcsj4: '0615',
  145 + detailId4: 1,
  146 + fcsj5: '0615',
  147 + detailId5: 1,
  148 + fcsj6: '0615',
  149 + detailId6: 1,
  150 + }
  151 +
  152 + ];
  153 +
  154 +
  155 + //this.columns = [
  156 + // {
  157 + // data: 'id',
  158 + // title: 'ID',
  159 + // readOnly: true
  160 + // },
  161 + // {
  162 + // data: 'price',
  163 + // title: 'Price',
  164 + // readOnly: false
  165 + // }
  166 + //];
  167 +
  168 + // demo data
  169 +
  170 +
  171 + return {
  172 + getEditDetailInfo: function() {
  173 + return editInfo;
  174 + },
  175 + refreshEditDetail: function() {
  176 + // TODO:
  177 +
  178 + return editInfo;
  179 + }
  180 + }
  181 + }
  182 + ]
  183 +);
  184 +
  185 +// edit2.html 页面
  186 +angular.module('ScheduleApp').controller(
  187 + 'TTInfoDetailManageCtrl',
  188 + [
  189 + 'TimeTableDetailManageService_g',
  190 + '$stateParams',
  191 + '$$TTInfoDetail_edit2_info',
  192 + function(service, $stateParams, detailService) {
  193 + var self = this;
  194 + self.xlid = $stateParams.xlid; // 获取传过来的线路id
  195 + self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
  196 + self.xlname = $stateParams.xlname; // 获取传过来的线路名字
  197 + self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
  198 +
  199 + self.title = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
  200 +
  201 + self.getColHeaders = function() {
  202 + return detailService.getEditDetailInfo().colHeaders;
  203 + };
  204 + self.getData = function() {
  205 + return detailService.getEditDetailInfo().items;
  206 + };
  207 + self.test = function() {
  208 + alert("test");
  209 + };
  210 +
  211 + var m1 = '<a href="javascript:" class="tool-action" ng-click="ctrl.test()">m1</a>';
  212 +
  213 + self.settings = {
  214 + contextMenu: [
  215 + m1
  216 + ]
  217 + };
  218 +
  219 + // TODO:判定是否刷新数据
  220 + detailService.refreshEditDetail();
  221 +
  222 +
  223 +
  224 + }
  225 + ]
  226 +);
0 \ No newline at end of file 227 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/route.js
@@ -30,7 +30,7 @@ ScheduleApp.config([ @@ -30,7 +30,7 @@ ScheduleApp.config([
30 } 30 }
31 }) 31 })
32 .state("ttInfoDetailManage_edit", { // 时刻表详细信息编辑 32 .state("ttInfoDetailManage_edit", { // 时刻表详细信息编辑
33 - url: '/ttInfoDetailManage_edit/:xlid/:ttid/:xlname/:ttname', 33 + url: '/ttInfoDetailManage_edit/:xlid/:ttid/:xlname/:ttname/:rflag',
34 views: { 34 views: {
35 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit.html'} 35 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit.html'}
36 }, 36 },
@@ -57,7 +57,7 @@ ScheduleApp.config([ @@ -57,7 +57,7 @@ ScheduleApp.config([
57 name: 'ttInfoDetailManage_edit_module', 57 name: 'ttInfoDetailManage_edit_module',
58 insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 58 insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
59 files: [ 59 files: [
60 - "pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js" 60 + "pages/scheduleApp/module/core/ttInfoManage/detailedit/module2.js"
61 ] 61 ]
62 }); 62 });
63 }] 63 }]
@@ -81,6 +81,25 @@ ScheduleApp.config([ @@ -81,6 +81,25 @@ ScheduleApp.config([
81 }); 81 });
82 }] 82 }]
83 } 83 }
  84 + })
  85 + .state("ttInfoDetailManage_detail_edit2", { // 时刻表详细信息批量单元格修改
  86 + url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname',
  87 + views: {
  88 + "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html'}
  89 + },
  90 + resolve: {
  91 + deps: ['$ocLazyLoad', function($ocLazyLoad) {
  92 + return $ocLazyLoad.load({
  93 + name: 'ttInfoDetailManage_detail_edit_module',
  94 + insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
  95 + files: [
  96 + "assets/bower_components/angular-ui-select/dist/select.min.css",
  97 + "assets/bower_components/angular-ui-select/dist/select.min.js",
  98 + "pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js"
  99 + ]
  100 + });
  101 + }]
  102 + }
84 }); 103 });
85 104
86 } 105 }
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js
  1 +// 时刻表明晰编辑信息service
  2 +angular.module('ScheduleApp').factory(
  3 + 'TimeTableDetailManageService_old',
  4 + [
  5 + 'TimeTableDetailManageService_g',
  6 + '$state',
  7 + '$q',
  8 + function(service, $state, $q) {
1 9
2 -angular.module('ScheduleApp').factory('TimeTableDetailManageService_old', ['TimeTableDetailManageService_g', function(service) {  
3 -  
4 - return {  
5 - /**  
6 - * 获取明细信息。  
7 - * @param id 车辆id  
8 - * @return 返回一个 promise  
9 - */  
10 - getDetail: function(id) {  
11 - var params = {id: id};  
12 - return service.rest.get(params).$promise;  
13 - },  
14 - /**  
15 - * 保存信息。  
16 - * @param obj 车辆详细信息  
17 - * @return 返回一个 promise  
18 - */  
19 - saveDetail: function(obj) {  
20 - return service.rest.save(obj).$promise;  
21 - },  
22 - /**  
23 - * 获取编辑用的时刻表明细数据。  
24 - * @param ttid 时刻表id  
25 - */  
26 - getEditInfo: function(xlid, ttid) {  
27 - var params = {xlid : xlid, ttid : ttid};  
28 - return service.edit.list(params).$promise;  
29 - }  
30 - };  
31 -  
32 -}]);  
33 -  
34 -angular.module('ScheduleApp').controller('TimeTableDetailManageCtrl_old', ['TimeTableDetailManageService_old', '$stateParams', '$uibModal', function(service, $stateParams, $uibModal) {  
35 - var self = this;  
36 - self.xlid = $stateParams.xlid; // 获取传过来的线路id  
37 - self.ttid = $stateParams.ttid; // 获取传过来的时刻表id  
38 - self.xlname = $stateParams.xlname; // 获取传过来的线路名字  
39 - self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字  
40 -  
41 - self.title = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";  
42 -  
43 - // 载入待编辑的时刻表明细数据  
44 - service.getEditInfo(self.xlid, self.ttid).then(  
45 - function(result) {  
46 - // TODO;获取数据待展示  
47 - self.detailHeads = result.header;  
48 - self.detailInfos = result.contents;  
49 - },  
50 - function(result) {  
51 - alert("出错啦!"); 10 + // 查询对象类
  11 + var queryClass = service.rest;
  12 +
  13 + // 时刻表信息
  14 + var editInfo = {
  15 + detailHeads: [], // 时刻表头信息
  16 + detailInfos: [] // 时刻表明细信息
  17 + };
  18 +
  19 + return {
  20 + getQueryClass: function() {
  21 + return queryClass;
  22 + },
  23 + getEditInfo: function() {
  24 + return editInfo;
  25 + },
  26 +
  27 + /**
  28 + * 获取编辑用的时刻表明细数据。
  29 + * @param xlid 线路id
  30 + * @param ttid 时刻表id
  31 + */
  32 + refreshEditInfo: function(xlid, ttid) {
  33 + editInfo = {
  34 + detailHeads: [], // 时刻表头信息
  35 + detailInfos: [] // 时刻表明细信息
  36 + };
  37 +
  38 + service.edit.list({xlid: xlid, ttid: ttid}, function(result) {
  39 + editInfo.detailHeads = result.header;
  40 + editInfo.detailInfos = result.contents;
  41 +
  42 + // detailInfos里添加是否选中的flag
  43 + for (var i = 0; i < editInfo.detailInfos.length; i++) {
  44 + for (var j = 0; j < editInfo.detailInfos[i].length; j++) {
  45 + editInfo.detailInfos[i][j].sel = false;
  46 + }
  47 + }
  48 + });
  49 + },
  50 +
  51 + editIsSel: function() { // 是否有被选中的
  52 + var flag = false;
  53 + for (var i = 0; i < editInfo.detailInfos.length; i++) {
  54 + for (var j = 0; j < editInfo.detailInfos[i].length; j++) {
  55 + if (editInfo.detailInfos[i][j].sel == true)
  56 + return true;
  57 + }
  58 + }
  59 + return flag;
  60 + },
  61 +
  62 + editInfos: function(updateObject) { // 批量保存数据
  63 + var deferred = $q.defer();
  64 +
  65 + // 找出所有选中的ttinfodetailids
  66 + var ttinfodetailIds = [];
  67 + for (var i = 0; i < editInfo.detailInfos.length; i++) {
  68 + for (var j = 0; j < editInfo.detailInfos[i].length; j++) {
  69 + if (editInfo.detailInfos[i][j].sel == true)
  70 + ttinfodetailIds.push(editInfo.detailInfos[i][j]);
  71 + }
  72 + }
  73 + // ajax调用
  74 + var success_counts = 0; // 成功数
  75 + var error_counts = 0; // 失败数
  76 + for (var n = 0; n < ttinfodetailIds.length; n++) {
  77 + (function(index) {
  78 + queryClass.get({id: ttinfodetailIds[index].ttdid}, function(value) {
  79 + for (var key in updateObject) {
  80 + if (updateObject[key]) {
  81 + value[key] = updateObject[key];
  82 + }
  83 + }
  84 + value.$save(function() {
  85 + // 赋值(上下行,发车时间,班次类型)
  86 + if (value.fcsj) {
  87 + ttinfodetailIds[index].fcsj = value.fcsj;
  88 + }
  89 + if (value.xlDir) {
  90 + ttinfodetailIds[index].xldir = value.xlDir;
  91 + }
  92 + if (value.bcType) {
  93 + ttinfodetailIds[index].bc_type = value.bcType;
  94 + }
  95 +
  96 + success_counts ++;
  97 + if (success_counts + error_counts == ttinfodetailIds.length) {
  98 + deferred.resolve();
  99 + }
  100 + }, function() {
  101 + error_counts ++;
  102 + if (success_counts + error_counts == ttinfodetailIds.length) {
  103 + deferred.reject();
  104 + }
  105 + });
  106 + }, function() {
  107 + error_counts ++;
  108 + if (success_counts + error_counts == ttinfodetailIds.length) {
  109 + deferred.reject();
  110 + }
  111 + });
  112 + })(n);
  113 + }
  114 +
  115 + return deferred.promise;
  116 + }
  117 +
  118 +
  119 + };
52 } 120 }
53 - );  
54 -  
55 - // 刷新数据  
56 - self.refresh = function() {  
57 - service.getEditInfo(self.xlid, self.ttid).then(  
58 - function(result) {  
59 - // TODO;获取数据待展示  
60 - self.detailHeads = result.header;  
61 - self.detailInfos = result.contents;  
62 - },  
63 - function(result) {  
64 - alert("出错啦!");  
65 - }  
66 - );  
67 - };  
68 -  
69 - /**  
70 - * 反向操作。  
71 - * @param cell 明细信息  
72 - */  
73 - self.changeDirect = function(detailInfo, xldir) {  
74 - service.getDetail(detailInfo.ttdid).then(  
75 - function(result) {  
76 - result.xlDir = xldir;  
77 - service.saveDetail(result).then(  
78 - function(result) { 121 +
  122 + ]
  123 +);
  124 +
  125 +// edit.html 时刻表编辑界面
  126 +angular.module('ScheduleApp').controller(
  127 + 'TimeTableDetailManageCtrl_old',
  128 + [
  129 + 'TimeTableDetailManageService_old',
  130 + '$stateParams',
  131 + '$uibModal',
  132 + '$state',
  133 + function(service, $stateParams, $uibModal, $state) {
  134 + var self = this;
  135 + self.xlid = $stateParams.xlid; // 获取传过来的线路id
  136 + self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
  137 + self.xlname = $stateParams.xlname; // 获取传过来的线路名字
  138 + self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
  139 + self.rflag = $stateParams.rflag; // 刷新标志
  140 +
  141 + self.title = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
  142 +
  143 + // 获取时刻表明细数据(内部保存)
  144 + self.getDetailHeads = function() {
  145 + return service.getEditInfo().detailHeads;
  146 + };
  147 + self.getDetailInfos = function() {
  148 + return service.getEditInfo().detailInfos;
  149 + };
  150 +
  151 + // 刷新时刻表数据
  152 + self.refresh = function() {
  153 + service.refreshEditInfo(self.xlid, self.ttid);
  154 + };
  155 +
  156 + // 批量修改
  157 + self.editInfos = function() {
  158 + if (!service.editIsSel()) {
  159 + alert("请选择班次信息");
  160 + return;
  161 + } else {
  162 + $state.go("ttInfoDetailManage_detail_edit2", {
  163 + xlid: self.xlid,
  164 + ttid: self.ttid,
  165 + xlname: self.xlname,
  166 + ttname: self.ttname
  167 + });
  168 + }
  169 +
  170 +
  171 + };
  172 +
  173 + // 查询对象类
  174 + var TTInfoDetail = service.getQueryClass();
  175 +
  176 + /**
  177 + * 反向操作。
  178 + * @param cell 明细信息
  179 + */
  180 + self.changeDirect = function(detailInfo, xldir) {
  181 + TTInfoDetail.get({id: detailInfo.ttdid}, function(value) {
  182 + value.xlDir = xldir;
  183 + value.$save(function() {
79 detailInfo.xldir = xldir; 184 detailInfo.xldir = xldir;
80 - },  
81 - function(result) {  
82 - alert("出错啦!");  
83 - }  
84 - );  
85 - },  
86 - function(result) {  
87 - alert("出错啦!");  
88 - }  
89 - );  
90 - };  
91 -  
92 - /**  
93 - * 更新分班。  
94 - * @param detailInfo 明细信息  
95 - * @param flag 分班标识  
96 - */  
97 - self.changeFB = function(detailInfo, flag) {  
98 - service.getDetail(detailInfo.ttdid).then(  
99 - function(result) {  
100 - result.isFB = flag;  
101 - service.saveDetail(result).then(  
102 - function(result) { 185 + });
  186 + });
  187 + };
  188 +
  189 + /**
  190 + * 更新分班。
  191 + * @param detailInfo 明细信息
  192 + * @param flag 分班标识
  193 + */
  194 + self.changeFB = function(detailInfo, flag) {
  195 + TTInfoDetail.get({id: detailInfo.ttdid}, function(value) {
  196 + value.isFB = flag;
  197 + value.$save(function() {
103 detailInfo.isfb = flag; 198 detailInfo.isfb = flag;
104 - },  
105 - function(result) {  
106 - alert("出错啦!");  
107 - }  
108 - );  
109 - },  
110 - function(result) {  
111 - alert("出错啦!");  
112 - }  
113 - );  
114 - };  
115 -  
116 - /**  
117 - * 改变便次类型。  
118 - * @param detailInfo 明细信息  
119 - * @param type 班次类型  
120 - */  
121 - self.changeBCType = function(detailInfo, type) {  
122 - service.getDetail(detailInfo.ttdid).then(  
123 - function(result) {  
124 - result.bcType = type;  
125 - service.saveDetail(result).then(  
126 - function(result) { 199 + });
  200 + });
  201 +
  202 + };
  203 +
  204 + /**
  205 + * 改变便次类型。
  206 + * @param detailInfo 明细信息
  207 + * @param type 班次类型
  208 + */
  209 + self.changeBCType = function(detailInfo, type) {
  210 + TTInfoDetail.get({id: detailInfo.ttdid}, function(value) {
  211 + value.bcType = type;
  212 + value.$save(function() {
127 detailInfo.bc_type = type; 213 detailInfo.bc_type = type;
128 - },  
129 - function(result) {  
130 - alert("出错啦!");  
131 - }  
132 - );  
133 - },  
134 - function(result) {  
135 - alert("出错啦!"); 214 + });
  215 + });
  216 +
  217 + };
  218 +
  219 + if (self.rflag) { // 是否刷新
  220 + self.refresh(); // 刷新数据
136 } 221 }
137 - );  
138 - };  
139 222
140 -}]);  
141 223
142 -angular.module('ScheduleApp').controller('TimeTableDetailManageFormCtrl_old', ['TimeTableDetailManageService_old', '$stateParams', '$state', function(service, $stateParams, $state) {  
143 - var self = this; 224 + }
  225 +
  226 + ]
  227 +);
144 228
145 - // 欲保存的busInfo信息,绑定  
146 - self.TimeTableDetailForSave = {}; 229 +// edit-detail.html 具体班次明细修改页面
  230 +angular.module('ScheduleApp').controller(
  231 + 'TimeTableDetailManageFormCtrl_old',
  232 + [
  233 + 'TimeTableDetailManageService_old',
  234 + '$stateParams',
  235 + '$state',
  236 + function(service, $stateParams, $state) {
  237 + var self = this;
  238 + var TTInfoDetail = service.getQueryClass();
147 239
148 - // 获取传过来的id,有的话就是修改,获取一遍数据  
149 - var id = $stateParams.id; // 时刻明细班次id  
150 - self.xlid = $stateParams.xlid; // 获取传过来的线路id  
151 - self.ttid = $stateParams.ttid; // 获取传过来的时刻表id  
152 - self.xlname = $stateParams.xlname; // 获取传过来的线路名字  
153 - self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字 240 + // 欲保存的busInfo信息,绑定
  241 + self.TimeTableDetailForSave = new TTInfoDetail;
154 242
155 - self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息"; 243 + // 获取传过来的id,有的话就是修改,获取一遍数据
  244 + var id = $stateParams.id; // 时刻明细班次id
  245 + self.xlid = $stateParams.xlid; // 获取传过来的线路id
  246 + self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
  247 + self.xlname = $stateParams.xlname; // 获取传过来的线路名字
  248 + self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
156 249
157 - if (id) {  
158 - self.TimeTableDetailForSave.id = id;  
159 - service.getDetail(id).then(  
160 - function(result) {  
161 - var key;  
162 - for (key in result) {  
163 - self.TimeTableDetailForSave[key] = result[key];  
164 - } 250 + self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
165 251
166 - self.title2 =  
167 - self.xlname + "(" + self.ttname + ")" + "时刻表明细信息" +  
168 - "->路牌" + self.TimeTableDetailForSave.lp.lpName +  
169 - "->发车顺序号" + self.TimeTableDetailForSave.fcno +  
170 - "->班次详细信息"; 252 + if (id) {
  253 + TTInfoDetail.get({id: id}, function(value) {
  254 + self.TimeTableDetailForSave = value;
  255 + self.title2 =
  256 + self.xlname + "(" + self.ttname + ")" + "时刻表明细信息" +
  257 + "->路牌" + self.TimeTableDetailForSave.lp.lpName +
  258 + "->发车顺序号" + self.TimeTableDetailForSave.fcno +
  259 + "->班次详细信息";
  260 + });
171 261
172 - },  
173 - function(result) {  
174 - alert("出错啦!");  
175 } 262 }
176 - );  
177 - }  
178 -  
179 - // 提交方法  
180 - self.submit = function() {  
181 - console.log(self.TimeTableDetailForSave);  
182 - //if (self.busInfoForSave) {  
183 - // delete $stateParams.id;  
184 - //}  
185 - service.saveDetail(self.TimeTableDetailForSave).then(  
186 - function(result) {  
187 - // TODO:弹出框方式以后改  
188 - if (result.status == 'SUCCESS') {  
189 - //alert("保存成功!"); 263 +
  264 + // 提交方法
  265 + self.submit = function() {
  266 + console.log(self.TimeTableDetailForSave);
  267 + //if (self.busInfoForSave) {
  268 + // delete $stateParams.id;
  269 + //}
  270 +
  271 + if (self.TimeTableDetailForSave.tcc && !self.TimeTableDetailForSave.tcc.id)
  272 + delete self.TimeTableDetailForSave.tcc;
  273 + if (self.TimeTableDetailForSave.qdz && !self.TimeTableDetailForSave.qdz.id)
  274 + delete self.TimeTableDetailForSave.qdz;
  275 + if (self.TimeTableDetailForSave.zdz && !self.TimeTableDetailForSave.zdz.id)
  276 + delete self.TimeTableDetailForSave.zdz;
  277 +
  278 + self.TimeTableDetailForSave.$save(function(value) {
  279 + // 修正内部edit的值
  280 + var detailInfos = service.getEditInfo().detailInfos;
  281 + for (var i = 0; i < detailInfos.length; i ++) {
  282 + for (var j = 0; j < detailInfos[i].length; j++) {
  283 + if (detailInfos[i][j].ttdid == id) {
  284 + // 赋值(上下行,发车时间,班次类型)
  285 + detailInfos[i][j].fcsj = value.fcsj;
  286 + detailInfos[i][j].xldir = value.xlDir;
  287 + detailInfos[i][j].bc_type = value.bcType;
  288 + }
  289 + }
  290 + }
190 $state.go("ttInfoDetailManage_edit", { 291 $state.go("ttInfoDetailManage_edit", {
191 xlid: self.xlid, 292 xlid: self.xlid,
192 ttid: self.ttid, 293 ttid: self.ttid,
193 xlname: self.xlname, 294 xlname: self.xlname,
194 ttname: self.ttname 295 ttname: self.ttname
195 }); 296 });
196 - } else {  
197 - alert("保存异常!");  
198 - }  
199 - },  
200 - function(result) {  
201 - // TODO:弹出框方式以后改  
202 - alert("出错啦!");  
203 - }  
204 - );  
205 - }; 297 + });
206 298
207 -}]); 299 + };
208 300
209 -// 测试edit2功能  
210 -angular.module("ScheduleApp").controller(  
211 - 'tt_edit2',  
212 - [  
213 - function() {  
214 - this.colHeaders = [  
215 - '路牌',  
216 - '出场',  
217 - '和静路安亭老街',  
218 - '福泉路天山西路',  
219 - '和静路安亭老街',  
220 - '福泉路天山西路',  
221 - '和静路安亭老街',  
222 - '福泉路天山西路',  
223 - '和静路安亭老街',  
224 - '福泉路天山西路',  
225 - '和静路安亭老街',  
226 - '福泉路天山西路',  
227 - '和静路安亭老街',  
228 - '福泉路天山西路',  
229 - '和静路安亭老街',  
230 - '进场'  
231 - ];  
232 -  
233 -  
234 -  
235 -  
236 -  
237 -  
238 -  
239 - var items = [  
240 - ['1', '0615', '', '', '0630', '0755', '0935', '1055', '1305', '1425', '1640', '1805', '', '', '1915', '1925']  
241 - ];  
242 -  
243 - this.data = items;  
244 - //this.columns = [  
245 - // {  
246 - // data: 'id',  
247 - // title: 'ID',  
248 - // readOnly: true  
249 - // },  
250 - // {  
251 - // data: 'price',  
252 - // title: 'Price',  
253 - // readOnly: false  
254 - // }  
255 - //];  
256 } 301 }
  302 + ]
  303 +);
257 304
  305 +// edit-detail2.html 具体班次明细修改页面
  306 +angular.module('ScheduleApp').controller(
  307 + 'TimeTableDetailManageFormCtrl_old2',
  308 + [
  309 + 'TimeTableDetailManageService_old',
  310 + '$stateParams',
  311 + '$state',
  312 + function(service, $stateParams, $state) {
  313 + var self = this;
  314 + var TTInfoDetail = service.getQueryClass();
  315 +
  316 + // 欲保存的busInfo信息,绑定
  317 + self.TimeTableDetailForSave = new TTInfoDetail;
  318 + self.TimeTableDetailForSave.tcc = {};
  319 + self.TimeTableDetailForSave.qdz = {};
  320 + self.TimeTableDetailForSave.zdz = {};
  321 +
  322 + // 获取传过来的id,有的话就是修改,获取一遍数据
  323 + self.xlid = $stateParams.xlid; // 获取传过来的线路id
  324 + self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
  325 + self.xlname = $stateParams.xlname; // 获取传过来的线路名字
  326 + self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
  327 +
  328 + self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
  329 +
  330 + // 提交方法
  331 + self.submit = function() {
  332 + if (!self.TimeTableDetailForSave.tcc.id)
  333 + delete self.TimeTableDetailForSave.tcc;
  334 + if (!self.TimeTableDetailForSave.qdz.id)
  335 + delete self.TimeTableDetailForSave.qdz;
  336 + if (!self.TimeTableDetailForSave.zdz.id)
  337 + delete self.TimeTableDetailForSave.zdz;
  338 +
  339 + service.editInfos(self.TimeTableDetailForSave).then(function() {
  340 + alert("批量更新成功!");
  341 + $state.go("ttInfoDetailManage_edit", {
  342 + xlid: self.xlid,
  343 + ttid: self.ttid,
  344 + xlname: self.xlname,
  345 + ttname: self.ttname
  346 + });
  347 + }, function() {
  348 + alert("批量更新失败!");
  349 + $state.go("ttInfoDetailManage_edit", {
  350 + xlid: self.xlid,
  351 + ttid: self.ttid,
  352 + xlname: self.xlname,
  353 + ttname: self.ttname
  354 + });
  355 + });
  356 +
  357 + };
  358 +
  359 + }
258 ] 360 ]
259 -);  
260 \ No newline at end of file 361 \ No newline at end of file
  362 +);
  363 +
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/list.html
@@ -79,10 +79,10 @@ @@ -79,10 +79,10 @@
79 <span class="glyphicon glyphicon-remove" ng-if="info.isCancel == '1'"></span> 79 <span class="glyphicon glyphicon-remove" ng-if="info.isCancel == '1'"></span>
80 </td> 80 </td>
81 <td> 81 <td>
82 - <a ui-sref="ttInfoDetailManage_edit({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})" 82 + <a ui-sref="ttInfoDetailManage_edit({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true})"
83 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a> 83 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a>
84 - <a ui-sref="ttInfoDetailManage_edit2({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"  
85 - class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑2 </a> 84 + <!--<a ui-sref="ttInfoDetailManage_edit2({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"-->
  85 + <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑2 </a>-->
86 <a ng-click="ctrl.toTtInfoDetailAuto()" 86 <a ng-click="ctrl.toTtInfoDetailAuto()"
87 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a> 87 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a>
88 <a ui-sref="ttInfoDetailManage_form({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})" 88 <a ui-sref="ttInfoDetailManage_form({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/service.js
@@ -43,75 +43,83 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -43,75 +43,83 @@ angular.module(&#39;ScheduleApp&#39;).factory(
43 ); 43 );
44 44
45 // 时刻表明细管理service 45 // 时刻表明细管理service
46 -angular.module('ScheduleApp').factory('TimeTableDetailManageService_g', ['$resource', function($resource) {  
47 - return {  
48 - rest: $resource(  
49 - '/tidc/:id',  
50 - {order: 'createDate', direction: 'DESC', id: '@id_route'},  
51 - {  
52 - get: {  
53 - method: 'GET'  
54 - },  
55 - save: {  
56 - method: 'POST'  
57 - }  
58 - }  
59 - ),  
60 - import: $resource(  
61 - '/tidc/importfile',  
62 - {},  
63 - {  
64 - do: {  
65 - method: 'POST',  
66 - headers: {  
67 - 'Content-Type': 'application/x-www-form-urlencoded'  
68 - },  
69 - transformRequest: function(obj) {  
70 - var str = [];  
71 - for (var p in obj) {  
72 - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 46 +angular.module('ScheduleApp').factory(
  47 + 'TimeTableDetailManageService_g',
  48 + [
  49 + '$resource',
  50 + function($resource) {
  51 + return {
  52 + rest: $resource(
  53 + '/tidc/:id',
  54 + {order: 'createDate', direction: 'DESC', id: '@id'},
  55 + {
  56 + get: {
  57 + method: 'GET'
  58 + },
  59 + save: {
  60 + method: 'POST'
  61 + }
  62 + }
  63 + ),
  64 + import: $resource(
  65 + '/tidc/importfile',
  66 + {},
  67 + {
  68 + do: {
  69 + method: 'POST',
  70 + headers: {
  71 + 'Content-Type': 'application/x-www-form-urlencoded'
  72 + },
  73 + transformRequest: function(obj) {
  74 + var str = [];
  75 + for (var p in obj) {
  76 + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  77 + }
  78 + return str.join("&");
  79 + }
  80 + }
  81 + }
  82 + ),
  83 + edit: $resource(
  84 + '/tidc/edit/:xlid/:ttid',
  85 + {},
  86 + {
  87 + list: {
  88 + method: 'GET'
73 } 89 }
74 - return str.join("&");  
75 } 90 }
76 - }  
77 - }  
78 - ),  
79 - edit: $resource(  
80 - '/tidc/edit/:xlid/:ttid',  
81 - {},  
82 - {  
83 - list: {  
84 - method: 'GET'  
85 - }  
86 - }  
87 - ),  
88 - bcdetails: $resource(  
89 - '/tidc/bcdetail',  
90 - {},  
91 - {  
92 - list: {  
93 - method: 'GET',  
94 - isArray: true  
95 - }  
96 - }  
97 - ),  
98 - dataTools: $resource(  
99 - '/tidc/:type',  
100 - {},  
101 - {  
102 - dataExport: {  
103 - method: 'GET',  
104 - responseType: "arraybuffer",  
105 - params: {  
106 - type: "dataExportExt"  
107 - },  
108 - transformResponse: function(data, headers){  
109 - return {data : data}; 91 + ),
  92 + bcdetails: $resource(
  93 + '/tidc/bcdetail',
  94 + {},
  95 + {
  96 + list: {
  97 + method: 'GET',
  98 + isArray: true
  99 + }
  100 + }
  101 + ),
  102 + dataTools: $resource(
  103 + '/tidc/:type',
  104 + {},
  105 + {
  106 + dataExport: {
  107 + method: 'GET',
  108 + responseType: "arraybuffer",
  109 + params: {
  110 + type: "dataExportExt"
  111 + },
  112 + transformResponse: function(data, headers){
  113 + return {data : data};
  114 + }
  115 + }
110 } 116 }
111 - }  
112 - }  
113 - ) 117 + )
114 118
115 - // TODO:导入数据  
116 - };  
117 -}]);  
118 \ No newline at end of file 119 \ No newline at end of file
  120 + // TODO:导入数据
  121 + };
  122 +
  123 + }
  124 +
  125 + ]
  126 +);
119 \ No newline at end of file 127 \ No newline at end of file
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/progress.gradient.min.css 0 → 100644
  1 +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  2 +.uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f7f7f7;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07),inset 0 2px 2px rgba(0,0,0,.07);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#009dd8;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);box-shadow:inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-progress-warning .uk-progress-bar{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-progress-danger .uk-progress-bar{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px}
0 \ No newline at end of file 3 \ No newline at end of file
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -965,22 +965,32 @@ dd.fcsjActualCell div.last-sch-sunken{ @@ -965,22 +965,32 @@ dd.fcsjActualCell div.last-sch-sunken{
965 /*border-top: 1px solid #eeeeee;*/ 965 /*border-top: 1px solid #eeeeee;*/
966 } 966 }
967 967
  968 +dd.fcsjActualCell.tl-yzx div.last-sch-sunken {
  969 + background: #c1ddf0;
  970 + border-top: 1px solid #c1d3df;
  971 +}
  972 +
  973 +dd.fcsjActualCell.tl-yzx div.last-sch-sunken span._badge {
  974 + background: rgb(255, 255, 255);
  975 + color: black;
  976 +}
  977 +
968 dd.fcsjActualCell div.last-sch-sunken span._badge{ 978 dd.fcsjActualCell div.last-sch-sunken span._badge{
969 font-size: 12px; 979 font-size: 12px;
970 border-radius: 0 7px 7px 0; 980 border-radius: 0 7px 7px 0;
971 padding-left: 0; 981 padding-left: 0;
972 - width: 29px; 982 + width: 79px;
973 display: inline-block; 983 display: inline-block;
974 - height: 18px;  
975 - line-height: 18px; 984 + height: 22px;
  985 + line-height: 22px;
976 box-shadow: 2px 0px 2px 0 rgba(0,0,0,0.16), 2px 0px 4px 0 rgba(0,0,0,0.12); 986 box-shadow: 2px 0px 2px 0 rgba(0,0,0,0.16), 2px 0px 4px 0 rgba(0,0,0,0.12);
977 vertical-align: top; 987 vertical-align: top;
978 margin-right: 3px; 988 margin-right: 3px;
979 - margin-top: 3px; 989 + margin-top: 1px;
980 margin-left: -7px; 990 margin-left: -7px;
981 - text-indent: 2px; 991 + /*text-indent: 2px;*/
982 border-left: 0; 992 border-left: 0;
983 - transform: scale(.9); 993 + /* transform: scale(.9); */
984 color: grey; 994 color: grey;
985 } 995 }
986 996
src/main/resources/static/real_control_v2/fragments/geo/calc_station_space.html
@@ -109,7 +109,6 @@ @@ -109,7 +109,6 @@
109 if(upSuccess && downSuccess){ 109 if(upSuccess && downSuccess){
110 window.localStorage.setItem('control_route_distance_' + sch.xlBm, JSON.stringify(locData)); 110 window.localStorage.setItem('control_route_distance_' + sch.xlBm, JSON.stringify(locData));
111 //刷新父页面 111 //刷新父页面
112 - console.log('$(drawer).parents', $(drawer).parents('.uk-modal'));  
113 $(drawer).parents('.uk-modal').trigger('refresh_station_space'); 112 $(drawer).parents('.uk-modal').trigger('refresh_station_space');
114 } 113 }
115 114
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_inpark.html
@@ -388,8 +388,9 @@ @@ -388,8 +388,9 @@
388 388
389 //营运开始时间 389 //营运开始时间
390 $('input[name=startDate]', serviceForm).val(sch.dfsj); 390 $('input[name=startDate]', serviceForm).val(sch.dfsj);
  391 +
391 //营运班次类型 392 //营运班次类型
392 - $('input[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常'); 393 + $('select[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常');
393 } 394 }
394 395
395 //点击 路径 396 //点击 路径
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
23 $('.delete_route_spacing_link', drawer).on('click', function () { 23 $('.delete_route_spacing_link', drawer).on('click', function () {
24 alt_confirm('确定要删除【'+sch.xlName+'】基于空间坐标计算的站间距数据?', function () { 24 alt_confirm('确定要删除【'+sch.xlName+'】基于空间坐标计算的站间距数据?', function () {
25 window.localStorage.removeItem('control_route_distance_' + sch.xlBm); 25 window.localStorage.removeItem('control_route_distance_' + sch.xlBm);
  26 + $(drawer).parents('.uk-modal').trigger('refresh_station_space');
26 toGeoCalcPage(); 27 toGeoCalcPage();
27 }, '确定删除'); 28 }, '确定删除');
28 }); 29 });
@@ -248,4 +249,5 @@ @@ -248,4 +249,5 @@
248 }); 249 });
249 })(); 250 })();
250 </script> 251 </script>
  252 +
251 </div> 253 </div>
252 \ No newline at end of file 254 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -167,7 +167,7 @@ @@ -167,7 +167,7 @@
167 167
168 <script id="last-sch-sunken-temp" type="text/html"> 168 <script id="last-sch-sunken-temp" type="text/html">
169 <div class="last-sch-sunken"> 169 <div class="last-sch-sunken">
170 - <span class="_badge">终点</span>{{zdsj}}/{{zdsjActual}} 170 + <span class="_badge">{{zdsj}}/{{zdsjActual}}</span>
171 </div> 171 </div>
172 </script> 172 </script>
173 </div> 173 </div>
src/main/resources/static/real_control_v2/js/data/data_gps.js
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 var gb_data_gps = (function() { 3 var gb_data_gps = (function() {
4 4
5 //fixed time refresh delay 5 //fixed time refresh delay
6 - var delay = 1000 * 7; 6 + var delay = 1000 * 6;
7 //deviceId ——> gps 7 //deviceId ——> gps
8 var realData = {}; 8 var realData = {};
9 //refresh after callback 9 //refresh after callback
@@ -30,7 +30,7 @@ var gb_data_gps = (function() { @@ -30,7 +30,7 @@ var gb_data_gps = (function() {
30 }, 30 },
31 error: function (xr, t) { 31 error: function (xr, t) {
32 notify_err('刷新GPS失败,稍后重试' + t); 32 notify_err('刷新GPS失败,稍后重试' + t);
33 - cb(); 33 + //cb();
34 } 34 }
35 }); 35 });
36 }; 36 };
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
@@ -77,6 +77,11 @@ @@ -77,6 +77,11 @@
77 "id": 2.2, 77 "id": 2.2,
78 "text": "设备上报记录", 78 "text": "设备上报记录",
79 "event": "device_report" 79 "event": "device_report"
  80 + },
  81 + {
  82 + "id": 2.3,
  83 + "text": "轨迹回放",
  84 + "event": "gps_play_back"
80 } 85 }
81 ] 86 ]
82 }, 87 },
src/main/resources/static/real_control_v2/js/north/toolbar.js
@@ -68,6 +68,9 @@ var gb_northToolbar = (function() { @@ -68,6 +68,9 @@ var gb_northToolbar = (function() {
68 }, 68 },
69 sch_exec_rate: function () { 69 sch_exec_rate: function () {
70 open_modal('/real_control_v2/fragments/north/nav/charts/sch_exec_rate.html', {}, modal_opts); 70 open_modal('/real_control_v2/fragments/north/nav/charts/sch_exec_rate.html', {}, modal_opts);
  71 + },
  72 + gps_play_back: function () {
  73 + gb_map_play_back.initParams();
71 } 74 }
72 } 75 }
73 })(); 76 })();
src/main/resources/static/real_control_v2/js/utils/svg_chart_map.js
@@ -3,22 +3,25 @@ var gb_svg_map_util = (function () { @@ -3,22 +3,25 @@ var gb_svg_map_util = (function () {
3 var drawLine = function (map, gps) { 3 var drawLine = function (map, gps) {
4 //从storage里获取路段路由数据 4 //从storage里获取路段路由数据
5 var routes = JSON.parse(storage.getItem(gps.lineId + '_route')), 5 var routes = JSON.parse(storage.getItem(gps.lineId + '_route')),
6 - updown = gps.upDown == 0 ? 'up' : 'down',  
7 - pots = [],  
8 - tempArr; 6 + updown = gps.upDown == 0 ? 'up_bd' : 'down_bd',
  7 + pos = [],
  8 + temps;
9 9
10 - $.each(routes[updown].split(','), function () {  
11 - tempArr = this.split(' ');  
12 - pots.push(new BMap.Point(tempArr[0], tempArr[1]));  
13 - }); 10 + $.each(routes[updown], function (i, item) {
14 11
15 - var polyline = new BMap.Polyline(pots, {  
16 - strokeWeight: 6,  
17 - strokeOpacity: 0.5,  
18 - strokeColor: gps.upDown == 0 ? 'blue' : 'red'  
19 - }); 12 + pos = [];
  13 + $.each(item.split(','), function () {
  14 + temps = this.split(' ');
  15 + pos.push(new BMap.Point(temps[0], temps[1]));
  16 + });
  17 + var polyline = new BMap.Polyline(pos, {
  18 + strokeWeight: 6,
  19 + strokeOpacity: 0.5,
  20 + strokeColor: gps.upDown == 0 ? 'blue' : 'red'
  21 + });
  22 + map.addOverlay(polyline);
20 23
21 - map.addOverlay(polyline); 24 + });
22 25
23 $.each(gb_data_basic.stationRoutes(gps.lineId), function (i) { 26 $.each(gb_data_basic.stationRoutes(gps.lineId), function (i) {
24 if (this.directions == gps.upDown) { 27 if (this.directions == gps.upDown) {
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
@@ -94,18 +94,9 @@ input[type=checkbox].disabled{ @@ -94,18 +94,9 @@ input[type=checkbox].disabled{
94 94
95 /**/ 95 /**/
96 .real_bottom_panel{ 96 .real_bottom_panel{
97 -/* position: absolute !important;  
98 - height: 180px;  
99 - width: 100%;  
100 - width: calc(100% - 342px);  
101 - bottom: 2px !important;  
102 - left: 0px !important;  
103 - background: #fff;  
104 - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);  
105 - border: 1px solid #bfbcbc;*/  
106 97
107 position: absolute !important; 98 position: absolute !important;
108 - height: 124px; 99 + height: 256px;
109 bottom: 2px !important; 100 bottom: 2px !important;
110 background: #fff; 101 background: #fff;
111 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 102 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
@@ -247,7 +238,7 @@ input[type=checkbox].disabled{ @@ -247,7 +238,7 @@ input[type=checkbox].disabled{
247 } 238 }
248 239
249 .gps_info_win p{ 240 .gps_info_win p{
250 - margin: 9px 0; 241 + margin: 6px 0;
251 font-size: 13px; 242 font-size: 13px;
252 } 243 }
253 244
@@ -452,4 +443,132 @@ input[type=checkbox].disabled{ @@ -452,4 +443,132 @@ input[type=checkbox].disabled{
452 443
453 #spatial-tree-content .jstree-default .jstree-anchor{ 444 #spatial-tree-content .jstree-default .jstree-anchor{
454 font-size: 13px; 445 font-size: 13px;
455 -}  
456 \ No newline at end of file 446 \ No newline at end of file
  447 +}
  448 +
  449 +#map-playback-modal .uk-modal-dialog{
  450 + width: 600px;
  451 +}
  452 +
  453 +#map-playback-modal .play-back-run-modal{
  454 + transition: all .5s ease;
  455 + width: 1400px;
  456 + max-width: 90%;
  457 +}
  458 +
  459 +.play-back-run-modal>h1{
  460 + transition: all .7s ease;
  461 + font-size: 22px;
  462 + line-height: 22px;
  463 +}
  464 +
  465 +#playback_run_body{
  466 + height: 680px;
  467 + max-height: 780px;
  468 +}
  469 +
  470 +#playback_run_body .pb_footer_tools{
  471 + animation-delay: .1s;
  472 + position: absolute;
  473 + width: 100%;
  474 + height: 68px;
  475 + background: #ffffff;
  476 + bottom: 0;
  477 + margin-left: -20px;
  478 + box-shadow: 1px 0px 5px 0 rgba(0,0,0,0.16), -1px 0px 10px 0 rgba(0,0,0,0.12);
  479 +}
  480 +
  481 +#playback_run_body .pb_footer_tools .uk-progress{
  482 + width: 75%;
  483 + margin: 25px 15px 0 1%;
  484 + cursor: pointer;
  485 +}
  486 +
  487 +#playback_run_body .pb_footer_tools>div{
  488 + display: inline-block;
  489 +}
  490 +
  491 +.pb_tools_icon{
  492 + vertical-align: top;
  493 + font-size: 32px;
  494 + margin: 15px 5px 0 5px;
  495 +}
  496 +
  497 +.pb_tools_icon i{
  498 + cursor: pointer;
  499 +}
  500 +
  501 +.pb_log_panel{
  502 + animation-delay: .1s;
  503 + position: absolute;
  504 + width: 300px;
  505 + height: 600px;
  506 + background: white;
  507 + right: 0;
  508 + bottom: 80px;
  509 + box-shadow: 1px 0px 5px 0 rgba(0,0,0,0.16), -1px 0px 10px 0 rgba(0,0,0,0.12);
  510 +}
  511 +
  512 +#playback_run_body .map_wrap{
  513 + height: 100%;
  514 + width: calc(100% + 40px);
  515 + margin-left: -20px;
  516 +}
  517 +
  518 +
  519 +.pb_log_panel .ct_table dl dt:nth-of-type(1), .pb_log_panel .ct_table dl dd:nth-of-type(1) {
  520 + width: 24%;
  521 +}
  522 +.pb_log_panel .ct_table dl dt:nth-of-type(2), .pb_log_panel .ct_table dl dd:nth-of-type(2) {
  523 + width: 14%;
  524 +}
  525 +.pb_log_panel .ct_table dl dt:nth-of-type(3), .pb_log_panel .ct_table dl dd:nth-of-type(3) {
  526 + width: 44%;
  527 +}
  528 +.pb_log_panel .ct_table dl dt:nth-of-type(4), .pb_log_panel .ct_table dl dd:nth-of-type(4) {
  529 + width: 16%;
  530 +}
  531 +
  532 +.pb_log_panel .ct_table .ct_table_body dl:last-child dd{
  533 + border-bottom: 1px solid #dedede;
  534 +}
  535 +
  536 +.ui-slider-tip{
  537 + position: absolute;
  538 + visibility: hidden;
  539 + bottom: 50px;
  540 + display: block;
  541 + width: 54px;
  542 + height: 20px;
  543 + line-height: 20px;
  544 + background: white;
  545 + border-radius: 3px;
  546 + box-shadow: 0 0 3px rgba(0, 0, 0, 0.72);
  547 + text-align: center;
  548 + font-size: 12px;
  549 + /*opacity: 0;*/
  550 + /*transition: all .3s ease;*/
  551 + color: #333;
  552 +}
  553 +
  554 +.ui-slider-tip:after{
  555 + content: " ";
  556 + width: 0;
  557 + height: 0;
  558 + border: 5px solid rgba(255, 255, 255, 0);
  559 + border-top-color: #d3d3d3;
  560 + position: absolute;
  561 + bottom: -10px;
  562 + left: 50%;
  563 + margin-left: -5px;
  564 +}
  565 +
  566 +/*
  567 +.pb_log_item>div{
  568 + display: inline-block;
  569 +}*/
  570 +
  571 +/*
  572 +.pb_tools_icon i:hover{
  573 + color: #787676;
  574 + box-shadow: 1px 0px 5px 0 rgba(0,0,0,0.16), -1px 0px 10px 0 rgba(0,0,0,0.12);
  575 +}*/
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_config.html
@@ -23,10 +23,17 @@ @@ -23,10 +23,17 @@
23 <span class="uk-form-label">车辆图标</span> 23 <span class="uk-form-label">车辆图标</span>
24 <div class="uk-form-controls"> 24 <div class="uk-form-controls">
25 <label><input name="carIcon_angle" type="checkbox" {{if carIcon.angle}}checked{{/if}}> 标示角度</label> 25 <label><input name="carIcon_angle" type="checkbox" {{if carIcon.angle}}checked{{/if}}> 标示角度</label>
26 - <label><input class="disabled" disabled type="checkbox" {{if carIcon.converge}}checked{{/if}}> 聚合</label> 26 + <!--<label><input class="disabled" disabled type="checkbox" {{if carIcon.converge}}checked{{/if}}> 聚合</label>-->
  27 + </div>
  28 + </div>
  29 + <div class="uk-form-row">
  30 + <span class="uk-form-label">异常警报</span>
  31 + <div class="uk-form-controls">
  32 + <label><input type="checkbox" {{if abnormalPrint.speeding}}checked{{/if}}> 超速</label>
  33 + <label><input type="checkbox" {{if abnormalPrint.outBounds}}checked{{/if}}> 越界</label>
  34 + <label><input type="checkbox" {{if abnormalPrint.largeMargin}}checked{{/if}}> 大间隔</label>
27 </div> 35 </div>
28 </div> 36 </div>
29 -  
30 <div class="uk-form-row"> 37 <div class="uk-form-row">
31 <span class="uk-form-label">车辆颜色</span> 38 <span class="uk-form-label">车辆颜色</span>
32 <div class="uk-form-controls"> 39 <div class="uk-form-controls">
@@ -71,15 +78,6 @@ @@ -71,15 +78,6 @@
71 </div> 78 </div>
72 </div> 79 </div>
73 </div> 80 </div>
74 -  
75 - <div class="uk-form-row">  
76 - <span class="uk-form-label">异常警报输出</span>  
77 - <div class="uk-form-controls">  
78 - <label><input class="disabled" disabled type="checkbox" {{if abnormalPrint.speeding}}checked{{/if}}> 超速</label>  
79 - <label><input class="disabled" disabled type="checkbox" {{if abnormalPrint.outBounds}}checked{{/if}}> 越界</label>  
80 - <label><input class="disabled" disabled type="checkbox" {{if abnormalPrint.largeMargin}}checked{{/if}}> 大间隔</label>  
81 - </div>  
82 - </div>  
83 </form> 81 </form>
84 </script> 82 </script>
85 </div> 83 </div>
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_infowindow.html
1 <div> 1 <div>
2 <script id="map-win-gps-detail-temp" type="text/html"> 2 <script id="map-win-gps-detail-temp" type="text/html">
3 - <div class="gps_info_win"> 3 + <div class="gps_info_win" style="width: 200px;">
4 <h4>{{nbbm}}</h4> 4 <h4>{{nbbm}}</h4>
5 <h5> 5 <h5>
6 {{lineName}} 6 {{lineName}}
7 - ({{if stationName!=null}}  
8 - {{stationName}} 7 + </h5>
  8 + <h5>
  9 + {{if stationName!=null}}
  10 + {{stationName}} 站
9 {{else}} 11 {{else}}
10 未知站点 12 未知站点
11 - {{/if}}) 13 + {{/if}}
12 </h5> 14 </h5>
  15 + <p>设备状态:正常</p>
  16 + <p>设备号:{{deviceId}}</p>
13 <p>速度:{{speed}}</p> 17 <p>速度:{{speed}}</p>
14 <p>角度:{{direction}}</p> 18 <p>角度:{{direction}}</p>
15 <p>经度:{{lon}}</p> 19 <p>经度:{{lon}}</p>
@@ -20,7 +24,7 @@ @@ -20,7 +24,7 @@
20 {{if expectStopTime!=null}} 24 {{if expectStopTime!=null}}
21 <a href="javascript:;" style="color: #07D;margin-right: 7px;">预计 {{expectStopTime}} 分钟到达终点</a> 25 <a href="javascript:;" style="color: #07D;margin-right: 7px;">预计 {{expectStopTime}} 分钟到达终点</a>
22 {{/if}} 26 {{/if}}
23 - <a href="javascript:;" style="float: right;">轨迹回放</a> 27 + <a href="javascript:;" style="float: right;" onclick="javascript:gb_map_play_back.initParams('{{deviceId}}', '{{nbbm}}');">轨迹回放</a>
24 </div> 28 </div>
25 </script> 29 </script>
26 30
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback/before_form.html 0 → 100644
  1 +<div class="uk-alert uk-alert-success">开始~结束时间最大间隔24小时</div>
  2 +<div style="width: 68%;margin: auto;" id="playback_before_form">
  3 + <form class="uk-form uk-form-horizontal" style="margin-bottom: 0 !important;">
  4 + <div class="uk-grid">
  5 + <div class="uk-width-1-1">
  6 + <div class="uk-form-row">
  7 + <label class="uk-form-label">车辆编码</label>
  8 + <div class="uk-form-controls">
  9 + <div class="uk-autocomplete uk-form autocomplete-nbbm">
  10 + <input name="nbbm" required/>
  11 + </div>
  12 + </div>
  13 + </div>
  14 + </div>
  15 + </div>
  16 + <div class="uk-grid">
  17 + <div class="uk-width-2-3">
  18 + <div class="uk-form-row">
  19 + <label class="uk-form-label">开始时间</label>
  20 + <div class="uk-form-controls">
  21 + <input name="sDate" type="date" required/>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + <div class="uk-width-1-3" style="padding-left: 15px;">
  26 + <div class="uk-form-row">
  27 + <div class="uk-form-controls" style="margin-left: 0;">
  28 + <input name="sTime" type="time" required/>
  29 + </div>
  30 + </div>
  31 + </div>
  32 + </div>
  33 + <div class="uk-grid">
  34 + <div class="uk-width-2-3">
  35 + <div class="uk-form-row">
  36 + <label class="uk-form-label">结束时间</label>
  37 + <div class="uk-form-controls">
  38 + <input name="eDate" type="date" required/>
  39 + </div>
  40 + </div>
  41 + </div>
  42 + <div class="uk-width-1-3" style="padding-left: 15px;">
  43 + <div class="uk-form-row">
  44 + <div class="uk-form-controls" style="margin-left: 0;">
  45 + <input name="eTime" type="time" required/>
  46 + </div>
  47 + </div>
  48 + </div>
  49 + </div>
  50 +
  51 + <div style="text-align: center;margin-top: 25px;">
  52 + <button class="uk-button uk-button-large uk-button-primary" type="submit"><i
  53 + class="uk-icon-play-circle"> </i> 开始回放
  54 + </button>
  55 + </div>
  56 + <i class="uk-icon-spinner uk-icon-spin"
  57 + style="font-size: 18px;color: rgb(213, 31, 31);position: absolute;bottom: 25px;left: calc(50% + 70px);display: none;"></i>
  58 + </form>
  59 +
  60 + <script>
  61 + (function () {
  62 + $('#playback_before_form').on('init_form', function (e, data) {
  63 + //车辆 autocomplete
  64 + $.get('/basic/cars', function (rs) {
  65 + gb_common.carAutocomplete($('#playback_before_form .autocomplete-nbbm'), rs);
  66 + });
  67 +
  68 + if (data.nbbm)
  69 + $('[name=nbbm]', this).val(data.nbbm);
  70 + //默认时间
  71 + var m = moment()
  72 + , rq = 'YYYY-MM-DD', sj = 'HH:mm';
  73 + $('[name=eDate]', this).val(m.format(rq));
  74 + $('[name=eTime]', this).val(m.format('HH:mm'));
  75 + $('[name=sDate]', this).val(m.subtract(2, 'hour').format(rq));
  76 + $('[name=sTime]', this).val(m.format(sj));
  77 +
  78 + //test
  79 + $('[name=nbbm]', this).val('W9H-003');
  80 + $('[name=eDate]', this).val('2016-12-10');
  81 + $('[name=eTime]', this).val('09:00');
  82 + $('[name=sDate]', this).val('2016-12-10');
  83 + $('[name=sTime]', this).val('07:00');
  84 + });
  85 +
  86 + var ONE_DAY = 1000 * 60 * 60 * 24;
  87 + var f = $('form', '#playback_before_form').formValidation({
  88 + framework: 'uikit',
  89 + locale: 'zh_CN'
  90 + });
  91 + f.on('success.form.fv', function (e) {
  92 + e.preventDefault();
  93 + disabledBtn();
  94 + var data = $(this).serializeJSON();
  95 +
  96 + //校验时间间隔
  97 + var fs = 'YYYY-MM-DDHH:mm';
  98 + var st = moment(data.sDate + data.sTime, fs).format('X');
  99 + var et = moment(data.eDate + data.eTime, fs).format('X');
  100 +
  101 + if (et < st)
  102 + return abortSubmit('结束时间小于开始时间???');
  103 + else if ((et - st) > ONE_DAY)
  104 + return abortSubmit('时间间隔不能超过24小时!');
  105 + else if (et == st)
  106 + return abortSubmit('一点时间间隔都不给???');
  107 +
  108 + $('#playback_before_form i.uk-icon-spinner').show();
  109 + $.ajax({
  110 + url: '/gps/gpsHistory/multiple',
  111 + traditional: true,
  112 + data: {nbbmArray: [data.nbbm], st: st, et: et},
  113 + success: function (rs) {
  114 + if (!rs || rs.length == 0)
  115 + return abortSubmit('失败,服务器没有返回轨迹数据!');
  116 +
  117 + //排序
  118 + rs.sort(function (a, b) {
  119 + return a.timestamp - b.timestamp;
  120 + });
  121 + //格式化时间
  122 + $.each(rs, function () {
  123 + var mom = moment(this.timestamp);
  124 + this.timeStr = mom.format('HH:mm.ss');
  125 + this.timeStr2 = mom.format('YYYY-MM-DD HH:mm.ss');
  126 + });
  127 +
  128 + //获取路段信息
  129 + if (!rs[0] || !rs[0].lineId)
  130 + return notify_err('首个点位无效....');
  131 +
  132 + jsQueryRoads(rs[0].lineId, function (roads) {
  133 + //gps关联到路段
  134 + matchRoad(rs, roads);
  135 +
  136 + var f = $('#playback_before_form');
  137 + var fileName = $('[name=nbbm]', f).val() + '轨迹数据'
  138 + + $('[name=sDate]', f).val() + $('[name=sTime]', f).val() + '至'
  139 + + $('[name=eDate]', f).val() + $('[name=eTime]', f).val() + '.xls';
  140 +
  141 + $('#playback_before_form').parents('.uk-modal').trigger('show_play_body', {
  142 + gpsList: rs,
  143 + roads: roads,
  144 + lineCode: rs[0].lineId,
  145 + fileName: fileName.replace(new RegExp(/-/g),'').replace(new RegExp(/:/g),'')
  146 + });
  147 + });
  148 + }
  149 + });
  150 + });
  151 +
  152 + function abortSubmit(t) {
  153 + $('#playback_before_form i.uk-icon-spinner').hide();
  154 + notify_err(t);
  155 + $('form button[type=submit]', '#playback_before_form').removeClass('disabled').removeAttr('disabled');
  156 + }
  157 +
  158 + function disabledBtn() {
  159 + $('form button[type=submit]', '#playback_before_form').addClass('disabled').attr('disabled', 'disabled');
  160 + }
  161 +
  162 + function jsQueryRoads(lineCode, cb) {
  163 + gb_common.$get('/gps/findRoadSpeed', {lineCode: lineCode}, function (rs) {
  164 + //处理路段坐标集合
  165 + var roads = rs.roads;
  166 + var cds, coordArray, array;
  167 +
  168 + for (var i = 0, road; road = roads[i++];) {
  169 + cds = road['GROAD_VECTOR'];
  170 + cds = cds.substring(11, cds.length - 1);
  171 + coordArray = cds.split(',');
  172 +
  173 + array = [];
  174 +
  175 + for (var j = 0, cd; cd = coordArray[j++];) {
  176 + var cdArray = cd.split(' ');
  177 +
  178 + //wgs84 to baidu
  179 + var bdCd = TransGPS.wgsToBD(parseFloat(cdArray[1]), parseFloat(cdArray[0]));
  180 + array.push({
  181 + longitude: bdCd.lng,
  182 + latitude: bdCd.lat
  183 + });
  184 + }
  185 + road.coords = array;
  186 + }
  187 + cb && cb(roads);
  188 + });
  189 + }
  190 +
  191 +
  192 + function matchRoad(gpsArray, roads) {
  193 + var rs;
  194 + $.each(gpsArray, function () {
  195 + rs = gpsMatchRoad(this, roads);
  196 + this.road = rs.road;
  197 + this.minDistance = rs.min;
  198 + });
  199 + }
  200 +
  201 + function gpsMatchRoad(gps, roads) {
  202 + var point = {latitude: gps.bd_lat, longitude: gps.bd_lon};
  203 +
  204 + var min, road;
  205 + $.each(roads, function () {
  206 +
  207 + var len = this.coords.length;
  208 + for (var i = 0; i < len - 1; i++) {
  209 + //点到线的距离
  210 + var distance = geolib.getDistanceFromLine(point, this.coords[i], this.coords[i + 1]);
  211 + if (min > distance || min == null) {
  212 + min = distance;
  213 + road = this;
  214 + }
  215 + }
  216 + });
  217 +
  218 + return {road: road, min: min};
  219 + }
  220 + })();
  221 + </script>
  222 +</div>
0 \ No newline at end of file 223 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback/main.html 0 → 100644
  1 +<div class="uk-modal ct-form-modal" id="map-playback-modal">
  2 + <div class="uk-modal-dialog" >
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <h1>轨迹回放</h1>
  5 + <div class="pb_modal_body"></div>
  6 + </div>
  7 + <script>
  8 + (function () {
  9 + var modal = '#map-playback-modal';
  10 +
  11 + $(modal).on('show_form', function (e, data) {
  12 + $('.pb_modal_body', modal).load('/real_control_v2/mapmonitor/fragments/playback/before_form.html', function () {
  13 + $('#playback_before_form', modal).trigger('init_form', data);
  14 + });
  15 + });
  16 +
  17 + //show播放界面
  18 + $(modal).on('show_play_body', function (e, data) {
  19 + $('.pb_modal_body', modal).empty();
  20 + $('.uk-modal-dialog', modal).addClass('play-back-run-modal').one('transitionend', function () {
  21 + //最小宽度
  22 + $(this).css('min-width', '1280px');
  23 + });
  24 + $('.pb_modal_body', modal).load('/real_control_v2/mapmonitor/fragments/playback/run.html', function () {
  25 + $('#playback_run_body', modal).trigger('init', data);
  26 + });
  27 + });
  28 + })();
  29 + </script>
  30 +</div>
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback/run.html 0 → 100644
  1 +<div id="playback_run_body">
  2 + <div class="map_wrap"></div>
  3 + <!-- 日志输出 -->
  4 + <div class="pb_log_panel uk-animation-slide-right" style="overflow: auto;">
  5 + <div class="ct_table" style="height: calc(100% - 30px);">
  6 + <div class="ct_table_head">
  7 + <dl>
  8 + <dt>时间</dt>
  9 + <dt>速度</dt>
  10 + <dt>路段</dt>
  11 + <dt>状态</dt>
  12 + </dl>
  13 + </div>
  14 + <div class="ct_table_body">
  15 + </div>
  16 + </div>
  17 + </div>
  18 + <div class="pb_footer_tools uk-animation-slide-bottom" onselectstart="return false;" style="-moz-user-select:none;">
  19 + <span class="ui-slider-tip">08:30.50</span>
  20 + <div class="uk-progress uk-progress-small uk-progress-success uk-progress-striped">
  21 + <div class="uk-progress-bar" style="width: 0;"></div>
  22 + </div>
  23 +
  24 + <div class="pb_tools_icon">
  25 + <div class="uk-button-group">
  26 + <a class="uk-button" data-uk-tooltip title="快退" data-type="rewind"><i class="uk-icon-fast-backward"></i></a>
  27 + <a class="uk-button" data-uk-tooltip title="停止" data-type="stop"><i class="uk-icon-stop"></i></a>
  28 + <a class="uk-button play-btn" data-type="play"><i class="uk-icon-play"></i></a>
  29 + <a class="uk-button" data-uk-tooltip title="快进" data-type="fast_forward"><i class="uk-icon-fast-forward"></i></a>
  30 + </div>
  31 + </div>
  32 +
  33 + <div class="pb_tools_icon">
  34 + <div class="uk-button-dropdown" data-uk-dropdown="{mode:'hover', pos:'top-left'}">
  35 + <button class="uk-button"><i class="uk-icon-cog"> </i> 工具 <i class="uk-icon-caret-down"></i></button>
  36 + <div class="uk-dropdown uk-dropdown-bottom uk-dropdown-small" style="top: 30px; left: 0px;">
  37 + <ul class="uk-nav uk-nav-dropdown pb_dropdown_tool">
  38 + <!--<li><a>显示站点</a></li>
  39 + <li><a>显示电子围栏</a></li>
  40 + <li class="uk-nav-divider"></li>
  41 + <li><a>关闭日志输出</a></li>
  42 + <li class="uk-nav-divider"></li>-->
  43 + <li><a data-name="exportExcel" href="javascript:;" >导出轨迹</a></li>
  44 + </ul>
  45 + </div>
  46 + </div>
  47 + </div>
  48 + </div>
  49 +
  50 + <script>
  51 + (function () {
  52 +
  53 + var logTemp = template.compile('{{each list as gps i}}<dl data-code="{{gps.road.ROAD_CODE}}">' +
  54 + '<dd>{{gps.timeStr}}</dd>' +
  55 + '<dd>{{gps.speed}}</dd>' +
  56 + '<dd>{{gps.road.ROAD_NAME}}</dd><dd>正常</dd></dl>{{/each}}');
  57 +
  58 +
  59 +
  60 + var _body = '#playback_run_body'
  61 + , map, gpsArray, roads, marker, width, trailArray = [], trailPolyline;
  62 +
  63 + var upRoutePos = [], downRoutePos = [];
  64 + var storage = window.localStorage;
  65 + var lineCode;
  66 +
  67 + //进度条
  68 + var progress = $('.pb_footer_tools .uk-progress', _body);
  69 + var bar = $('.uk-progress-bar', progress);
  70 + var step;
  71 + var prsTip = $('.ui-slider-tip', _body);
  72 + progress.mousemove(function (e) {
  73 + var x = e.offsetX;
  74 + var i = parseInt(x / step);
  75 + var time = moment(gpsArray[i].timestamp).format('HH:mm.ss');
  76 +
  77 + prsTip.text(time).css('left', x - 11).css('visibility', 'visible');
  78 + }).mouseout(function () {
  79 + prsTip.css('visibility', 'hidden')
  80 + }).on('click', function (e) {
  81 + var x = e.offsetX;
  82 + goto(parseInt(x / step));
  83 + });
  84 +
  85 + $(_body).on('init', function (e, data) {
  86 + roads = data.roads;
  87 + lineCode = data.lineCode;
  88 +
  89 + setTimeout(function () {
  90 + initMap(data.gpsList);
  91 + len = gpsArray.length;
  92 + step = progress.width() / gpsArray.length;
  93 + }, 600);
  94 +
  95 + //导出的文件名
  96 + $('a[data-name=exportExcel]').attr('download', data.fileName);
  97 + });
  98 +
  99 + $('.pb_tools_icon a.uk-button', _body).on('click', function () {
  100 + var type = $(this).data('type');
  101 + switch (type) {
  102 + case 'play':
  103 + play();
  104 + break;
  105 + case 'pause':
  106 + pause();
  107 + break;
  108 + case 'fast_forward':
  109 + goto(index + 10);
  110 + break;
  111 + case 'rewind':
  112 + goto(index - 10);
  113 + break;
  114 + case 'stop':
  115 + pause();
  116 + break;
  117 + }
  118 + });
  119 +
  120 + $('.pb_dropdown_tool li a', _body).on('click', function () {
  121 + var name = $(this).data('name');
  122 + switch (name) {
  123 + case 'exportExcel':
  124 + var base64Str = gb_map_play_back.listToExcel(gpsArray);
  125 + $(this).attr('href', base64Str);
  126 + break;
  127 + }
  128 + });
  129 +
  130 + function goto(ei) {
  131 + if(ei < 0 || ei >= len)
  132 + return;
  133 +
  134 + bar.css('width', ei * step);
  135 + var gps = gpsArray[ei];
  136 + //重新定位marker
  137 + try {
  138 + drawLine(gps.direction);
  139 + } catch (e) {
  140 + console.log(e);
  141 + }
  142 + var point = new BMap.Point(gps.bd_lon, gps.bd_lat);
  143 + marker.setPosition(point);
  144 + marker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  145 +
  146 + //重新填充轨迹线,更新日志面板
  147 + trailArray = [];
  148 + var logs = [];
  149 + for (var i = 0; i <= ei; i++) {
  150 + trailArray.push(new BMap.Point(gpsArray[i].bd_lon, gpsArray[i].bd_lat));
  151 + if(i > 0 && logs[logs.length - 1].road.ROAD_CODE == gpsArray[i].road.ROAD_CODE)
  152 + logs.pop();
  153 +
  154 + logs.push(gpsArray[i]);
  155 + }
  156 + trailPolyline.setPath(trailArray);
  157 +
  158 + index = ei;
  159 + map.panTo(marker.getPosition());
  160 + //更新日志面板
  161 + logPanel.empty().html(logTemp({list: logs}));
  162 + logWrap.scrollTop(logWrap[0].scrollHeight);
  163 + }
  164 +
  165 + //播放
  166 + function play() {
  167 + $('.play-btn', _body)
  168 + .data('type', 'pause')
  169 + .find('i')
  170 + .removeClass('uk-icon-play')
  171 + .addClass('uk-icon-pause');
  172 + pauseFlag = false;
  173 + progress.addClass('uk-active');
  174 + run();
  175 +
  176 + //定时居中
  177 + fixedToCenter();
  178 + }
  179 +
  180 + var toCenterTimer;
  181 +
  182 + function fixedToCenter() {
  183 + toCenterTimer = setInterval(function () {
  184 + map.panTo(marker.getPosition());
  185 + }, 5000);
  186 + }
  187 +
  188 + //暂停
  189 + var pauseFlag;
  190 +
  191 + function pause() {
  192 + $('.play-btn', _body)
  193 + .data('type', 'play')
  194 + .find('i')
  195 + .removeClass('uk-icon-pause')
  196 + .addClass('uk-icon-play');
  197 + pauseFlag = true;
  198 + progress.removeClass('uk-active');
  199 + clearInterval(toCenterTimer);
  200 + }
  201 +
  202 + var index = 1;
  203 + var len;
  204 +
  205 + function run() {
  206 + //暂停
  207 + if (pauseFlag) {
  208 + pauseFlag = false;
  209 + return
  210 + }
  211 + //结束
  212 + if (index >= len) {
  213 + bar.css('width', '100%')
  214 + pause();
  215 + return;
  216 + }
  217 +
  218 + //marker 移动
  219 + var gps = gpsArray[index];
  220 +
  221 + //线路走向
  222 + if (gps.direction != gpsArray[index - 1].direction || index == 1)
  223 + drawLine(gps.direction);
  224 +
  225 + var point = new BMap.Point(gps.bd_lon, gps.bd_lat);
  226 + marker.setPosition(point);
  227 + marker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  228 +
  229 + //轨迹线
  230 + trailArray.push(point);
  231 + trailPolyline.setPath(trailArray);
  232 +
  233 + //进度条
  234 + bar.css('width', step * index);
  235 +
  236 + //日志输出
  237 + logWrite(gps, gpsArray[index - 1]);
  238 +
  239 + index++;
  240 + setTimeout(run, 1000);
  241 + }
  242 +
  243 + //初始化地图
  244 + function initMap(data) {
  245 + gpsArray = data;
  246 + var firstPoint = new BMap.Point(data[0].bd_lon, data[0].bd_lat);
  247 + map = new BMap.Map($('.map_wrap', _body)[0]);
  248 + map.centerAndZoom(firstPoint, 17);
  249 + map.enableScrollWheelZoom();
  250 +
  251 + //创建车辆marker
  252 + marker = new BMap.Marker(firstPoint);
  253 + width = gb_map_imap.calcGpsMarkerWidth(data[0].nbbm);
  254 + //渲染icon
  255 + marker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(data[0], width), new BMap.Size(width, 75)));
  256 + marker.disableMassClear();
  257 + map.addOverlay(marker);
  258 +
  259 + //线路图层 数据
  260 + var routeCache = JSON.parse(storage.getItem(lineCode + '_route'));
  261 + upRoutePos = initRoutePosData(routeCache.up_bd);
  262 + downRoutePos = initRoutePosData(routeCache.down_bd);
  263 +
  264 + trailArray.push(firstPoint);
  265 + drawTrailLine();
  266 + //输出第一个点
  267 + logWrite(data[0], null);
  268 + }
  269 +
  270 + function drawTrailLine() {
  271 + trailPolyline = new BMap.Polyline(trailArray, {strokeWeight: 3, strokeColor: 'black'});
  272 + map.addOverlay(trailPolyline);
  273 + }
  274 +
  275 + function initRoutePosData(routeStr) {
  276 + var array = [], temps;
  277 + $.each(routeStr, function (i, item) {
  278 + var pos = [];
  279 + $.each(item.split(','), function () {
  280 + temps = this.split(' ');
  281 + pos.push(new BMap.Point(temps[0], temps[1]));
  282 + });
  283 + array.push(pos);
  284 + });
  285 + return array;
  286 + }
  287 +
  288 + function drawLine(updown) {
  289 + map.clearOverlays();
  290 +
  291 + var pos = updown == 0 ? upRoutePos : downRoutePos;
  292 + $.each(pos, function () {
  293 + map.addOverlay(new BMap.Polyline(this, {strokeWeight: 12, strokeColor: 'rgba(0, 0, 255, 0.6)'}));
  294 + });
  295 +
  296 + drawTrailLine();
  297 + }
  298 +
  299 + //日志输出
  300 + var logWrap = $('.pb_log_panel', _body);
  301 + var logPanel = $('.pb_log_panel .ct_table_body', _body);
  302 + gb_ct_table.fixedHead(logWrap);
  303 +
  304 + function logWrite(gps, prve) {
  305 + var code = gps.road.ROAD_CODE;
  306 + if (!prve || code != prve.road.ROAD_CODE) {
  307 + logPanel.append('<dl data-code="' + code + '" ><dd>' + gps.timeStr + '</dd><dd>' + gps.speed + '</dd><dd>' + gps.road.ROAD_NAME + '</dd><dd>正常</dd></dl>');
  308 + }
  309 + else {
  310 + var dds = logPanel.find('dl[data-code=' + code + ']').last().find('dd');
  311 + $(dds[0]).text(gps.timeStr);
  312 + $(dds[1]).text(gps.speed);
  313 + }
  314 +
  315 + logWrap.scrollTop(logWrap[0].scrollHeight);
  316 + }
  317 + })();
  318 + </script>
  319 +</div>
0 \ No newline at end of file 320 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/js/gps_tree.js
@@ -43,7 +43,7 @@ var gb_map_gps_tree = (function () { @@ -43,7 +43,7 @@ var gb_map_gps_tree = (function () {
43 'keep_selected_style': false, 43 'keep_selected_style': false,
44 'whole_node': false, 44 'whole_node': false,
45 'tie_selection': false 45 'tie_selection': false
46 - }, 46 + }/*,
47 'contextmenu': { 47 'contextmenu': {
48 'items': { 48 'items': {
49 '轨迹回放': { 49 '轨迹回放': {
@@ -59,12 +59,12 @@ var gb_map_gps_tree = (function () { @@ -59,12 +59,12 @@ var gb_map_gps_tree = (function () {
59 } 59 }
60 } 60 }
61 } 61 }
62 - }, 62 + }*/,
63 //local storage里的key 63 //local storage里的key
64 'state': { 64 'state': {
65 'key': 'jstree_map_devices' 65 'key': 'jstree_map_devices'
66 }, 66 },
67 - 'plugins': ['checkbox', 'contextmenu', 'state'] 67 + 'plugins': ['checkbox'/*, 'contextmenu'*/, 'state']
68 }); 68 });
69 }; 69 };
70 70
src/main/resources/static/real_control_v2/mapmonitor/js/map/iMap.js
@@ -18,7 +18,7 @@ var gb_map_imap = (function () { @@ -18,7 +18,7 @@ var gb_map_imap = (function () {
18 return; 18 return;
19 if (maps[mapName]) { 19 if (maps[mapName]) {
20 //原地图 destroy 20 //原地图 destroy
21 - if(currentMap){ 21 + if (currentMap) {
22 var oldMap = maps[currentMap].instance; 22 var oldMap = maps[currentMap].instance;
23 oldMap.destroy && oldMap.destroy(); 23 oldMap.destroy && oldMap.destroy();
24 } 24 }
@@ -33,7 +33,7 @@ var gb_map_imap = (function () { @@ -33,7 +33,7 @@ var gb_map_imap = (function () {
33 createCarIcon: createCarIcon, 33 createCarIcon: createCarIcon,
34 busIcon: '/real_control_v2/assets/imgs/bus1-R.png', 34 busIcon: '/real_control_v2/assets/imgs/bus1-R.png',
35 _color: color, 35 _color: color,
36 - //createCarIcon_angle: createCarIcon_angle, 36 + createCarIconRotation: createCarIconRotation,
37 createStationIcon: createStationIcon, 37 createStationIcon: createStationIcon,
38 call: function (f, opts) { 38 call: function (f, opts) {
39 var instance = maps[currentMap].instance; 39 var instance = maps[currentMap].instance;
@@ -42,6 +42,18 @@ var gb_map_imap = (function () { @@ -42,6 +42,18 @@ var gb_map_imap = (function () {
42 else 42 else
43 alertErr('当前地图实例不支持操作:' + f); 43 alertErr('当前地图实例不支持操作:' + f);
44 return mapProxy; 44 return mapProxy;
  45 + },
  46 + calcGpsMarkerWidth: function (nbbm) {
  47 + var width = 0;
  48 + $.each(nbbm.split(''), function () {
  49 + if (!isNaN(this))
  50 + width += 7;//icon_num_width[this];
  51 + else if (this == '-')
  52 + width += 10;
  53 + else
  54 + width += 16;
  55 + });
  56 + return width;
45 } 57 }
46 }; 58 };
47 59
@@ -72,67 +84,102 @@ var gb_map_imap = (function () { @@ -72,67 +84,102 @@ var gb_map_imap = (function () {
72 return canvas.toDataURL(); 84 return canvas.toDataURL();
73 } 85 }
74 86
75 - //绘制车辆icon 带角度  
76 -/* var busIcon='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAOgSURBVHjarJZfSCNXFMZ/mWgwmq5KyBKcNBaiMTAKCYbUQPdFEFrXat+EMkhhxXbZbfsgfS0UH4uFhba01tKieVgfWjZLurS7rA9VREWrBYVoLJVZBwIxq8WY+Ic0feg4GE1iq3vgcjnn3Pm+e++5c84xjI+PU0LMwE2gG2gFRKAa+AtQgEXgJ21kioGUFbGbgA+Bj5xOp83hcGC1WqmsrKS8vJzj4+Pq/f39lmQy2aKq6juKosSBz4B7wNFZMEOBkziBiMfjafF4PFgsFi6SVCpFNBolGo0uA12AetovnFkfABZ8Pl+L3+//TwQAFosFv9+P1+v1Akva1RYkcQLhYDBokySJy0hzczNtbW02IKLh5cXECIR9Pp/d5XJx/9c/eDC7yfO9w3NARsFAY101778p0VhXfc7f0NDA4eGhfWlpKQz4gewJyYDb7fZKksQ3v0QZuv9byR2vKjs8/V3l8VAnorXqnF+SJFKplDcWi90CRgTtJX3sdrsB+P7pOntbq2QP9/V55O4NlO/e1sdXd15jL3PMjzObOvD09HQekYb3CWASgA5RFO01NTUAPEukOM7skfs7q8+vt76cB9Dp//e61ef7um1wcJCJiQldr62tRRRFO9AhAN0Oh4OrSjabpa+vj8nJSd2m4XYLQKvVauVFyNHRET09PczPzwOg4bYKgGg2m0t+/PPiszz90YJS8sfs6upibW2NiooKAHsZYL+IZODzqf91okQiQX9/P1NTUwBiGRDPZDIliUbu3sgL/qMFhfe+mC663mazMTo6SjqdBlAFQM1kMiV3Vux1FUsxkUiEpqYmDg4OAOICsJhMJl9I4E0mE+FwmEAgAICGuygAD7e2tq5MYDQaGRsbo729XbdpuA8F4ImqqvHd3V0AXPZrGAQjYNDnYq/rlesv6bbh4WF6e3t1fWdnB1VV48ATQy6XIxQK3Xa73V8GAgEezG7ywdczF+7cXlvJ46FOaqpMBf1zc3PEYrF3ZVkeOUmQI+vr6wNVVVXet9okrleb+WHmT5J7BwWysEBj3TVudXiKEqyurhKLxZaBbwEMuVwOgFAo5ATmgsGg3eVyXTo2GxsbzM7OxoFXZVlW8kg0ogAQ8fl8lypcKysrLC8vJ4A3ZFle1Gv8aZJTJ7pSjZdlOa/GnyPRiPRupb6+3iaK4tluhXQ6zfb2NqqqoihKAvgUuCfL8vlupRDJKTKz1nPdLNB3qcD8Sd8ly3LRtPHPAJ0EcbP62i0iAAAAAElFTkSuQmCC';  
77 - function createCarIcon_angle(gps, w) { 87 +
  88 + //绘制车辆icon 带角度标示
  89 + function createCarIconRotation(gps, w) {
  90 + if (!w)
  91 + w = 70;
  92 +
78 var canvas = $('<canvas></canvas>')[0]; 93 var canvas = $('<canvas></canvas>')[0];
  94 + canvas.width = w;
  95 + canvas.height = 75;
79 var ctx = canvas.getContext('2d'); 96 var ctx = canvas.getContext('2d');
80 97
81 - //旋转画布 98 + var colours = color(gps);
  99 + //ctx.shadowOffsetX = 5; // 阴影Y轴偏移
  100 + //ctx.shadowOffsetY = 5; // 阴影X轴偏移
  101 + //ctx.shadowBlur = 1; // 模糊尺寸
  102 + //ctx.shadowColor = colours.shadow; // 颜色
82 103
83 - //console.log('gps', gps);direction  
84 - //车辆角度图片  
85 - var img = new Image();  
86 - img.src = busIcon; 104 + ctx.roundRect(0, 0, w, 24, 5).stroke();
  105 + ctx.fillStyle = colours.bgColor;
  106 + ctx.fill();
  107 + //文字
  108 + ctx.font = "14px arial";
  109 + ctx.fillStyle = "#fff";
  110 + ctx.fillText(gps.nbbm, 4, 17);
87 111
  112 + //角度图标
  113 + var img = new Image();
  114 + img.src = rotationIcon(colours.bgColor);
88 ctx.save(); 115 ctx.save();
89 - ctx.translate(w/2, 25);  
90 - ctx.rotate(-((gps.direction+300) * Math.PI / 180)); 116 + ctx.translate(canvas.width / 2, canvas.height / 2);
  117 + ctx.rotate(gps.direction * Math.PI / 180);
  118 + ctx.drawImage(img, -img.width / 2, -img.width / 2);
  119 + ctx.restore();
91 120
92 - ctx.drawImage(img,-12, 0); 121 + return canvas.toDataURL();
  122 + }
93 123
94 - ctx.restore();  
95 124
96 - var colours = color(gps); 125 + function rotationIcon(color) {
  126 + var canvas = $('<canvas></canvas>')[0];
  127 + canvas.width = 25;
  128 + canvas.height = 25;
97 129
98 - ctx.shadowOffsetX = 5; // 阴影Y轴偏移  
99 - ctx.shadowOffsetY = 5; // 阴影X轴偏移  
100 - ctx.shadowBlur = 1; // 模糊尺寸  
101 - ctx.shadowColor = colours.shadow; // 颜色 130 + var ctx = canvas.getContext('2d');
102 131
103 - //绘制背景  
104 - if (!w)  
105 - w = 70; 132 + ctx.beginPath();
  133 + ctx.strokeStyle = color;
  134 + var circle = {
  135 + x: 12.5, //圆心的x轴坐标值
  136 + y: 12.5, //圆心的y轴坐标值
  137 + r: 12 //圆的半径
  138 + };
  139 + //以canvas中的坐标点(100,100)为圆心,绘制一个半径为50px的圆形
  140 + ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);
  141 + //按照指定的路径绘制弧线
  142 + ctx.stroke();
  143 + ctx.fillStyle = "#ffffff";
  144 + ctx.fill();
106 145
107 - ctx.roundRect(0, 0, w, 25, 5).stroke();  
108 - ctx.fillStyle = colours.bgColor; 146 + //下方矩形
  147 + ctx.beginPath();
  148 + ctx.fillStyle = color;
  149 + ctx.fillRect(5, 16, 15, 4);
  150 +
  151 + ctx.rect(5, 11, 7.5, 8);
  152 + ctx.rect(12.5, 11, 7.5, 8);
  153 + ctx.strokeStyle = color;
  154 + ctx.stroke();
  155 +
  156 + //上方三角形
  157 + ctx.beginPath();
  158 + ctx.fillStyle = "#111111";
  159 + ctx.moveTo(12.5, 3);
  160 + ctx.lineTo(6.5, 7.5);
  161 + ctx.lineTo(18.5, 7.5);
  162 + ctx.closePath();
109 ctx.fill(); 163 ctx.fill();
110 - //文字  
111 - ctx.font = "14px arial";  
112 - ctx.fillStyle = "#fff";  
113 - ctx.fillText(gps.nbbm, 4, 18);  
114 164
115 return canvas.toDataURL(); 165 return canvas.toDataURL();
116 - }*/ 166 + }
117 167
118 //绘制站点icon 168 //绘制站点icon
119 function createStationIcon(station, w) { 169 function createStationIcon(station, w) {
120 var canvas = $('<canvas></canvas>')[0]; 170 var canvas = $('<canvas></canvas>')[0];
121 var ctx = canvas.getContext('2d'); 171 var ctx = canvas.getContext('2d');
122 172
123 -/* var color=station.directions==0?'#125688':'#fb1804'  
124 - ,bg='rgba(255, 255, 255, 0.87)';*/ 173 + /* var color=station.directions==0?'#125688':'#fb1804'
  174 + ,bg='rgba(255, 255, 255, 0.87)';*/
125 175
126 - var color='#fff',  
127 - bg=station.directions==0?'#125688':'#fb1804'; 176 + var color = '#fff',
  177 + bg = station.directions == 0 ? '#125688' : '#fb1804';
128 //矩形 178 //矩形
129 //ctx.roundRect(0, 0, w, 17, 1).stroke(); 179 //ctx.roundRect(0, 0, w, 17, 1).stroke();
130 - ctx.rect(-1,-1,w,17); 180 + ctx.rect(-1, -1, w, 17);
131 ctx.fillStyle = bg; 181 ctx.fillStyle = bg;
132 ctx.fill(); 182 ctx.fill();
133 - //ctx.lineWidth = 1;  
134 - //ctx.strokeStyle=color;  
135 - //ctx.stroke();  
136 183
137 //文字 184 //文字
138 ctx.font = "12px arial"; 185 ctx.font = "12px arial";
@@ -140,16 +187,16 @@ var gb_map_imap = (function () { @@ -140,16 +187,16 @@ var gb_map_imap = (function () {
140 ctx.fillText(station.stationName, 2, 12); 187 ctx.fillText(station.stationName, 2, 12);
141 188
142 //角 189 //角
143 - var c=w/2; 190 + var c = w / 2;
144 ctx.beginPath(); 191 ctx.beginPath();
145 - ctx.moveTo(c - 7,16);  
146 - ctx.lineTo(c,24);  
147 - ctx.lineTo(c + 7,16); 192 + ctx.moveTo(c - 7, 16);
  193 + ctx.lineTo(c, 24);
  194 + ctx.lineTo(c + 7, 16);
148 ctx.closePath(); 195 ctx.closePath();
149 196
150 ctx.fillStyle = bg; 197 ctx.fillStyle = bg;
151 ctx.fill(); 198 ctx.fill();
152 - ctx.strokeStyle='#fff'; 199 + ctx.strokeStyle = '#fff';
153 ctx.stroke(); 200 ctx.stroke();
154 return canvas.toDataURL(); 201 return canvas.toDataURL();
155 } 202 }
src/main/resources/static/real_control_v2/mapmonitor/js/map/platform/baidu.js
@@ -3,8 +3,6 @@ var gb_map_baidu = (function(){ @@ -3,8 +3,6 @@ var gb_map_baidu = (function(){
3 3
4 var map; 4 var map;
5 var topMarker; 5 var topMarker;
6 - //实时路况是否打开  
7 - //var traffVisible;  
8 var realMarkers = {}; 6 var realMarkers = {};
9 //路段对照 7 //路段对照
10 var polylines={}; 8 var polylines={};
@@ -14,8 +12,6 @@ var gb_map_baidu = (function(){ @@ -14,8 +12,6 @@ var gb_map_baidu = (function(){
14 var electronicFences = {}; 12 var electronicFences = {};
15 //停车场对照 13 //停车场对照
16 var carparks = {}; 14 var carparks = {};
17 - //var buffAreas = {};  
18 -  
19 15
20 var ctrl; 16 var ctrl;
21 var baiduInstance = { 17 var baiduInstance = {
@@ -31,42 +27,12 @@ var gb_map_baidu = (function(){ @@ -31,42 +27,12 @@ var gb_map_baidu = (function(){
31 map.enableScrollWheelZoom(); 27 map.enableScrollWheelZoom();
32 28
33 cb && cb(); 29 cb && cb();
34 - //window.localStorage.setItem('real_map', 'baidu');  
35 -  
36 // 路况控件 30 // 路况控件
37 ctrl = new BMapLib.TrafficControl(); 31 ctrl = new BMapLib.TrafficControl();
38 map.addControl(ctrl); 32 map.addControl(ctrl);
39 -  
40 - /*$(gb_map_consts.trafficBtn).on('click', function() {  
41 - if (traffVisible) {  
42 - ctrl.hide();  
43 - traffVisible = false;  
44 - showLinePolyline();  
45 - } else {  
46 - ctrl.show();  
47 - traffVisible = true;  
48 - hideLinePolyline();  
49 - }  
50 - });  
51 - //百度路况控件自身关闭按钮  
52 - $('.portlet-fullscreen').on('click', '.maplibTc .maplibTcClose', function(){  
53 - traffVisible = false;  
54 - showLinePolyline();  
55 - });*/  
56 -  
57 - //$('#tcWrap.maplibTc').addClass('animated bounceInLeft');  
58 - //$('.maplibTcBtn_deskTop.anchorTR').remove();  
59 -/* //缩放事件  
60 - map.addEventListener("zoomend", function(type, target){  
61 - //console.log('zoomend', type, target, map.getZoom());  
62 - //刷新站点marker  
63 - refreshStation();  
64 - });*/  
65 }, 33 },
66 destroy: function(){ 34 destroy: function(){
67 this.clearAll(); 35 this.clearAll();
68 - //realMarkers = {};  
69 - //linePolyline = [];  
70 }, 36 },
71 //画线路图层 37 //画线路图层
72 drawLine: function(opt){ 38 drawLine: function(opt){
@@ -91,21 +57,6 @@ var gb_map_baidu = (function(){ @@ -91,21 +57,6 @@ var gb_map_baidu = (function(){
91 57
92 //根据ID保存映射 58 //根据ID保存映射
93 polylines[opt.id]=_pLines; 59 polylines[opt.id]=_pLines;
94 - /*$.each(route.split(','), function(){  
95 - temps = this.split(' ');  
96 - pos.push(new BMap.Point(temps[0], temps[1]));  
97 - });*/  
98 -  
99 - /*var polyline = new BMap.Polyline(pos, opt.style);  
100 - //根据ID保存映射  
101 - polylines[opt.id]=polyline;  
102 - if(opt.hide)  
103 - polyline.hide();  
104 - map.addOverlay(polyline);*/  
105 -  
106 - //延迟居中,避免多次调用时抖动  
107 - //delayToCenter(pos[parseInt(pos.length / 2)]);  
108 - //map.panTo(pos[parseInt(pos.length / 2)]);  
109 }, 60 },
110 traffic: function (enable) { 61 traffic: function (enable) {
111 if(enable) 62 if(enable)
@@ -133,8 +84,6 @@ var gb_map_baidu = (function(){ @@ -133,8 +84,6 @@ var gb_map_baidu = (function(){
133 centerToLine: function (opt) { 84 centerToLine: function (opt) {
134 var _pLines = polylines[opt.id]; 85 var _pLines = polylines[opt.id];
135 delayToCenter(_pLines[parseInt(_pLines.length/2)].getPath()[0]); 86 delayToCenter(_pLines[parseInt(_pLines.length/2)].getPath()[0]);
136 - //var pos=polylines[opt.id].getPath();  
137 - //delayToCenter(pos[parseInt(pos.length / 2)]);  
138 }, 87 },
139 //绘制GPS信号 88 //绘制GPS信号
140 drawRealGpsMarker: function(opts){ 89 drawRealGpsMarker: function(opts){
@@ -157,12 +106,6 @@ var gb_map_baidu = (function(){ @@ -157,12 +106,6 @@ var gb_map_baidu = (function(){
157 map.addOverlay(marker); 106 map.addOverlay(marker);
158 //设备号和marker映射 107 //设备号和marker映射
159 realMarkers[gps.deviceId] = marker; 108 realMarkers[gps.deviceId] = marker;
160 - /*//新上线的设备,默认隐藏  
161 - if(gps.newNodeHide){  
162 - marker.hide();  
163 - gps.newNodeHide=null;  
164 - delete gps.newNodeHide;  
165 - }*/  
166 } 109 }
167 } 110 }
168 }); 111 });
@@ -228,10 +171,10 @@ var gb_map_baidu = (function(){ @@ -228,10 +171,10 @@ var gb_map_baidu = (function(){
228 clearAll: function () { 171 clearAll: function () {
229 //清除所有覆盖物 172 //清除所有覆盖物
230 realMarkers = {}; 173 realMarkers = {};
231 - polylines={};  
232 - stationMarkers={};  
233 - electronicFences={};  
234 - carparks={}; 174 + polylines = {};
  175 + stationMarkers = {};
  176 + electronicFences = {};
  177 + carparks = {};
235 map.clearOverlays(); 178 map.clearOverlays();
236 }, 179 },
237 showGpsMarker:function (opt) { 180 showGpsMarker:function (opt) {
@@ -284,6 +227,11 @@ var gb_map_baidu = (function(){ @@ -284,6 +227,11 @@ var gb_map_baidu = (function(){
284 ,m = realMarkers[deviceId]; 227 ,m = realMarkers[deviceId];
285 bdOpenWindow(m); 228 bdOpenWindow(m);
286 }, 229 },
  230 + closeWin: function (deviceId) {
  231 + var m = realMarkers[deviceId];
  232 + if(m)
  233 + map.closeInfoWindow(m.infoWindow)
  234 + },
287 //打开站点信息窗口 235 //打开站点信息窗口
288 openStationWin: function (opt) { 236 openStationWin: function (opt) {
289 237
@@ -362,7 +310,7 @@ var gb_map_baidu = (function(){ @@ -362,7 +310,7 @@ var gb_map_baidu = (function(){
362 var marker = new BMap.Marker(point); 310 var marker = new BMap.Marker(point);
363 311
364 //根据编码长度 计算marker 宽度 312 //根据编码长度 计算marker 宽度
365 - var w = calcGpsMarkerWidth(gpsData.nbbm);//gpsData.nbbm.length * 10; 313 + var w = gb_map_imap.calcGpsMarkerWidth(gpsData.nbbm);//gpsData.nbbm.length * 10;
366 //渲染icon 314 //渲染icon
367 renderIcon(marker, gpsData, w); 315 renderIcon(marker, gpsData, w);
368 316
@@ -374,9 +322,9 @@ var gb_map_baidu = (function(){ @@ -374,9 +322,9 @@ var gb_map_baidu = (function(){
374 bdOpenWindow(this); 322 bdOpenWindow(this);
375 }); 323 });
376 //mouseover 324 //mouseover
377 - /*marker.addEventListener('mouseover', function(){ 325 + marker.addEventListener('mouseover', function(){
378 setTop(this); 326 setTop(this);
379 - });*/ 327 + });
380 marker.setTop(true); 328 marker.setTop(true);
381 return marker; 329 return marker;
382 } 330 }
@@ -385,36 +333,11 @@ var gb_map_baidu = (function(){ @@ -385,36 +333,11 @@ var gb_map_baidu = (function(){
385 var config = gb_map_config.getConfig(); 333 var config = gb_map_config.getConfig();
386 334
387 //如果需要标识角度 335 //如果需要标识角度
388 - if(config.carIcon.angle){  
389 -  
390 - var icon = new BMap.Icon(gb_map_imap.busIcon, new BMap.Size(24,24));  
391 - var label = new BMap.Label(gpsData.nbbm,{offset:new BMap.Size(-(w/2-10),-24)});  
392 - var color=gb_map_imap._color(gpsData).bgColor;  
393 -  
394 - label.setStyle({borderColor: color,borderRadius: '5px', padding: '1px 2px', color: '#fff', backgroundColor: color, font: 14});  
395 - marker.setIcon(icon);  
396 - marker.setLabel(label);  
397 - //旋转角度  
398 - marker.setRotation(gpsData.direction-90);  
399 -  
400 - } 336 + if(config.carIcon.angle)
  337 + marker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gpsData, w), new BMap.Size(w,75)));
401 else 338 else
402 marker.setIcon(new BMap.Icon(gb_map_imap.createCarIcon(gpsData, w), new BMap.Size(w,25))); 339 marker.setIcon(new BMap.Icon(gb_map_imap.createCarIcon(gpsData, w), new BMap.Size(w,25)));
403 } 340 }
404 -  
405 -  
406 - function calcGpsMarkerWidth(nbbm) {  
407 - var width=0;  
408 - $.each(nbbm.split(''), function () {  
409 - if(!isNaN(this))  
410 - width += 7;  
411 - else if(this=='-')  
412 - width += 10;  
413 - else  
414 - width += 16;  
415 - });  
416 - return width;  
417 - }  
418 341
419 function createStationMark(statio) { 342 function createStationMark(statio) {
420 var point = new BMap.Point(statio.bd_lon, statio.bd_lat); 343 var point = new BMap.Point(statio.bd_lon, statio.bd_lat);
@@ -448,16 +371,8 @@ var gb_map_baidu = (function(){ @@ -448,16 +371,8 @@ var gb_map_baidu = (function(){
448 m.gpsData = gps; 371 m.gpsData = gps;
449 //重新设置icon 372 //重新设置icon
450 //根据编码长度 计算marker 宽度 373 //根据编码长度 计算marker 宽度
451 - var w = m._icon_width;//calcGpsMarkerWidth(gps.nbbm);//gps.nbbm.length * 10;  
452 - 374 + var w = m._icon_width;
453 renderIcon(m, gps, w); 375 renderIcon(m, gps, w);
454 - /*//如果需要标识角度  
455 - if(config.carIcon.angle)  
456 - m.setIcon(new BMap.Icon(gb_map_imap.createCarIcon_angle(gps, w), new BMap.Size(w,50)));  
457 - else  
458 - m.setIcon(new BMap.Icon(gb_map_imap.createCarIcon(gps, w), new BMap.Size(w,25)));*/  
459 - //m.setIcon(new BMap.Icon(gb_map_imap.createCarIcon(gps, w), new BMap.Size(w,25)));  
460 -  
461 //更新 infoWindow 376 //更新 infoWindow
462 if(m.infoWindow.isOpen()){ 377 if(m.infoWindow.isOpen()){
463 bdOpenWindow(m); 378 bdOpenWindow(m);
@@ -465,6 +380,9 @@ var gb_map_baidu = (function(){ @@ -465,6 +380,9 @@ var gb_map_baidu = (function(){
465 } 380 }
466 381
467 function setTop(m){ 382 function setTop(m){
  383 + if(gb_map_config.getConfig().spatialData.station)
  384 + return;
  385 +
468 if(topMarker) 386 if(topMarker)
469 topMarker.setTop(false); 387 topMarker.setTop(false);
470 m.setTop(true); 388 m.setTop(true);
src/main/resources/static/real_control_v2/mapmonitor/js/map/platform/gaode.js
@@ -20,9 +20,7 @@ var gb_map_gaode = (function() { @@ -20,9 +20,7 @@ var gb_map_gaode = (function() {
20 var stationMarkers={}; 20 var stationMarkers={};
21 var electronicFences={}; 21 var electronicFences={};
22 var carparks={}; 22 var carparks={};
23 - //实时路况是否显示  
24 - //var traffVisible;  
25 - //var trafficLayer; 23 +
26 var gaodeInstance = { 24 var gaodeInstance = {
27 init : function(cb) { 25 init : function(cb) {
28 var $mapCon = $(gb_map_consts.mapContainer); 26 var $mapCon = $(gb_map_consts.mapContainer);
@@ -35,9 +33,6 @@ var gb_map_gaode = (function() { @@ -35,9 +33,6 @@ var gb_map_gaode = (function() {
35 map.setZoomAndCenter(13, [ gb_map_consts.center_point.lng, gb_map_consts.center_point.lat ]); 33 map.setZoomAndCenter(13, [ gb_map_consts.center_point.lng, gb_map_consts.center_point.lat ]);
36 // 加载完成 34 // 加载完成
37 AMap.event.addListener(map, 'complete', function() { 35 AMap.event.addListener(map, 'complete', function() {
38 - //window.localStorage.setItem('real_map', 'gaode');  
39 - /*storage.setItem('real_map', REAL_GAODE_TEXT);  
40 - $('.sk-cube-grid._center').remove();*/  
41 cb && cb(); 36 cb && cb();
42 }); 37 });
43 38
@@ -45,20 +40,6 @@ var gb_map_gaode = (function() { @@ -45,20 +40,6 @@ var gb_map_gaode = (function() {
45 trafficLayer = new AMap.TileLayer.Traffic(); 40 trafficLayer = new AMap.TileLayer.Traffic();
46 trafficLayer.setMap(map); 41 trafficLayer.setMap(map);
47 trafficLayer.hide(); 42 trafficLayer.hide();
48 -  
49 - /*$(gb_map_consts.trafficBtn).on('click', function() {  
50 - if (traffVisible) {  
51 - trafficLayer.hide();  
52 - traffVisible = false;  
53 - $(this).removeClass('active');  
54 - showLinePolyline();  
55 - } else {  
56 - trafficLayer.show();  
57 - traffVisible = true;  
58 - $(this).addClass('active');  
59 - hideLinePolyline();  
60 - }  
61 - });*/  
62 }, 43 },
63 setStyle : function() { 44 setStyle : function() {
64 $('.mapRightWrap').addClass('gaode'); 45 $('.mapRightWrap').addClass('gaode');
@@ -106,29 +87,9 @@ var gb_map_gaode = (function() { @@ -106,29 +87,9 @@ var gb_map_gaode = (function() {
106 }); 87 });
107 88
108 polylines[opt.id]=_pLines; 89 polylines[opt.id]=_pLines;
109 -  
110 - /*var pos = [], temps;  
111 - var route = opt.upDown==0?opt.route.up_gcj:opt.route.down_gcj;  
112 -  
113 - $.each(route.split(','), function(){  
114 - temps = this.split(' ');  
115 - pos.push([temps[0], temps[1]]);  
116 - });  
117 -  
118 - opt.style.path=pos;  
119 - var polyline = new AMap.Polyline(opt.style);  
120 - //根据ID保存映射  
121 - polylines[opt.id]=polyline;  
122 - if(opt.hide)  
123 - polyline.hide();  
124 -  
125 - polyline.setMap(map);*/  
126 }, 90 },
127 //定位到线路中间点 91 //定位到线路中间点
128 centerToLine: function (opt) { 92 centerToLine: function (opt) {
129 - //var pos=polylines[opt.id].getPath();  
130 - //map.setCenter(pos[parseInt(pos.length / 2)]);  
131 -  
132 var _pLines = polylines[opt.id]; 93 var _pLines = polylines[opt.id];
133 map.setCenter(_pLines[parseInt(_pLines.length/2)].getPath()[0]); 94 map.setCenter(_pLines[parseInt(_pLines.length/2)].getPath()[0]);
134 }, 95 },
@@ -316,6 +277,11 @@ var gb_map_gaode = (function() { @@ -316,6 +277,11 @@ var gb_map_gaode = (function() {
316 var deviceId = opts.deviceId 277 var deviceId = opts.deviceId
317 ,m = realMarkers[deviceId]; 278 ,m = realMarkers[deviceId];
318 openWindow(m); 279 openWindow(m);
  280 + },
  281 + closeWin: function (deviceId) {
  282 + var m = realMarkers[deviceId];
  283 + if(m)
  284 + m.infoWindow.close();
319 } 285 }
320 }; 286 };
321 287
@@ -327,7 +293,7 @@ var gb_map_gaode = (function() { @@ -327,7 +293,7 @@ var gb_map_gaode = (function() {
327 293
328 function createGDMarkerByGps(gps){ 294 function createGDMarkerByGps(gps){
329 //根据编码长度 计算marker 宽度 295 //根据编码长度 计算marker 宽度
330 - var w = calcGpsMarkerWidth(gps.nbbm); 296 + var w = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);
331 297
332 var marker = new AMap.Marker({ 298 var marker = new AMap.Marker({
333 map: map, 299 map: map,
@@ -362,21 +328,19 @@ var gb_map_gaode = (function() { @@ -362,21 +328,19 @@ var gb_map_gaode = (function() {
362 328
363 //如果需要标识角度 329 //如果需要标识角度
364 if(config.carIcon.angle) { 330 if(config.carIcon.angle) {
365 - marker.setIcon(gb_map_imap.busIcon);  
366 - marker.setAngle(gps.direction - 90);  
367 -  
368 - marker.setLabel({  
369 - content: gps.nbbm,  
370 - offset: new AMap.Pixel(-20, -20),  
371 - }); 331 + marker.setIcon(new AMap.Icon({
  332 + size: new AMap.Size(w, 75), //图标大小
  333 + image: gb_map_imap.createCarIconRotation(gps, w)
  334 + }));
  335 + marker.setOffset(new AMap.Pixel(-(w / 2), -35));
372 } 336 }
373 else{ 337 else{
374 marker.setIcon(new AMap.Icon({ 338 marker.setIcon(new AMap.Icon({
375 size: new AMap.Size(w, 25), //图标大小 339 size: new AMap.Size(w, 25), //图标大小
376 image: gb_map_imap.createCarIcon(gps, w) 340 image: gb_map_imap.createCarIcon(gps, w)
377 })); 341 }));
  342 + marker.setOffset(new AMap.Pixel(-(w / 2), -12.5));
378 } 343 }
379 - marker.setOffset(new AMap.Pixel(-(w / 2), -12.5));  
380 } 344 }
381 345
382 //创建站点marker 346 //创建站点marker
@@ -425,27 +389,10 @@ var gb_map_gaode = (function() { @@ -425,27 +389,10 @@ var gb_map_gaode = (function() {
425 //渲染icon 389 //渲染icon
426 renderIcon(marker, gps, w); 390 renderIcon(marker, gps, w);
427 391
428 - /*m.setIcon(new AMap.Icon({  
429 - size: new AMap.Size(w, 25),  
430 - image: gb_map_imap.createCarIcon(gps, w)  
431 - }));*/  
432 -  
433 if(m.infoWindow.getIsOpen()) 392 if(m.infoWindow.getIsOpen())
434 openWindow(m); 393 openWindow(m);
435 } 394 }
436 395
437 - function calcGpsMarkerWidth(nbbm) {  
438 - var width=0;  
439 - $.each(nbbm.split(''), function () {  
440 - if(!isNaN(this))  
441 - width += 7;//icon_num_width[this];  
442 - else if(this=='-')  
443 - width += 10;  
444 - else  
445 - width += 16;  
446 - });  
447 - return width;  
448 - }  
449 396
450 function transMultiWGSToGCJ(obj) { 397 function transMultiWGSToGCJ(obj) {
451 if(!obj._gPoints) 398 if(!obj._gPoints)
@@ -466,7 +413,6 @@ var gb_map_gaode = (function() { @@ -466,7 +413,6 @@ var gb_map_gaode = (function() {
466 gps.lineName = gb_data_basic.lineCode2NameAll()[gps.lineId]; 413 gps.lineName = gb_data_basic.lineCode2NameAll()[gps.lineId];
467 //时间 414 //时间
468 gps.dateStr = moment(gps.timestamp).format('YYYY-MM-DD HH:mm:ss'); 415 gps.dateStr = moment(gps.timestamp).format('YYYY-MM-DD HH:mm:ss');
469 -//{size: AMap.Size(290,255)}  
470 marker.infoWindow.setContent(gb_map_overlay_mge.map_gps_win_temp(gps)); 416 marker.infoWindow.setContent(gb_map_overlay_mge.map_gps_win_temp(gps));
471 marker.infoWindow.open(map, marker.getPosition()); 417 marker.infoWindow.open(map, marker.getPosition());
472 } 418 }
src/main/resources/static/real_control_v2/mapmonitor/js/map_overlay_manager.js
@@ -203,11 +203,11 @@ var gb_map_overlay_mge = (function () { @@ -203,11 +203,11 @@ var gb_map_overlay_mge = (function () {
203 203
204 //地图居中至合理的位置 204 //地图居中至合理的位置
205 var centerToRational=function () { 205 var centerToRational=function () {
206 - /*var chs=getCheckedDevice(); 206 + var chs=getCheckedDevice();
207 if(chs && chs.length > 0){ 207 if(chs && chs.length > 0){
208 var id=chs[0].data.lineId+'_'+chs[0].data.upDown; 208 var id=chs[0].data.lineId+'_'+chs[0].data.upDown;
209 gb_map_imap.call('centerToLine', {id: id}); 209 gb_map_imap.call('centerToLine', {id: id});
210 - }*/ 210 + }
211 } 211 }
212 212
213 return { 213 return {
src/main/resources/static/real_control_v2/mapmonitor/js/playback.js 0 → 100644
  1 +/* 地图模块 轨迹回放 */
  2 +
  3 +var gb_map_play_back = (function () {
  4 +
  5 + var dom;
  6 + $.get('/real_control_v2/mapmonitor/fragments/playback/main.html', function (rs) {
  7 + dom = rs;
  8 + });
  9 +
  10 + var initParams = function (deviceId, nbbm) {
  11 + //关闭infowindow
  12 + if (deviceId)
  13 + gb_map_imap.call('closeWin', deviceId);
  14 +
  15 + //show modal
  16 + var modal = '#map-playback-modal';
  17 + $(document.body).append(dom);
  18 + UIkit.modal(modal, {bgclose: false}).show();
  19 + $(modal).trigger('show_form', {deviceId: deviceId, nbbm: nbbm});
  20 + };
  21 +
  22 + //导出excel
  23 + var listToExcel = function (list) {
  24 + var temp = '<html>' +
  25 + ' <head> '+
  26 + ' </head>' +
  27 + ' <body>' +
  28 + ' <table border="1">' +
  29 + ' <tr><th>序号</th><th>车辆</th><th>所在道路</th><th>经度</th><th>纬度</th><th>时间</th><th>速度</th></tr>' +
  30 + ' {{each list as gps i}}' +
  31 + ' <tr><td>{{i+1}}</td><td>{{gps.nbbm}}</td><td>{{gps.road.ROAD_NAME}}</td><td>{{gps.bd_lon}}</td><td>{{gps.bd_lat}}</td><td>{{gps.timeStr2}}</td><td>{{gps.speed}}</td></tr>' +
  32 + ' {{/each}}' +
  33 + ' </table>' +
  34 + ' </body>' +
  35 + ' </html>';
  36 +
  37 + var rs = template.compile(temp)({list: list});
  38 +
  39 + var uri = 'data:application/vnd.ms-excel;base64,';
  40 + return uri + base64(rs);
  41 + //location.href = uri + base64(rs);
  42 + };
  43 +
  44 +
  45 + function base64(string) {
  46 + return window.btoa(unescape(encodeURIComponent(string)));
  47 + }
  48 +
  49 + return {
  50 + initParams: initParams,
  51 + listToExcel: listToExcel
  52 + }
  53 +})();
0 \ No newline at end of file 54 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/js/real.js
@@ -10,10 +10,10 @@ var mapmonitor_load_ep = EventProxy.create(&#39;load_iMap&#39;, &#39;load_baidu&#39;, &#39;load_gaod @@ -10,10 +10,10 @@ var mapmonitor_load_ep = EventProxy.create(&#39;load_iMap&#39;, &#39;load_baidu&#39;, &#39;load_gaod
10 .changeMap(gb_map_config.getConfig().map_type); 10 .changeMap(gb_map_config.getConfig().map_type);
11 11
12 //init tree 12 //init tree
13 - /* gb_map_gps_tree.init(function () { 13 + gb_map_gps_tree.init(function () {
14 gb_map_overlay_mge.init(); 14 gb_map_overlay_mge.init();
15 gb_map_spatial_data.init(); 15 gb_map_spatial_data.init();
16 - });*/ 16 + });
17 17
18 /* 18 /*
19 $(".real_bottom_panel").resizable({ 19 $(".real_bottom_panel").resizable({
src/main/resources/static/real_control_v2/mapmonitor/real.html
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 <link rel="stylesheet" href="/real_control_v2/assets/plugins/spectrum/spectrum.css"/> 3 <link rel="stylesheet" href="/real_control_v2/assets/plugins/spectrum/spectrum.css"/>
4 <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css"/> 4 <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css"/>
5 <link rel="stylesheet" href="/real_control_v2/mapmonitor/css/real.css"/> 5 <link rel="stylesheet" href="/real_control_v2/mapmonitor/css/real.css"/>
  6 +<link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/progress.gradient.min.css">
6 7
7 <div class="map-system-msg"> 8 <div class="map-system-msg">
8 <a class="z-depth-2" href="/pages/mapmonitor/alone/wrap.html" target="_blank"> 9 <a class="z-depth-2" href="/pages/mapmonitor/alone/wrap.html" target="_blank">
@@ -17,6 +18,10 @@ @@ -17,6 +18,10 @@
17 $('.map-system-msg').addClass('flex-left'); 18 $('.map-system-msg').addClass('flex-left');
18 return false; 19 return false;
19 }); 20 });
  21 +
  22 + setTimeout(function () {
  23 + $('.map-system-msg-close').trigger('click');
  24 + }, 2000);
20 </script> 25 </script>
21 26
22 <div id="real_map_container"></div> 27 <div id="real_map_container"></div>
@@ -73,4 +78,6 @@ @@ -73,4 +78,6 @@
73 <script src="/real_control_v2/assets/plugins/jquery.ui/mouse.js"></script> 78 <script src="/real_control_v2/assets/plugins/jquery.ui/mouse.js"></script>
74 <script src="/real_control_v2/assets/plugins/jquery.ui/resizable.js"></script> 79 <script src="/real_control_v2/assets/plugins/jquery.ui/resizable.js"></script>
75 <!-- 颜色选择器 --> 80 <!-- 颜色选择器 -->
76 -<script src="/real_control_v2/assets/plugins/spectrum/spectrum.js"></script>  
77 \ No newline at end of file 81 \ No newline at end of file
  82 +<script src="/real_control_v2/assets/plugins/spectrum/spectrum.js"></script>
  83 +<!-- play back -->
  84 +<script src="/real_control_v2/mapmonitor/js/playback.js"></script>
78 \ No newline at end of file 85 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/real_monitor/js/gps_play_back.js
@@ -5,7 +5,7 @@ var gb_map_playback = (function() { @@ -5,7 +5,7 @@ var gb_map_playback = (function() {
5 }; 5 };
6 6
7 var temps; 7 var temps;
8 - $.get('/real_control_v2/mapmonitor/real_monitor/fragments/playback.html', function(dom) { 8 + $.get('/real_control_v2/mapmonitor/real_monitor/fragments/main.html', function(dom) {
9 temps= gb_common.compileTempByDom(dom); 9 temps= gb_common.compileTempByDom(dom);
10 }); 10 });
11 11