Commit a5156f52f573a1ca56b6721d69ae62cc83b659f3

Authored by 娄高锋
2 parents 7ace67b2 100a7c1f

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

Showing 58 changed files with 6029 additions and 5379 deletions
src/main/java/com/bsth/controller/SectionRouteController.java
@@ -37,14 +37,22 @@ public class SectionRouteController extends BaseController<SectionRoute, Integer @@ -37,14 +37,22 @@ public class SectionRouteController extends BaseController<SectionRoute, Integer
37 SectionRouteService routeService; 37 SectionRouteService routeService;
38 38
39 /** 39 /**
40 - * @param String 40 + * @param map
41 * @throws 41 * @throws
42 * @Description: TODO(批量撤销路段) 42 * @Description: TODO(批量撤销路段)
43 */ 43 */
44 - @RequestMapping(value = "/batchDestroy", method = RequestMethod.GET) 44 + @RequestMapping(value = "/batchDestroy", method = RequestMethod.POST)
45 public Map<String, Object> updateBatch(@RequestParam Map<String, Object> map) { 45 public Map<String, Object> updateBatch(@RequestParam Map<String, Object> map) {
46 return routeService.updateSectionRouteInfoFormId(map); 46 return routeService.updateSectionRouteInfoFormId(map);
47 } 47 }
  48 + /**
  49 + * @param id //路段路由id
  50 + * @Description: TODO(撤销路段)
  51 + */
  52 + @RequestMapping(value = "/destroy", method = RequestMethod.POST)
  53 + public Map<String, Object> destroy(@RequestParam Integer id) {
  54 + return routeService.destroy(id);
  55 + }
48 56
49 /** 57 /**
50 * @param @param map 58 * @param @param map
src/main/java/com/bsth/controller/StationRouteController.java
@@ -137,6 +137,18 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer @@ -137,6 +137,18 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer
137 public List<Map<String, Object>> getStationRouteCenterPoints(@RequestParam Map<String, Object> map) { 137 public List<Map<String, Object>> getStationRouteCenterPoints(@RequestParam Map<String, Object> map) {
138 return service.getStationRouteCenterPoints(map); 138 return service.getStationRouteCenterPoints(map);
139 } 139 }
  140 +
  141 + /**
  142 + * @Description :TODO(查询线路某方向下所有站点)
  143 + *
  144 + * @param map <lineId:线路ID; direction:方向>
  145 + *
  146 + * @return List<Map<String, Object>>
  147 + */
  148 + @RequestMapping(value = "/getStationRouteList" , method = RequestMethod.GET)
  149 + public List<Map<String, Object>> getStationRouteList(@RequestParam Map<String, Object> map) {
  150 + return service.getStationRouteList(map);
  151 + }
140 152
141 /** 153 /**
142 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标) 154 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
src/main/java/com/bsth/controller/realcontrol/AdminUtilsController.java
@@ -2,9 +2,11 @@ package com.bsth.controller.realcontrol; @@ -2,9 +2,11 @@ package com.bsth.controller.realcontrol;
2 2
3 import com.bsth.data.directive.DayOfDirectives; 3 import com.bsth.data.directive.DayOfDirectives;
4 import com.bsth.data.gpsdata_v2.cache.GeoCacheData; 4 import com.bsth.data.gpsdata_v2.cache.GeoCacheData;
  5 +import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess;
5 import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread; 6 import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread;
6 import com.bsth.data.msg_queue.DirectivePushQueue; 7 import com.bsth.data.msg_queue.DirectivePushQueue;
7 import com.bsth.data.msg_queue.WebSocketPushQueue; 8 import com.bsth.data.msg_queue.WebSocketPushQueue;
  9 +import com.bsth.data.pilot80.PilotReport;
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.websocket.handler.SendUtils; 12 import com.bsth.websocket.handler.SendUtils;
@@ -41,29 +43,32 @@ public class AdminUtilsController { @@ -41,29 +43,32 @@ public class AdminUtilsController {
41 @Autowired 43 @Autowired
42 SendUtils sendUtils; 44 SendUtils sendUtils;
43 45
  46 + @Autowired
  47 + PilotReport pilotReport;
  48 +
44 /** 49 /**
45 * 出现重复班次的车辆 50 * 出现重复班次的车辆
46 * @param 51 * @param
47 52
48 - @RequestMapping(value = "/schRepeat", method = RequestMethod.POST)  
49 - public void schRepeat(@RequestParam String nbbm){  
50 - logger.info("前端通知,车辆 " + nbbm + "出现重复班次,开始检测...");  
51 - List<ScheduleRealInfo> list = dayOfSchedule.findByNbbm(nbbm);  
52 - logger.info("检测前,车辆班次数量:" + list.size());  
53 -  
54 - Map<Long, ScheduleRealInfo> map = new HashMap<>();  
55 - for(ScheduleRealInfo sch : list){  
56 - if(map.containsKey(sch.getId())){  
57 - logger.info("检测到重复ID: " + sch.getId());  
58 - }  
59 - map.put(sch.getId(), sch);  
60 - }  
61 -  
62 - logger.info("检测后,车辆班次数量:" + list.size());  
63 - if(map.values().size() > 0){  
64 - dayOfSchedule.replaceByNbbm(nbbm, map.values());  
65 - }  
66 - }*/ 53 + @RequestMapping(value = "/schRepeat", method = RequestMethod.POST)
  54 + public void schRepeat(@RequestParam String nbbm){
  55 + logger.info("前端通知,车辆 " + nbbm + "出现重复班次,开始检测...");
  56 + List<ScheduleRealInfo> list = dayOfSchedule.findByNbbm(nbbm);
  57 + logger.info("检测前,车辆班次数量:" + list.size());
  58 +
  59 + Map<Long, ScheduleRealInfo> map = new HashMap<>();
  60 + for(ScheduleRealInfo sch : list){
  61 + if(map.containsKey(sch.getId())){
  62 + logger.info("检测到重复ID: " + sch.getId());
  63 + }
  64 + map.put(sch.getId(), sch);
  65 + }
  66 +
  67 + logger.info("检测后,车辆班次数量:" + list.size());
  68 + if(map.values().size() > 0){
  69 + dayOfSchedule.replaceByNbbm(nbbm, map.values());
  70 + }
  71 + }*/
67 72
68 /* @RequestMapping(value = "/directivePushQueue") 73 /* @RequestMapping(value = "/directivePushQueue")
69 public void directivePushQueue(){ 74 public void directivePushQueue(){
@@ -132,10 +137,12 @@ public class AdminUtilsController { @@ -132,10 +137,12 @@ public class AdminUtilsController {
132 public Map<String, Integer> containerSize(){ 137 public Map<String, Integer> containerSize(){
133 Map<String, Integer> rs = new HashMap<>(); 138 Map<String, Integer> rs = new HashMap<>();
134 rs.put("60_size", dayOfDirectives.all60().size()); 139 rs.put("60_size", dayOfDirectives.all60().size());
  140 + rs.put("80_size", pilotReport.findAll().size());
135 rs.put("nbbm_sch_size", dayOfSchedule.findAll().size()); 141 rs.put("nbbm_sch_size", dayOfSchedule.findAll().size());
136 rs.put("lp_sch_size", dayOfSchedule.findAllByLpContainer().size()); 142 rs.put("lp_sch_size", dayOfSchedule.findAllByLpContainer().size());
137 rs.put("id_sch_size", dayOfSchedule.findAllByIdContainer().size()); 143 rs.put("id_sch_size", dayOfSchedule.findAllByIdContainer().size());
138 rs.put("pst_sch_size", dayOfSchedule.getPstSize()); 144 rs.put("pst_sch_size", dayOfSchedule.getPstSize());
  145 + rs.put("speeds_size", OverspeedProcess.size());
139 return rs; 146 return rs;
140 } 147 }
141 148
src/main/java/com/bsth/data/directive/DayOfDirectives.java
@@ -16,6 +16,7 @@ import org.springframework.stereotype.Component; @@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
16 16
17 import java.util.*; 17 import java.util.*;
18 import java.util.concurrent.ConcurrentHashMap; 18 import java.util.concurrent.ConcurrentHashMap;
  19 +import java.util.concurrent.ConcurrentMap;
19 20
20 /** 21 /**
21 * 22 *
@@ -29,13 +30,10 @@ import java.util.concurrent.ConcurrentHashMap; @@ -29,13 +30,10 @@ import java.util.concurrent.ConcurrentHashMap;
29 public class DayOfDirectives { 30 public class DayOfDirectives {
30 31
31 // 当日60指令缓存 32 // 当日60指令缓存
32 - private static Map<Integer, D60> d60Map; 33 + private static ConcurrentMap<Integer, D60> d60Map;
33 34
34 // 线路切换指令 64 35 // 线路切换指令 64
35 - public static Map<String, D64> d64Map;  
36 -  
37 - //等待C0_A4回复的用户  
38 - //public static Map<K, V> 36 + public static ConcurrentMap<String, D64> d64Map;
39 37
40 //等待入库的指令 38 //等待入库的指令
41 public static LinkedList<Directive> pstDirectives; 39 public static LinkedList<Directive> pstDirectives;
@@ -149,9 +147,53 @@ public class DayOfDirectives { @@ -149,9 +147,53 @@ public class DayOfDirectives {
149 return; 147 return;
150 148
151 directiveService.save(d60); 149 directiveService.save(d60);
  150 + }
  151 +
  152 + public void clear(String lineCode){
  153 + int c60 = 0, c64 = 0;
  154 +
  155 + Collection<D60> d60s = d60Map.values();
  156 + List<D60> rem60List = new ArrayList<>();
  157 + for(D60 d60 : d60s){
  158 + if(d60.getLineCode().equals(lineCode))
  159 + rem60List.add(d60);
  160 + }
  161 +
  162 + //清除60数据
  163 + for(D60 d60 : rem60List){
  164 + if(d60.getReply47() == null)
  165 + directiveService.save(d60);
  166 + if(null != d60Map.remove(d60.getMsgId()))
  167 + c60 ++;
  168 + }
  169 +
  170 + rem60List.clear();
  171 + if(c60 > 0)
  172 + logger.info("清除60数据 ," + c60);
  173 +
  174 + //找到该设备的64数据
  175 + Collection<D64> d64s = d64Map.values();
  176 + List<D64> rem64List = new ArrayList<>();
  177 + for(D64 d64 : d64s){
  178 + if(d64.get)
  179 + rem64List.add(d64);
  180 + }
  181 +
  182 + //清除64数据
  183 + for(D64 d64 : rem64List){
  184 + if(d64.getRespAck() == null)
  185 + directiveService.save64(d64);
  186 +
  187 + if(null != d64Map.remove(d64.getKey()))
  188 + c64 ++;
  189 + }
  190 +
  191 + rem64List.clear();
  192 + if(c64 > 0)
  193 + logger.info("清除64数据 ," + c64);
152 }*/ 194 }*/
153 -  
154 - public void clear(String device){ 195 +
  196 +/* public void clear(String device){
155 int c60 = 0, c64 = 0; 197 int c60 = 0, c64 = 0;
156 198
157 Collection<D60> d60s = d60Map.values(); 199 Collection<D60> d60s = d60Map.values();
@@ -193,6 +235,12 @@ public class DayOfDirectives { @@ -193,6 +235,12 @@ public class DayOfDirectives {
193 rem64List.clear(); 235 rem64List.clear();
194 if(c64 > 0) 236 if(c64 > 0)
195 logger.info("清除64数据 ," + c64); 237 logger.info("清除64数据 ," + c64);
  238 + }*/
  239 +
  240 + public void clearAll(){
  241 + d60Map = new ConcurrentHashMap<>();
  242 + d64Map = new ConcurrentHashMap<>();
  243 + logger.info("清除指令数据 ,,,");
196 } 244 }
197 245
198 public Collection<D60> all60(){ 246 public Collection<D60> all60(){
src/main/java/com/bsth/data/directive/DirectiveCreator.java
@@ -81,7 +81,7 @@ public class DirectiveCreator { @@ -81,7 +81,7 @@ public class DirectiveCreator {
81 } 81 }
82 82
83 83
84 - public D60 createD60_01(String nbbm, String text, int upDown, int state, Date alarmTime){ 84 + public D60 createD60_02(String nbbm, String text, int upDown, int state, Date alarmTime){
85 SimpleDateFormat sdfMMddHHmm = new SimpleDateFormat("MMddHHmm"); 85 SimpleDateFormat sdfMMddHHmm = new SimpleDateFormat("MMddHHmm");
86 86
87 Long timestamp = System.currentTimeMillis(); 87 Long timestamp = System.currentTimeMillis();
@@ -102,7 +102,7 @@ public class DirectiveCreator { @@ -102,7 +102,7 @@ public class DirectiveCreator {
102 directive.setMsgId(msgId); 102 directive.setMsgId(msgId);
103 // 构造数据 103 // 构造数据
104 data.setDeviceId(deviceId); 104 data.setDeviceId(deviceId);
105 - data.setDispatchInstruct((short) 0x01); 105 + data.setDispatchInstruct((short) 0x02);
106 data.setTimestamp(timestamp); 106 data.setTimestamp(timestamp);
107 data.setCompanyCode(company); 107 data.setCompanyCode(company);
108 data.setMsgId(msgId); 108 data.setMsgId(msgId);
src/main/java/com/bsth/data/directive/GatewayHttpUtils.java
@@ -48,9 +48,7 @@ public class GatewayHttpUtils { @@ -48,9 +48,7 @@ public class GatewayHttpUtils {
48 48
49 int statusCode = response.getStatusLine().getStatusCode(); 49 int statusCode = response.getStatusLine().getStatusCode();
50 if(statusCode != 200){ 50 if(statusCode != 200){
51 - //post.abort();  
52 logger.error("http client status code: " + statusCode); 51 logger.error("http client status code: " + statusCode);
53 - //return code;  
54 } 52 }
55 53
56 JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); 54 JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
src/main/java/com/bsth/data/gpsdata_v2/entity/GpsEntity.java
@@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; @@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
13 public class GpsEntity implements Cloneable{ 13 public class GpsEntity implements Cloneable{
14 14
15 /** 公司代码 */ 15 /** 公司代码 */
  16 + @JsonIgnore
16 private Short companyCode; 17 private Short companyCode;
17 18
18 /** 线路编码 */ 19 /** 线路编码 */
@@ -31,6 +32,7 @@ public class GpsEntity implements Cloneable{ @@ -31,6 +32,7 @@ public class GpsEntity implements Cloneable{
31 private String stationName; 32 private String stationName;
32 33
33 /** 到站时间 */ 34 /** 到站时间 */
  35 + @JsonIgnore
34 private long arrTime; 36 private long arrTime;
35 37
36 /** 经度 */ 38 /** 经度 */
@@ -56,6 +58,12 @@ public class GpsEntity implements Cloneable{ @@ -56,6 +58,12 @@ public class GpsEntity implements Cloneable{
56 58
57 /** 上下行(0 上行 , 1 下行 , -1 无效) */ 59 /** 上下行(0 上行 , 1 下行 , -1 无效) */
58 private Byte upDown; 60 private Byte upDown;
  61 +
  62 + /**
  63 + * 设备原始走向_营运状态
  64 + * 当设备状态和系统不一致时,该字段有值
  65 + */
  66 + private String origStateStr;
59 67
60 /** 车辆内部编码 */ 68 /** 车辆内部编码 */
61 private String nbbm; 69 private String nbbm;
@@ -379,4 +387,12 @@ public class GpsEntity implements Cloneable{ @@ -379,4 +387,12 @@ public class GpsEntity implements Cloneable{
379 public void setPlanCode(String planCode) { 387 public void setPlanCode(String planCode) {
380 this.planCode = planCode; 388 this.planCode = planCode;
381 } 389 }
  390 +
  391 + public String getOrigStateStr() {
  392 + return origStateStr;
  393 + }
  394 +
  395 + public void setOrigStateStr(String origStateStr) {
  396 + this.origStateStr = origStateStr;
  397 + }
382 } 398 }
src/main/java/com/bsth/data/gpsdata_v2/handlers/GpsStateProcess.java
@@ -7,6 +7,9 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; @@ -7,6 +7,9 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
7 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Component; 8 import org.springframework.stereotype.Component;
9 9
  10 +import java.util.concurrent.ConcurrentHashMap;
  11 +import java.util.concurrent.ConcurrentMap;
  12 +
10 /** 13 /**
11 * GPS 状态处理 14 * GPS 状态处理
12 * Created by panzhao on 2017/11/15. 15 * Created by panzhao on 2017/11/15.
@@ -20,6 +23,13 @@ public class GpsStateProcess { @@ -20,6 +23,13 @@ public class GpsStateProcess {
20 @Autowired 23 @Autowired
21 GpsStatusManager gpsStatusManager; 24 GpsStatusManager gpsStatusManager;
22 25
  26 + /**
  27 + * 设置状态差异连续次数
  28 + */
  29 + private static ConcurrentMap<String, Integer> stateDiffMap = new ConcurrentHashMap<>();
  30 +
  31 + private final static int CHANGE_THRESHOLD = 2;
  32 +
23 public void process(GpsEntity gps) { 33 public void process(GpsEntity gps) {
24 //在执行的任务 34 //在执行的任务
25 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); 35 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
@@ -27,16 +37,40 @@ public class GpsStateProcess { @@ -27,16 +37,40 @@ public class GpsStateProcess {
27 if (null == sch) 37 if (null == sch)
28 return; 38 return;
29 39
30 - byte upDown = Byte.parseByte(sch.getXlDir()); 40 + int upDown = Integer.parseInt(sch.getXlDir());
31 int schState = dayOfSchedule.emptyService(sch)?1:0; 41 int schState = dayOfSchedule.emptyService(sch)?1:0;
32 - 42 + String device = gps.getDeviceId();
  43 + /**
  44 + * 网关在进终点的时候,会直接将当前点位状态改变
  45 + * 为避免出现单个点的状态跳动,设置一下切换阈值
  46 + */
33 if(gps.getState() != schState || gps.getUpDown() != upDown){ 47 if(gps.getState() != schState || gps.getUpDown() != upDown){
34 - //下发指令纠正车载的 营运状态 和 走向  
35 - gpsStatusManager.changeServiceState(gps.getNbbm(), upDown, schState, "同步@系统"); 48 + Integer count = 0;
  49 + if(stateDiffMap.containsKey(device))
  50 + count = stateDiffMap.get(device);
  51 +
  52 + count ++;
  53 +
  54 + if(count >= CHANGE_THRESHOLD){
  55 + //下发指令纠正车载的 营运状态 和 走向
  56 + gpsStatusManager.changeServiceState(gps.getNbbm(), upDown, schState, "同步@系统");
  57 + count = 0;
  58 + }
  59 +
  60 + stateDiffMap.put(device, count);
  61 +
  62 + //记录原始设备状态
  63 + gps.setOrigStateStr(gps.getUpDown() + "_" + gps.getState());
36 } 64 }
  65 + else
  66 + stateDiffMap.put(device, 0);
37 67
38 if (gps.getUpDown() != upDown) { 68 if (gps.getUpDown() != upDown) {
39 - gps.setUpDown(upDown);//修正走向 69 + gps.setUpDown((byte) upDown);//修正走向
  70 + }
  71 +
  72 + if(gps.getState() != schState){
  73 + gps.setState(schState);//修正营运状态
40 } 74 }
41 75
42 if (!sch.getXlBm().equals(gps.getLineId())) { 76 if (!sch.getXlBm().equals(gps.getLineId())) {
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
@@ -144,6 +144,8 @@ public class InStationProcess { @@ -144,6 +144,8 @@ public class InStationProcess {
144 dayOfSchedule.addExecPlan(next); 144 dayOfSchedule.addExecPlan(next);
145 inStationAndInPark(sch, next);//进站既进场 145 inStationAndInPark(sch, next);//进站既进场
146 } 146 }
  147 + else
  148 + dayOfSchedule.removeExecPlan(nbbm);
147 149
148 //路牌的下一个班次,页面显示起点实际到达时间 150 //路牌的下一个班次,页面显示起点实际到达时间
149 ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch); 151 ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch);
@@ -176,9 +178,14 @@ public class InStationProcess { @@ -176,9 +178,14 @@ public class InStationProcess {
176 if(null == next && gps.isService()){ 178 if(null == next && gps.isService()){
177 nonService(sch, "结束@系统");//营运结束 179 nonService(sch, "结束@系统");//营运结束
178 } 180 }
179 - //下发运营指令  
180 - DirectivePushQueue.put6003(next, "到站@系统");  
181 181
  182 + /**
  183 + * 下一班不是全程班次的时候,下发运营指令
  184 + * 全程班次时,由网关根据进出起终点,自动切换走向
  185 +
  186 + if(null != next && !next.getBcType().equals("normal"))
  187 + DirectivePushQueue.put6003(next, "到站@系统");
  188 + */
182 //下发调度指令 189 //下发调度指令
183 DirectivePushQueue.put6002(next, doneSum, "到站@系统", ""); 190 DirectivePushQueue.put6002(next, doneSum, "到站@系统", "");
184 } 191 }
src/main/java/com/bsth/data/gpsdata_v2/handlers/overspeed/OverspeedProcess.java
@@ -43,7 +43,7 @@ public class OverspeedProcess { @@ -43,7 +43,7 @@ public class OverspeedProcess {
43 */ 43 */
44 private static Map<String, Integer> contSpeedMap; 44 private static Map<String, Integer> contSpeedMap;
45 45
46 - Logger logger = LoggerFactory.getLogger(this.getClass()); 46 + static Logger logger = LoggerFactory.getLogger(OverspeedProcess.class);
47 47
48 static{ 48 static{
49 multimap = ArrayListMultimap.create(); 49 multimap = ArrayListMultimap.create();
@@ -51,6 +51,10 @@ public class OverspeedProcess { @@ -51,6 +51,10 @@ public class OverspeedProcess {
51 realOverspeedMap = new HashMap(); 51 realOverspeedMap = new HashMap();
52 } 52 }
53 53
  54 + public static int size(){
  55 + return multimap.size();
  56 + }
  57 +
54 public static void clear(){ 58 public static void clear(){
55 multimap = null; 59 multimap = null;
56 multimap = ArrayListMultimap.create(); 60 multimap = ArrayListMultimap.create();
@@ -60,6 +64,8 @@ public class OverspeedProcess { @@ -60,6 +64,8 @@ public class OverspeedProcess {
60 64
61 realOverspeedMap = null; 65 realOverspeedMap = null;
62 realOverspeedMap = new HashMap(); 66 realOverspeedMap = new HashMap();
  67 +
  68 + logger.info("清理超速缓存数据,,,");
63 } 69 }
64 70
65 public boolean process(GpsEntity gps){ 71 public boolean process(GpsEntity gps){
src/main/java/com/bsth/data/gpsdata_v2/utils/GpsDataUtils.java
@@ -15,6 +15,8 @@ public class GpsDataUtils { @@ -15,6 +15,8 @@ public class GpsDataUtils {
15 15
16 static Logger logger = LoggerFactory.getLogger(GpsDataUtils.class); 16 static Logger logger = LoggerFactory.getLogger(GpsDataUtils.class);
17 17
  18 + private final static long MAX_DIFF = 1000 * 60 * 60 * 24;
  19 +
18 /** 20 /**
19 * 过滤无效的gps点位 21 * 过滤无效的gps点位
20 * 22 *
@@ -24,9 +26,16 @@ public class GpsDataUtils { @@ -24,9 +26,16 @@ public class GpsDataUtils {
24 public static List<GpsEntity> clearInvalid(List<GpsEntity> list) { 26 public static List<GpsEntity> clearInvalid(List<GpsEntity> list) {
25 List<GpsEntity> rs = new ArrayList<>(); 27 List<GpsEntity> rs = new ArrayList<>();
26 28
  29 + long t = System.currentTimeMillis();
27 try { 30 try {
28 GpsEntity prev; 31 GpsEntity prev;
29 for (GpsEntity gps : list) { 32 for (GpsEntity gps : list) {
  33 + if(Math.abs(gps.getTimestamp() - t) > MAX_DIFF){
  34 + //尝试校准GPS时间
  35 + gps.setTimestamp(t + 1);
  36 + gps.setAbnormalStatus("timeError");
  37 + }
  38 +
30 prev = GpsRealData.get(gps.getDeviceId()); 39 prev = GpsRealData.get(gps.getDeviceId());
31 40
32 //不接收过期数据 41 //不接收过期数据
@@ -48,7 +57,7 @@ public class GpsDataUtils { @@ -48,7 +57,7 @@ public class GpsDataUtils {
48 if (rs.size() < list.size()) 57 if (rs.size() < list.size())
49 logger.info("过滤无效的点位 : " + (list.size() - rs.size())); 58 logger.info("过滤无效的点位 : " + (list.size() - rs.size()));
50 } catch (Exception e) { 59 } catch (Exception e) {
51 - logger.error("", e); 60 + logger.error("过滤GPS出现异常", e);
52 rs = list; 61 rs = list;
53 } 62 }
54 return rs; 63 return rs;
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
@@ -24,7 +24,7 @@ public class DirectivePushQueue implements ApplicationContextAware { @@ -24,7 +24,7 @@ public class DirectivePushQueue implements ApplicationContextAware {
24 static ConcurrentLinkedQueue<QueueData_Directive> linkedList; 24 static ConcurrentLinkedQueue<QueueData_Directive> linkedList;
25 static DataPushThread thread; 25 static DataPushThread thread;
26 static DirectiveService directiveService; 26 static DirectiveService directiveService;
27 - static long t; 27 + static long threadT;
28 28
29 /** 29 /**
30 * 下发运营指令6003的最小间隔时间 30 * 下发运营指令6003的最小间隔时间
@@ -34,11 +34,11 @@ public class DirectivePushQueue implements ApplicationContextAware { @@ -34,11 +34,11 @@ public class DirectivePushQueue implements ApplicationContextAware {
34 /** 34 /**
35 * 车辆 ——> 上次下发6003的时间 35 * 车辆 ——> 上次下发6003的时间
36 */ 36 */
37 - static ConcurrentMap<String, Long> lastSend6003Map; 37 + static ConcurrentMap<String, Long> lastSend60TimeMap;
38 38
39 static { 39 static {
40 linkedList = new ConcurrentLinkedQueue<>(); 40 linkedList = new ConcurrentLinkedQueue<>();
41 - lastSend6003Map = new ConcurrentHashMap<>(); 41 + lastSend60TimeMap = new ConcurrentHashMap<>();
42 } 42 }
43 43
44 public static void put6002(ScheduleRealInfo sch, int finish, String sender, String txtPrefix){ 44 public static void put6002(ScheduleRealInfo sch, int finish, String sender, String txtPrefix){
@@ -52,12 +52,13 @@ public class DirectivePushQueue implements ApplicationContextAware { @@ -52,12 +52,13 @@ public class DirectivePushQueue implements ApplicationContextAware {
52 qd6002.setTxtPrefix(txtPrefix); 52 qd6002.setTxtPrefix(txtPrefix);
53 53
54 linkedList.add(qd6002); 54 linkedList.add(qd6002);
  55 + lastSend60TimeMap.put(sch.getClZbh(), System.currentTimeMillis());
55 } 56 }
56 57
57 public static void put6003(String nbbm, int state, int upDown, String sender){ 58 public static void put6003(String nbbm, int state, int upDown, String sender){
58 long t = System.currentTimeMillis(); 59 long t = System.currentTimeMillis();
59 - if(lastSend6003Map.containsKey(nbbm)  
60 - && t - lastSend6003Map.get(nbbm) < MIN_SEND6003_SPACE) 60 + if(lastSend60TimeMap.containsKey(nbbm)
  61 + && t - lastSend60TimeMap.get(nbbm) < MIN_SEND6003_SPACE)
61 return; //最短下发间隔 62 return; //最短下发间隔
62 63
63 QueueData_Directive qd6003 = new QueueData_Directive(); 64 QueueData_Directive qd6003 = new QueueData_Directive();
@@ -68,7 +69,7 @@ public class DirectivePushQueue implements ApplicationContextAware { @@ -68,7 +69,7 @@ public class DirectivePushQueue implements ApplicationContextAware {
68 qd6003.setCode("60_03"); 69 qd6003.setCode("60_03");
69 70
70 linkedList.add(qd6003); 71 linkedList.add(qd6003);
71 - lastSend6003Map.put(nbbm, t); 72 + lastSend60TimeMap.put(nbbm, t);
72 } 73 }
73 74
74 public static void put6003(ScheduleRealInfo sch, String sender){ 75 public static void put6003(ScheduleRealInfo sch, String sender){
@@ -146,7 +147,7 @@ public class DirectivePushQueue implements ApplicationContextAware { @@ -146,7 +147,7 @@ public class DirectivePushQueue implements ApplicationContextAware {
146 sleepFlag = true; 147 sleepFlag = true;
147 } 148 }
148 } 149 }
149 - t = System.currentTimeMillis(); 150 + threadT = System.currentTimeMillis();
150 } 151 }
151 catch(InterruptedException e){ 152 catch(InterruptedException e){
152 log.error("", e); 153 log.error("", e);
src/main/java/com/bsth/data/safe_driv/SafeDrivCenter.java
@@ -3,6 +3,8 @@ package com.bsth.data.safe_driv; @@ -3,6 +3,8 @@ package com.bsth.data.safe_driv;
3 import com.bsth.websocket.handler.SendUtils; 3 import com.bsth.websocket.handler.SendUtils;
4 import org.joda.time.format.DateTimeFormat; 4 import org.joda.time.format.DateTimeFormat;
5 import org.joda.time.format.DateTimeFormatter; 5 import org.joda.time.format.DateTimeFormatter;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
6 import org.springframework.beans.BeansException; 8 import org.springframework.beans.BeansException;
7 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.context.ApplicationContext; 10 import org.springframework.context.ApplicationContext;
@@ -33,6 +35,8 @@ public class SafeDrivCenter implements ApplicationContextAware { @@ -33,6 +35,8 @@ public class SafeDrivCenter implements ApplicationContextAware {
33 */ 35 */
34 private static Map<String, SafeDriv> safeMap; 36 private static Map<String, SafeDriv> safeMap;
35 37
  38 + static Logger logger = LoggerFactory.getLogger(SafeDrivCenter.class);
  39 +
36 static { 40 static {
37 data = new HashSet<>(); 41 data = new HashSet<>();
38 safeMap = new HashMap<>(); 42 safeMap = new HashMap<>();
@@ -61,6 +65,7 @@ public class SafeDrivCenter implements ApplicationContextAware { @@ -61,6 +65,7 @@ public class SafeDrivCenter implements ApplicationContextAware {
61 public static void clear(){ 65 public static void clear(){
62 data = new HashSet<>(); 66 data = new HashSet<>();
63 safeMap = new HashMap<>(); 67 safeMap = new HashMap<>();
  68 + logger.info("清除安全驾驶数据,,,");
64 } 69 }
65 70
66 @Override 71 @Override
src/main/java/com/bsth/data/schedule/thread/CalcOilThread.java
1 package com.bsth.data.schedule.thread; 1 package com.bsth.data.schedule.thread;
2 2
  3 +import com.bsth.data.directive.DayOfDirectives;
3 import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess; 4 import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess;
4 import com.bsth.service.oil.DlbService; 5 import com.bsth.service.oil.DlbService;
5 import com.bsth.data.safe_driv.SafeDrivCenter; 6 import com.bsth.data.safe_driv.SafeDrivCenter;
@@ -27,6 +28,9 @@ public class CalcOilThread extends Thread{ @@ -27,6 +28,9 @@ public class CalcOilThread extends Thread{
27 SheetService sheetService; 28 SheetService sheetService;
28 Logger logger = LoggerFactory.getLogger(this.getClass()); 29 Logger logger = LoggerFactory.getLogger(this.getClass());
29 30
  31 + @Autowired
  32 + DayOfDirectives dayOfDirectives;
  33 +
30 @Override 34 @Override
31 public void run() { 35 public void run() {
32 try{ 36 try{
@@ -37,12 +41,15 @@ public class CalcOilThread extends Thread{ @@ -37,12 +41,15 @@ public class CalcOilThread extends Thread{
37 logger.info("开始计算班次准点率...."); 41 logger.info("开始计算班次准点率....");
38 sheetService.saveSheetList(""); 42 sheetService.saveSheetList("");
39 logger.info("计算班次准点率结束!"); 43 logger.info("计算班次准点率结束!");
40 - //清除安全驾驶数据 先临时蹭这个线程  
41 - SafeDrivCenter.clear();  
42 - //清除超速缓存数据  
43 - OverspeedProcess.clear();  
44 } catch(Exception e){ 44 } catch(Exception e){
45 logger.error("计算路单里程加注量失败",e); 45 logger.error("计算路单里程加注量失败",e);
46 } 46 }
  47 +
  48 + //清除指令数据
  49 + dayOfDirectives.clearAll();
  50 + //清除安全驾驶数据
  51 + SafeDrivCenter.clear();
  52 + //清除超速缓存数据
  53 + OverspeedProcess.clear();
47 } 54 }
48 } 55 }
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 com.bsth.data.BasicData;  
4 import com.bsth.data.LineConfigData; 3 import com.bsth.data.LineConfigData;
5 import com.bsth.data.directive.DayOfDirectives; 4 import com.bsth.data.directive.DayOfDirectives;
6 import com.bsth.data.gpsdata_v2.cache.GpsCacheData; 5 import com.bsth.data.gpsdata_v2.cache.GpsCacheData;
@@ -56,17 +55,15 @@ public class ScheduleRefreshThread extends Thread{ @@ -56,17 +55,15 @@ public class ScheduleRefreshThread extends Thread{
56 55
57 if(oldSchDate == null || !oldSchDate.equals(currSchDate)){ 56 if(oldSchDate == null || !oldSchDate.equals(currSchDate)){
58 57
59 - //logger.info(lineCode + "开始翻班, " + currSchDate);  
60 -  
61 try{ 58 try{
62 - //清除指令数据  
63 Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode); 59 Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode);
64 for(String car : cars){ 60 for(String car : cars){
65 - dayOfDirectives.clear(BasicData.deviceId2NbbmMap.inverse().get(car));  
66 GpsCacheData.remove(car); 61 GpsCacheData.remove(car);
67 } 62 }
68 //清除驾驶员上报数据 63 //清除驾驶员上报数据
69 pilotReport.clear(lineCode); 64 pilotReport.clear(lineCode);
  65 + //清除指令数据 指令数据,直接定时全部清空
  66 + //dayOfDirectives.clear(lineCode);
70 }catch (Exception e){ 67 }catch (Exception e){
71 logger.error("清理 60 和 80出现问题", e); 68 logger.error("清理 60 和 80出现问题", e);
72 } 69 }
src/main/java/com/bsth/repository/StationRouteRepository.java
@@ -301,7 +301,77 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int @@ -301,7 +301,77 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
301 " s.update_date AS stationRouteUpdateDate FROM bsth_c_stationroute s WHERE s.id = ?1 ) a " + 301 " s.update_date AS stationRouteUpdateDate FROM bsth_c_stationroute s WHERE s.id = ?1 ) a " +
302 " LEFT JOIN bsth_c_station b ON a.stationRouteStation = b.id", nativeQuery=true) 302 " LEFT JOIN bsth_c_station b ON a.stationRouteStation = b.id", nativeQuery=true)
303 List<Object[]> findStationRouteInfo(Integer id); 303 List<Object[]> findStationRouteInfo(Integer id);
304 - 304 +
  305 + /**
  306 + * @Description : TODO(根据站点路由Id查询详情)
  307 + *
  308 + * @param id:站点路由ID
  309 + *
  310 + * @return List<Object[]>
  311 + */
  312 + @Query(value = "SELECT a.stationRouteLine," +
  313 + " a.stationRouteStation," +
  314 + " a.stationRouteCode," +
  315 + " a.stationRouteLIneCode," +
  316 + " a.stationRouteStationMark," +
  317 + " a.stationOutStationNmber," +
  318 + " a.stationRoutedirections," +
  319 + " a.stationRouteDistances," +
  320 + " a.stationRouteToTime," +
  321 + " a.staitonRouteFirstTime," +
  322 + " a.stationRouteEndTime," +
  323 + " a.stationRouteDescriptions," +
  324 + " a.stationRouteDestroy," +
  325 + " a.stationRouteVersions," +
  326 + " a.stationRouteCreateBy," +
  327 + " a.stationRouteCreateDate," +
  328 + " a.stationRouteUpdateBy," +
  329 + " a.stationRouteUpdateDate," +
  330 + " b.id AS stationId," +
  331 + " b.station_cod AS stationCode," +
  332 + " a.stationRouteName," +
  333 + " b.road_coding AS stationRoadCoding," +
  334 + " b.db_type AS stationDbType," +
  335 + " b.b_jwpoints AS stationJwpoints," +
  336 + " b.g_lonx AS stationGlonx," +
  337 + " b.g_laty AS stationGlaty," +
  338 + " b.x AS stationX," +
  339 + " b.y AS stationY," +
  340 + " ST_AsText(b.b_polygon_grid) as stationBPolyonGrid," +
  341 + " ST_AsText(b.g_polygon_grid) AS stationGPloyonGrid, " +
  342 + " b.destroy AS stationDestroy," +
  343 + " b.radius AS stationRadius," +
  344 + " b.shapes_type AS stationShapesType," +
  345 + " b.versions AS stationVersions," +
  346 + " b.descriptions AS sttationDescriptions," +
  347 + " b.create_by AS stationCreateBy," +
  348 + " b.create_date AS stationCreateDate," +
  349 + " b.update_by AS stationUpdateBy," +
  350 + " b.update_date AS stationUpdateDate," +
  351 + " a.stationRouteId,b.station_name as zdmc "+
  352 + " FROM ( SELECT s.id AS stationRouteId," +
  353 + " s.line AS stationRouteLine," +
  354 + " s.station as stationRouteStation," +
  355 + " s.station_name AS stationRouteName," +
  356 + " s.station_route_code as stationRouteCode," +
  357 + " s.line_code AS stationRouteLIneCode," +
  358 + " s.station_mark AS stationRouteStationMark," +
  359 + " s.out_station_nmber AS stationOutStationNmber," +
  360 + " s.directions AS stationRoutedirections," +
  361 + " s.distances AS stationRouteDistances," +
  362 + " s.to_time AS stationRouteToTime," +
  363 + " s.first_time AS staitonRouteFirstTime," +
  364 + " s.end_time AS stationRouteEndTime," +
  365 + " s.descriptions AS stationRouteDescriptions," +
  366 + " s.destroy AS stationRouteDestroy," +
  367 + " s.versions AS stationRouteVersions," +
  368 + " s.create_by AS stationRouteCreateBy," +
  369 + " s.create_date AS stationRouteCreateDate," +
  370 + " s.update_by AS stationRouteUpdateBy," +
  371 + " s.update_date AS stationRouteUpdateDate FROM bsth_c_stationroute s WHERE s.line = ?1 and s.directions = ?2 and s.destroy = 0) a " +
  372 + " LEFT JOIN bsth_c_station b ON a.stationRouteStation = b.id", nativeQuery=true)
  373 + List<Object[]> getStationRouteList(Integer lineId, Integer dir);
  374 +
305 List<StationRoute> findByLine(Line line); 375 List<StationRoute> findByLine(Line line);
306 376
307 @EntityGraph(value = "stationRoute_station", type = EntityGraph.EntityGraphType.FETCH) 377 @EntityGraph(value = "stationRoute_station", type = EntityGraph.EntityGraphType.FETCH)
src/main/java/com/bsth/service/SectionRouteService.java
@@ -67,5 +67,5 @@ public interface SectionRouteService extends BaseService&lt;SectionRoute, Integer&gt; @@ -67,5 +67,5 @@ public interface SectionRouteService extends BaseService&lt;SectionRoute, Integer&gt;
67 67
68 void batchUpdate(Integer lineId, String lineCode); 68 void batchUpdate(Integer lineId, String lineCode);
69 69
70 - 70 + Map<String,Object> destroy(Integer id);
71 } 71 }
src/main/java/com/bsth/service/StationRouteService.java
@@ -92,6 +92,15 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt; @@ -92,6 +92,15 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt;
92 * @return List<Map<String, Object>> 92 * @return List<Map<String, Object>>
93 */ 93 */
94 List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map); 94 List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map);
  95 +
  96 + /**
  97 + * @Description :TODO(查询线路某方向下所有站点)
  98 + *
  99 + * @param map <lineId:线路ID; direction:方向>
  100 + *
  101 + * @return List<Map<String, Object>>
  102 + */
  103 + List<Map<String, Object>> getStationRouteList(Map<String, Object> map);
95 104
96 /** 105 /**
97 * @Description :TODO(撤销站点) 106 * @Description :TODO(撤销站点)
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -128,7 +128,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -128,7 +128,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
128 text += " (放站到"+sch.getMajorStationName()+"带客)"; 128 text += " (放站到"+sch.getMajorStationName()+"带客)";
129 } 129 }
130 130
131 - //下发0x01指令 调度指令(闹钟有效) 131 + //下发0x02指令 调度指令(闹钟有效)
132 long t = System.currentTimeMillis() + 1000 * 30, 132 long t = System.currentTimeMillis() + 1000 * 30,
133 alarmTime = sch.getDfsjT() < t?t:sch.getDfsjT(); 133 alarmTime = sch.getDfsjT() < t?t:sch.getDfsjT();
134 134
@@ -139,7 +139,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -139,7 +139,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
139 int state = 0;//营运状态 139 int state = 0;//营运状态
140 if(dayOfSchedule.emptyService(sch)) 140 if(dayOfSchedule.emptyService(sch))
141 state = 1; 141 state = 1;
142 - d60 = new DirectiveCreator().createD60_01(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir()) 142 + d60 = new DirectiveCreator().createD60_02(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir())
143 , state, new Date(alarmTime)); 143 , state, new Date(alarmTime));
144 144
145 d60.setLineCode(sch.getXlBm()); 145 d60.setLineCode(sch.getXlBm());
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -5,6 +5,7 @@ import com.bsth.data.BasicData; @@ -5,6 +5,7 @@ import com.bsth.data.BasicData;
5 import com.bsth.data.forecast.entity.ArrivalEntity; 5 import com.bsth.data.forecast.entity.ArrivalEntity;
6 import com.bsth.data.gpsdata_v2.GpsRealData; 6 import com.bsth.data.gpsdata_v2.GpsRealData;
7 import com.bsth.data.gpsdata_v2.cache.GeoCacheData; 7 import com.bsth.data.gpsdata_v2.cache.GeoCacheData;
  8 +import com.bsth.data.gpsdata_v2.cache.GpsCacheData;
8 import com.bsth.data.gpsdata_v2.entity.GpsEntity; 9 import com.bsth.data.gpsdata_v2.entity.GpsEntity;
9 import com.bsth.data.gpsdata_v2.utils.GeoUtils; 10 import com.bsth.data.gpsdata_v2.utils.GeoUtils;
10 import com.bsth.data.pilot80.PilotReport; 11 import com.bsth.data.pilot80.PilotReport;
@@ -492,6 +493,7 @@ public class GpsServiceImpl implements GpsService { @@ -492,6 +493,7 @@ public class GpsServiceImpl implements GpsService {
492 try { 493 try {
493 494
494 gpsRealData.remove(device); 495 gpsRealData.remove(device);
  496 + GpsCacheData.remove(BasicData.deviceId2NbbmMap.get(device));
495 rs.put("status", ResponseCode.SUCCESS); 497 rs.put("status", ResponseCode.SUCCESS);
496 } catch (Exception e) { 498 } catch (Exception e) {
497 rs.put("status", ResponseCode.ERROR); 499 rs.put("status", ResponseCode.ERROR);
src/main/java/com/bsth/service/impl/SectionRouteServiceImpl.java
@@ -122,7 +122,7 @@ public class SectionRouteServiceImpl extends BaseServiceImpl&lt;SectionRoute, Integ @@ -122,7 +122,7 @@ public class SectionRouteServiceImpl extends BaseServiceImpl&lt;SectionRoute, Integ
122 } 122 }
123 123
124 /** 124 /**
125 - * @Description :TODO(查询路段信息) 125 + * @Description :TODO(查询缓存路段信息)
126 * 126 *
127 * @param map <line.id_eq:线路ID; directions_eq:方向> 127 * @param map <line.id_eq:线路ID; directions_eq:方向>
128 * 128 *
@@ -408,4 +408,25 @@ public class SectionRouteServiceImpl extends BaseServiceImpl&lt;SectionRoute, Integ @@ -408,4 +408,25 @@ public class SectionRouteServiceImpl extends BaseServiceImpl&lt;SectionRoute, Integ
408 public void batchUpdate(Integer lineId, String lineCode) { 408 public void batchUpdate(Integer lineId, String lineCode) {
409 repository.batchUpdate(lineId,lineCode); 409 repository.batchUpdate(lineId,lineCode);
410 } 410 }
  411 +
  412 +
  413 +
  414 + /**
  415 + * @Description : TODO(根据路段路由Id批量撤销路段)
  416 + *
  417 + * @param id <id:路段路由ID>
  418 + */
  419 + @Override
  420 + @Transactional
  421 + public Map<String, Object> destroy(Integer id) {
  422 + Map<String, Object> resultMap = new HashMap<String, Object>();
  423 + try {
  424 + repository.sectionRouteIsDestroyUpdBatch(id);
  425 + resultMap.put("status", ResponseCode.SUCCESS);
  426 + } catch (Exception e) {
  427 + resultMap.put("status", ResponseCode.ERROR);
  428 + logger.error("save erro.", e);
  429 + }
  430 + return resultMap;
  431 + }
411 } 432 }
412 \ No newline at end of file 433 \ No newline at end of file
src/main/java/com/bsth/service/impl/SectionServiceImpl.java
@@ -453,7 +453,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem @@ -453,7 +453,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
453 if(!sectionsBpoints.equals("")) { 453 if(!sectionsBpoints.equals("")) {
454 bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")"; 454 bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
455 } 455 }
456 - repository.systemSave(sectionCode, sectionName, "", "", "", "", gsectionVector, bsectionVectorS, "", "", "", 0, 0, "", 0, "", 1, sectionId); 456 + repository.systemSave(sectionCode, sectionName, null, "", "", "", gsectionVector, bsectionVectorS, "", "", "", 0, 0, "", 0, "", 1, sectionId);
457 457
458 routeRepository.sectionUpdSectionRouteCode(lineId, directions,routeCode+i); 458 routeRepository.sectionUpdSectionRouteCode(lineId, directions,routeCode+i);
459 SectionRoute route = new SectionRoute(); 459 SectionRoute route = new SectionRoute();
@@ -636,7 +636,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem @@ -636,7 +636,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
636 // 原坐标类型 636 // 原坐标类型
637 String dbType = map.get("dbType").equals("") ? "" : map.get("dbType").toString(); 637 String dbType = map.get("dbType").equals("") ? "" : map.get("dbType").toString();
638 // 说明 638 // 说明
639 - String descriptions = map.get("descriptions").equals("") ? "" : map.get("descriptions").toString(); 639 + String descriptions = "";
640 // 是否撤销 640 // 是否撤销
641 Integer destroy = map.get("destroy").equals("") ? null : Integer.parseInt(map.get("destroy").toString()); 641 Integer destroy = map.get("destroy").equals("") ? null : Integer.parseInt(map.get("destroy").toString());
642 // 方向 642 // 方向
@@ -662,14 +662,19 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem @@ -662,14 +662,19 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
662 // 路段路由 662 // 路段路由
663 Integer sectionrouteCode = map.get("sectionrouteCode").equals("") ? null : Integer.valueOf(map.get("sectionrouteCode").toString()); 663 Integer sectionrouteCode = map.get("sectionrouteCode").equals("") ? null : Integer.valueOf(map.get("sectionrouteCode").toString());
664 SectionRoute resultS = routeRepository.findOne(sectionRouteId); 664 SectionRoute resultS = routeRepository.findOne(sectionRouteId);
665 -// int old_code = resultS.getSectionrouteCode();  
666 - // 如果为空,默认在第一个路段  
667 - if(sectionrouteCode!=null) {  
668 - sectionrouteCode += 1;  
669 - }else {  
670 - sectionrouteCode = 1;  
671 - }  
672 - routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode); 665 + int old_code = resultS.getSectionrouteCode();
  666 + // 是否修改路段序号标记
  667 + boolean type = false;
  668 + if(sectionrouteCode!=null) {
  669 + if(++sectionrouteCode == old_code) {
  670 + type = true;
  671 + }
  672 + // 默认是最前面路段
  673 + }else {
  674 + sectionrouteCode = 1;
  675 + }
  676 + if(!type)
  677 + routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode);
673 // 限速 678 // 限速
674 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString()); 679 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString());
675 // 版本 680 // 版本
@@ -709,7 +714,6 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem @@ -709,7 +714,6 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
709 route.setDirections(directions); 714 route.setDirections(directions);
710 route.setVersions(version); 715 route.setVersions(version);
711 route.setDestroy(destroy); 716 route.setDestroy(destroy);
712 - route.setDescriptions(descriptions);  
713 route.setCreateBy(createBy); 717 route.setCreateBy(createBy);
714 route.setUpdateBy(updateBy); 718 route.setUpdateBy(updateBy);
715 route.setLine(line); 719 route.setLine(line);
@@ -784,17 +788,24 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem @@ -784,17 +788,24 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
784 // 路段时长 788 // 路段时长
785 Double sectionTime = map.get("sectionTime").equals("") ? null : Double.valueOf(map.get("sectionTime").toString()); 789 Double sectionTime = map.get("sectionTime").equals("") ? null : Double.valueOf(map.get("sectionTime").toString());
786 // 路段路由 790 // 路段路由
787 -// Integer sectionrouteCode = map.get("sectionrouteCode").equals("") ? null : Integer.valueOf(map.get("sectionrouteCode").toString());  
788 - Integer sectionrouteCode = 1; 791 + Integer sectionrouteCode = map.get("sectionrouteCode").equals("") ? null : Integer.valueOf(map.get("sectionrouteCode").toString());
  792 +// Integer sectionrouteCode = 1;
789 SectionRouteCache resultS = routeCacheRepository.findOne(sectionRouteId); 793 SectionRouteCache resultS = routeCacheRepository.findOne(sectionRouteId);
790 int old_code = resultS.getSectionrouteCode(); 794 int old_code = resultS.getSectionrouteCode();
  795 + // 是否修改路段序号标记
  796 + boolean type = false;
791 if(sectionrouteCode!=null) { 797 if(sectionrouteCode!=null) {
792 - sectionrouteCode += 1; 798 + if(sectionrouteCode == old_code) {
  799 + type = true;
  800 + } else {
  801 + sectionrouteCode += 1;
  802 + }
793 // 默认是最前面路段 803 // 默认是最前面路段
794 }else { 804 }else {
795 sectionrouteCode = 1; 805 sectionrouteCode = 1;
796 } 806 }
797 - routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode); 807 + if(!type)
  808 + routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode);
798 // 限速 809 // 限速
799 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString()); 810 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString());
800 // 版本 811 // 版本
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
@@ -196,123 +196,80 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -196,123 +196,80 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
196 List<Map<String, Object>> staitonChildren= new ArrayList<Map<String, Object>>(); 196 List<Map<String, Object>> staitonChildren= new ArrayList<Map<String, Object>>();
197 197
198 if(stationList.size()>0) { 198 if(stationList.size()>0) {
199 -  
200 for(int i = 0 ; i < stationList.size(); i++) { 199 for(int i = 0 ; i < stationList.size(); i++) {
201 -  
202 Map<String, Object> tempM = new HashMap<String, Object>(); 200 Map<String, Object> tempM = new HashMap<String, Object>();
203 -  
204 // 站点路由ID 201 // 站点路由ID
205 tempM.put("stationRouteId", stationList.get(i)[0]); 202 tempM.put("stationRouteId", stationList.get(i)[0]);
206 -  
207 // 站点路由线路ID 203 // 站点路由线路ID
208 tempM.put("stationRouteLine", stationList.get(i)[1]); 204 tempM.put("stationRouteLine", stationList.get(i)[1]);
209 -  
210 // 站点路由站点ID 205 // 站点路由站点ID
211 tempM.put("stationRouteStation", stationList.get(i)[2]); 206 tempM.put("stationRouteStation", stationList.get(i)[2]);
212 -  
213 // 站点路由名称 207 // 站点路由名称
214 - tempM.put("stationRouteStationName", stationList.get(i)[3]);  
215 - 208 + tempM.put("stationRouteName", stationList.get(i)[3]);
216 // 站点路由站点序号 209 // 站点路由站点序号
217 - tempM.put("stationRouteStationRouteCode", stationList.get(i)[4]);  
218 - 210 + tempM.put("stationRouteCode", stationList.get(i)[4]);
219 // 站点路由线路编码 211 // 站点路由线路编码
220 tempM.put("stationRouteLineCode", stationList.get(i)[5]); 212 tempM.put("stationRouteLineCode", stationList.get(i)[5]);
221 -  
222 // 站点路由站点类型 213 // 站点路由站点类型
223 tempM.put("stationRouteStationMark", stationList.get(i)[6]); 214 tempM.put("stationRouteStationMark", stationList.get(i)[6]);
224 -  
225 // 站点路由出站的序号 215 // 站点路由出站的序号
226 tempM.put("stationRouteOutStationNmber", stationList.get(i)[7]); 216 tempM.put("stationRouteOutStationNmber", stationList.get(i)[7]);
227 -  
228 // 站点路由站点方向 217 // 站点路由站点方向
229 - tempM.put("stationRouteDirections", stationList.get(i)[8]);  
230 - 218 + tempM.put("stationRoutedirections", stationList.get(i)[8]);
231 // 站点路由站点到站距离 219 // 站点路由站点到站距离
232 tempM.put("stationRouteDistances", stationList.get(i)[9]); 220 tempM.put("stationRouteDistances", stationList.get(i)[9]);
233 -  
234 // 站点路由到站时间 221 // 站点路由到站时间
235 tempM.put("stationRouteToTime", stationList.get(i)[10]); 222 tempM.put("stationRouteToTime", stationList.get(i)[10]);
236 -  
237 // 站点路由站点首班时间 223 // 站点路由站点首班时间
238 tempM.put("stationRouteFirstTime", stationList.get(i)[11]); 224 tempM.put("stationRouteFirstTime", stationList.get(i)[11]);
239 -  
240 // 站点路由站点末班时间 225 // 站点路由站点末班时间
241 tempM.put("stationRouteEndTime", stationList.get(i)[12]); 226 tempM.put("stationRouteEndTime", stationList.get(i)[12]);
242 -  
243 // 站点路由站点说明 227 // 站点路由站点说明
244 tempM.put("stationRouteDescriptions", stationList.get(i)[13]); 228 tempM.put("stationRouteDescriptions", stationList.get(i)[13]);
245 -  
246 // 站点路由版本 229 // 站点路由版本
247 tempM.put("stationRouteVersions", stationList.get(i)[14]); 230 tempM.put("stationRouteVersions", stationList.get(i)[14]);
248 -  
249 // 站点ID 231 // 站点ID
250 tempM.put("stationId", stationList.get(i)[15]); 232 tempM.put("stationId", stationList.get(i)[15]);
251 -  
252 // 站点编码 233 // 站点编码
253 - tempM.put("stationStationCod", stationList.get(i)[16]);  
254 - 234 + tempM.put("stationCode", stationList.get(i)[16]);
255 // 站点名称 235 // 站点名称
256 tempM.put("stationStationName", stationList.get(i)[17]); 236 tempM.put("stationStationName", stationList.get(i)[17]);
257 -  
258 // 路段编码 237 // 路段编码
259 tempM.put("stationRoadCoding", stationList.get(i)[18]); 238 tempM.put("stationRoadCoding", stationList.get(i)[18]);
260 -  
261 // 原坐标类型 239 // 原坐标类型
262 tempM.put("stationDbType", stationList.get(i)[19]); 240 tempM.put("stationDbType", stationList.get(i)[19]);
263 -  
264 // 中心点(百度坐标) 241 // 中心点(百度坐标)
265 - tempM.put("stationBJwpoints", stationList.get(i)[20]);  
266 - 242 + tempM.put("stationJwpoints", stationList.get(i)[20]);
267 // 中心点(WGS经度) 243 // 中心点(WGS经度)
268 tempM.put("stationGLonx", stationList.get(i)[21]); 244 tempM.put("stationGLonx", stationList.get(i)[21]);
269 -  
270 // 中心点(WGS纬度) 245 // 中心点(WGS纬度)
271 tempM.put("stationGLaty", stationList.get(i)[22]); 246 tempM.put("stationGLaty", stationList.get(i)[22]);
272 -  
273 // 城建坐标x 247 // 城建坐标x
274 tempM.put("stationx", stationList.get(i)[23]); 248 tempM.put("stationx", stationList.get(i)[23]);
275 -  
276 // 城建坐标y 249 // 城建坐标y
277 tempM.put("stationy", stationList.get(i)[24]); 250 tempM.put("stationy", stationList.get(i)[24]);
278 -  
279 // 站点图形类型 251 // 站点图形类型
280 tempM.put("stationShapesType", stationList.get(i)[25]); 252 tempM.put("stationShapesType", stationList.get(i)[25]);
281 -  
282 // 站点圆半径 253 // 站点圆半径
283 tempM.put("stationRadius", stationList.get(i)[26]); 254 tempM.put("stationRadius", stationList.get(i)[26]);
284 -  
285 // 站点图形WGS坐标 255 // 站点图形WGS坐标
286 tempM.put("stationGPolygonGrid", stationList.get(i)[27]); 256 tempM.put("stationGPolygonGrid", stationList.get(i)[27]);
287 -  
288 // 站点图形百度坐标 257 // 站点图形百度坐标
289 tempM.put("stationBPolygonGrid", stationList.get(i)[28]); 258 tempM.put("stationBPolygonGrid", stationList.get(i)[28]);
290 -  
291 // 是否撤销 259 // 是否撤销
292 tempM.put("stationDestroy", stationList.get(i)[29]); 260 tempM.put("stationDestroy", stationList.get(i)[29]);
293 -  
294 // 站点版本 261 // 站点版本
295 tempM.put("stationVersions", stationList.get(i)[30]); 262 tempM.put("stationVersions", stationList.get(i)[30]);
296 -  
297 // 站点说明 263 // 站点说明
298 tempM.put("stationDescriptions", stationList.get(i)[31]); 264 tempM.put("stationDescriptions", stationList.get(i)[31]);
299 -  
300 - tempM.put("name", stationList.get(i)[3]);  
301 - 265 + tempM.put("zdmc", stationList.get(i)[3]);
302 tempM.put("text", stationList.get(i)[3]); 266 tempM.put("text", stationList.get(i)[3]);
303 -  
304 tempM.put("icon", "fa fa-bus"); 267 tempM.put("icon", "fa fa-bus");
305 -  
306 tempM.put("pId", 200); 268 tempM.put("pId", 200);
307 -  
308 tempM.put("id", i+1); 269 tempM.put("id", i+1);
309 -  
310 tempM.put("groupType", "3"); 270 tempM.put("groupType", "3");
311 -  
312 tempM.put("chaildredType", "station"); 271 tempM.put("chaildredType", "station");
313 -  
314 tempM.put("enable", true); 272 tempM.put("enable", true);
315 -  
316 staitonChildren.add(tempM); 273 staitonChildren.add(tempM);
317 } 274 }
318 } 275 }
@@ -321,107 +278,87 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -321,107 +278,87 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
321 List<Map<String, Object>> sectionChildren = new ArrayList<Map<String, Object>>(); 278 List<Map<String, Object>> sectionChildren = new ArrayList<Map<String, Object>>();
322 279
323 if(sectionList.size()>0) { 280 if(sectionList.size()>0) {
324 -  
325 for(int i = 0 ; i<sectionList.size() ; i++){ 281 for(int i = 0 ; i<sectionList.size() ; i++){
326 -  
327 Map<String, Object> tempM = new HashMap<String, Object>(); 282 Map<String, Object> tempM = new HashMap<String, Object>();
328 -  
329 // 路段路由ID 283 // 路段路由ID
330 tempM.put("sectionrouteId",sectionList.get(i)[0]); 284 tempM.put("sectionrouteId",sectionList.get(i)[0]);
331 -  
332 // 路段路由线路ID 285 // 路段路由线路ID
333 tempM.put("sectionrouteLine",sectionList.get(i)[1]); 286 tempM.put("sectionrouteLine",sectionList.get(i)[1]);
334 -  
335 // 路段路由线路编码 287 // 路段路由线路编码
336 tempM.put("sectionrouteLineCode",sectionList.get(i)[2]); 288 tempM.put("sectionrouteLineCode",sectionList.get(i)[2]);
337 -  
338 // 路段路由路段ID 289 // 路段路由路段ID
339 tempM.put("sectionrouteSection",sectionList.get(i)[3]); 290 tempM.put("sectionrouteSection",sectionList.get(i)[3]);
340 -  
341 // 路段路由路段编码 291 // 路段路由路段编码
342 tempM.put("sectionrouteSectionCode",sectionList.get(i)[4]); 292 tempM.put("sectionrouteSectionCode",sectionList.get(i)[4]);
343 -  
344 tempM.put("sectionrouteCode",sectionList.get(i)[5]); 293 tempM.put("sectionrouteCode",sectionList.get(i)[5]);
345 -  
346 tempM.put("sectionrouteDirections",sectionList.get(i)[6]); 294 tempM.put("sectionrouteDirections",sectionList.get(i)[6]);
347 -  
348 // 路段ID 295 // 路段ID
349 tempM.put("sectionId",sectionList.get(i)[7]); 296 tempM.put("sectionId",sectionList.get(i)[7]);
350 -  
351 // 路段编码 297 // 路段编码
352 tempM.put("sectionCode",sectionList.get(i)[8]); 298 tempM.put("sectionCode",sectionList.get(i)[8]);
353 -  
354 // 路段名称 299 // 路段名称
355 tempM.put("sectionName",sectionList.get(i)[9]); 300 tempM.put("sectionName",sectionList.get(i)[9]);
356 -  
357 // 道路编码 301 // 道路编码
358 tempM.put("sectionCrosesRoad",sectionList.get(i)[10]); 302 tempM.put("sectionCrosesRoad",sectionList.get(i)[10]);
359 -  
360 // 终点站 303 // 终点站
361 tempM.put("sectionEndNode",sectionList.get(i)[11]); 304 tempM.put("sectionEndNode",sectionList.get(i)[11]);
362 -  
363 // 起始节点 305 // 起始节点
364 tempM.put("sectionStartNode",sectionList.get(i)[12]); 306 tempM.put("sectionStartNode",sectionList.get(i)[12]);
365 -  
366 // 中间节点 307 // 中间节点
367 tempM.put("sectionMiddleNode",sectionList.get(i)[13]); 308 tempM.put("sectionMiddleNode",sectionList.get(i)[13]);
368 -  
369 // 路段类型 309 // 路段类型
370 tempM.put("sectionType",sectionList.get(i)[14]); 310 tempM.put("sectionType",sectionList.get(i)[14]);
371 -  
372 // 路段折线图形城建坐标 311 // 路段折线图形城建坐标
373 tempM.put("sectionCsectionVector",sectionList.get(i)[15]); 312 tempM.put("sectionCsectionVector",sectionList.get(i)[15]);
374 -  
375 // 路段折线图形百度坐标 313 // 路段折线图形百度坐标
376 tempM.put("sectionBsectionVector",sectionList.get(i)[16]); 314 tempM.put("sectionBsectionVector",sectionList.get(i)[16]);
377 -  
378 // 路段折线图形WGS坐标 315 // 路段折线图形WGS坐标
379 tempM.put("sectionGsectionVector",sectionList.get(i)[17]); 316 tempM.put("sectionGsectionVector",sectionList.get(i)[17]);
380 -  
381 // 道路编码 317 // 道路编码
382 tempM.put("sectionRoadCoding",sectionList.get(i)[18]); 318 tempM.put("sectionRoadCoding",sectionList.get(i)[18]);
383 -  
384 // 路段距离 319 // 路段距离
385 tempM.put("sectionDistance",sectionList.get(i)[19]); 320 tempM.put("sectionDistance",sectionList.get(i)[19]);
386 -  
387 // 路段时间 321 // 路段时间
388 tempM.put("sectionTime",sectionList.get(i)[20]); 322 tempM.put("sectionTime",sectionList.get(i)[20]);
389 -  
390 // 路段原坐标类型 323 // 路段原坐标类型
391 tempM.put("sectiondbType",sectionList.get(i)[21]); 324 tempM.put("sectiondbType",sectionList.get(i)[21]);
392 -  
393 // 限速 325 // 限速
394 tempM.put("sectionSpeedLimet",sectionList.get(i)[22]); 326 tempM.put("sectionSpeedLimet",sectionList.get(i)[22]);
395 -  
396 // 是否撤销 327 // 是否撤销
397 tempM.put("destroy",sectionList.get(i)[23]); 328 tempM.put("destroy",sectionList.get(i)[23]);
398 -  
399 // 版本号 329 // 版本号
400 tempM.put("versions",sectionList.get(i)[24]); 330 tempM.put("versions",sectionList.get(i)[24]);
401 -  
402 // 说明 331 // 说明
403 tempM.put("descriptions",sectionList.get(i)[25]); 332 tempM.put("descriptions",sectionList.get(i)[25]);
404 // 说明 333 // 说明
405 tempM.put("isRoadeSpeed",sectionList.get(i)[26]); 334 tempM.put("isRoadeSpeed",sectionList.get(i)[26]);
406 -  
407 tempM.put("name", sectionList.get(i)[9]); 335 tempM.put("name", sectionList.get(i)[9]);
408 -  
409 tempM.put("text", sectionList.get(i)[9]); 336 tempM.put("text", sectionList.get(i)[9]);
410 -  
411 tempM.put("icon", null); 337 tempM.put("icon", null);
412 -  
413 tempM.put("pId", 300); 338 tempM.put("pId", 300);
414 -  
415 tempM.put("id", (i+1)*1000); 339 tempM.put("id", (i+1)*1000);
416 -  
417 tempM.put("groupType", "3"); 340 tempM.put("groupType", "3");
418 -  
419 tempM.put("chaildredType", "section"); 341 tempM.put("chaildredType", "section");
420 -  
421 tempM.put("enable", true); 342 tempM.put("enable", true);
422 -  
423 sectionChildren.add(tempM); 343 sectionChildren.add(tempM);
424 - 344 + }
  345 + } else {
  346 + if(stationList.size()>0) {
  347 + Map<String, Object> tempM = new HashMap<String, Object>();
  348 + tempM.put("name", "添加路段");
  349 + tempM.put("text", "添加路段");
  350 + tempM.put("lineId", stationList.get(0)[1]);
  351 + tempM.put("lineCode", stationList.get(0)[5]);
  352 + tempM.put("dir", stationList.get(0)[8]);
  353 + tempM.put("versions", stationList.get(0)[14]);
  354 + tempM.put("icon", null);
  355 + tempM.put("pId", 300);
  356 + tempM.put("id", 1000);
  357 + tempM.put("groupType", "3");
  358 + tempM.put("chaildredType", "addSection");
  359 + tempM.put("sectionBsectionVector", "LINESTRING("+stationList.get(0)[20]+")");
  360 + tempM.put("enable", true);
  361 + sectionChildren.add(tempM);
425 } 362 }
426 } 363 }
427 364
@@ -563,98 +500,102 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -563,98 +500,102 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
563 int len = objects.size(); 500 int len = objects.size();
564 501
565 if(objects.size()>0) { 502 if(objects.size()>0) {
  503 + // 遍历站点
  504 + traversalStation(objects, resultList, len);
  505 + }
  506 + return resultList;
  507 + }
566 508
567 - for(int i = 0 ; i < len; i++) {  
568 - Map<String, Object> tempM = new HashMap<String,Object>(); 509 + private void traversalStation(List<Object[]> objects, List<Map<String, Object>> resultList, int len) {
  510 + for(int i = 0 ; i < len; i++) {
  511 + Map<String, Object> tempM = new HashMap<String,Object>();
569 512
570 - tempM.put("stationRouteLine", objects.get(i)[0]); 513 + tempM.put("stationRouteLine", objects.get(i)[0]);
571 514
572 - tempM.put("stationRouteStation", objects.get(i)[1]); 515 + tempM.put("stationRouteStation", objects.get(i)[1]);
573 516
574 - tempM.put("stationRouteCode", objects.get(i)[2]); 517 + tempM.put("stationRouteCode", objects.get(i)[2]);
575 518
576 - tempM.put("stationRouteLIneCode", objects.get(i)[3]); 519 + tempM.put("stationRouteLIneCode", objects.get(i)[3]);
577 520
578 - tempM.put("stationRouteStationMark", objects.get(i)[4]); 521 + tempM.put("stationRouteStationMark", objects.get(i)[4]);
579 522
580 - tempM.put("stationOutStationNmber", objects.get(i)[5]); 523 + tempM.put("stationOutStationNmber", objects.get(i)[5]);
581 524
582 - tempM.put("stationRoutedirections", objects.get(i)[6]); 525 + tempM.put("stationRoutedirections", objects.get(i)[6]);
583 526
584 - tempM.put("stationRouteDistances", objects.get(i)[7]); 527 + tempM.put("stationRouteDistances", objects.get(i)[7]);
585 528
586 - tempM.put("stationRouteToTime", objects.get(i)[8]); 529 + tempM.put("stationRouteToTime", objects.get(i)[8]);
587 530
588 - tempM.put("staitonRouteFirstTime", objects.get(i)[9]); 531 + tempM.put("staitonRouteFirstTime", objects.get(i)[9]);
589 532
590 - tempM.put("stationRouteEndTime", objects.get(i)[10]); 533 + tempM.put("stationRouteEndTime", objects.get(i)[10]);
591 534
592 - tempM.put("stationRouteDescriptions", objects.get(i)[11]); 535 + tempM.put("stationRouteDescriptions", objects.get(i)[11]);
593 536
594 - tempM.put("stationRouteDestroy", objects.get(i)[12]); 537 + tempM.put("stationRouteDestroy", objects.get(i)[12]);
595 538
596 - tempM.put("stationRouteVersions", objects.get(i)[13]); 539 + tempM.put("stationRouteVersions", objects.get(i)[13]);
597 540
598 - tempM.put("stationRouteCreateBy", objects.get(i)[14]); 541 + tempM.put("stationRouteCreateBy", objects.get(i)[14]);
599 542
600 - tempM.put("stationRouteCreateDate", objects.get(i)[15]); 543 + tempM.put("stationRouteCreateDate", objects.get(i)[15]);
601 544
602 - tempM.put("stationRouteUpdateBy", objects.get(i)[16]); 545 + tempM.put("stationRouteUpdateBy", objects.get(i)[16]);
603 546
604 - tempM.put("stationRouteUpdateDate", objects.get(i)[17]); 547 + tempM.put("stationRouteUpdateDate", objects.get(i)[17]);
605 548
606 - tempM.put("stationId", objects.get(i)[18]); 549 + tempM.put("stationId", objects.get(i)[18]);
607 550
608 - tempM.put("stationCode", objects.get(i)[19]); 551 + tempM.put("stationCode", objects.get(i)[19]);
609 552
610 - tempM.put("stationRouteName", objects.get(i)[20]); 553 + tempM.put("stationRouteName", objects.get(i)[20]);
611 554
612 - tempM.put("stationRoadCoding", objects.get(i)[21]); 555 + tempM.put("stationRoadCoding", objects.get(i)[21]);
613 556
614 - tempM.put("stationDbType", objects.get(i)[22]); 557 + tempM.put("stationDbType", objects.get(i)[22]);
615 558
616 - tempM.put("stationJwpoints", objects.get(i)[23]); 559 + tempM.put("stationJwpoints", objects.get(i)[23]);
617 560
618 - tempM.put("stationGlonx", objects.get(i)[24]); 561 + tempM.put("stationGlonx", objects.get(i)[24]);
619 562
620 - tempM.put("stationGlaty", objects.get(i)[25]); 563 + tempM.put("stationGlaty", objects.get(i)[25]);
621 564
622 - tempM.put("stationX", objects.get(i)[26]); 565 + tempM.put("stationX", objects.get(i)[26]);
623 566
624 - tempM.put("stationY", objects.get(i)[27]); 567 + tempM.put("stationY", objects.get(i)[27]);
625 568
626 - tempM.put("stationBPolyonGrid", objects.get(i)[28]); 569 + tempM.put("stationBPolyonGrid", objects.get(i)[28]);
627 570
628 - tempM.put("stationGPloyonGrid", objects.get(i)[29]); 571 + tempM.put("stationGPloyonGrid", objects.get(i)[29]);
629 572
630 - tempM.put("stationDestroy", objects.get(i)[30]); 573 + tempM.put("stationDestroy", objects.get(i)[30]);
631 574
632 - tempM.put("stationRadius", objects.get(i)[31]); 575 + tempM.put("stationRadius", objects.get(i)[31]);
633 576
634 - tempM.put("stationShapesType", objects.get(i)[32]); 577 + tempM.put("stationShapesType", objects.get(i)[32]);
635 578
636 - tempM.put("stationVersions", objects.get(i)[33]); 579 + tempM.put("stationVersions", objects.get(i)[33]);
637 580
638 - tempM.put("sttationDescriptions", objects.get(i)[34]); 581 + tempM.put("sttationDescriptions", objects.get(i)[34]);
639 582
640 - tempM.put("stationCreateBy", objects.get(i)[35]); 583 + tempM.put("stationCreateBy", objects.get(i)[35]);
641 584
642 - tempM.put("stationCreateDate", objects.get(i)[36]); 585 + tempM.put("stationCreateDate", objects.get(i)[36]);
643 586
644 - tempM.put("stationUpdateBy", objects.get(i)[37]); 587 + tempM.put("stationUpdateBy", objects.get(i)[37]);
645 588
646 - tempM.put("stationUpdateDate", objects.get(i)[38]); 589 + tempM.put("stationUpdateDate", objects.get(i)[38]);
647 590
648 - tempM.put("stationRouteId", objects.get(i)[39]);  
649 - tempM.put("zdmc", objects.get(i)[40]); 591 + tempM.put("stationRouteId", objects.get(i)[39]);
  592 + tempM.put("zdmc", objects.get(i)[40]);
650 593
651 - resultList.add(tempM);  
652 - }  
653 - }  
654 - return resultList; 594 + resultList.add(tempM);
  595 + }
655 } 596 }
656 597
657 - /** 598 + /**
658 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标) 599 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
659 * 600 *
660 * @param map <lineId:线路ID; direction:方向> 601 * @param map <lineId:线路ID; direction:方向>
@@ -692,6 +633,29 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -692,6 +633,29 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
692 633
693 return resultList; 634 return resultList;
694 } 635 }
  636 +
  637 + /**
  638 + * @Description :TODO(查询线路某方向下所有站点)
  639 + *
  640 + * @param map <lineId:线路ID; direction:方向>
  641 + *
  642 + * @return List<Map<String, Object>>
  643 + */
  644 + @Override
  645 + public List<Map<String, Object>> getStationRouteList(Map<String, Object> map) {
  646 + Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
  647 + Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());
  648 + List<Object[]> objects = repository.getStationRouteList(lineId, direction);
  649 + List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  650 +
  651 + int len = objects.size();
  652 +
  653 + if(objects.size()>0) {
  654 + // 遍历站点
  655 + traversalStation(objects, resultList, len);
  656 + }
  657 + return resultList;
  658 + }
695 659
696 660
697 /** 661 /**
@@ -774,109 +738,72 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -774,109 +738,72 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
774 */ 738 */
775 @Override 739 @Override
776 public Map<String, Object> usingSingle(Map<String, Object> map) { 740 public Map<String, Object> usingSingle(Map<String, Object> map) {
777 -  
778 // 返回值map 741 // 返回值map
779 Map<String, Object> resultMap = new HashMap<String,Object>(); 742 Map<String, Object> resultMap = new HashMap<String,Object>();
780 -  
781 try { 743 try {
782 -  
783 // 获取线路ID 744 // 获取线路ID
784 Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString()); 745 Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString());
785 -  
786 /** 查询线路信息 @param:<lineId:线路ID> */ 746 /** 查询线路信息 @param:<lineId:线路ID> */
787 Line line = lineRepository.findOne(lineId); 747 Line line = lineRepository.findOne(lineId);
788 -  
789 /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */ 748 /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */
790 List<Object[]> objects = repository.usingSingle(lineId); 749 List<Object[]> objects = repository.usingSingle(lineId);
791 -  
792 if (objects.size()>0) { 750 if (objects.size()>0) {
793 -  
794 /** 获取配置文件里的ftp登录参数 */ 751 /** 获取配置文件里的ftp登录参数 */
795 Map<String, Object> FTPParamMap = readPropertiesGetFTPParam(); 752 Map<String, Object> FTPParamMap = readPropertiesGetFTPParam();
796 -  
797 // 压缩文件名 753 // 压缩文件名
798 String odlGzFileName = line.getLineCode() + ".txt.gz"; 754 String odlGzFileName = line.getLineCode() + ".txt.gz";
799 -  
800 // txt文件名 755 // txt文件名
801 String textFileName = line.getLineCode() + ".txt"; 756 String textFileName = line.getLineCode() + ".txt";
802 -  
803 // 创建一个ftp上传实例 757 // 创建一个ftp上传实例
804 FTPClientUtils clientUtils = new FTPClientUtils(); 758 FTPClientUtils clientUtils = new FTPClientUtils();
805 -  
806 // IP 759 // IP
807 String url = FTPParamMap.get("url").toString(); 760 String url = FTPParamMap.get("url").toString();
808 -  
809 // 端口 761 // 端口
810 int port = Integer.valueOf(FTPParamMap.get("port").toString()); 762 int port = Integer.valueOf(FTPParamMap.get("port").toString());
811 -  
812 // 用户名 763 // 用户名
813 String username = FTPParamMap.get("username").toString(); 764 String username = FTPParamMap.get("username").toString();
814 -  
815 // 密码 765 // 密码
816 String password = FTPParamMap.get("password").toString(); 766 String password = FTPParamMap.get("password").toString();
817 -  
818 // 相对路径 767 // 相对路径
819 String remotePath = FTPParamMap.get("remotePath").toString(); 768 String remotePath = FTPParamMap.get("remotePath").toString();
820 -  
821 /** 如果已存在相同行单文件名则先删除 */ 769 /** 如果已存在相同行单文件名则先删除 */
822 clientUtils.deleteFtpFile(url, port, username, password, remotePath, odlGzFileName); 770 clientUtils.deleteFtpFile(url, port, username, password, remotePath, odlGzFileName);
823 -  
824 clientUtils.deleteFtpFile(url, port, username, password, remotePath, textFileName); 771 clientUtils.deleteFtpFile(url, port, username, password, remotePath, textFileName);
825 -  
826 String textStr = ""; 772 String textStr = "";
827 -  
828 - boolean tempTag = ishxType(objects);  
829 -  
830 - if(tempTag) 773 +// boolean tempTag = ishxType(objects);
  774 + Integer linePlayType = line.getLinePlayType() == null ? -1:line.getLinePlayType();
  775 + if(linePlayType == 1)
831 textStr = hxTextFileToFtp(objects,lineId);// 环线行单文件内容 776 textStr = hxTextFileToFtp(objects,lineId);// 环线行单文件内容
832 - else 777 + else if (linePlayType == 0)
833 textStr = newTextFileToFTP(objects,lineId);/** 双向行单文件内容 @param:<objects:站点路由;lineId:线路ID>*/ 778 textStr = newTextFileToFTP(objects,lineId);/** 双向行单文件内容 @param:<objects:站点路由;lineId:线路ID>*/
834 -  
835 - /*textStr = line.getName() + "\t" + "2" + "\r" + textStr;*/  
836 - 779 + else
  780 + resultMap.put("status","NOLinePlayType");// 线路无线路规划类型
837 textStr = line.getName() + " " + "2" + "\r" + textStr; 781 textStr = line.getName() + " " + "2" + "\r" + textStr;
838 -  
839 InputStream input = new ByteArrayInputStream(textStr.getBytes("gbk")); 782 InputStream input = new ByteArrayInputStream(textStr.getBytes("gbk"));
840 -  
841 /** 生成txt文件,上传ftp */ 783 /** 生成txt文件,上传ftp */
842 clientUtils.uploadFile(url, port, username, password, remotePath, textFileName, input); 784 clientUtils.uploadFile(url, port, username, password, remotePath, textFileName, input);
843 -  
844 // 创建打包实例 785 // 创建打包实例
845 PackTarGZUtils packTarGZUtils= new PackTarGZUtils(); 786 PackTarGZUtils packTarGZUtils= new PackTarGZUtils();
846 -  
847 /** 获取txt文件 */ 787 /** 获取txt文件 */
848 File textFile = clientUtils.GetFtpFile(url, port, username, password, remotePath, textFileName); 788 File textFile = clientUtils.GetFtpFile(url, port, username, password, remotePath, textFileName);
849 -  
850 File target = new File(odlGzFileName); 789 File target = new File(odlGzFileName);
851 -  
852 // 将txt文件打包 790 // 将txt文件打包
853 File targetFile = PackTarGZUtils.compress(textFile, target); 791 File targetFile = PackTarGZUtils.compress(textFile, target);
854 -  
855 - /*clientUtils.testUpLoadFromDisk(targetFile,targetFile.getName());*/  
856 -  
857 clientUtils.FTPUpLoadFromDisk(targetFile, targetFile.getName(), url, port, username, password, remotePath); 792 clientUtils.FTPUpLoadFromDisk(targetFile, targetFile.getName(), url, port, username, password, remotePath);
858 -  
859 // 删除文件 793 // 删除文件
860 textFile.delete(); 794 textFile.delete();
861 targetFile.delete(); 795 targetFile.delete();
862 -  
863 resultMap.put("status", ResponseCode.SUCCESS); 796 resultMap.put("status", ResponseCode.SUCCESS);
864 -  
865 }else { 797 }else {
866 -  
867 resultMap.put("status","NOTDATA"); 798 resultMap.put("status","NOTDATA");
868 } 799 }
869 -  
870 -  
871 } catch (Exception e) { 800 } catch (Exception e) {
872 -  
873 resultMap.put("status", ResponseCode.ERROR); 801 resultMap.put("status", ResponseCode.ERROR);
874 -  
875 logger.error("save erro.", e); 802 logger.error("save erro.", e);
876 -  
877 - } 803 + }
878 return resultMap; 804 return resultMap;
879 } 805 }
  806 + // 判断线路走向是环线还是双向
880 public boolean ishxType(List<Object[]> listObj) { 807 public boolean ishxType(List<Object[]> listObj) {
881 boolean tag = true; 808 boolean tag = true;
882 String pointBStr[] = null,pointEStr[] = null; 809 String pointBStr[] = null,pointEStr[] = null;
@@ -889,9 +816,9 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -889,9 +816,9 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
889 if(Integer.valueOf(listObj.get(i)[8].toString())==1) 816 if(Integer.valueOf(listObj.get(i)[8].toString())==1)
890 numzd++; 817 numzd++;
891 } 818 }
892 - Point p1 = new Point(Double.valueOf(pointBStr[0]),Double.valueOf(pointBStr[1])); 819 + Point p1 = new Point(Double.valueOf(pointBStr[0]),Double.valueOf(pointBStr[1]));
893 Point p2 = new Point(Double.valueOf(pointEStr[0]),Double.valueOf(pointEStr[1])); 820 Point p2 = new Point(Double.valueOf(pointEStr[0]),Double.valueOf(pointEStr[1]));
894 - if(GeoUtils.getDistance(p1, p2)>100 && numzd>2) 821 + if(GeoUtils.getDistance(p1, p2)>100 && numzd>2)
895 tag = false; 822 tag = false;
896 return tag; 823 return tag;
897 } 824 }
@@ -1241,95 +1168,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1241,95 +1168,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1241 int len = objects.size(); 1168 int len = objects.size();
1242 1169
1243 if(objects.size()>0) { 1170 if(objects.size()>0) {
1244 -  
1245 - for(int i = 0 ; i < len; i++) {  
1246 - Map<String, Object> tempM = new HashMap<String,Object>();  
1247 -  
1248 - tempM.put("stationRouteLine", objects.get(i)[0]);  
1249 -  
1250 - tempM.put("stationRouteStation", objects.get(i)[1]);  
1251 -  
1252 - tempM.put("stationRouteCode", objects.get(i)[2]);  
1253 -  
1254 - tempM.put("stationRouteLIneCode", objects.get(i)[3]);  
1255 -  
1256 - tempM.put("stationRouteStationMark", objects.get(i)[4]);  
1257 -  
1258 - tempM.put("stationOutStationNmber", objects.get(i)[5]);  
1259 -  
1260 - tempM.put("stationRoutedirections", objects.get(i)[6]);  
1261 -  
1262 - tempM.put("stationRouteDistances", objects.get(i)[7]);  
1263 -  
1264 - tempM.put("stationRouteToTime", objects.get(i)[8]);  
1265 -  
1266 - tempM.put("staitonRouteFirstTime", objects.get(i)[9]);  
1267 -  
1268 - tempM.put("stationRouteEndTime", objects.get(i)[10]);  
1269 -  
1270 - tempM.put("stationRouteDescriptions", objects.get(i)[11]);  
1271 -  
1272 - tempM.put("stationRouteDestroy", objects.get(i)[12]);  
1273 -  
1274 - tempM.put("stationRouteVersions", objects.get(i)[13]);  
1275 -  
1276 - tempM.put("stationRouteCreateBy", objects.get(i)[14]);  
1277 -  
1278 - tempM.put("stationRouteCreateDate", objects.get(i)[15]);  
1279 -  
1280 - tempM.put("stationRouteUpdateBy", objects.get(i)[16]);  
1281 -  
1282 - tempM.put("stationRouteUpdateDate", objects.get(i)[17]);  
1283 -  
1284 - tempM.put("stationId", objects.get(i)[18]);  
1285 -  
1286 - tempM.put("stationCode", objects.get(i)[19]);  
1287 -  
1288 - tempM.put("stationRouteName", objects.get(i)[20]);  
1289 -  
1290 - tempM.put("stationRoadCoding", objects.get(i)[21]);  
1291 -  
1292 - tempM.put("stationDbType", objects.get(i)[22]);  
1293 -  
1294 - tempM.put("stationJwpoints", objects.get(i)[23]);  
1295 -  
1296 - tempM.put("stationGlonx", objects.get(i)[24]);  
1297 -  
1298 - tempM.put("stationGlaty", objects.get(i)[25]);  
1299 -  
1300 - tempM.put("stationX", objects.get(i)[26]);  
1301 -  
1302 - tempM.put("stationY", objects.get(i)[27]);  
1303 -  
1304 - tempM.put("stationBPolyonGrid", objects.get(i)[28]);  
1305 -  
1306 - tempM.put("stationGPloyonGrid", objects.get(i)[29]);  
1307 -  
1308 - tempM.put("stationDestroy", objects.get(i)[30]);  
1309 -  
1310 - tempM.put("stationRadius", objects.get(i)[31]);  
1311 -  
1312 - tempM.put("stationShapesType", objects.get(i)[32]);  
1313 -  
1314 - tempM.put("stationVersions", objects.get(i)[33]);  
1315 -  
1316 - tempM.put("sttationDescriptions", objects.get(i)[34]);  
1317 -  
1318 - tempM.put("stationCreateBy", objects.get(i)[35]);  
1319 -  
1320 - tempM.put("stationCreateDate", objects.get(i)[36]);  
1321 -  
1322 - tempM.put("stationUpdateBy", objects.get(i)[37]);  
1323 -  
1324 - tempM.put("stationUpdateDate", objects.get(i)[38]);  
1325 -  
1326 - tempM.put("stationRouteId", objects.get(i)[39]);  
1327 - tempM.put("zdmc", objects.get(i)[40]);  
1328 -  
1329 - resultList.add(tempM);  
1330 - }  
1331 -  
1332 - } 1171 +
  1172 + traversalStation(objects, resultList, len);
  1173 +
  1174 + }
1333 1175
1334 return resultList; 1176 return resultList;
1335 } 1177 }
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -698,13 +698,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -698,13 +698,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
698 //数据库删除 698 //数据库删除
699 rs = super.delete(id); 699 rs = super.delete(id);
700 if(rs.get("status").equals(ResponseCode.SUCCESS)){ 700 if(rs.get("status").equals(ResponseCode.SUCCESS)){
701 - /*ScheduleRealInfo temp = super.findById(id);  
702 - if(temp != null){  
703 - rs.put("status", ResponseCode.ERROR);  
704 - rs.put("msg", "删除失败,请重试!");  
705 - return rs;  
706 - }*/  
707 -  
708 dayOfSchedule.delete(sch); 701 dayOfSchedule.delete(sch);
709 //更新起点应到时间 702 //更新起点应到时间
710 List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch); 703 List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
@@ -131,20 +131,22 @@ public class ReportServiceImpl implements ReportService{ @@ -131,20 +131,22 @@ public class ReportServiceImpl implements ReportService{
131 cal.setTime(dates); 131 cal.setTime(dates);
132 //周数,表分区字段 132 //周数,表分区字段
133 int weeks_year = cal.get(Calendar.WEEK_OF_YEAR); 133 int weeks_year = cal.get(Calendar.WEEK_OF_YEAR);
134 - 134 + int weeks_year_next=weeks_year +1;
135 Connection conn = null; 135 Connection conn = null;
136 PreparedStatement ps = null; 136 PreparedStatement ps = null;
137 ResultSet rs = null; 137 ResultSet rs = null;
138 String year=date.substring(0,4); 138 String year=date.substring(0,4);
139 - String sql = "select * from bsth_c_arrival_info_"+year+" where device_id=? AND line_id=? AND weeks_year=? AND ts > ? AND ts <=? order by ts"; 139 + String sql = "select * from bsth_c_arrival_info_"+year+" where device_id=? AND line_id=? "
  140 + + " AND weeks_year>=? AND weeks_year<=? AND ts >= ? AND ts <=? order by ts";
140 try{ 141 try{
141 conn = DBUtils_MS.getConnection(); 142 conn = DBUtils_MS.getConnection();
142 ps = conn.prepareStatement(sql); 143 ps = conn.prepareStatement(sql);
143 ps.setString(1, sbbb); 144 ps.setString(1, sbbb);
144 ps.setString(2,line); 145 ps.setString(2,line);
145 ps.setInt(3, weeks_year); 146 ps.setInt(3, weeks_year);
146 - ps.setLong(4, date1);  
147 - ps.setLong(5, date2); 147 + ps.setInt(4, weeks_year_next);
  148 + ps.setLong(5, date1);
  149 + ps.setLong(6, date2);
148 rs = ps.executeQuery(); 150 rs = ps.executeQuery();
149 151
150 list = resultSet2Set(rs); 152 list = resultSet2Set(rs);
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
@@ -556,15 +556,33 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -556,15 +556,33 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
556 Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1()); 556 Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1());
557 Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2()); 557 Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2());
558 PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (1), 558 PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (1),
  559 + "报到", new Color(0x96b9d7));
  560 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (2),
559 "出场", new Color(0x96b9d7)); 561 "出场", new Color(0x96b9d7));
560 for (int i = 1; i <= groupCount; i++) { 562 for (int i = 1; i <= groupCount; i++) {
561 - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2),  
562 - station1.getStationName(), new Color(0x96b9d7));  
563 PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1), 563 PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1),
  564 + station1.getStationName(), new Color(0x96b9d7));
  565 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2),
564 station2.getStationName(), new Color(0x96b9d7)); 566 station2.getStationName(), new Color(0x96b9d7));
565 } 567 }
566 - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2), 568 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 3),
567 "进场", new Color(0x96b9d7)); 569 "进场", new Color(0x96b9d7));
  570 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 4),
  571 + "离场", new Color(0x96b9d7));
  572 +
  573 + // 路牌统计字段
  574 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 5),
  575 + "总公里", new Color(0x96b9d7));
  576 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 6),
  577 + "营业公里", new Color(0x96b9d7));
  578 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 7),
  579 + "空驶公里", new Color(0x96b9d7));
  580 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 8),
  581 + "总工时", new Color(0x96b9d7));
  582 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 9),
  583 + "营业工时", new Color(0x96b9d7));
  584 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 10),
  585 + "营运班次", new Color(0x96b9d7));
568 586
569 // 构建每个路牌的班次数据 587 // 构建每个路牌的班次数据
570 for (int i = 0; i < lpObjList.size(); i++) { 588 for (int i = 0; i < lpObjList.size(); i++) {
@@ -572,34 +590,86 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -572,34 +590,86 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
572 XSSFRow lpRow = sheet.createRow((short) (i + 1)); 590 XSSFRow lpRow = sheet.createRow((short) (i + 1));
573 PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname()); 591 PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
574 PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1)); 592 PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1));
  593 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (2));
575 for (int j = 1; j <= groupCount; j++) { 594 for (int j = 1; j <= groupCount; j++) {
576 - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2));  
577 PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1)); 595 PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
  596 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2));
578 } 597 }
579 - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2)); 598 +
  599 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 3));
  600 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 4));
580 601
581 for (BcObj bcObj : lpObj.getBcObjList()) { 602 for (BcObj bcObj : lpObj.getBcObjList()) {
582 if (bcObj.getBcType() == BcType.NORMAL) { 603 if (bcObj.getBcType() == BcType.NORMAL) {
583 - Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 2)); 604 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
584 cell.setCellValue(bcObj.getFcsj()); 605 cell.setCellValue(bcObj.getFcsj());
  606 +
  607 + } else if (bcObj.getBcType() == BcType.BD) {
  608 + if (bcObj.getGroupNo() == -1) {
  609 + Cell cell = lpRow.getCell((short) 1);
  610 + cell.setCellValue(bcObj.getFcsj());
  611 + } else if (bcObj.getGroupNo() > 0) { // 分班报到
  612 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  613 + cell.setCellValue("报" + bcObj.getFcsj());
  614 +
  615 + }
  616 +
585 } else if (bcObj.getBcType() == BcType.OUT) { 617 } else if (bcObj.getBcType() == BcType.OUT) {
586 - Cell cell = lpRow.getCell((short) (1));  
587 - cell.setCellValue(bcObj.getFcsj()); 618 + if (bcObj.getGroupNo() == -1) {
  619 + Cell cell = lpRow.getCell((short) (2));
  620 + cell.setCellValue(bcObj.getFcsj());
  621 + } else if (bcObj.getGroupNo() > 0) { // 分班出场
  622 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  623 + cell.setCellValue("出" + bcObj.getFcsj());
  624 + }
  625 +
588 } else if (bcObj.getBcType() == BcType.IN) { 626 } else if (bcObj.getBcType() == BcType.IN) {
589 - Cell cell = lpRow.getCell((short) (groupCount * 2 + 2));  
590 - cell.setCellValue(bcObj.getFcsj()); 627 + if (bcObj.getGroupNo() == -2) {
  628 + Cell cell = lpRow.getCell((short) (groupCount * 2 + 3));
  629 + cell.setCellValue(bcObj.getFcsj());
  630 + } else if (bcObj.getGroupNo() > 0) { //分班进场
  631 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
  632 + // 停驶用 ※
  633 + cell.setCellValue(bcObj.getFcsj() + "X");
  634 + }
  635 +
  636 + } else if (bcObj.getBcType() == BcType.LC) {
  637 + if (bcObj.getGroupNo() == -2) {
  638 + Cell cell = lpRow.getCell((short) (groupCount * 2 + 4));
  639 + cell.setCellValue(bcObj.getFcsj());
  640 + }
  641 +
591 } 642 }
592 } 643 }
  644 +
  645 + // 路牌统计字段
  646 + PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 5), lpObj.getZlc());
  647 + PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 6), lpObj.getYylc());
  648 + PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 7), lpObj.getKslc());
  649 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 8),
  650 + String.format("%d小时%d分钟", (int) (lpObj.getZgs() / 60), (int) (lpObj.getZgs() % 60)));
  651 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) (groupCount * 2 + 9),
  652 + String.format("%d小时%d分钟", (int) (lpObj.getYygs() / 60), (int) (lpObj.getYygs() % 60)));
  653 + PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 10), lpObj.getYybc());
  654 +
593 } 655 }
594 656
595 // 自适应单元格长宽 657 // 自适应单元格长宽
596 sheet.autoSizeColumn(0); 658 sheet.autoSizeColumn(0);
597 sheet.autoSizeColumn(1); 659 sheet.autoSizeColumn(1);
  660 + sheet.autoSizeColumn(2);
598 for (int i = 1; i <= groupCount; i++) { 661 for (int i = 1; i <= groupCount; i++) {
599 - sheet.autoSizeColumn(i * 2);  
600 sheet.autoSizeColumn(i * 2 + 1); 662 sheet.autoSizeColumn(i * 2 + 1);
  663 + sheet.autoSizeColumn(i * 2 + 2);
601 } 664 }
602 - 665 + sheet.autoSizeColumn(groupCount * 2 + 3);
  666 + sheet.autoSizeColumn(groupCount * 2 + 4);
  667 + sheet.autoSizeColumn(groupCount * 2 + 5);
  668 + sheet.autoSizeColumn(groupCount * 2 + 6);
  669 + sheet.autoSizeColumn(groupCount * 2 + 7);
  670 + sheet.autoSizeColumn(groupCount * 2 + 8);
  671 + sheet.autoSizeColumn(groupCount * 2 + 9);
  672 + sheet.autoSizeColumn(groupCount * 2 + 10);
603 } 673 }
604 674
605 @Override 675 @Override
src/main/java/com/bsth/service/schedule/datatools/TTinfoDetailDynamicData.java
1 -package com.bsth.service.schedule.datatools;  
2 -  
3 -import com.bsth.service.schedule.exception.ScheduleException;  
4 -import com.bsth.service.schedule.utils.DataToolsFile;  
5 -import com.fasterxml.jackson.annotation.JsonCreator;  
6 -import com.fasterxml.jackson.annotation.JsonValue;  
7 -  
8 -import java.util.List;  
9 -  
10 -/**  
11 - * 动态时刻表数据。  
12 - */  
13 -public interface TTinfoDetailDynamicData {  
14 -  
15 - //---------------------- 生成时刻表用对象(以下) ---------------------//  
16 - public static enum BcType { // 班次类型枚举  
17 - IN("in"), // 进场  
18 - OUT("out"), // 出场  
19 - BD("bd"), // 早例保  
20 - LC("lc"), // 晚例保  
21 - NORMAL("normal"); // 正常  
22 - private String flag;  
23 -  
24 - @JsonCreator  
25 - private BcType(String flag) {  
26 - this.flag = flag;  
27 - }  
28 -  
29 - @JsonValue  
30 - public String getFlag() {  
31 - return flag;  
32 - }  
33 -  
34 - public void setFlag(String flag) {  
35 - this.flag = flag;  
36 - }  
37 - }  
38 -  
39 - public static class BcObj { // 班次对象  
40 - /** 班次时间 */  
41 - private Integer bcsj;  
42 - /** 停站时间 */  
43 - private Integer ssj;  
44 - /** 吃饭时间 */  
45 - private Integer eatsj;  
46 -  
47 - /** 停车场id */  
48 - private Integer tccid;  
49 - /** 起点站id */  
50 - private Integer qdzid;  
51 - /** 终点站id */  
52 - private Integer zdzid;  
53 -  
54 - /** 是否上行 */  
55 - private Boolean isUp;  
56 -  
57 - /** 班次类型 */  
58 - private BcType bcType;  
59 - /** 发车时刻 */  
60 - private String fcsj;  
61 - /** 用于统计的发车时间描述(把进出场,保养,吃饭时间写在一起) */  
62 - private String fcsjDesc;  
63 -  
64 - /** 第几圈(从1开始) */  
65 - private Integer groupNo;  
66 - /** 圈里第几个班次(1或者2) */  
67 - private Integer groupBcNo;  
68 -  
69 - public Integer getBcsj() {  
70 - return bcsj;  
71 - }  
72 -  
73 - public void setBcsj(Integer bcsj) {  
74 - this.bcsj = bcsj;  
75 - }  
76 -  
77 - public Integer getSsj() {  
78 - return ssj;  
79 - }  
80 -  
81 - public void setSsj(Integer ssj) {  
82 - this.ssj = ssj;  
83 - }  
84 -  
85 - public Integer getEatsj() {  
86 - return eatsj;  
87 - }  
88 -  
89 - public void setEatsj(Integer eatsj) {  
90 - this.eatsj = eatsj;  
91 - }  
92 -  
93 - public Integer getTccid() {  
94 - return tccid;  
95 - }  
96 -  
97 - public void setTccid(Integer tccid) {  
98 - this.tccid = tccid;  
99 - }  
100 -  
101 - public Integer getQdzid() {  
102 - return qdzid;  
103 - }  
104 -  
105 - public void setQdzid(Integer qdzid) {  
106 - this.qdzid = qdzid;  
107 - }  
108 -  
109 - public Integer getZdzid() {  
110 - return zdzid;  
111 - }  
112 -  
113 - public void setZdzid(Integer zdzid) {  
114 - this.zdzid = zdzid;  
115 - }  
116 -  
117 - public BcType getBcType() {  
118 - return bcType;  
119 - }  
120 -  
121 - public void setBcType(BcType bcType) {  
122 - this.bcType = bcType;  
123 - }  
124 -  
125 - public String getFcsj() {  
126 - return fcsj;  
127 - }  
128 -  
129 - public void setFcsj(String fcsj) {  
130 - this.fcsj = fcsj;  
131 - }  
132 -  
133 - public Boolean getIsUp() {  
134 - return isUp;  
135 - }  
136 -  
137 - public void setIsUp(Boolean isUp) {  
138 - this.isUp = isUp;  
139 - }  
140 -  
141 - public Integer getGroupNo() {  
142 - return groupNo;  
143 - }  
144 -  
145 - public void setGroupNo(Integer groupNo) {  
146 - this.groupNo = groupNo;  
147 - }  
148 -  
149 - public Integer getGroupBcNo() {  
150 - return groupBcNo;  
151 - }  
152 -  
153 - public void setGroupBcNo(Integer groupBcNo) {  
154 - this.groupBcNo = groupBcNo;  
155 - }  
156 -  
157 - public Boolean getUp() {  
158 - return isUp;  
159 - }  
160 -  
161 - public void setUp(Boolean up) {  
162 - isUp = up;  
163 - }  
164 -  
165 - public String getFcsjDesc() {  
166 - return fcsjDesc;  
167 - }  
168 -  
169 - public void setFcsjDesc(String fcsjDesc) {  
170 - this.fcsjDesc = fcsjDesc;  
171 - }  
172 - }  
173 -  
174 - public static class LpObj { // 路牌对象  
175 - /** 路牌名字 */  
176 - private String lpname;  
177 - /** 每圈的第一个班次是否上行 */  
178 - private Boolean isUp;  
179 -  
180 - /** 第一个班次起点站路由id */  
181 - private Integer stationRouteId1;  
182 - /** 第二个班次起点站路由id */  
183 - private Integer stationRouteId2;  
184 -  
185 - /** 班次列表 */  
186 - private List<BcObj> bcObjList;  
187 - /** 总圈数 */  
188 - private Integer groupCount;  
189 -  
190 - /** 总工时 */  
191 - private Double zgs;  
192 - /** 总班次 */  
193 - private Integer zbc;  
194 -  
195 -  
196 - public String getLpname() {  
197 - return lpname;  
198 - }  
199 -  
200 - public void setLpname(String lpname) {  
201 - this.lpname = lpname;  
202 - }  
203 -  
204 - public Boolean getIsUp() {  
205 - return isUp;  
206 - }  
207 -  
208 - public void setIsUp(Boolean isUp) {  
209 - this.isUp = isUp;  
210 - }  
211 -  
212 - public List<BcObj> getBcObjList() {  
213 - return bcObjList;  
214 - }  
215 -  
216 - public void setBcObjList(List<BcObj> bcObjList) {  
217 - this.bcObjList = bcObjList;  
218 - }  
219 -  
220 - public Integer getGroupCount() {  
221 - return groupCount;  
222 - }  
223 -  
224 - public void setGroupCount(Integer groupCount) {  
225 - this.groupCount = groupCount;  
226 - }  
227 -  
228 - public Double getZgs() {  
229 - return zgs;  
230 - }  
231 -  
232 - public void setZgs(Double zgs) {  
233 - this.zgs = zgs;  
234 - }  
235 -  
236 - public Integer getZbc() {  
237 - return zbc;  
238 - }  
239 -  
240 - public void setZbc(Integer zbc) {  
241 - this.zbc = zbc;  
242 - }  
243 -  
244 - public Integer getStationRouteId1() {  
245 - return stationRouteId1;  
246 - }  
247 -  
248 - public void setStationRouteId1(Integer stationRouteId1) {  
249 - this.stationRouteId1 = stationRouteId1;  
250 - }  
251 -  
252 - public Integer getStationRouteId2() {  
253 - return stationRouteId2;  
254 - }  
255 -  
256 - public void setStationRouteId2(Integer stationRouteId2) {  
257 - this.stationRouteId2 = stationRouteId2;  
258 - }  
259 - }  
260 -  
261 - public static class StatInfo { // 统计数据对象  
262 - /** 统计项目 */  
263 - private String statItem;  
264 - /** 统计值 */  
265 - private Double statValue;  
266 -  
267 - public String getStatItem() {  
268 - return statItem;  
269 - }  
270 -  
271 - public void setStatItem(String statItem) {  
272 - this.statItem = statItem;  
273 - }  
274 -  
275 - public Double getStatValue() {  
276 - return statValue;  
277 - }  
278 -  
279 - public void setStatValue(Double statValue) {  
280 - this.statValue = statValue;  
281 - }  
282 - }  
283 -  
284 - public static class DTInfos { // 所有数据信息  
285 - /** 路牌班次数据列表 */  
286 - private List<LpObj> lpObjList;  
287 - /** 统计数据列表 */  
288 - private List<StatInfo> statInfoList;  
289 -  
290 - public List<LpObj> getLpObjList() {  
291 - return lpObjList;  
292 - }  
293 -  
294 - public void setLpObjList(List<LpObj> lpObjList) {  
295 - this.lpObjList = lpObjList;  
296 - }  
297 -  
298 - public List<StatInfo> getStatInfoList() {  
299 - return statInfoList;  
300 - }  
301 -  
302 - public void setStatInfoList(List<StatInfo> statInfoList) {  
303 - this.statInfoList = statInfoList;  
304 - }  
305 - }  
306 -  
307 - //---------------------- 生成时刻表用对象(以上) ---------------------//  
308 -  
309 - /**  
310 - * 导出动态时刻表数据。  
311 - * @param dtInfos  
312 - * @return  
313 - * @throws ScheduleException  
314 - */  
315 - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;  
316 -} 1 +package com.bsth.service.schedule.datatools;
  2 +
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsFile;
  5 +import com.fasterxml.jackson.annotation.JsonCreator;
  6 +import com.fasterxml.jackson.annotation.JsonValue;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * 动态时刻表数据。
  12 + */
  13 +public interface TTinfoDetailDynamicData {
  14 +
  15 + //---------------------- 生成时刻表用对象(以下) ---------------------//
  16 + public static enum BcType { // 班次类型枚举
  17 + IN("in"), // 进场
  18 + OUT("out"), // 出场
  19 + BD("bd"), // 早例保
  20 + LC("lc"), // 晚例保
  21 + NORMAL("normal"); // 正常
  22 + private String flag;
  23 +
  24 + @JsonCreator
  25 + private BcType(String flag) {
  26 + this.flag = flag;
  27 + }
  28 +
  29 + @JsonValue
  30 + public String getFlag() {
  31 + return flag;
  32 + }
  33 +
  34 + public void setFlag(String flag) {
  35 + this.flag = flag;
  36 + }
  37 + }
  38 +
  39 + public static class BcObj { // 班次对象
  40 + /** 班次时间 */
  41 + private Integer bcsj;
  42 + /** 停站时间 */
  43 + private Integer ssj;
  44 + /** 吃饭时间 */
  45 + private Integer eatsj;
  46 +
  47 + /** 停车场id */
  48 + private Integer tccid;
  49 + /** 起点站id */
  50 + private Integer qdzid;
  51 + /** 终点站id */
  52 + private Integer zdzid;
  53 +
  54 + /** 是否上行 */
  55 + private Boolean isUp;
  56 +
  57 + /** 班次类型 */
  58 + private BcType bcType;
  59 + /** 发车时刻 */
  60 + private String fcsj;
  61 + /** 用于统计的发车时间描述(把进出场,保养,吃饭时间写在一起) */
  62 + private String fcsjDesc;
  63 +
  64 + /** 第几圈(从1开始) */
  65 + private Integer groupNo;
  66 + /** 圈里第几个班次(1或者2) */
  67 + private Integer groupBcNo;
  68 +
  69 + public Integer getBcsj() {
  70 + return bcsj;
  71 + }
  72 +
  73 + public void setBcsj(Integer bcsj) {
  74 + this.bcsj = bcsj;
  75 + }
  76 +
  77 + public Integer getSsj() {
  78 + return ssj;
  79 + }
  80 +
  81 + public void setSsj(Integer ssj) {
  82 + this.ssj = ssj;
  83 + }
  84 +
  85 + public Integer getEatsj() {
  86 + return eatsj;
  87 + }
  88 +
  89 + public void setEatsj(Integer eatsj) {
  90 + this.eatsj = eatsj;
  91 + }
  92 +
  93 + public Integer getTccid() {
  94 + return tccid;
  95 + }
  96 +
  97 + public void setTccid(Integer tccid) {
  98 + this.tccid = tccid;
  99 + }
  100 +
  101 + public Integer getQdzid() {
  102 + return qdzid;
  103 + }
  104 +
  105 + public void setQdzid(Integer qdzid) {
  106 + this.qdzid = qdzid;
  107 + }
  108 +
  109 + public Integer getZdzid() {
  110 + return zdzid;
  111 + }
  112 +
  113 + public void setZdzid(Integer zdzid) {
  114 + this.zdzid = zdzid;
  115 + }
  116 +
  117 + public BcType getBcType() {
  118 + return bcType;
  119 + }
  120 +
  121 + public void setBcType(BcType bcType) {
  122 + this.bcType = bcType;
  123 + }
  124 +
  125 + public String getFcsj() {
  126 + return fcsj;
  127 + }
  128 +
  129 + public void setFcsj(String fcsj) {
  130 + this.fcsj = fcsj;
  131 + }
  132 +
  133 + public Boolean getIsUp() {
  134 + return isUp;
  135 + }
  136 +
  137 + public void setIsUp(Boolean isUp) {
  138 + this.isUp = isUp;
  139 + }
  140 +
  141 + public Integer getGroupNo() {
  142 + return groupNo;
  143 + }
  144 +
  145 + public void setGroupNo(Integer groupNo) {
  146 + this.groupNo = groupNo;
  147 + }
  148 +
  149 + public Integer getGroupBcNo() {
  150 + return groupBcNo;
  151 + }
  152 +
  153 + public void setGroupBcNo(Integer groupBcNo) {
  154 + this.groupBcNo = groupBcNo;
  155 + }
  156 +
  157 + public Boolean getUp() {
  158 + return isUp;
  159 + }
  160 +
  161 + public void setUp(Boolean up) {
  162 + isUp = up;
  163 + }
  164 +
  165 + public String getFcsjDesc() {
  166 + return fcsjDesc;
  167 + }
  168 +
  169 + public void setFcsjDesc(String fcsjDesc) {
  170 + this.fcsjDesc = fcsjDesc;
  171 + }
  172 + }
  173 +
  174 + public static class LpObj { // 路牌对象
  175 + /** 路牌名字 */
  176 + private String lpname;
  177 + /** 每圈的第一个班次是否上行 */
  178 + private Boolean isUp;
  179 +
  180 + /** 第一个班次起点站路由id */
  181 + private Integer stationRouteId1;
  182 + /** 第二个班次起点站路由id */
  183 + private Integer stationRouteId2;
  184 +
  185 + /** 班次列表 */
  186 + private List<BcObj> bcObjList;
  187 + /** 总圈数 */
  188 + private Integer groupCount;
  189 +
  190 + //---------------- 路牌统计 ---------------//
  191 + /** 总里程 */
  192 + private Double zlc;
  193 + /** 营运里程 */
  194 + private Double yylc;
  195 + /** 空驶里程 */
  196 + private Double kslc;
  197 + /** 总工时 */
  198 + private Double zgs;
  199 + /** 总班次 */
  200 + private Integer zbc;
  201 + /** 营运工时 */
  202 + private Double yygs;
  203 + /** 营运班次 */
  204 + private Integer yybc;
  205 +
  206 + public String getLpname() {
  207 + return lpname;
  208 + }
  209 +
  210 + public void setLpname(String lpname) {
  211 + this.lpname = lpname;
  212 + }
  213 +
  214 + public Boolean getIsUp() {
  215 + return isUp;
  216 + }
  217 +
  218 + public void setIsUp(Boolean isUp) {
  219 + this.isUp = isUp;
  220 + }
  221 +
  222 + public List<BcObj> getBcObjList() {
  223 + return bcObjList;
  224 + }
  225 +
  226 + public void setBcObjList(List<BcObj> bcObjList) {
  227 + this.bcObjList = bcObjList;
  228 + }
  229 +
  230 + public Integer getGroupCount() {
  231 + return groupCount;
  232 + }
  233 +
  234 + public void setGroupCount(Integer groupCount) {
  235 + this.groupCount = groupCount;
  236 + }
  237 +
  238 + public Integer getStationRouteId1() {
  239 + return stationRouteId1;
  240 + }
  241 +
  242 + public void setStationRouteId1(Integer stationRouteId1) {
  243 + this.stationRouteId1 = stationRouteId1;
  244 + }
  245 +
  246 + public Integer getStationRouteId2() {
  247 + return stationRouteId2;
  248 + }
  249 +
  250 + public void setStationRouteId2(Integer stationRouteId2) {
  251 + this.stationRouteId2 = stationRouteId2;
  252 + }
  253 +
  254 + public Boolean getUp() {
  255 + return isUp;
  256 + }
  257 +
  258 + public void setUp(Boolean up) {
  259 + isUp = up;
  260 + }
  261 +
  262 + public Double getZlc() {
  263 + return zlc;
  264 + }
  265 +
  266 + public void setZlc(Double zlc) {
  267 + this.zlc = zlc;
  268 + }
  269 +
  270 + public Double getYylc() {
  271 + return yylc;
  272 + }
  273 +
  274 + public void setYylc(Double yylc) {
  275 + this.yylc = yylc;
  276 + }
  277 +
  278 + public Double getKslc() {
  279 + return kslc;
  280 + }
  281 +
  282 + public void setKslc(Double kslc) {
  283 + this.kslc = kslc;
  284 + }
  285 +
  286 + public Double getZgs() {
  287 + return zgs;
  288 + }
  289 +
  290 + public void setZgs(Double zgs) {
  291 + this.zgs = zgs;
  292 + }
  293 +
  294 + public Integer getZbc() {
  295 + return zbc;
  296 + }
  297 +
  298 + public void setZbc(Integer zbc) {
  299 + this.zbc = zbc;
  300 + }
  301 +
  302 + public Double getYygs() {
  303 + return yygs;
  304 + }
  305 +
  306 + public void setYygs(Double yygs) {
  307 + this.yygs = yygs;
  308 + }
  309 +
  310 + public Integer getYybc() {
  311 + return yybc;
  312 + }
  313 +
  314 + public void setYybc(Integer yybc) {
  315 + this.yybc = yybc;
  316 + }
  317 + }
  318 +
  319 + public static class StatInfo { // 统计数据对象
  320 + /** 统计项目 */
  321 + private String statItem;
  322 + /** 统计值 */
  323 + private Double statValue;
  324 +
  325 + public String getStatItem() {
  326 + return statItem;
  327 + }
  328 +
  329 + public void setStatItem(String statItem) {
  330 + this.statItem = statItem;
  331 + }
  332 +
  333 + public Double getStatValue() {
  334 + return statValue;
  335 + }
  336 +
  337 + public void setStatValue(Double statValue) {
  338 + this.statValue = statValue;
  339 + }
  340 + }
  341 +
  342 + public static class DTInfos { // 所有数据信息
  343 + /** 路牌班次数据列表 */
  344 + private List<LpObj> lpObjList;
  345 + /** 统计数据列表 */
  346 + private List<StatInfo> statInfoList;
  347 +
  348 + public List<LpObj> getLpObjList() {
  349 + return lpObjList;
  350 + }
  351 +
  352 + public void setLpObjList(List<LpObj> lpObjList) {
  353 + this.lpObjList = lpObjList;
  354 + }
  355 +
  356 + public List<StatInfo> getStatInfoList() {
  357 + return statInfoList;
  358 + }
  359 +
  360 + public void setStatInfoList(List<StatInfo> statInfoList) {
  361 + this.statInfoList = statInfoList;
  362 + }
  363 + }
  364 +
  365 + //---------------------- 生成时刻表用对象(以上) ---------------------//
  366 +
  367 + /**
  368 + * 导出动态时刻表数据。
  369 + * @param dtInfos
  370 + * @return
  371 + * @throws ScheduleException
  372 + */
  373 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;
  374 +}
317 \ No newline at end of file 375 \ No newline at end of file
src/main/java/com/bsth/service/schedule/utils/PoiUtils.java
@@ -82,7 +82,7 @@ public class PoiUtils { @@ -82,7 +82,7 @@ public class PoiUtils {
82 82
83 public static XSSFCell createDoubleXSSFCell( 83 public static XSSFCell createDoubleXSSFCell(
84 XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, Double value) { 84 XSSFWorkbook xssfWorkbook, XSSFRow xssfRow, short column, Double value) {
85 - return createXSSFCell( 85 + XSSFCell xssfCell = createXSSFCell(
86 xssfWorkbook, xssfRow, column, 86 xssfWorkbook, xssfRow, column,
87 value, XSSFCell.CELL_TYPE_NUMERIC, 87 value, XSSFCell.CELL_TYPE_NUMERIC,
88 HorizontalAlignment.CENTER, VerticalAlignment.CENTER, 88 HorizontalAlignment.CENTER, VerticalAlignment.CENTER,
@@ -90,6 +90,10 @@ public class PoiUtils { @@ -90,6 +90,10 @@ public class PoiUtils {
90 (short) 13, new Color(0x2765A7), "宋体", 90 (short) 13, new Color(0x2765A7), "宋体",
91 new Color(0xffffff), FillPatternType.SOLID_FOREGROUND 91 new Color(0xffffff), FillPatternType.SOLID_FOREGROUND
92 ); 92 );
  93 +
  94 + DataFormat dataFormat = xssfWorkbook.createDataFormat();
  95 + xssfCell.getCellStyle().setDataFormat(dataFormat.getFormat("0.00"));
  96 + return xssfCell;
93 } 97 }
94 98
95 public static XSSFCell createIntegerXSSFCell( 99 public static XSSFCell createIntegerXSSFCell(
src/main/resources/static/pages/base/carpark/js/carpark-list-table.js
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 var branchMap = new Map(); 30 var branchMap = new Map();
31 initCompanySelect2(function(array) { 31 initCompanySelect2(function(array) {
32 $.each(array, function() { 32 $.each(array, function() {
33 - companyMap[this.businessCode] = this.businessName; 33 + companyMap[this.businessCode] = this.busi nessName;
34 // companyMap.put(this.businessCode.toString(), this.businessName); 34 // companyMap.put(this.businessCode.toString(), this.businessName);
35 if(this.businessCode != null || this.businessCode !=''){ 35 if(this.businessCode != null || this.businessCode !=''){
36 /** 查询出所属公司下的分公司名称和相应分公司代码 @param:<upCode_eq:公司代码> */ 36 /** 查询出所属公司下的分公司名称和相应分公司代码 @param:<upCode_eq:公司代码> */
src/main/resources/static/pages/base/line/js/line-list-table.js
@@ -357,6 +357,9 @@ @@ -357,6 +357,9 @@
357 }else if(data.status=='NOTDATA') { 357 }else if(data.status=='NOTDATA') {
358 // 弹出添加成功提示消息 358 // 弹出添加成功提示消息
359 layer.msg('系统无线路【'+ lineName +'】的站点与路段信息!'); 359 layer.msg('系统无线路【'+ lineName +'】的站点与路段信息!');
  360 + }else if(data.status=='NOLinePlayType') {
  361 + // 弹出添加成功提示消息
  362 + layer.msg('无法识别【'+ lineName +'】的线路规划类型,请设置为双向/环线!');
360 } 363 }
361 }); 364 });
362 } 365 }
src/main/resources/static/pages/base/lineversions/js/lineversions-list-table.js
@@ -6,8 +6,8 @@ @@ -6,8 +6,8 @@
6 // 关闭左侧栏 6 // 关闭左侧栏
7 if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();} 7 if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();}
8 // 定义 page : 当前页;initPag ; icheckOptions:选择框 8 // 定义 page : 当前页;initPag ; icheckOptions:选择框
9 - var page = 0,  
10 - initPag, 9 + window.page = 0;
  10 + var initPag,
11 icheckOptions = {checkboxClass: 'icheckbox_flat-blue',increaseArea: '20%'}, 11 icheckOptions = {checkboxClass: 'icheckbox_flat-blue',increaseArea: '20%'},
12 storage = window.localStorage; 12 storage = window.localStorage;
13 if(storage.xlName_AgursData!=null && storage.xlName_AgursData !='') { 13 if(storage.xlName_AgursData!=null && storage.xlName_AgursData !='') {
@@ -301,7 +301,6 @@ @@ -301,7 +301,6 @@
301 }); 301 });
302 // 线路版本编辑 302 // 线路版本编辑
303 $(document).on('click', 'a.update_versions_route_btn', function () { 303 $(document).on('click', 'a.update_versions_route_btn', function () {
304 - debugger  
305 var lineId = $(this).data('lineid'); 304 var lineId = $(this).data('lineid');
306 swal({ 305 swal({
307 title: "操作须知", 306 title: "操作须知",
src/main/resources/static/pages/base/stationroute/add.html
@@ -360,6 +360,7 @@ $(&#39;#add_station_mobal&#39;).on(&#39;AddStationMobal.show&#39;, function(e, addMap,ajaxd,stao @@ -360,6 +360,7 @@ $(&#39;#add_station_mobal&#39;).on(&#39;AddStationMobal.show&#39;, function(e, addMap,ajaxd,stao
360 ajaxd.getSectionRouteInfo(Line.id,add_direction_v,function(data) { 360 ajaxd.getSectionRouteInfo(Line.id,add_direction_v,function(data) {
361 fun.linePanlThree(Line.id,data,add_direction_v); 361 fun.linePanlThree(Line.id,data,add_direction_v);
362 }); 362 });
  363 + fun.editMapStatusRemove();
363 } 364 }
364 function hideMoble() { 365 function hideMoble() {
365 // 隐藏mobal 366 // 隐藏mobal
src/main/resources/static/pages/base/stationroute/add_manual_select.html
@@ -31,8 +31,8 @@ @@ -31,8 +31,8 @@
31 </form> 31 </form>
32 </div> 32 </div>
33 <div class="modal-footer"> 33 <div class="modal-footer">
34 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
35 <button type="button" class="btn btn-primary" id="addManualSelectnextButton">下一步</button> 34 <button type="button" class="btn btn-primary" id="addManualSelectnextButton">下一步</button>
  35 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
36 </div> 36 </div>
37 </div> 37 </div>
38 </div> 38 </div>
src/main/resources/static/pages/base/stationroute/add_select.html
@@ -38,8 +38,8 @@ @@ -38,8 +38,8 @@
38 </form> 38 </form>
39 </div> 39 </div>
40 <div class="modal-footer"> 40 <div class="modal-footer">
41 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
42 <button type="button" class="btn btn-primary" id="addSelectnextButton">下一步</button> 41 <button type="button" class="btn btn-primary" id="addSelectnextButton">下一步</button>
  42 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
43 </div> 43 </div>
44 </div> 44 </div>
45 </div> 45 </div>
@@ -164,12 +164,13 @@ $(&#39;#add_select_mobal&#39;).on(&#39;AddSelectMobal.show&#39;, function(e,map_,drw,ajaxd_,stat @@ -164,12 +164,13 @@ $(&#39;#add_select_mobal&#39;).on(&#39;AddSelectMobal.show&#39;, function(e,map_,drw,ajaxd_,stat
164 } 164 }
165 }); 165 });
166 }else if(baseRes==1) { 166 }else if(baseRes==1) {
167 - map_.clearMarkAndOverlays(); 167 + // map_.clearMarkAndOverlays();
168 // 以藏站点新增方式mobal 168 // 以藏站点新增方式mobal
169 $('#add_select_mobal').modal('hide'); 169 $('#add_select_mobal').modal('hide');
170 // 打开绘制工具 170 // 打开绘制工具
171 drw.openDrawingManager(); 171 drw.openDrawingManager();
172 - map_.localtionPoint(stationName); 172 + // map_.localtionPoint(stationName);
  173 + fun.editMapStatus();
173 } 174 }
174 // 查询是否存在输入的站点名称 175 // 查询是否存在输入的站点名称
175 /* ajaxd_.getLikeStationName(stationName,function(data) { 176 /* ajaxd_.getLikeStationName(stationName,function(data) {
src/main/resources/static/pages/base/stationroute/css/bmap_base.css
1 #bmap_basic{ 1 #bmap_basic{
2 min-width: 100%; 2 min-width: 100%;
3 - /*width: calc(100% + 26px); */  
4 margin-top: -10px; 3 margin-top: -10px;
5 - border: 2px solid #fdfdfd;  
6 - min-height: 1200px;  
7 height:100%; 4 height:100%;
8 - overflow: hidden; 5 +}
  6 +
  7 +.mian-portlet-body{
  8 + height: 100%;
9 } 9 }
10 10
11 html,body{ 11 html,body{
12 overflow:hidden; 12 overflow:hidden;
13 - height: 99%; 13 + height: calc(100% - 10px);
  14 +}
  15 +
  16 +.protlet-box-layer{
  17 + position: absolute;
  18 + z-index: 900;
  19 + height: 100%;
  20 + width: 100%;
  21 + background: #ffffff85;
  22 + display: none;
14 } 23 }
15 24
16 .rm3_image { 25 .rm3_image {
@@ -19,6 +28,52 @@ html,body{ @@ -19,6 +28,52 @@ html,body{
19 28
20 } 29 }
21 30
  31 +.search_panel{
  32 + position: absolute;
  33 + z-index: 99;
  34 + height: 42px;
  35 + top: 40px;
  36 + left: 500px;
  37 + background: #fff1f0;
  38 + padding: 0px;
  39 + box-shadow: 5px 1px 5px rgba(90, 90, 90, 0.48);
  40 +}
  41 +
  42 +.search_input_panel {
  43 + display: inline;
  44 + height: 42px;
  45 +}
  46 +
  47 +.search_input_panel .search_input {
  48 + width: 200px;
  49 + height: 42px;
  50 + padding:0 20px 0 10px;
  51 + float:left;
  52 + border:none;
  53 + outline: 0px;
  54 +}
  55 +
  56 +.search_input_panel .clear {
  57 + right: 42px;
  58 + position: absolute;
  59 + top: 15px;
  60 + width: 20px;
  61 +}
  62 +
  63 +.search_button_panel{
  64 + height: 42px;
  65 + display: inline;
  66 +}
  67 +
  68 +.search_button {
  69 + width: 42px;
  70 + height: 42px;
  71 + background: #fff;
  72 + border:none;
  73 + top: 0;
  74 + outline: 0px;
  75 +}
  76 +
22 /* 隐藏百度地图logo */ 77 /* 隐藏百度地图logo */
23 .anchorBL, 78 .anchorBL,
24 .anchorBL, 79 .anchorBL,
@@ -36,8 +91,7 @@ html,body{ @@ -36,8 +91,7 @@ html,body{
36 height: auto; 91 height: auto;
37 background:transparent; 92 background:transparent;
38 border:0px solid; 93 border:0px solid;
39 - box-shadow: 0 12px 15px 0 rgba(204, 204, 204, 0.33),0 17px 50px 0 rgba(204, 204, 204, 0.33);  
40 - border-radius: 6px !important;box-shadow: 10px 10px 5px #888888; 94 + border-radius: 6px !important;box-shadow: 5px 5px 5px rgba(90, 90, 90, 0.48);
41 } 95 }
42 96
43 .help-block{ 97 .help-block{
@@ -45,47 +99,12 @@ html,body{ @@ -45,47 +99,12 @@ html,body{
45 font-size: 15px; 99 font-size: 15px;
46 } 100 }
47 101
48 -/*.BMap_pop div:nth-child(1) ,*/  
49 -/*.BMap_pop div:nth-child(2) ,*/  
50 -/*.BMap_pop div:nth-child(3) ,*/  
51 -/*.BMap_pop div:nth-child(4) ,*/  
52 -/*.BMap_pop div:nth-child(5) ,*/  
53 -/*.BMap_pop div:nth-child(6) ,*/  
54 -/*.BMap_pop div:nth-child(7) {*/  
55 - /**/  
56 - /*border:0px solid rgb(255, 255, 255) !important;*/  
57 - /*background-color:#3B3F51 !important;*/  
58 - /**/  
59 -/*}*/  
60 -  
61 -/*.BMap_pop div:nth-child(3){*/  
62 - /**/  
63 - /*width:23px !important;*/  
64 - /**/  
65 -/*}*/  
66 -  
67 -/*.BMap_pop div:nth-child(7) {*/  
68 - /**/  
69 - /*width:23px !important;*/  
70 - /**/  
71 - /*height:24px !important;*/  
72 - /**/  
73 -/*}*/  
74 -  
75 -/*.BMap_pop div:nth-child(5) {*/  
76 - /**/  
77 - /*height:24px !important;*/  
78 - /**/  
79 -/*}*/  
80 -  
81 -/* 图片以后在弄,先隐藏div */  
82 -/*.BMap_pop div:nth-child(8) {*/  
83 - /**/  
84 - /*height:0px !important;*/  
85 - /*!* background:url('/pages/base/stationroute/css/img/iw3-1.png') no-repeat !important; *!*/  
86 - /*!* background-image:url('/pages/base/stationroute/css/img/windowinfo_b.jpg') !important; *!*/  
87 - /**/  
88 -/*}*/ 102 +.info_win_btn {
  103 + background: #ff8355;
  104 + color: #fff;
  105 + font-size: 12px;
  106 + border: 1px solid transparent;
  107 +}
89 108
90 .BMap_pop { 109 .BMap_pop {
91 110
@@ -94,36 +113,111 @@ html,body{ @@ -94,36 +113,111 @@ html,body{
94 } 113 }
95 114
96 .defeat-scroll { 115 .defeat-scroll {
97 -width: 98%;  
98 -height:380px;  
99 -/* overflow:auto; */  
100 -overflow:hidden; 116 + width: 98%;
  117 + height:380px;
  118 + overflow:hidden;
101 } 119 }
102 .defeat-scroll::-webkit-scrollbar { 120 .defeat-scroll::-webkit-scrollbar {
103 -width:6px;  
104 -height:6px; 121 + width:6px;
  122 + height:6px;
105 } 123 }
106 .defeat-scroll::-webkit-scrollbar-button { 124 .defeat-scroll::-webkit-scrollbar-button {
107 -/* background-color:#FF7677; */  
108 -background:rgba(255, 255, 255, 0); 125 + background:rgba(255, 255, 255, 0);
109 } 126 }
110 .defeat-scroll::-webkit-scrollbar-track { 127 .defeat-scroll::-webkit-scrollbar-track {
111 -/* background:#FF66D5; */  
112 -background:rgba(255, 255, 255, 0); 128 + background:rgba(255, 255, 255, 0);
113 } 129 }
114 .defeat-scroll::-webkit-scrollbar-track-piece { 130 .defeat-scroll::-webkit-scrollbar-track-piece {
115 -/* background:#ff0000; */  
116 -background:rgba(255, 255, 255, 0); 131 + background:rgba(255, 255, 255, 0);
117 } 132 }
118 .defeat-scroll::-webkit-scrollbar-thumb{ 133 .defeat-scroll::-webkit-scrollbar-thumb{
119 -background:rgba(197, 196, 196, 0.81);  
120 -border-radius:10px !important; 134 + background:rgba(197, 196, 196, 0.81);
  135 + border-radius:10px !important;
121 } 136 }
122 .defeat-scroll::-webkit-scrollbar-corner { 137 .defeat-scroll::-webkit-scrollbar-corner {
123 -/* background:#82AFFF; */  
124 -background:rgba(255, 255, 255, 0); 138 + background:rgba(255, 255, 255, 0);
125 } 139 }
126 -.defeat-scroll::-webkit-scrollbar-resizer {  
127 -/* background:#FF0BEE; */  
128 -background:rgba(255, 255, 255, 0);  
129 -}  
130 \ No newline at end of file 140 \ No newline at end of file
  141 +/*.defeat-scroll::-webkit-scrollbar-resizer {
  142 + background:rgba(255, 255, 255, 0);
  143 +}*/
  144 +
  145 +.add_road_search_point_wrap{
  146 + width: 280px;
  147 + height: 120px;
  148 + position: absolute;
  149 + top: 40px;
  150 + left: calc(50% - 100px);
  151 + z-index: 999;
  152 + background: #fdfdfd;
  153 + box-shadow: 5px 5px 15px rgba(90, 90, 90, 0.48);
  154 +}
  155 +
  156 +.buffer_edit_body{
  157 + padding: 5px 0 0 15px;
  158 +}
  159 +
  160 +.buffer_edit_body .form-group{
  161 + margin-top: 10px;
  162 + margin-bottom: 0px;
  163 + white: 240px
  164 +}
  165 +
  166 +.add_road_search_point_wrap ._title {
  167 + padding-right: 18px;
  168 + text-align: center;
  169 + font-size: 17px;
  170 + color: #2b2b2b;
  171 + /*padding: 2px 0 0 0;*/
  172 + font-weight: 600;
  173 +}
  174 +
  175 +.buffer_edit_body .btns{
  176 + text-align: right;
  177 +}
  178 +
  179 +.buffer_edit_body .form-group .inline{
  180 + width: 100px !important;
  181 + height: 30px;
  182 + margin-right: 7px;
  183 + display: inline-block;
  184 + position: relative;
  185 + max-width: 100%;
  186 + vertical-align: middle;
  187 +}
  188 +
  189 +.sbmint-btn {
  190 + padding: 0 15px;
  191 + height: 28px;
  192 + line-height: 28px;
  193 + vertical-align: top;
  194 + margin-top: 2px;
  195 + background-color: #1e87f0;
  196 + color: #fff;
  197 + border: 1px solid transparent;
  198 +}
  199 +.cancel-btn {
  200 + padding: 0 15px;
  201 + height: 28px;
  202 + line-height: 28px;
  203 + vertical-align: top;
  204 + margin-top: 2px;
  205 + background-color: transparent;
  206 + color: #333;
  207 + border: 1px solid #e5e5e5;
  208 +}
  209 +
  210 +.draw_polyline_switch{
  211 + display: inline-block;
  212 + font-size: 12px;
  213 + vertical-align: bottom;
  214 + margin-left: 5px;
  215 +}
  216 +
  217 +.draw_polyline_switch>a{
  218 + color: red;
  219 +}
  220 +
  221 +.buffer_edit_body .form-group input{
  222 + height: 30px;
  223 +}
  224 +
src/main/resources/static/pages/base/stationroute/delete_select.html
@@ -29,9 +29,9 @@ @@ -29,9 +29,9 @@
29 </form> 29 </form>
30 </div> 30 </div>
31 <div class="modal-footer"> 31 <div class="modal-footer">
32 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
33 <button type="button" class="btn btn-primary" 32 <button type="button" class="btn btn-primary"
34 - id="deleteSelectnextButton">下一步</button> 33 + id="deleteSelectnextButton">下一步</button>
  34 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
35 </div> 35 </div>
36 </div> 36 </div>
37 </div> 37 </div>
src/main/resources/static/pages/base/stationroute/deletesection.html
@@ -139,25 +139,25 @@ $(&#39;#delete_section_mobal&#39;).on(&#39;deleteSectionMobal.show&#39;,function(e, ajaxd, line, @@ -139,25 +139,25 @@ $(&#39;#delete_section_mobal&#39;).on(&#39;deleteSectionMobal.show&#39;,function(e, ajaxd, line,
139 ids = ids.substr(1, ids.length - 1); 139 ids = ids.substr(1, ids.length - 1);
140 var params = {}; 140 var params = {};
141 params.ids = ids; 141 params.ids = ids;
142 - $.get('/sectionroute/batchDestroy',params,function(resuntDate) {  
143 - if (resuntDate.status == 'SUCCESS') {  
144 - // 弹出添加成功提示消息  
145 - layer.msg('修改成功...');  
146 - /** 通知更新缓存区 */  
147 - //$.post('http://192.168.168.171:8800/transport_server/basic/refresh',function(rs) {console.log(rs)})  
148 - } else {  
149 - // 弹出添加失败提示消息  
150 - layer.msg('修改失败...');  
151 - }  
152 - initSearch();  
153 - // 刷新左边树  
154 - fun.resjtreeDate(line.id,delBatch.dir);  
155 - /** 查询路段信息 @param:<Line.id:线路Id;delBatch.dir:方向> @return:data:路段数据 */  
156 - ajaxd.getSectionRouteInfo(line.id,delBatch.dir,function(data) {  
157 - /** 在地图上画出线路走向 @param:<Line.id:线路Id;delBatch.dir:方向;data:路段数据> */  
158 - fun.linePanlThree(line.id,data,delBatch.dir);  
159 - });  
160 - }); 142 + $.post('/sectionroute/batchDestroy',params,function(resuntDate) {
  143 + if (resuntDate.status == 'SUCCESS') {
  144 + // 弹出添加成功提示消息
  145 + layer.msg('修改成功...');
  146 + /** 通知更新缓存区 */
  147 + //$.post('http://192.168.168.171:8800/transport_server/basic/refresh',function(rs) {console.log(rs)})
  148 + } else {
  149 + // 弹出添加失败提示消息
  150 + layer.msg('修改失败...');
  151 + }
  152 + initSearch();
  153 + // 刷新左边树
  154 + fun.resjtreeDate(line.id,delBatch.dir);
  155 + /** 查询路段信息 @param:<Line.id:线路Id;delBatch.dir:方向> @return:data:路段数据 */
  156 + ajaxd.getSectionRouteInfo(line.id,delBatch.dir,function(data) {
  157 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;delBatch.dir:方向;data:路段数据> */
  158 + fun.linePanlThree(line.id,data,delBatch.dir);
  159 + });
  160 + });
161 } else { 161 } else {
162 layer.msg('请选择要删除的路段!!!'); 162 layer.msg('请选择要删除的路段!!!');
163 } 163 }
src/main/resources/static/pages/base/stationroute/deletestation.html
@@ -141,7 +141,7 @@ $(&#39;#delete_station_mobal&#39;).on(&#39;deleteStationMobal.show&#39;,function(e, ajaxd, line, @@ -141,7 +141,7 @@ $(&#39;#delete_station_mobal&#39;).on(&#39;deleteStationMobal.show&#39;,function(e, ajaxd, line,
141 ids = ids.substr(1, ids.length - 1); 141 ids = ids.substr(1, ids.length - 1);
142 var params = {}; 142 var params = {};
143 params.ids = ids; 143 params.ids = ids;
144 - $.get('/stationroute/batchDestroy',params,function(resuntDate) { 144 + $.post('/stationroute/batchDestroy',params,function(resuntDate) {
145 if (resuntDate.status == 'SUCCESS') { 145 if (resuntDate.status == 'SUCCESS') {
146 // 弹出添加成功提示消息 146 // 弹出添加成功提示消息
147 layer.msg('修改成功...'); 147 layer.msg('修改成功...');
src/main/resources/static/pages/base/stationroute/doublename_road.html
@@ -32,8 +32,8 @@ @@ -32,8 +32,8 @@
32 </form> 32 </form>
33 </div> 33 </div>
34 <div class="modal-footer"> 34 <div class="modal-footer">
35 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
36 <button type="button" class="btn btn-primary" id="editSectionButton">提交数据</button> 35 <button type="button" class="btn btn-primary" id="editSectionButton">提交数据</button>
  36 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
37 </div> 37 </div>
38 </div> 38 </div>
39 </div> 39 </div>
@@ -79,7 +79,7 @@ @@ -79,7 +79,7 @@
79 }); 79 });
80 function closeMobleSetClean() { 80 function closeMobleSetClean() {
81 // 清除地图覆盖物 81 // 清除地图覆盖物
82 - map_.clearMarkAndOverlays(); 82 + // map_.clearMarkAndOverlays();
83 fun.resjtreeDate(lineId,dir); 83 fun.resjtreeDate(lineId,dir);
84 fun.editAChangeCssRemoveDisabled(); 84 fun.editAChangeCssRemoveDisabled();
85 ajaxd.getSectionRouteInfo(lineId,dir,function(data) { 85 ajaxd.getSectionRouteInfo(lineId,dir,function(data) {
@@ -128,12 +128,11 @@ @@ -128,12 +128,11 @@
128 params.versions = versions; 128 params.versions = versions;
129 // 生成路段 129 // 生成路段
130 $.get('/section/doubleName',params,function (resuntDate) { 130 $.get('/section/doubleName',params,function (resuntDate) {
131 - debugger  
132 if(resuntDate.status=='SUCCESS') { 131 if(resuntDate.status=='SUCCESS') {
133 // 弹出添加成功提示消息 132 // 弹出添加成功提示消息
134 layer.msg('生成成功...'); 133 layer.msg('生成成功...');
135 } else if (resuntDate.status=='Failure') { 134 } else if (resuntDate.status=='Failure') {
136 - layer.msg('抱歉,选取的路段太短,无法生成双路段!'); 135 + layer.msg('抱歉,您选取的路段基于高德地图的数据无法生成双路段!');
137 } else { 136 } else {
138 // 弹出添加失败提示消息 137 // 弹出添加失败提示消息
139 layer.msg('生成失败...'); 138 layer.msg('生成失败...');
@@ -141,7 +140,7 @@ @@ -141,7 +140,7 @@
141 $('#doublename_road_mobal').modal('hide'); 140 $('#doublename_road_mobal').modal('hide');
142 var dir = params.directions; 141 var dir = params.directions;
143 // 刷行左边树 142 // 刷行左边树
144 - fun.resjtreeDate(lineId,dir); 143 + // fun.resjtreeDate(lineId,dir);
145 closeMobleSetClean(); 144 closeMobleSetClean();
146 }); 145 });
147 }); 146 });
src/main/resources/static/pages/base/stationroute/edit.html
@@ -21,25 +21,19 @@ @@ -21,25 +21,19 @@
21 <input type="hidden" name="dbType" id="dbTypeInput" value="b"/> 21 <input type="hidden" name="dbType" id="dbTypeInput" value="b"/>
22 <input type="hidden" name="x" id="xInput" value=""/> 22 <input type="hidden" name="x" id="xInput" value=""/>
23 <input type="hidden" name="y" id="yInput" value=""/> 23 <input type="hidden" name="y" id="yInput" value=""/>
  24 + <input type="hidden" name="zdmc" id="zdmcInput"/>
  25 + <input type="hidden" name="descriptions" id="descriptionsTextarea" />
  26 + <input type="hidden" name="directions" id="stationdirSelect" />
  27 +
  28 + <!-- 站点名称 -->
24 <!-- 站点名称 --> 29 <!-- 站点名称 -->
25 <div class="form-body"> 30 <div class="form-body">
26 <div class="form-group"> 31 <div class="form-group">
27 <label class="control-label col-md-3"> 32 <label class="control-label col-md-3">
28 - <span class="required"> * </span> 站点名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:  
29 - </label>  
30 - <div class="col-md-6">  
31 - <input type="text" class="form-control" name="zdmc" id="zdmcInput" placeholder="站点名称" readonly="readonly">  
32 - </div>  
33 - </div>  
34 - </div>  
35 - <!-- 站点路由名称 -->  
36 - <div class="form-body">  
37 - <div class="form-group">  
38 - <label class="control-label col-md-3">  
39 - <span class="required"> * </span> 站点路由名称: 33 + <span class="required"> * </span> 站点名称:
40 </label> 34 </label>
41 <div class="col-md-6"> 35 <div class="col-md-6">
42 - <input type="text" class="form-control" name="stationName" id="stationNameInput" placeholder="站点路由名称"> 36 + <input type="text" class="form-control" name="stationName" id="stationNameInput" placeholder="站点名称" readonly="readonly">
43 </div> 37 </div>
44 </div> 38 </div>
45 </div> 39 </div>
@@ -54,21 +48,6 @@ @@ -54,21 +48,6 @@
54 </div> 48 </div>
55 </div> 49 </div>
56 </div> 50 </div>
57 - <!-- 站点方向 -->  
58 - <div class="form-body">  
59 - <div class="form-group">  
60 - <label class="control-label col-md-3">  
61 - <span class="required"> * </span>站点方向&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:  
62 - </label>  
63 - <div class="col-md-6">  
64 - <select name="directions" class="form-control" id="stationdirSelect">  
65 - <option value="">-- 请选择站点类型 --</option>  
66 - <option value="0">上行</option>  
67 - <option value="1">下行</option>  
68 - </select>  
69 - </div>  
70 - </div>  
71 - </div>  
72 <!-- 站点序号 --> 51 <!-- 站点序号 -->
73 <div class="form-body"> 52 <div class="form-body">
74 <div class="form-group"> 53 <div class="form-group">
@@ -175,13 +154,6 @@ @@ -175,13 +154,6 @@
175 </div> 154 </div>
176 </div> 155 </div>
177 </div> 156 </div>
178 - <!-- 描述/说明 -->  
179 - <div class="form-group">  
180 - <label class="control-label col-md-3"> 描述/说明&nbsp;&nbsp;&nbsp;: </label>  
181 - <div class="col-md-6">  
182 - <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea>  
183 - </div>  
184 - </div>  
185 </form> 157 </form>
186 </div> 158 </div>
187 <div class="modal-footer"> 159 <div class="modal-footer">
@@ -198,7 +170,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -198,7 +170,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
198 var editStationParmasObj = station_.getEitdStation(); 170 var editStationParmasObj = station_.getEitdStation();
199 var addLine = Line_.getLineObj(); 171 var addLine = Line_.getLineObj();
200 fun.setFormValue(editStationParmasObj); 172 fun.setFormValue(editStationParmasObj);
201 - var initzdlyP = {'lineCode_eq':editStationParmasObj.stationRouteLineCode,'destroy_eq':0,'directions_eq':editStationParmasObj.stationRouteDirections}; 173 + var initzdlyP = {'lineCode_eq':editStationParmasObj.stationRouteLIneCode,'destroy_eq':0,'directions_eq':editStationParmasObj.stationRoutedirections};
202 initSelect(initzdlyP); 174 initSelect(initzdlyP);
203 // 显示mobal 175 // 显示mobal
204 $('#edit_station_mobal').modal({show : true,backdrop: 'static',keyboard: false}); 176 $('#edit_station_mobal').modal({show : true,backdrop: 'static',keyboard: false});
@@ -217,6 +189,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -217,6 +189,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
217 ajaxd.getSectionRouteInfo(addLine.id,add_direction_v,function(data) { 189 ajaxd.getSectionRouteInfo(addLine.id,add_direction_v,function(data) {
218 fun.linePanlThree(addLine.id,data,add_direction_v); 190 fun.linePanlThree(addLine.id,data,add_direction_v);
219 }); 191 });
  192 + fun.editMapStatusRemove();
220 } 193 }
221 // 编辑表单元素 194 // 编辑表单元素
222 var form = $('#edit_station_form'); 195 var form = $('#edit_station_form');
@@ -283,7 +256,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -283,7 +256,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
283 var id = addLine.id; 256 var id = addLine.id;
284 var dir = params.directions 257 var dir = params.directions
285 // 刷行左边树 258 // 刷行左边树
286 - fun.resjtreeDate(id,dir); 259 + // fun.resjtreeDate(id,dir);
287 closeMobleSetClean(); 260 closeMobleSetClean();
288 }); 261 });
289 } 262 }
@@ -312,7 +285,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -312,7 +285,7 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
312 $.each(array, function(i, g){ 285 $.each(array, function(i, g){
313 // 判断. 286 // 判断.
314 if(g.name!='' || g.name != null) { 287 if(g.name!='' || g.name != null) {
315 - if(g.stationRouteCode != editStationParmasObj.stationRouteStationRouteCode) { 288 + if(g.stationRouteCode != editStationParmasObj.stationRouteCode) {
316 // 添加拼音检索下拉框格式数据数组. 289 // 添加拼音检索下拉框格式数据数组.
317 if(editStationParmasObj.stationRouteStationMark=='E' && i == (len_-2)){ 290 if(editStationParmasObj.stationRouteStationMark=='E' && i == (len_-2)){
318 paramsD.push({'id':g.stationRouteCode + '_' + 'E' + '_' + g.directions, 291 paramsD.push({'id':g.stationRouteCode + '_' + 'E' + '_' + g.directions,
@@ -333,13 +306,13 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -333,13 +306,13 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
333 }); 306 });
334 } 307 }
335 function setZdlyValue() { 308 function setZdlyValue() {
336 - ajaxd.findUpStationRouteCode(editStationParmasObj.stationRouteLine,editStationParmasObj.stationRouteDirections,editStationParmasObj.stationRouteStationRouteCode,function(str) { 309 + ajaxd.findUpStationRouteCode(editStationParmasObj.stationRouteLine,editStationParmasObj.stationRoutedirections,editStationParmasObj.stationRouteCode,function(str) {
337 if(str.length>0){ 310 if(str.length>0){
338 var upStationRouteCode; 311 var upStationRouteCode;
339 if (editStationParmasObj.stationRouteStationMark == 'E') { 312 if (editStationParmasObj.stationRouteStationMark == 'E') {
340 - upStationRouteCode = str[0].stationRouteCode + '_' + 'E' + '_' + editStationParmasObj.stationRouteDirections; 313 + upStationRouteCode = str[0].stationRouteCode + '_' + 'E' + '_' + editStationParmasObj.stationRoutedirections;
341 } else{ 314 } else{
342 - upStationRouteCode = str[0].stationRouteCode + '_' + str[0].stationRouteMarke + '_' + editStationParmasObj.stationRouteDirections; 315 + upStationRouteCode = str[0].stationRouteCode + '_' + str[0].stationRouteMarke + '_' + editStationParmasObj.stationRoutedirections;
343 } 316 }
344 $('#stationrouteSelect').select2('val',upStationRouteCode); 317 $('#stationrouteSelect').select2('val',upStationRouteCode);
345 }else { 318 }else {
@@ -374,5 +347,5 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati @@ -374,5 +347,5 @@ $(&#39;#edit_station_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,ajaxd,stati
374 } 347 }
375 return tel; 348 return tel;
376 }, '方向必须一致!'); 349 }, '方向必须一致!');
377 -}); 350 +});
378 </script> 351 </script>
379 \ No newline at end of file 352 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/edit_select.html
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 系统无法生成,请选择其他方式新增 19 系统无法生成,请选择其他方式新增
20 </div> 20 </div>
21 <div class="form-group" id="formRequ"> 21 <div class="form-group" id="formRequ">
22 - <label class="col-md-3 control-label"><span class="required"> * </span>原始站点名称:</label> 22 + <label class="col-md-3 control-label"><span class="required"> * </span>站点名称:</label>
23 <div class="col-md-9" id="errorInfo"> 23 <div class="col-md-9" id="errorInfo">
24 <input type="text" class="form-control input-medium" id="stationNamebootbox" name="stationNamebootbox"> 24 <input type="text" class="form-control input-medium" id="stationNamebootbox" name="stationNamebootbox">
25 </div> 25 </div>
@@ -40,17 +40,14 @@ @@ -40,17 +40,14 @@
40 </form> 40 </form>
41 </div> 41 </div>
42 <div class="modal-footer"> 42 <div class="modal-footer">
43 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
44 <button type="button" class="btn btn-primary" id="editselectStationNextButton">下一步</button> 43 <button type="button" class="btn btn-primary" id="editselectStationNextButton">下一步</button>
  44 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
45 </div> 45 </div>
46 </div> 46 </div>
47 </div> 47 </div>
48 </div> 48 </div>
49 <script type="text/javascript"> 49 <script type="text/javascript">
50 -$('#edit_select_mobal').on('editSelectMobal_show', function(e, map_,drw,ajaxd,editStationObj,lineObj,fun,dir_){  
51 - var sel = fun.getCurrSelNode(dir_);  
52 - debugger  
53 - var Station = sel[0].original; 50 +$('#edit_select_mobal').on('editSelectMobal_show', function(e, map_,drw,ajaxd,editStationObj,lineObj,fun,Station){
54 // 显示选择修改方式弹出层 51 // 显示选择修改方式弹出层
55 $('#edit_select_mobal').modal({show : true,backdrop: 'static',keyboard: false}); 52 $('#edit_select_mobal').modal({show : true,backdrop: 'static',keyboard: false});
56 setTimeout(function(){ 53 setTimeout(function(){
@@ -75,7 +72,7 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed @@ -75,7 +72,7 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed
75 setTimeout(function(){$('.tipso-animation').tipso('hide');},4000); 72 setTimeout(function(){$('.tipso-animation').tipso('hide');},4000);
76 },500); 73 },500);
77 // 获取站点名称元素并赋值 74 // 获取站点名称元素并赋值
78 - $('#stationNamebootbox').val(Station.stationStationName); 75 + $('#stationNamebootbox').val(Station.stationRouteName);
79 // 定义站点图形 76 // 定义站点图形
80 var stationShapesTypeV = Station.stationShapesType; 77 var stationShapesTypeV = Station.stationShapesType;
81 // 获取表单元素 78 // 获取表单元素
@@ -118,28 +115,25 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed @@ -118,28 +115,25 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed
118 var editStationName = params.stationNamebootbox; 115 var editStationName = params.stationNamebootbox;
119 116
120 if(params.editselect==0){ 117 if(params.editselect==0){
121 - $('#downLine').addClass('btn disabled');  
122 - $('.btn-circle').addClass('disabled');  
123 - $('#upLine').addClass('btn disabled');  
124 editStationObj.setEitdStation(Station); 118 editStationObj.setEitdStation(Station);
125 editStationObj.setEitdStationName(editStationName); 119 editStationObj.setEitdStationName(editStationName);
126 120
127 - map_.clearMarkAndOverlays(); 121 + // map_.clearMarkAndOverlays();
128 // 打开绘制工具 122 // 打开绘制工具
129 drw.openDrawingManager(); 123 drw.openDrawingManager();
130 - map_.localtionPoint(editStationName); 124 + map_.localtionPoint(editStationName+"公交站点");
  125 + fun.editMapStatus();
131 }else if(params.editselect==1){ 126 }else if(params.editselect==1){
132 - $('#downLine').addClass('btn disabled');  
133 - $('.btn-circle').addClass('disabled');  
134 - $('#upLine').addClass('btn disabled');  
135 editStationObj.setEitdStation(Station); 127 editStationObj.setEitdStation(Station);
136 editStationObj.setEitdStationName(editStationName); 128 editStationObj.setEitdStationName(editStationName);
137 - 129 + map_.clearMark();
138 // 弹出添加失败提示消息,2秒关闭(如果不配置,默认是3秒) 130 // 弹出添加失败提示消息,2秒关闭(如果不配置,默认是3秒)
139 var mindex = layer.msg('编辑完图形后,请双击图形区域保存',{ offset: '126px', 131 var mindex = layer.msg('编辑完图形后,请双击图形区域保存',{ offset: '126px',
140 shift: 0,time: 3000}); 132 shift: 0,time: 3000});
141 // 编辑图形 133 // 编辑图形
142 - map_.editShapes(editStationName,stationShapesTypeV,mindex); 134 + // map_.editShapes(editStationName,stationShapesTypeV,mindex);
  135 + map_.editShapes(editStationObj);
  136 + fun.editMapStatus();
143 } 137 }
144 } 138 }
145 }); 139 });
src/main/resources/static/pages/base/stationroute/editsection.html
@@ -14,12 +14,17 @@ @@ -14,12 +14,17 @@
14 <!-- 线路ID --> 14 <!-- 线路ID -->
15 <input type="hidden" name="sectionId" id="sectionIdInput"> 15 <input type="hidden" name="sectionId" id="sectionIdInput">
16 <input type="hidden" name="sectionRouteId" id="sectionRouteIdInput"> 16 <input type="hidden" name="sectionRouteId" id="sectionRouteIdInput">
  17 + <input type="hidden" name="sectionCode" id="sectionCodeInput">
17 <input type="hidden" name="sectionRouteLine" id="sectionRouteLineInput"> 18 <input type="hidden" name="sectionRouteLine" id="sectionRouteLineInput">
18 <input type="hidden" name="lineCode" id="lineCodeInput"> 19 <input type="hidden" name="lineCode" id="lineCodeInput">
19 <input type="hidden" name="bsectionVector" id="bsectionVectorInput" /> 20 <input type="hidden" name="bsectionVector" id="bsectionVectorInput" />
20 <input type="hidden" name="csectionVector" id="csectionVectorInput" value=""/> 21 <input type="hidden" name="csectionVector" id="csectionVectorInput" value=""/>
21 <input type="hidden" name="dbType" id="dbTypeInput" value="b"/> 22 <input type="hidden" name="dbType" id="dbTypeInput" value="b"/>
22 <input type="hidden" name="isRoadeSpeed" id="isRoadeSpeedInput"/> 23 <input type="hidden" name="isRoadeSpeed" id="isRoadeSpeedInput"/>
  24 + <input type="hidden" name="directions" id="directionsSection">
  25 + <input type="hidden" name="speedLimit" id="speedLimitInput" >
  26 + <input type="hidden" name="roadCoding" id="roadCodingCodInput"/>
  27 + <input type="hidden" name="versions" id="versionsInput"/>
23 <!-- 路段名称 --> 28 <!-- 路段名称 -->
24 <div class="form-body"> 29 <div class="form-body">
25 <div class="form-group"> 30 <div class="form-group">
@@ -31,17 +36,6 @@ @@ -31,17 +36,6 @@
31 </div> 36 </div>
32 </div> 37 </div>
33 </div> 38 </div>
34 - <!-- 路段编码 -->  
35 - <div class="form-body">  
36 - <div class="form-group">  
37 - <label class="control-label col-md-3">  
38 - <span class="required"> * </span> 路段编码:  
39 - </label>  
40 - <div class="col-md-6">  
41 - <input type="text" class="form-control" name="sectionCode" id="sectionCodeInput" placeholder="路段编码" readonly="readonly">  
42 - </div>  
43 - </div>  
44 - </div>  
45 <!-- 路段序号 --> 39 <!-- 路段序号 -->
46 <div class="form-body"> 40 <div class="form-body">
47 <div class="form-group"> 41 <div class="form-group">
@@ -54,103 +48,20 @@ @@ -54,103 +48,20 @@
54 </div> 48 </div>
55 </div> 49 </div>
56 </div> 50 </div>
57 - <!-- 路段方向 -->  
58 - <div class="form-body">  
59 - <div class="form-group">  
60 - <label class="control-label col-md-3">  
61 - <span class="required"> * </span>路段方向:  
62 - </label>  
63 - <div class="col-md-6">  
64 - <select name="directions" class="form-control" id="directionsSection">  
65 - <option value="">-- 请选择路段类型 --</option>  
66 - <option value="0">上行</option>  
67 - <option value="1">下行</option>  
68 - </select>  
69 - </div>  
70 - </div>  
71 - </div>  
72 - <!-- 路段限速 -->  
73 - <div class="form-body">  
74 - <div class="form-group">  
75 - <label class="control-label col-md-3">  
76 - <span class="required"> * </span> 路段限速:  
77 - </label>  
78 - <div class="col-md-6">  
79 - <input type="text" class="form-control" name="speedLimit" id="speedLimitInput" placeholder="路段限速">  
80 - </div>  
81 - </div>  
82 - </div>  
83 - <!-- 是否撤销 -->  
84 - <div class="form-body">  
85 - <div class="form-group">  
86 - <label class="col-md-3 control-label"><span class="required"> * </span>是否撤销:</label>  
87 - <div class="col-md-6">  
88 - <select name="destroy" class="form-control" id="destroySelect">  
89 - <option value="">-- 请选择撤销类型 --</option>  
90 - <option value="0">否</option>  
91 - <option value="1">是</option>  
92 - </select>  
93 - </div>  
94 - </div>  
95 - </div>  
96 - <!-- 道路编码-->  
97 - <div class="form-body">  
98 - <div class="form-group">  
99 - <label class="control-label col-md-3">道路编码:</label>  
100 - <div class="col-md-6">  
101 - <input type="text" class="form-control" name="roadCoding" id="roadCodingCodInput" placeholder="道路编码">  
102 - </div>  
103 - </div>  
104 - </div>  
105 - <!-- 路段长度 -->  
106 - <div class="form-body">  
107 - <div class="form-group">  
108 - <label class="col-md-3 control-label">路段长度:</label>  
109 - <div class="col-md-6">  
110 - <input type="text" class="form-control" name="sectionDistance" id="sectionDistanceInput" placeholder="路段长度">  
111 - <span class="help-block">单位:公里(km)</span>  
112 - </div>  
113 - </div>  
114 - </div>  
115 - <!-- 路段历时 -->  
116 - <div class="form-body">  
117 - <div class="form-group">  
118 - <label class="col-md-3 control-label">路段历时:</label>  
119 - <div class="col-md-6">  
120 - <input type="text" class="form-control" name="sectionTime" id="sectionTimeInput" placeholder="路段历时">  
121 - <span class="help-block">单位:分钟(min)</span>  
122 - </div>  
123 - </div>  
124 - </div>  
125 - <!-- 版本号 -->  
126 - <div class="form-body">  
127 - <div class="form-group">  
128 - <label class="col-md-3 control-label">版本号&nbsp;&nbsp;&nbsp;:</label>  
129 - <div class="col-md-6">  
130 - <input type="text" class="form-control" name="versions" id="versionsInput" Readonly>  
131 - </div>  
132 - </div>  
133 - </div>  
134 - <!-- 描述/说明 -->  
135 - <div class="form-group">  
136 - <label class="control-label col-md-3"> 描述/说明: </label>  
137 - <div class="col-md-6">  
138 - <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea>  
139 - </div>  
140 - </div> 51 +
141 </form> 52 </form>
142 </div> 53 </div>
143 <div class="modal-footer"> 54 <div class="modal-footer">
144 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
145 <button type="button" class="btn btn-primary" id="editSectionButton">提交数据</button> 55 <button type="button" class="btn btn-primary" id="editSectionButton">提交数据</button>
  56 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
146 </div> 57 </div>
147 </div> 58 </div>
148 </div> 59 </div>
149 </div> 60 </div>
150 <script type="text/javascript"> 61 <script type="text/javascript">
151 62
152 -$('#edit_section_mobal').on('editSectionMobal_show', function(e, map_,ajaxd,section,fun){  
153 - var Section = section.getEitdSection(); 63 +$('#edit_section_mobal').on('editSectionMobal_show', function(e, map_,ajaxd,p,fun){
  64 + var Section = p.data;
154 fun.setSectionFormValue(Section); 65 fun.setSectionFormValue(Section);
155 // 方向 66 // 方向
156 var dir = Section.sectionrouteDirections; 67 var dir = Section.sectionrouteDirections;
@@ -159,15 +70,6 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect @@ -159,15 +70,6 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect
159 ajaxd.getStation(lineId,dir,function(treeData) { 70 ajaxd.getStation(lineId,dir,function(treeData) {
160 var array = treeData[0].children[1].children,paramsD =new Array(); 71 var array = treeData[0].children[1].children,paramsD =new Array();
161 var eq_scetionRouteCode = Section.sectionrouteCode; 72 var eq_scetionRouteCode = Section.sectionrouteCode;
162 - /* for(var i = 0 ; i<dArray.length; i++){  
163 - var ptions_v = dArray[i].sectionrouteCode;  
164 - if(eq_scetionRouteCode == ptions_v){  
165 - continue;  
166 - }  
167 - options += '<option value="'+ ptions_v +'">'+dArray[i].sectionName + ' (' + ptions_v +')'  
168 - + ' --' + fun.dirdmToName(dArray[i].sectionrouteDirections) + '</option>' ;  
169 - }  
170 - $('#sectionrouteCodeSelect').html(options); */  
171 paramsD.push({'id':'请选择...','text':'将此路段设置位第一个路段'}); 73 paramsD.push({'id':'请选择...','text':'将此路段设置位第一个路段'});
172 // 遍历. 74 // 遍历.
173 $.each(array, function(i, g){ 75 $.each(array, function(i, g){
@@ -195,16 +97,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect @@ -195,16 +97,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect
195 }); 97 });
196 }); 98 });
197 // 显示mobal 99 // 显示mobal
198 - $('#edit_section_mobal').modal({show : true,backdrop: 'static',keyboard: false}); 100 + $('#edit_section_mobal').modal({show : true,backdrop: 'static',keyboard: false});//
199 // 当调用 hide 实例方法时触发 101 // 当调用 hide 实例方法时触发
200 $('#edit_section_mobal').on('hide.bs.modal', function () { 102 $('#edit_section_mobal').on('hide.bs.modal', function () {
201 closeMobleSetClean(); 103 closeMobleSetClean();
202 }); 104 });
203 function closeMobleSetClean() { 105 function closeMobleSetClean() {
204 - // 清除地图覆盖物  
205 - map_.clearMarkAndOverlays();  
206 - /** 设置修改路段集合对象为空 */  
207 - section.setEitdSection({}); 106 + // 清除地图覆盖物
  107 + map_.clearMarkAndOverlays();
208 fun.resjtreeDate(lineId,dir); 108 fun.resjtreeDate(lineId,dir);
209 fun.editAChangeCssRemoveDisabled(); 109 fun.editAChangeCssRemoveDisabled();
210 ajaxd.getSectionRouteInfo(lineId,dir,function(data) { 110 ajaxd.getSectionRouteInfo(lineId,dir,function(data) {
@@ -227,14 +127,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect @@ -227,14 +127,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect
227 focusInvalid : false, 127 focusInvalid : false,
228 rules : { 128 rules : {
229 'sectionName' : {required : true,maxlength:50},// 路段名称 必填项 129 'sectionName' : {required : true,maxlength:50},// 路段名称 必填项
230 - 'sectionCode': {required : true,},// 路段编码 必填项 130 + /*'sectionCode': {required : true,},// 路段编码 必填项
231 'directions' : {required : true,},// 路段方向 必填项 131 'directions' : {required : true,},// 路段方向 必填项
232 'speedLimit' : {required : true,number : true},// 路段限速 必须输入合法的数字(负数,小数)。 132 'speedLimit' : {required : true,number : true},// 路段限速 必须输入合法的数字(负数,小数)。
233 'destroy' : {required : true,},// 是否撤销 必填项. 133 'destroy' : {required : true,},// 是否撤销 必填项.
234 'roadCoding' : {number : true},// 道路编码 必须输入合法的数字(负数,小数)。 134 'roadCoding' : {number : true},// 道路编码 必须输入合法的数字(负数,小数)。
235 'sectionTime' : {number : true},// 路段时长 必须输入合法的数字(负数,小数)。 135 'sectionTime' : {number : true},// 路段时长 必须输入合法的数字(负数,小数)。
236 'sectionDistance' : {number : true},// 路段长度 必须输入合法的数字(负数,小数)。 136 'sectionDistance' : {number : true},// 路段长度 必须输入合法的数字(负数,小数)。
237 - 'descriptions' : {maxlength: 150}// 描述与说明 最大长度. 137 + 'descriptions' : {maxlength: 150}// 描述与说明 最大长度.*/
238 }, 138 },
239 invalidHandler : function(event, validator) { 139 invalidHandler : function(event, validator) {
240 error.show(); 140 error.show();
@@ -250,7 +150,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect @@ -250,7 +150,14 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect
250 label.closest('.form-group').removeClass('has-error'); 150 label.closest('.form-group').removeClass('has-error');
251 }, 151 },
252 submitHandler : function(f) { 152 submitHandler : function(f) {
  153 + // 获取折线坐标集合
  154 + var editPloyLineArray = p.getPath();
  155 + // 折线坐标集合
  156 + $('#bsectionVectorInput').val(JSON.stringify(editPloyLineArray));
253 var params = form.serializeJSON(); 157 var params = form.serializeJSON();
  158 + params.destroy=0;
  159 + params.sectionDistance=0;
  160 + params.sectionTime=0;
254 error.hide(); 161 error.hide();
255 if(params.sectionrouteCode=='请选择...') 162 if(params.sectionrouteCode=='请选择...')
256 params.sectionrouteCode=''; 163 params.sectionrouteCode='';
@@ -264,8 +171,6 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect @@ -264,8 +171,6 @@ $(&#39;#edit_section_mobal&#39;).on(&#39;editSectionMobal_show&#39;, function(e, map_,ajaxd,sect
264 } 171 }
265 $('#edit_section_mobal').modal('hide'); 172 $('#edit_section_mobal').modal('hide');
266 var dir = params.directions 173 var dir = params.directions
267 - // 刷行左边树  
268 - fun.resjtreeDate(lineId,dir);  
269 closeMobleSetClean(); 174 closeMobleSetClean();
270 }); 175 });
271 } 176 }
src/main/resources/static/pages/base/stationroute/js/addstationobj.js
@@ -31,7 +31,7 @@ var AddStationObj = function () { @@ -31,7 +31,7 @@ var AddStationObj = function () {
31 }, 31 },
32 32
33 /** 设置新增站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */ 33 /** 设置新增站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
34 - setAddStationBJwpoints : function(bJwpoints) { 34 + setAddStationJwpoints : function(bJwpoints) {
35 35
36 station.bJwpoints = bJwpoints; 36 station.bJwpoints = bJwpoints;
37 }, 37 },
src/main/resources/static/pages/base/stationroute/js/drawingManager.js
@@ -68,7 +68,7 @@ var DrawingManagerObj = function () { @@ -68,7 +68,7 @@ var DrawingManagerObj = function () {
68 68
69 var pointE = e; 69 var pointE = e;
70 70
71 - // 多变行质心点 71 + // 多边行中心点
72 var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat; 72 var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;
73 73
74 var addPolyGonLen_ = pointE.getPath().length; 74 var addPolyGonLen_ = pointE.getPath().length;
@@ -96,7 +96,7 @@ var DrawingManagerObj = function () { @@ -96,7 +96,7 @@ var DrawingManagerObj = function () {
96 if(!$.isEmptyObject(add)){ 96 if(!$.isEmptyObject(add)){
97 97
98 /** 设置新增站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */ 98 /** 设置新增站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
99 - AddStationObj.setAddStationBJwpoints(addSttationPoints_); 99 + AddStationObj.setAddStationJwpoints(addSttationPoints_);
100 100
101 /** 设置新增站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */ 101 /** 设置新增站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
102 AddStationObj.setAddStationShapesType('d'); 102 AddStationObj.setAddStationShapesType('d');
@@ -119,7 +119,7 @@ var DrawingManagerObj = function () { @@ -119,7 +119,7 @@ var DrawingManagerObj = function () {
119 if(!$.isEmptyObject(edit)){ 119 if(!$.isEmptyObject(edit)){
120 120
121 /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */ 121 /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
122 - EditStationObj.setEitdStationBJwpoints(addSttationPoints_); 122 + EditStationObj.setEitdStationJwpoints(addSttationPoints_);
123 123
124 /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */ 124 /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
125 EditStationObj.setEitdStationShapesType('d'); 125 EditStationObj.setEitdStationShapesType('d');
src/main/resources/static/pages/base/stationroute/js/editstationobj.js
@@ -31,9 +31,9 @@ var EditStationObj = function () { @@ -31,9 +31,9 @@ var EditStationObj = function () {
31 }, 31 },
32 32
33 /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */ 33 /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
34 - setEitdStationBJwpoints : function(bJwpoints) { 34 + setEitdStationJwpoints : function(bJwpoints) {
35 35
36 - station.stationBJwpoints = bJwpoints; 36 + station.stationJwpoints = bJwpoints;
37 }, 37 },
38 38
39 /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */ 39 /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
src/main/resources/static/pages/base/stationroute/js/stationroute-ajax-getdata.js
@@ -18,7 +18,9 @@ @@ -18,7 +18,9 @@
18 * - - - - - -》 stationRouteIsDestroy:撤销站点 18 * - - - - - -》 stationRouteIsDestroy:撤销站点
19 * 19 *
20 * - - - - - -》 sectionUpdate : 编辑线路走向保存 20 * - - - - - -》 sectionUpdate : 编辑线路走向保存
21 - * 21 + *
  22 + * - - - - - -》 sectionSave : 生成线路走向
  23 + *
22 * - - - - - -》 getIdLineName:获取线路名称 24 * - - - - - -》 getIdLineName:获取线路名称
23 * 25 *
24 * - - - - - -》 getSectionRouteInfo:查询路段信息 26 * - - - - - -》 getSectionRouteInfo:查询路段信息
@@ -54,7 +56,7 @@ var GetAjaxData = function(){ @@ -54,7 +56,7 @@ var GetAjaxData = function(){
54 }, 56 },
55 // 查询线路某方向下所有站点的中心百度坐标 57 // 查询线路某方向下所有站点的中心百度坐标
56 getStationRoutePoint : function(id_,dir_,callback) { 58 getStationRoutePoint : function(id_,dir_,callback) {
57 - $get('/stationroute/getStationRouteCenterPoints',{lineId:id_,direction:dir_},function(result) { 59 + $get('/stationroute/getStationRouteList',{lineId:id_,direction:dir_},function(result) {
58 callback && callback(result); 60 callback && callback(result);
59 }); 61 });
60 }, 62 },
@@ -65,7 +67,7 @@ var GetAjaxData = function(){ @@ -65,7 +67,7 @@ var GetAjaxData = function(){
65 callback && callback(array); 67 callback && callback(array);
66 }); 68 });
67 }, 69 },
68 - 70 +
69 // 查询站点编码 71 // 查询站点编码
70 getStationCode : function(callback) { 72 getStationCode : function(callback) {
71 $get('/station/getStationCode',null,function(stationCode) { 73 $get('/station/getStationCode',null,function(stationCode) {
@@ -74,6 +76,12 @@ var GetAjaxData = function(){ @@ -74,6 +76,12 @@ var GetAjaxData = function(){
74 } 76 }
75 }); 77 });
76 }, 78 },
  79 + // 查询路段编码
  80 + getSectionCode : function(callback) {
  81 + $get('/section/getSectionCode',null,function(sectionCode) {
  82 + callback && callback(sectionCode);
  83 + });
  84 + },
77 findUpStationRouteCode : function(lineId,diraction,stationRouteCode,callback) { 85 findUpStationRouteCode : function(lineId,diraction,stationRouteCode,callback) {
78 $get('/stationroute/findUpStationRouteCode',{lineId:lineId,direction:diraction,stationRouteCode:stationRouteCode},function(result) { 86 $get('/stationroute/findUpStationRouteCode',{lineId:lineId,direction:diraction,stationRouteCode:stationRouteCode},function(result) {
79 callback && callback(result); 87 callback && callback(result);
@@ -110,15 +118,17 @@ var GetAjaxData = function(){ @@ -110,15 +118,17 @@ var GetAjaxData = function(){
110 118
111 // 编辑线路走向保存 119 // 编辑线路走向保存
112 sectionUpdate:function(section,callback) { 120 sectionUpdate:function(section,callback) {
113 -  
114 $post('/section/sectionUpdate',section,function(data) { 121 $post('/section/sectionUpdate',section,function(data) {
115 -  
116 callback && callback(data); 122 callback && callback(data);
117 -  
118 }) 123 })
119 -  
120 }, 124 },
121 - 125 + // 生成线路走向
  126 + sectionSave:function(section,callback){
  127 + $post('/section/sectionSave',section,function(data) {
  128 + callback && callback(data);
  129 + })
  130 + },
  131 +
122 // 获取线路名称 132 // 获取线路名称
123 getIdLineName : function (id,callback) { 133 getIdLineName : function (id,callback) {
124 134
@@ -143,6 +153,12 @@ var GetAjaxData = function(){ @@ -143,6 +153,12 @@ var GetAjaxData = function(){
143 callback && callback(resultdata); 153 callback && callback(resultdata);
144 }); 154 });
145 }, 155 },
  156 + // 根据ID查询路段信息.
  157 + getSectionRouteInfoById : function(sectionRouteId,callback){
  158 + $get('/sectionroute/findSectionRouteInfoFormId',{id:sectionRouteId},function(r) {
  159 + return callback && callback(r);
  160 + });
  161 + },
146 162
147 // 手动规划线路保存 163 // 手动规划线路保存
148 manualSave : function(params,callback) { 164 manualSave : function(params,callback) {
src/main/resources/static/pages/base/stationroute/js/stationroute-list-events.js
@@ -97,7 +97,6 @@ $(function(){ @@ -97,7 +97,6 @@ $(function(){
97 WorldsBMap.clearMarkAndOverlays(); 97 WorldsBMap.clearMarkAndOverlays();
98 // 刷新左边树 98 // 刷新左边树
99 PublicFunctions.resjtreeDate(Line.id,0); 99 PublicFunctions.resjtreeDate(Line.id,0);
100 - PublicFunctions.resjtreeDate(Line.id,1);  
101 /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */ 100 /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */
102 GetAjaxData.getSectionRouteInfo(Line.id,0,function(data) { 101 GetAjaxData.getSectionRouteInfo(Line.id,0,function(data) {
103 /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */ 102 /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */
src/main/resources/static/pages/base/stationroute/js/stationroute-list-function.js
@@ -26,548 +26,529 @@ @@ -26,548 +26,529 @@
26 26
27 var PublicFunctions = function () { 27 var PublicFunctions = function () {
28 var PubFun = { 28 var PubFun = {
29 - /** 初始化线路标题与ID */  
30 - setTiteText : function(lineId) {  
31 - // 根据线路ID获取线路名称  
32 - GetAjaxData.getIdLineName(lineId,function(data) {  
33 - // 定义线路名称  
34 - var lineNameV = data.name;  
35 - $('.portlet-title .caption').text(lineNameV);  
36 - });  
37 - },  
38 - /** @param diraction 方向 @return array */  
39 - getCurrSelNode : function(diraction){  
40 - // 定义Obj  
41 - var array = [];  
42 - try { 29 + /** 初始化线路标题与ID */
  30 + setTiteText : function(lineId) {
  31 + // 根据线路ID获取线路名称
  32 + GetAjaxData.getIdLineName(lineId,function(data) {
  33 + // 定义线路名称
  34 + var lineNameV = data.name;
  35 + $('.portlet-title .caption').text(lineNameV);
  36 + });
  37 + },
  38 + /** @param diraction 方向 @return array */
  39 + getCurrSelNode : function(diraction){
  40 + // 定义Obj
  41 + var array = [];
  42 + try {
  43 + // 上行
  44 + if(diraction=='0'){
  45 + // 获取上行选中节点
  46 + array = $.jstree.reference("#station_Up_tree").get_selected(true);
  47 + // 下行
  48 + }else if(diraction=='1'){
  49 + // 获取下行选中节点
  50 + array = $.jstree.reference("#station_Down_tree").get_selected(true);
  51 + }
  52 + } catch (e) {
  53 + console.log(e);
  54 + }
  55 + // 返回Obj
  56 + return array;
  57 + },
  58 + /** @param id:线路ID ;directionData:方向 */
  59 + resjtreeDate : function(id,directionData){
  60 + // 获取树数据
  61 + GetAjaxData.getStation(id,directionData,function(treeDateJson) {
  62 + // 获取数据长度
  63 + var len = treeDateJson[0].children[0].children.length;
  64 + // 上行
  65 + if(directionData==0){
  66 + // 长度大于零
  67 + if(len>0) {
  68 + // 隐藏上行规划
  69 + $('#upToolsMobal').hide();
  70 + // 显示树
  71 + $('#uptreeMobal').show();
  72 + // 刷新树
  73 + StationTreeData.upreloadeTree(treeDateJson);
  74 + }else {
  75 + // 显示上行规划
  76 + $('#upToolsMobal').show();
  77 + // 隐藏上行树
  78 + $('#uptreeMobal').hide();
  79 + }
  80 +
  81 + // 下行
  82 + }else if(directionData==1){
  83 + // 如果长度大于
  84 + if(len>0) {
  85 + // 隐藏下行规划
  86 + $('#downToolsMobal').hide();
  87 + // 显示下行树
  88 + $('#DowntreeMobal').show();
  89 + // 跟新树
  90 + StationTreeData.dwonreloadeTree(treeDateJson);
  91 + }else {
  92 + // 显示下行规划
  93 + $('#downToolsMobal').show();
  94 + // 隐藏下行树
  95 + $('#DowntreeMobal').hide();
  96 + }
  97 + }
  98 + });
  99 + },
  100 +
  101 + /** 修正线路名称 @param:<directionUpValue:方向(0:上行;1:下行)> */
  102 + lineNameIsHaveInterval : function(directionData) {
  103 + // 定义线路名称
  104 + var lineNameV = $('.portlet-title .caption').text();
  105 + // 线路名称是否为区间线路
  106 + if(lineNameV.indexOf('区间')>0){
  107 + // 截去区间
  108 + var lineNameNew = lineNameV.replace('区间','');
  109 + // 是否继续弹出层
  110 + layer.confirm('系统无法生成该线路【'+lineNameV+'】的站点与路段!自动修改为如下线路名称【'+lineNameNew+'】生成', {
  111 + btn : [ '确认提示并提交', '取消' ]
  112 + }, function(index) {
  113 + // 关闭弹出层
  114 + layer.close(index);
  115 + // 线路名称去掉区间
  116 + lineNameV = lineNameNew;
  117 + /** 保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */
  118 + PublicFunctions.systemLineStation(lineNameV,directionData);
  119 + },function(){
  120 + // 关闭弹出层
  121 + layer.closeAll();
43 // 上行 122 // 上行
44 - if(diraction=='0'){  
45 - // 获取上行选中节点  
46 - array = $.jstree.reference("#station_Up_tree").get_selected(true); 123 + if(directionData==0){
  124 + // 显示上行规划
  125 + $('#upToolsMobal').show();
47 // 下行 126 // 下行
48 - }else if(diraction=='1'){  
49 - // 获取下行选中节点  
50 - array = $.jstree.reference("#station_Down_tree").get_selected(true); 127 + }else if(directionData==1){
  128 + // 显示下行规划
  129 + $('#downToolsMobal').show();
51 } 130 }
52 - } catch (e) {  
53 - console.log(e);  
54 - }  
55 - // 返回Obj  
56 - return array;  
57 - },  
58 - /** @param id:线路ID ;directionData:方向 */  
59 - resjtreeDate : function(id,directionData){  
60 - // 获取树数据  
61 - GetAjaxData.getStation(id,directionData,function(treeDateJson) {  
62 - // 获取数据长度  
63 - var len = treeDateJson[0].children[0].children.length; 131 + });
  132 +
  133 + // 线路名称是否为定班线路
  134 + }else if(lineNameV.indexOf('定班')>0){
  135 + // 截去定班
  136 + var lineNameNew = lineNameV.replace('定班','');
  137 + // 是否继续弹出层
  138 + layer.confirm('系统无法生成该线路【'+lineNameV+'】的站点与路段!自动修改为如下线路名称【'+lineNameNew+'】生成', {
  139 + btn : [ '确认提示并提交', '取消' ]
  140 + }, function(index) {
  141 + // 关闭弹出层
  142 + layer.close(index);
  143 + // 线路名称去掉区间
  144 + lineNameV = lineNameNew;
  145 + /** 保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */
  146 + PublicFunctions.systemLineStation(lineNameV,directionData);
  147 + },function(){
  148 + // 关闭弹出层
  149 + layer.closeAll();
64 // 上行 150 // 上行
65 if(directionData==0){ 151 if(directionData==0){
66 - // 长度大于零  
67 - if(len>0) {  
68 - // 隐藏上行规划  
69 - $('#upToolsMobal').hide();  
70 - // 显示树  
71 - $('#uptreeMobal').show();  
72 - // 刷新树  
73 - StationTreeData.upreloadeTree(treeDateJson);  
74 - }else {  
75 - // 显示上行规划  
76 - $('#upToolsMobal').show();  
77 - // 隐藏上行树  
78 - $('#uptreeMobal').hide();  
79 - }  
80 - 152 + // 显示上行规划
  153 + $('#upToolsMobal').show();
81 // 下行 154 // 下行
82 }else if(directionData==1){ 155 }else if(directionData==1){
83 - // 如果长度大于  
84 - if(len>0) {  
85 - // 隐藏下行规划  
86 - $('#downToolsMobal').hide();  
87 - // 显示下行树  
88 - $('#DowntreeMobal').show();  
89 - // 跟新树  
90 - StationTreeData.dwonreloadeTree(treeDateJson);  
91 - }else {  
92 - // 显示下行规划  
93 - $('#downToolsMobal').show();  
94 - // 隐藏下行树  
95 - $('#DowntreeMobal').hide();  
96 - } 156 + // 显示下行规划
  157 + $('#downToolsMobal').show();
97 } 158 }
98 }); 159 });
99 - },  
100 -  
101 - /** 修正线路名称 @param:<directionUpValue:方向(0:上行;1:下行)> */  
102 - lineNameIsHaveInterval : function(directionData) {  
103 - // 定义线路名称  
104 - var lineNameV = $('.portlet-title .caption').text();  
105 - // 线路名称是否为区间线路  
106 - if(lineNameV.indexOf('区间')>0){  
107 - // 截去区间  
108 - var lineNameNew = lineNameV.replace('区间','');  
109 - // 是否继续弹出层  
110 - layer.confirm('系统无法生成该线路【'+lineNameV+'】的站点与路段!自动修改为如下线路名称【'+lineNameNew+'】生成', {  
111 - btn : [ '确认提示并提交', '取消' ]  
112 - }, function(index) {  
113 - // 关闭弹出层  
114 - layer.close(index);  
115 - // 线路名称去掉区间  
116 - lineNameV = lineNameNew;  
117 - /** 保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */  
118 - PublicFunctions.systemLineStation(lineNameV,directionData);  
119 - },function(){  
120 - // 关闭弹出层  
121 - layer.closeAll();  
122 - // 上行  
123 - if(directionData==0){  
124 - // 显示上行规划  
125 - $('#upToolsMobal').show();  
126 - // 下行  
127 - }else if(directionData==1){  
128 - // 显示下行规划  
129 - $('#downToolsMobal').show();  
130 - } 160 + }else {
  161 + /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */
  162 + PublicFunctions.systemLineStation(lineNameV,directionData);
  163 + }
  164 +
  165 + },
  166 +
  167 + /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */
  168 + systemLineStation : function(lineNameV,directionData) {
  169 + /** 从百度地图获取线路信息 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行);callback>*/
  170 + WorldsBMap.lineInfoPanl(lineNameV,directionData,function(BusLine){
  171 + // 如果线路信息不为空
  172 + if(BusLine) {
  173 + // 获取公交线几何对象, 仅当结果自动添加到地图上时有效
  174 + var Polygon = BusLine.getPolyline();
  175 + // 返回多边型的点数组(自1.2新增)
  176 + var polyGonArray = Polygon.getPath();
  177 + // 获取公交站点个数(自 1.2 新增)
  178 + var stationNumber = BusLine.getNumBusStations();
  179 + // 定义线路信息集合
  180 + var stationInfo = [];
  181 + // 遍历
  182 + for(var k = 0 ; k < stationNumber; k++) {
  183 + // 定义线路信息集合
  184 + var tempM = {};
  185 + // 添加站点名称
  186 + tempM.name = BusLine.getBusStation(k).name;
  187 + // 添加站点坐标
  188 + tempM.potion = BusLine.getBusStation(k).position;
  189 + tempM.wgs = {x:'',y:''};
  190 + // 添加
  191 + stationInfo.push(tempM);
  192 + }
  193 + // 获取站点之间的距离与时间
  194 + WorldsBMap.getDistanceAndDuration(stationInfo,function(json) {
  195 + // 设置第一个站的距离
  196 + json[0].distance = '';
  197 + // 设置第一个站的时间
  198 + json[0].duration = '';
  199 + // 定义站点信息JSON字符串
  200 + var stationJSON = JSON.stringify(json);
  201 + // 定义路段信息字符串
  202 + var sectionJSON = JSON.stringify(polyGonArray);
  203 + // 参数集合
  204 + var params = {};
  205 + // 站点信息JSON字符串
  206 + params.stationJSON = stationJSON;
  207 + var addLine = LineObj.getLineObj();
  208 + // 线路ID
  209 + params.lineId = addLine.id;
  210 + // 方向
  211 + params.directions = directionData;
  212 + // 原始坐标类型
  213 + params.dbType = 'b';
  214 + // 圆形半径
  215 + params.radius = '100';
  216 + // 图形类型(r:圆形;p:多边形)
  217 + params.shapesType = 'r';
  218 + // destroy:是否撤销
  219 + params.destroy = '0';
  220 +
  221 + // 路段信息JSON字符串
  222 + params.sectionJSON = sectionJSON;
  223 + // 限速
  224 + params.speedLimit = '60';
  225 + params.baseRes = 'No';
  226 + // 获取版本号后提交添加
  227 + $.get('/lineVersions/findByLineId',{'lineId':addLine.id},function(lineVersions){
  228 + $.each(lineVersions,function(){
  229 + if (this.status == 1) {
  230 + // versions:版本号
  231 + params.versions = this.versions;
  232 + // 保存
  233 + GetAjaxData.collectionSave(params,function(rd) {
  234 + if(rd.status='SUCCESS') {
  235 + // 关闭弹出层
  236 + layer.closeAll();
  237 + layer.msg('保存成功!');
  238 + }else {
  239 + // 保存失败
  240 + layer.msg('保存失败!');
  241 + }
  242 + // 刷新树
  243 + PublicFunctions.resjtreeDate(addLine.id,directionData);
  244 + /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */
  245 + GetAjaxData.getSectionRouteInfo(addLine.id,directionData,function(data) {
  246 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */
  247 + PublicFunctions.linePanlThree(addLine.id,data,directionData);
  248 + });
  249 + });
  250 + }
  251 + })
  252 + });
131 }); 253 });
132 -  
133 - // 线路名称是否为定班线路  
134 - }else if(lineNameV.indexOf('定班')>0){  
135 - // 截去定班  
136 - var lineNameNew = lineNameV.replace('定班','');  
137 - // 是否继续弹出层  
138 - layer.confirm('系统无法生成该线路【'+lineNameV+'】的站点与路段!自动修改为如下线路名称【'+lineNameNew+'】生成', {  
139 - btn : [ '确认提示并提交', '取消' ]  
140 - }, function(index) {  
141 - // 关闭弹出层  
142 - layer.close(index);  
143 - // 线路名称去掉区间  
144 - lineNameV = lineNameNew;  
145 - /** 保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */  
146 - PublicFunctions.systemLineStation(lineNameV,directionData);  
147 - },function(){ 254 + // 关闭弹出层
  255 + layer.closeAll();
  256 + // 上行
  257 + if(directionData==0){
  258 + $('#stationDown').removeClass('active');
  259 + $('#stationDown').removeClass('in');
  260 + $('#stationDown').addClass('fade');
  261 + $('#stationUp').addClass('active in');
  262 + $('#downLine').parent().removeClass('active');
  263 + $('#upLine').parent().addClass('active');
  264 + // 下行
  265 + }else if(directionData==1){
  266 + $('#stationUp').removeClass('active');
  267 + $('#stationUp').removeClass('in');
  268 + $('#stationUp').addClass('fade');
  269 + $('#stationDown').addClass('active in');
  270 + $('#upLine').parent().removeClass('active');
  271 + $('#downLine').parent().addClass('active');
  272 + }
  273 + } else {
  274 + layer.msg('百度地图中没有此线路,无法系统规划!');
  275 + setTimeout(function() {
148 // 关闭弹出层 276 // 关闭弹出层
149 layer.closeAll(); 277 layer.closeAll();
150 // 上行 278 // 上行
151 if(directionData==0){ 279 if(directionData==0){
152 // 显示上行规划 280 // 显示上行规划
153 $('#upToolsMobal').show(); 281 $('#upToolsMobal').show();
154 - // 下行 282 + // 下行
155 }else if(directionData==1){ 283 }else if(directionData==1){
156 // 显示下行规划 284 // 显示下行规划
157 $('#downToolsMobal').show(); 285 $('#downToolsMobal').show();
158 } 286 }
159 - });  
160 - }else {  
161 - /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */  
162 - PublicFunctions.systemLineStation(lineNameV,directionData); 287 + }, 3000);
163 } 288 }
  289 + });
  290 + },
164 291
165 - },  
166 -  
167 - /** 直接保存 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行)> */  
168 - systemLineStation : function(lineNameV,directionData) {  
169 - /** 从百度地图获取线路信息 @param:<lineNameV:线路名称;directionData:方向(0:上行;1:下行);callback>*/  
170 - WorldsBMap.lineInfoPanl(lineNameV,directionData,function(BusLine){  
171 - // 如果线路信息不为空  
172 - if(BusLine) {  
173 - // 获取公交线几何对象, 仅当结果自动添加到地图上时有效  
174 - var Polygon = BusLine.getPolyline();  
175 - // 返回多边型的点数组(自1.2新增)  
176 - var polyGonArray = Polygon.getPath();  
177 - // 获取公交站点个数(自 1.2 新增)  
178 - var stationNumber = BusLine.getNumBusStations();  
179 - // 定义线路信息集合  
180 - var stationInfo = [];  
181 - // 遍历  
182 - for(var k = 0 ; k < stationNumber; k++) {  
183 - // 定义线路信息集合  
184 - var tempM = {};  
185 - // 添加站点名称  
186 - tempM.name = BusLine.getBusStation(k).name;  
187 - // 添加站点坐标  
188 - tempM.potion = BusLine.getBusStation(k).position;  
189 - tempM.wgs = {x:'',y:''};  
190 - // 添加  
191 - stationInfo.push(tempM);  
192 - }  
193 - // 获取站点之间的距离与时间  
194 - WorldsBMap.getDistanceAndDuration(stationInfo,function(json) {  
195 - // 设置第一个站的距离  
196 - json[0].distance = '';  
197 - // 设置第一个站的时间  
198 - json[0].duration = '';  
199 - // 定义站点信息JSON字符串  
200 - var stationJSON = JSON.stringify(json);  
201 - // 定义路段信息字符串  
202 - var sectionJSON = JSON.stringify(polyGonArray);  
203 - // 参数集合  
204 - var params = {};  
205 - // 站点信息JSON字符串  
206 - params.stationJSON = stationJSON;  
207 - var addLine = LineObj.getLineObj();  
208 - // 线路ID  
209 - params.lineId = addLine.id;  
210 - // 方向  
211 - params.directions = directionData;  
212 - // 原始坐标类型  
213 - params.dbType = 'b';  
214 - // 圆形半径  
215 - params.radius = '100';  
216 - // 图形类型(r:圆形;p:多边形)  
217 - params.shapesType = 'r';  
218 - // destroy:是否撤销  
219 - params.destroy = '0';  
220 -  
221 - // 路段信息JSON字符串  
222 - params.sectionJSON = sectionJSON;  
223 - // 限速  
224 - params.speedLimit = '60';  
225 - params.baseRes = 'No';  
226 - // 获取版本号后提交添加  
227 - $.get('/lineVersions/findByLineId',{'lineId':addLine.id},function(lineVersions){  
228 - $.each(lineVersions,function(){  
229 - if (this.status == 1) {  
230 - // versions:版本号  
231 - params.versions = this.versions;  
232 - // 保存  
233 - GetAjaxData.collectionSave(params,function(rd) {  
234 - if(rd.status='SUCCESS') {  
235 - // 关闭弹出层  
236 - layer.closeAll();  
237 - layer.msg('保存成功!');  
238 - }else {  
239 - // 保存失败  
240 - layer.msg('保存失败!');  
241 - }  
242 - // 刷新树  
243 - PublicFunctions.resjtreeDate(addLine.id,directionData);  
244 - /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */  
245 - GetAjaxData.getSectionRouteInfo(addLine.id,directionData,function(data) {  
246 - /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */  
247 - PublicFunctions.linePanlThree(addLine.id,data,directionData);  
248 - });  
249 - });  
250 - }  
251 - })  
252 - });  
253 - });  
254 - // 关闭弹出层  
255 - layer.closeAll();  
256 - // 上行  
257 - if(directionData==0){  
258 - $('#stationDown').removeClass('active');  
259 - $('#stationDown').removeClass('in');  
260 - $('#stationDown').addClass('fade');  
261 - $('#stationUp').addClass('active in');  
262 - $('#downLine').parent().removeClass('active');  
263 - $('#upLine').parent().addClass('active');  
264 - // 下行  
265 - }else if(directionData==1){  
266 - $('#stationUp').removeClass('active');  
267 - $('#stationUp').removeClass('in');  
268 - $('#stationUp').addClass('fade');  
269 - $('#stationDown').addClass('active in');  
270 - $('#upLine').parent().removeClass('active');  
271 - $('#downLine').parent().addClass('active');  
272 - }  
273 - } else {  
274 - layer.msg('百度地图中没有此线路,无法系统规划!');  
275 - setTimeout(function() {  
276 - // 关闭弹出层  
277 - layer.closeAll();  
278 - // 上行  
279 - if(directionData==0){  
280 - // 显示上行规划  
281 - $('#upToolsMobal').show();  
282 - // 下行  
283 - }else if(directionData==1){  
284 - // 显示下行规划  
285 - $('#downToolsMobal').show();  
286 - }  
287 - }, 3000);  
288 - }  
289 - });  
290 - },  
291 -  
292 - /** @param directionV_ :方向 */  
293 - stationRevoke : function(directionV_) {  
294 - // 获取树选中节点对象  
295 - var obj = PublicFunctions.getCurrSelNode(directionV_);  
296 - // 是否选中,选中节点是否为站点  
297 - if(obj.length == 0 || obj[0].original.chaildredType !='station'){  
298 - // 弹出提示层  
299 - layer.msg('请先选择要删除的站点!');  
300 - return;  
301 - }  
302 - // 弹出是否撤销提示框  
303 - layer.confirm('你确定要撤销【'+obj[0].text+'】站点吗?', {btn : [ '确定撤销','返回' ],icon: 3, title:'提示' }, function(index){  
304 - // 站点路由ID  
305 - var stationRouteId = obj[0].original.stationRouteId;  
306 - // 撤销参数集合  
307 - var params = {stationRouteId:stationRouteId,destroy:'1'};  
308 - // 方向  
309 - var stationRouteDirections = obj[0].original.stationRouteDirections;  
310 - // 撤销  
311 - GetAjaxData.stationRouteIsDestroy(params,function(result) {  
312 - // 关闭弹出框  
313 - layer.close(index);  
314 - if(result.status=='SUCCESS'){  
315 - layer.msg('撤销'+(directionV_==0?"上行":"下行")+'站点【'+obj[0].text+'】成功!');  
316 - }else{  
317 - layer.msg('撤销'+(directionV_==0?"上行":"下行")+'站点【'+obj[0].text+'】失败!');  
318 - }  
319 - WorldsBMap.clearMarkAndOverlays();  
320 - var Line = LineObj.getLineObj();  
321 - // 刷行左边树  
322 - PublicFunctions.resjtreeDate(Line.id,stationRouteDirections);  
323 - /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */  
324 - GetAjaxData.getSectionRouteInfo(Line.id,stationRouteDirections,function(data) {  
325 - /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */  
326 - PublicFunctions.linePanlThree(Line.id,data,stationRouteDirections);  
327 - }); 292 + /** @param directionV_ :方向 */
  293 + stationRevoke : function(directionV_) {
  294 + // 获取树选中节点对象
  295 + var obj = PublicFunctions.getCurrSelNode(directionV_);
  296 + // 是否选中,选中节点是否为站点
  297 + if(obj.length == 0 || obj[0].original.chaildredType !='station'){
  298 + // 弹出提示层
  299 + layer.msg('请先选择要删除的站点!');
  300 + return;
  301 + }
  302 + // 弹出是否撤销提示框
  303 + layer.confirm('你确定要撤销【'+obj[0].text+'】站点吗?', {btn : [ '确定撤销','返回' ],icon: 3, title:'提示' }, function(index){
  304 + // 站点路由ID
  305 + var stationRouteId = obj[0].original.stationRouteId;
  306 + // 撤销参数集合
  307 + var params = {stationRouteId:stationRouteId,destroy:'1'};
  308 + // 方向
  309 + var stationRouteDirections = obj[0].original.stationRouteDirections;
  310 + // 撤销
  311 + GetAjaxData.stationRouteIsDestroy(params,function(result) {
  312 + // 关闭弹出框
  313 + layer.close(index);
  314 + if(result.status=='SUCCESS'){
  315 + layer.msg('撤销'+(directionV_==0?"上行":"下行")+'站点【'+obj[0].text+'】成功!');
  316 + }else{
  317 + layer.msg('撤销'+(directionV_==0?"上行":"下行")+'站点【'+obj[0].text+'】失败!');
  318 + }
  319 + WorldsBMap.clearMarkAndOverlays();
  320 + var Line = LineObj.getLineObj();
  321 + // 刷行左边树
  322 + PublicFunctions.resjtreeDate(Line.id,stationRouteDirections);
  323 + /** 查询上行路段信息 @param:<Line.id:线路Id;0:上行> @return:data:路段数据 */
  324 + GetAjaxData.getSectionRouteInfo(Line.id,stationRouteDirections,function(data) {
  325 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */
  326 + PublicFunctions.linePanlThree(Line.id,data,stationRouteDirections);
328 }); 327 });
329 - });  
330 - }, 328 + });
  329 + });
  330 + },
331 331
332 - /** @param direction_ :方向 */  
333 - editLinePlan : function(direction_) {  
334 - var sel = PublicFunctions.getCurrSelNode(direction_);  
335 - if(sel.length==0 || sel[0].original.chaildredType !='section'){  
336 - if(direction_=='0') {  
337 - layer.msg('请先选中要编辑的上行路段!');  
338 - }else if(direction_=='1') {  
339 - layer.msg('请先选中要编辑的下行路段!');  
340 - }  
341 - return; 332 + /** @param direction_ :方向 */
  333 + editLinePlan : function(direction_) {
  334 + var sel = PublicFunctions.getCurrSelNode(direction_);
  335 + if(sel.length==0 || sel[0].original.chaildredType !='section'){
  336 + if(direction_=='0') {
  337 + layer.msg('请先选中要编辑的上行路段!');
  338 + }else if(direction_=='1') {
  339 + layer.msg('请先选中要编辑的下行路段!');
  340 + }
  341 + return;
  342 + }
  343 + $('#downLine').addClass('btn disabled');
  344 + $('.btn-circle').addClass('disabled');
  345 + $('#upLine').addClass('btn disabled');
  346 + var editSectionV = sel[0].original;
  347 + EditSectionObj.setEitdSection(editSectionV);
  348 + // 弹出添加失败提示消息,2秒关闭(如果不配置,默认是3秒)
  349 + var yindex = layer.msg('编辑完线路走向后,请双击线路走向区域保存',{ offset: '126px',shift: 0,time: 10000});
  350 + WorldsBMap.editPolyUpline();
  351 + },
  352 +
  353 + setFormValue : function(editStationParmas) {
  354 + // 站点ID
  355 + $('#stationIdInput').val(editStationParmas.stationId);
  356 + // 站点路由ID
  357 + $('#stationRouteIdInput').val(editStationParmas.stationRouteId);
  358 + // 站点路由线路Id
  359 + $('#stationRouteLineInput').val(editStationParmas.stationRouteLine);
  360 + // 线路编码
  361 + $('#lineCodeInput').val(editStationParmas.stationRouteLIneCode);
  362 + // 百度坐标点图形集合
  363 + $('#bPolygonGridInput').val(editStationParmas.stationBPolygonGrid);
  364 + // 获取站点名称元素设值
  365 + $('#zdmcInput').val(editStationParmas.stationStationName);
  366 + // 获取站点路由名称元素设值
  367 + $('#stationNameInput').val(editStationParmas.stationStationName);
  368 + // 获取站点编码元素设值
  369 + $('#stationCodInput').val(editStationParmas.stationCode);
  370 + // 获取站点类型元素设值
  371 + // $('#stationMarkSelect').val(editStationParmas.stationRouteStationMark);
  372 + // 获取站点方向元素设值
  373 + $('#stationdirSelect').val(editStationParmas.stationRoutedirections);
  374 + // 获取站点道路编码元素设值
  375 + $('#roadCodingCodInput').val(editStationParmas.stationRoadCoding);
  376 + // 百度地图经纬度坐标中心点
  377 + $('#bJwpointsInput').val(editStationParmas.stationJwpoints);
  378 + if(editStationParmas.stationShapesType=='r') {
  379 + // 获取图形类型元素,并添加值
  380 + $('#shapesTypeSelect').val('圆形');
  381 + }else if(editStationParmas.stationShapesType=='d'){
  382 + $('#radiusGroup').hide();
  383 + $('#shapesTypeSelect').val('多边形');
  384 + }
  385 + // 获取半径元素,并添加值
  386 + $('#radiusInput').val(editStationParmas.stationRadius);
  387 + // 是否撤销
  388 + $('#destroySelect').val(editStationParmas.stationDestroy);
  389 + // 到站时间
  390 + $('#toTimeInput').val(editStationParmas.stationRouteToTime);
  391 + // 到站距离
  392 + $('#distancesInput').val(editStationParmas.stationRouteDistances);
  393 + // 线路版本号
  394 + $('#versionsInput').val(editStationParmas.stationRouteVersions);
  395 + // 描述/说明
  396 + $('#descriptionsTextarea').val(editStationParmas.sttationDescriptions);
  397 + },
  398 +
  399 + setSectionFormValue : function(Section) {
  400 + $('#isRoadeSpeedInput').val(Section.isRoadeSpeed);
  401 + // 路段ID
  402 + $('#sectionIdInput').val(Section.sectionId);
  403 + // 路段路由ID
  404 + $('#sectionRouteIdInput').val(Section.sectionrouteId);
  405 + // 线路ID
  406 + $('#sectionRouteLineInput').val(Section.sectionrouteLine);
  407 + // 线路编码
  408 + $('#lineCodeInput').val(Section.sectionrouteLineCode);
  409 + // 折线坐标集合
  410 + $('#bsectionVectorInput').val(Section.sectionBsectionVector);
  411 + // 路段名称
  412 + $('#sectionNameInput').val(Section.sectionName);
  413 + // 路段编码
  414 + $('#sectionCodeInput').val(Section.sectionCode);
  415 + // 路段序号
  416 + $('#sectionrouteCodeSelect').val(Section.sectionrouteCode);
  417 + // 路段方向
  418 + $('#directionsSection').val(Section.sectionrouteDirections);
  419 + // 道路编码
  420 + $('#roadCodingCodInput').val(Section.sectionRoadCoding);
  421 + // 道路限速
  422 + $('#speedLimitInput').val(Section.sectionSpeedLimet);
  423 + // 路段长度
  424 + $('#sectionDistanceInput').val(Section.sectionDistance);
  425 + // 时长
  426 + $('#sectionTimeInput').val(Section.sectionTime);
  427 + // 版本号
  428 + $('#versionsInput').val(Section.versions);
  429 + },
  430 +
  431 + //lineId,data,direction
  432 + treeSectionClick: function(lineId,data,direction){
  433 + /** 获取站点路由信息 @param:<Line.id:线路Id;0:上行> @return:<resultdata:站点路由数据> */
  434 + WorldsBMap.clearMarkAndOverlays();
  435 + // 编辑路段数据
  436 + for(var d= 0; d<data.length;d++){
  437 + // 地图折线坐标点集合
  438 + var polylineArray = [];
  439 + // 获取路段折线坐标字符串
  440 + var sectionBsectionVectorStr = data[d].sectionBsectionVector;
  441 + if(sectionBsectionVectorStr==null) {
  442 + continue;
342 } 443 }
343 - $('#downLine').addClass('btn disabled');  
344 - $('.btn-circle').addClass('disabled');  
345 - $('#upLine').addClass('btn disabled');  
346 - var editSectionV = sel[0].original;  
347 - EditSectionObj.setEitdSection(editSectionV);  
348 - // 弹出添加失败提示消息,2秒关闭(如果不配置,默认是3秒)  
349 - var yindex = layer.msg('编辑完线路走向后,请双击线路走向区域保存',{ offset: '126px',shift: 0,time: 10000});  
350 - WorldsBMap.editPolyUpline();  
351 - },  
352 -  
353 - setFormValue : function(editStationParmas) {  
354 - // 站点ID  
355 - $('#stationIdInput').val(editStationParmas.stationId);  
356 - // 站点路由ID  
357 - $('#stationRouteIdInput').val(editStationParmas.stationRouteId);  
358 - // 站点路由线路Id  
359 - $('#stationRouteLineInput').val(editStationParmas.stationRouteLine);  
360 - // 线路编码  
361 - $('#lineCodeInput').val(editStationParmas.stationRouteLineCode);  
362 - // 百度坐标点图形集合  
363 - $('#bPolygonGridInput').val(editStationParmas.stationBPolygonGrid);  
364 - // 获取站点名称元素设值  
365 - $('#zdmcInput').val(editStationParmas.stationStationName);  
366 - // 获取站点路由名称元素设值  
367 - $('#stationNameInput').val(editStationParmas.stationRouteStationName);  
368 - // 获取站点编码元素设值  
369 - $('#stationCodInput').val(editStationParmas.stationStationCod);  
370 - // 获取站点类型元素设值  
371 - // $('#stationMarkSelect').val(editStationParmas.stationRouteStationMark);  
372 - // 获取站点方向元素设值  
373 - $('#stationdirSelect').val(editStationParmas.stationRouteDirections);  
374 - // 获取站点道路编码元素设值  
375 - $('#roadCodingCodInput').val(editStationParmas.stationRoadCoding);  
376 - // 百度地图经纬度坐标中心点  
377 - $('#bJwpointsInput').val(editStationParmas.stationBJwpoints);  
378 - if(editStationParmas.stationShapesType=='r') {  
379 - // 获取图形类型元素,并添加值  
380 - $('#shapesTypeSelect').val('圆形');  
381 - }else if(editStationParmas.stationShapesType=='d'){  
382 - $('#radiusGroup').hide();  
383 - $('#shapesTypeSelect').val('多边形'); 444 + // 切割段折线坐标字符串
  445 + var tempStr = sectionBsectionVectorStr.substring(11,sectionBsectionVectorStr.length-1);
  446 + // 分割折线坐标字符串
  447 + var lineArray = tempStr.split(',');
  448 + for(var i = 0;i<lineArray.length;i++) {
  449 + polylineArray.push(new BMap.Point(lineArray[i].split(' ')[0],lineArray[i].split(' ')[1]));
384 } 450 }
385 - // 获取半径元素,并添加值  
386 - $('#radiusInput').val(editStationParmas.stationRadius);  
387 - // 是否撤销  
388 - $('#destroySelect').val(editStationParmas.stationDestroy);  
389 - // 到站时间  
390 - $('#toTimeInput').val(editStationParmas.stationRouteToTime);  
391 - // 到站距离  
392 - $('#distancesInput').val(editStationParmas.stationRouteDistances);  
393 - // 线路版本号  
394 - $('#versionsInput').val(editStationParmas.stationRouteVersions);  
395 - // 描述/说明  
396 - $('#descriptionsTextarea').val(editStationParmas.stationRouteDescriptions);  
397 - },  
398 -  
399 - setSectionFormValue : function(Section) {  
400 - $('#isRoadeSpeedInput').val(Section.isRoadeSpeed);  
401 - // 路段ID  
402 - $('#sectionIdInput').val(Section.sectionId);  
403 - // 路段路由ID  
404 - $('#sectionRouteIdInput').val(Section.sectionrouteId);  
405 - // 线路ID  
406 - $('#sectionRouteLineInput').val(Section.sectionrouteLine);  
407 - // 线路编码  
408 - $('#lineCodeInput').val(Section.sectionrouteLineCode);  
409 - // 折线坐标集合  
410 - $('#bsectionVectorInput').val(Section.sectionBsectionVector);  
411 - // 路段名称  
412 - $('#sectionNameInput').val(Section.sectionName);  
413 - // 路段编码  
414 - $('#sectionCodeInput').val(Section.sectionCode);  
415 - // 路段序号  
416 - $('#sectionrouteCodeSelect').val(Section.sectionrouteCode);  
417 - // 路段方向  
418 - $('#directionsSection').val(Section.sectionrouteDirections);  
419 - // 道路编码  
420 - $('#roadCodingCodInput').val(Section.sectionRoadCoding);  
421 - // 道路限速  
422 - $('#speedLimitInput').val(Section.sectionSpeedLimet);  
423 - // 路段长度  
424 - $('#sectionDistanceInput').val(Section.sectionDistance);  
425 - // 时长  
426 - $('#sectionTimeInput').val(Section.sectionTime);  
427 - // 版本号  
428 - $('#versionsInput').val(Section.versions);  
429 - // 是否撤销  
430 - $('#destroySelect').val(Section.destroy);  
431 - // 描述/说明  
432 - $('#descriptionsTextarea').val(Section.descriptions);  
433 - },  
434 -  
435 - //lineId,data,direction  
436 - treeSectionClick: function(lineId,data,direction){  
437 - /** 获取站点路由信息 @param:<Line.id:线路Id;0:上行> @return:<resultdata:站点路由数据> */ 451 + var index = parseInt(polylineArray.length/2);
  452 + var center = polylineArray[index];
  453 + /** 在地图上画出线路走向 @param:<polylineArray:地图折线坐标点集合;resultdata:站点路由数据> */
  454 + WorldsBMap.drawingUpline(polylineArray,center);
  455 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  456 + WorldsBMap.drawingUpStationPoint(data[d], d+1);
  457 + }
  458 + },
  459 +
  460 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */
  461 + linePanlThree : function(lineId,data,direction) {
  462 + /** 获取站点路由信息 @param:<Line.id:线路Id;0:上行> @return:<resultdata:站点路由数据> */
  463 + GetAjaxData.getStationRoutePoint(lineId,direction,function(resultdata) {
438 WorldsBMap.clearMarkAndOverlays(); 464 WorldsBMap.clearMarkAndOverlays();
439 - // 编辑路段数据  
440 - for(var d= 0; d<data.length;d++){  
441 - // 地图折线坐标点集合  
442 - var polylineArray = [];  
443 - // 获取路段折线坐标字符串  
444 - var sectionBsectionVectorStr = data[d].sectionBsectionVector;  
445 - if(sectionBsectionVectorStr==null) {  
446 - continue;  
447 - }  
448 - // 切割段折线坐标字符串  
449 - var tempStr = sectionBsectionVectorStr.substring(11,sectionBsectionVectorStr.length-1);  
450 - // 分割折线坐标字符串  
451 - var lineArray = tempStr.split(',');  
452 - for(var i = 0;i<lineArray.length;i++) {  
453 - polylineArray.push(new BMap.Point(lineArray[i].split(' ')[0],lineArray[i].split(' ')[1])); 465 + var polyline_center;
  466 + // 如果站点路由数据不为空
  467 + if(resultdata.length>0) {
  468 + var ceter_index = Math.round(resultdata.length / 2);
  469 + var ceterPointsStr = resultdata[ceter_index].stationJwpoints;
  470 + var ceterPointsArray = ceterPointsStr.split(' ');
  471 + polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);
  472 + // 遍历站点路由数据
  473 + for(var s = 0 ; s<resultdata.length;s++) {
  474 + WorldsBMap.drawingUpStationPoint(resultdata[s], s+1);
454 } 475 }
455 - var index = parseInt(polylineArray.length/2);  
456 - var center = polylineArray[index];  
457 - /** 在地图上画出线路走向 @param:<polylineArray:地图折线坐标点集合;resultdata:站点路由数据> */  
458 - WorldsBMap.drawingUpline(polylineArray,center);  
459 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
460 - WorldsBMap.drawingUpStationPoint(center,data[d].name,d+1); 476 +
461 } 477 }
462 - },  
463 -  
464 - /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */  
465 - linePanlThree : function(lineId,data,direction) {  
466 - /** 获取站点路由信息 @param:<Line.id:线路Id;0:上行> @return:<resultdata:站点路由数据> */  
467 - GetAjaxData.getStationRoutePoint(lineId,direction,function(resultdata) {  
468 - WorldsBMap.clearMarkAndOverlays();  
469 - var polyline_center;  
470 - // 如果站点路由数据不为空  
471 - if(resultdata.length>0) {  
472 - var ceter_index = Math.round(resultdata.length / 2);  
473 - var ceterPointsStr = resultdata[ceter_index].bJwpoints;  
474 - var ceterPointsArray = ceterPointsStr.split(' ');  
475 - polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);  
476 - // 遍历站点路由数据  
477 - for(var s = 0 ; s<resultdata.length;s++) {  
478 - // 中心点坐标字符串  
479 - var bJwpointsStr = resultdata[s].bJwpoints;  
480 - var stationName = resultdata[s].stationName;  
481 - // 起个中心点坐标字符串  
482 - var bJwpointsArray = bJwpointsStr.split(' ');  
483 - // 设置中心点  
484 - var point_center = new BMap.Point(bJwpointsArray[0],bJwpointsArray[1]);  
485 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
486 - WorldsBMap.drawingUpStationPoint(point_center,stationName,s+1);  
487 - }  
488 -  
489 - }  
490 - // 路段数据长度  
491 - var dataLen = data.length;  
492 - // 如果大于零  
493 - if(dataLen>0) {  
494 - // 编辑路段数据  
495 - for(var d= 0; d<dataLen;d++){  
496 - // 地图折线坐标点集合  
497 - var polylineArray = [];  
498 - // 获取路段折线坐标字符串  
499 - var sectionBsectionVectorStr = data[d].sectionBsectionVector;  
500 - if(sectionBsectionVectorStr==null)  
501 - continue;  
502 - // 切割段折线坐标字符串  
503 - var tempStr = sectionBsectionVectorStr.substring(11,sectionBsectionVectorStr.length-1);  
504 - // 分割折线坐标字符串  
505 - var lineArray = tempStr.split(',');  
506 - for(var i = 0;i<lineArray.length;i++) {  
507 - polylineArray.push(new BMap.Point(lineArray[i].split(' ')[0],lineArray[i].split(' ')[1]));  
508 - }  
509 - /** 在地图上画出线路走向 @param:<polylineArray:地图折线坐标点集合;resultdata:站点路由数据> */  
510 - /*WorldsBMap.drawingUpline(polylineArray,polyline_center,data[d]);*/  
511 - WorldsBMap.drawingUpline01(polylineArray,polyline_center,data[d]);  
512 - } 478 + // 路段数据长度
  479 + var dataLen = data.length;
  480 + // 如果大于零
  481 + if(dataLen>0) {
  482 + WorldsBMap.drawingUpline01(polyline_center,data);
  483 + }
  484 + });
  485 + },
  486 + /** 加载树 @param:<lineId:线路ID;diraction:方向(0:上行;1:下行)> */
  487 + TreeUpOrDown : function(lineId,diraction) {
  488 + /** 获取树结果数据 @param:<lineId:线路ID;diraction:方向;callback:回调函数> */
  489 + GetAjaxData.getStation(lineId,diraction,function(treeDateJson) {
  490 + // 获取返回数据长度
  491 + var len = treeDateJson[0].children[0].children.length;
  492 + // 上行
  493 + if(diraction == 0) {
  494 + /** 初始化上行树 @param:<treeDateJson:树数据结构> */
  495 + StationTreeData.upInit(treeDateJson);
  496 + if(len>0) {
  497 + $('#upToolsMobal').hide();
  498 + $('#uptreeMobal').show();
  499 + }else {
  500 + $('#upToolsMobal').show();
  501 + $('#uptreeMobal').hide();
513 } 502 }
514 - });  
515 - },  
516 - /** 加载树 @param:<lineId:线路ID;diraction:方向(0:上行;1:下行)> */  
517 - TreeUpOrDown : function(lineId,diraction) {  
518 - /** 获取树结果数据 @param:<lineId:线路ID;diraction:方向;callback:回调函数> */  
519 - GetAjaxData.getStation(lineId,diraction,function(treeDateJson) {  
520 - // 获取返回数据长度  
521 - var len = treeDateJson[0].children[0].children.length;  
522 - // 上行  
523 - if(diraction == 0) {  
524 - /** 初始化上行树 @param:<treeDateJson:树数据结构> */  
525 - StationTreeData.upInit(treeDateJson);  
526 - if(len>0) {  
527 - $('#upToolsMobal').hide();  
528 - $('#uptreeMobal').show();  
529 - }else {  
530 - $('#upToolsMobal').show();  
531 - $('#uptreeMobal').hide();  
532 - }  
533 - // 下行  
534 - }else if(diraction ==1) {  
535 - /** 出事画下行树 @param:<treeDateJson:树数据结构> */  
536 - StationTreeData.downInit(treeDateJson);  
537 - if(len>0) {  
538 - $('#downToolsMobal').hide();  
539 - $('#DowntreeMobal').show();  
540 - }else {  
541 - $('#downToolsMobal').show();  
542 - $('#DowntreeMobal').hide();  
543 - } 503 + // 下行
  504 + }else if(diraction ==1) {
  505 + /** 出事画下行树 @param:<treeDateJson:树数据结构> */
  506 + StationTreeData.downInit(treeDateJson);
  507 + if(len>0) {
  508 + $('#downToolsMobal').hide();
  509 + $('#DowntreeMobal').show();
  510 + }else {
  511 + $('#downToolsMobal').show();
  512 + $('#DowntreeMobal').hide();
544 } 513 }
545 - });  
546 - },  
547 - isHaveStationName : function(data) {  
548 - if(data.length>0) {  
549 - layer.confirm('系统已存在【'+ data[0].stationName +'】该站点位置名称,请选择【系统引用】或者更改站点名称进行新增!', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){  
550 - layer.close(index);  
551 - });  
552 - return false;  
553 - }else {  
554 - return true;  
555 } 514 }
556 - },  
557 - editAChangeCssRemoveDisabled : function() {  
558 - $('#downLine').removeClass('btn disabled');  
559 - $('.btn-circle').removeClass('disabled');  
560 - $('#upLine').removeClass('btn disabled');  
561 - },  
562 - // 方向代码转名称.  
563 - dirdmToName : function(value){  
564 - var srStr = '';  
565 - if(value=='0')  
566 - srStr = '上行';  
567 - else if(value=='1')  
568 - srStr = '下行';  
569 - return srStr;  
570 - }, 515 + });
  516 + },
  517 + isHaveStationName : function(data) {
  518 + if(data.length>0) {
  519 + layer.confirm('系统已存在【'+ data[0].stationName +'】该站点位置名称,请选择【系统引用】或者更改站点名称进行新增!', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){
  520 + layer.close(index);
  521 + });
  522 + return false;
  523 + }else {
  524 + return true;
  525 + }
  526 + },
  527 + // 地图处于编辑状态
  528 + editMapStatus : function () {
  529 + WorldsBMap.setMap_status(1);
  530 + $('.protlet-box-layer').show();
  531 + },
  532 + // 地图处于编辑状态
  533 + editMapStatusRemove : function () {
  534 + WorldsBMap.setMap_status(0);
  535 + $('.protlet-box-layer').hide();
  536 + },
  537 + // 选项鎖死解除
  538 + editAChangeCssRemoveDisabled : function() {
  539 + $('#downLine').removeClass('btn disabled');
  540 + $('.btn-circle').removeClass('disabled');
  541 + $('#upLine').removeClass('btn disabled');
  542 + },
  543 + // 方向代码转名称.
  544 + dirdmToName : function(value){
  545 + var srStr = '';
  546 + if(value=='0')
  547 + srStr = '上行';
  548 + else if(value=='1')
  549 + srStr = '下行';
  550 + return srStr;
  551 + },
571 } 552 }
572 return PubFun ; 553 return PubFun ;
573 }(); 554 }();
574 \ No newline at end of file 555 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
1 /** 1 /**
2 * 百度地图 2 * 百度地图
3 - * 3 + *
4 * - - - - - -》init:地图初始化 4 * - - - - - -》init:地图初始化
5 - * 5 + *
6 * - - - - - -》lineInfoPanl:从百度地图抓去站点与路段数据 6 * - - - - - -》lineInfoPanl:从百度地图抓去站点与路段数据
7 - * 7 + *
8 * - - - - - -》getDistanceAndDuration:获取距离与时间 8 * - - - - - -》getDistanceAndDuration:获取距离与时间
9 - * 9 + *
10 * - - - - - -》pointsPolygon:地图画多边行 10 * - - - - - -》pointsPolygon:地图画多边行
11 - * 11 + *
12 * - - - - - -》pointsCircle:画圆 12 * - - - - - -》pointsCircle:画圆
13 - * 13 + *
14 * - - - - - -》localSearchFromAdreesToPoint:根据地理名称获取百度经纬度坐标 14 * - - - - - -》localSearchFromAdreesToPoint:根据地理名称获取百度经纬度坐标
15 - * 15 + *
16 * - - - - - -》drawingUpline:在地图上画出上行线路走向 16 * - - - - - -》drawingUpline:在地图上画出上行线路走向
17 - * 17 + *
18 * - - - - - -》stationsNameToPoints:站点名称获取百度坐标(手动规划) 18 * - - - - - -》stationsNameToPoints:站点名称获取百度坐标(手动规划)
19 - * 19 + *
20 * - - - - - -》getDistanceAndTotime:根据坐标点获取两点之间的时间与距离(手动规划) 20 * - - - - - -》getDistanceAndTotime:根据坐标点获取两点之间的时间与距离(手动规划)
21 - * 21 + *
22 * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划) 22 * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划)
23 */ 23 */
24 24
25 window.WorldsBMap = function () { 25 window.WorldsBMap = function () {
26 -  
27 - /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 */  
28 - var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false;  
29 -  
30 - var Bmap = {  
31 -  
32 - init : function() {  
33 -  
34 - // 设置中心点,  
35 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
36 -  
37 - // 百度API Key  
38 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
39 -  
40 - // 初始化百度地图  
41 - mapBValue = new BMap.Map("bmap_basic");  
42 -  
43 - //中心点和缩放级别  
44 - mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);  
45 -  
46 - //启用地图拖拽事件,默认启用(可不写)  
47 - mapBValue.enableDragging();  
48 -  
49 - //启用地图滚轮放大缩小  
50 - mapBValue.enableScrollWheelZoom();  
51 -  
52 - //禁用鼠标双击放大  
53 - mapBValue.disableDoubleClickZoom();  
54 -  
55 - //启用键盘上下左右键移动地图  
56 - mapBValue.enableKeyboard();  
57 -  
58 - return mapBValue;  
59 - },  
60 -  
61 - /** 获取地图对象 @return 地图对象map */  
62 - getmapBValue : function() {  
63 -  
64 - return mapBValue;  
65 -  
66 - },  
67 -  
68 - getPolygon : function(){  
69 -  
70 - return polygon;  
71 - },  
72 -  
73 - getPolyUpline : function() {  
74 -  
75 - return polyUpline;  
76 - },  
77 -  
78 - getCircle : function() {  
79 -  
80 - return circle;  
81 - },  
82 -  
83 - getIsEditStatus : function() {  
84 - return iseditStatus;  
85 - },  
86 -  
87 - setIsEditStatus : function(v) {  
88 - iseditStatus = v ;  
89 - },  
90 -  
91 - initDrawingManager: function(map,styleOptions) {  
92 -  
93 - },  
94 -  
95 - getDrawingManagerObj : function() {  
96 -  
97 - return drawingManagerInitV;  
98 - },  
99 -  
100 - // 从百度地图抓去站点与路段数据  
101 - lineInfoPanl : function(lineNameValue,i,cb) {  
102 -  
103 - /** 根据线路名称与方向从百度地图获取站点与路段 @param lineNameValue:线路名称;i:方向<0:上行;1:下行> */  
104 - WorldsBMap.getBmapStationNames(lineNameValue,i,function(BusLine){  
105 -  
106 - return cb && cb(BusLine);  
107 -  
108 - });  
109 -  
110 - },  
111 -  
112 - /** 获取距离与时间 @param <points:坐标点集合> */  
113 - getDistanceAndDuration : function(points,callback){  
114 -  
115 - // 获取长度  
116 - var len = points.length;  
117 -  
118 - (function(){  
119 -  
120 - if (!arguments.callee.count) {  
121 -  
122 - arguments.callee.count = 0;  
123 -  
124 - }  
125 -  
126 - arguments.callee.count++;  
127 -  
128 - var index = parseInt(arguments.callee.count) - 1;  
129 -  
130 - if (index >= len-1) {  
131 -  
132 - callback && callback(points);  
133 -  
134 - return;  
135 - }  
136 -  
137 - // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)  
138 - var f = arguments.callee;  
139 -  
140 - // 起点坐标 <坐标格式:40.056878,116.30815>  
141 - var origin = points[index].potion.lat + ',' + points[index].potion.lng;  
142 -  
143 - // 终点坐标 <坐标格式:40.056878,116.30815>  
144 - var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;  
145 -  
146 - var region = '上海';  
147 -  
148 - var origin_region = '上海';  
149 -  
150 - var destination_region = '上海';  
151 -  
152 - var output = 'json';  
153 -  
154 - var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';  
155 -  
156 - /**  
157 - * origin:起点名称或经纬度;  
158 - *  
159 - * destination:终点名称或经纬度;  
160 - *  
161 - * origin_region:起始点所在城市,驾车导航时必填。  
162 - *  
163 - * destination_region:终点所在城市,驾车导航时必填。  
164 - *  
165 - * output :表示输出类型,可设置为xml或json,默认为xml。  
166 - *  
167 - **/  
168 - var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};  
169 -  
170 - /** @description :未认证开发者默认配额为:2000次/天。 */  
171 - $.ajax({  
172 -  
173 - // 百度地图根据坐标获取两点之间的时间与距离  
174 - url: 'http://api.map.baidu.com/direction/v1?mode=transit',  
175 -  
176 - data: paramsB,  
177 -  
178 - dataType: 'jsonp',  
179 -  
180 - success: function(r){  
181 -  
182 - if(r) {  
183 -  
184 - if(r.message=='ok') {  
185 -  
186 - if(r.result.taxi==null) {  
187 -  
188 - // 获取距离(单位:米)  
189 - points[index+1].distance = 0;  
190 -  
191 - // 获取时间(单位:秒)  
192 - points[index+1].duration = 0;  
193 -  
194 - }else {  
195 -  
196 - // 获取距离(单位:米)  
197 - points[index+1].distance = r.result.taxi.distance;  
198 -  
199 - // 获取时间(单位:秒)  
200 - points[index+1].duration = r.result.taxi.duration;  
201 -  
202 - }  
203 -  
204 -  
205 - }  
206 -  
207 - }  
208 -  
209 - f();  
210 - }  
211 - });  
212 -  
213 - })();  
214 -  
215 - },  
216 -  
217 - // 地图画多边形  
218 - pointsPolygon : function(objStation) {  
219 -  
220 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
221 - mapBValue.setZoom(15);  
222 -  
223 - // 如果不为空  
224 - if(objStation) {  
225 - // 获取中心点坐标字符串  
226 - var testpointStr = objStation.stationBJwpoints;  
227 - // 按空格切割中心点坐标字符串  
228 - var BJwpointsPolygon = testpointStr.split(' ');  
229 - // 中心点坐标  
230 - var pointPolygon = new BMap.Point(BJwpointsPolygon[0], BJwpointsPolygon[1]);  
231 - // 获取多边形坐标字符串  
232 - var stationBPolygonGrid = objStation.stationBPolygonGrid;  
233 - // 截取多边形坐标字符串  
234 - var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);  
235 - // 按逗号切割  
236 - var pointPolygonArray = stationBPolygonGridStr.split(',');  
237 - // 多边形坐标集合  
238 - var polygonP = [];  
239 - for(var v = 0;v<pointPolygonArray.length;v++) {  
240 - polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));  
241 - }  
242 -  
243 - // 画多边形  
244 - polygon = new BMap.Polygon(polygonP, {  
245 - // 线条显色  
246 - strokeColor : "blue",  
247 - // 边线的宽度,以像素为单位。  
248 - strokeWeight : 2,  
249 - // 边线透明度,取值范围0 - 1。  
250 - strokeOpacity : 0.5  
251 - });  
252 -  
253 - // 增加地图覆盖物多边形  
254 - mapBValue.addOverlay(polygon);  
255 -  
256 - // 信息窗口属性  
257 - var opts_polygon = {  
258 - // 信息窗口宽度  
259 - width : 200,  
260 - // 信息窗口高度  
261 - height : 300,  
262 - // 信息窗位置偏移值。  
263 - // offset: new BMap.Size(500,20),  
264 - //标题  
265 - // title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>',  
266 - //设置不允许信窗发送短息  
267 - enableMessage : false,  
268 - //是否开启点击地图关闭信息窗口  
269 - enableCloseOnClick : false  
270 - };  
271 -  
272 - var markTypeStr = '';  
273 - if(objStation.stationRouteStationMark=='B') {  
274 - markTypeStr='起点站';  
275 - }else if(objStation.stationRouteStationMark=='Z') {  
276 - markTypeStr ='中途站';  
277 - }else if(objStation.stationRouteStationMark=='E') {  
278 - markTypeStr='终点站';  
279 - }  
280 - var point = objStation.stationBJwpoints.split(" ")  
281 - var htm = '<span style="color: #ff8355;font-size: 20px;">' + objStation.stationStationName + '</span>' +  
282 - '<span class="help-block" >站点编码:' + objStation.stationStationCod + '</span>' +  
283 - '<span class="help-block" >站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +  
284 - '<span class="help-block" >站点类型:' + markTypeStr + '</span>' +  
285 - '<span class="help-block" >经度:&nbsp&nbsp' + point[0] + '</span>' +  
286 - '<span class="help-block" >纬度:&nbsp&nbsp' + point[1] + '</span>' +  
287 - '<span class="help-block" >到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +  
288 - '<span class="help-block" >到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +  
289 - '<span class="help-block" >缓冲区形状:' + (objStation.stationShapesType == "r"?"圆形":"多边形") + '</span>' +  
290 - '<span class="help-block" >版本号:&nbsp&nbsp' + objStation.stationRouteVersions + '</span>' +  
291 - '<div style="">' +  
292 - '<button style="float:left; background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn " ' +  
293 - 'id="editStation" onclick="WorldsBMap.editStation('+objStation.stationRouteDirections+')">修改站点</button>' +  
294 - '<button style="float:right; background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn " ' +  
295 - 'id="addBetweenStationRoad" onclick="WorldsBMap.addBetweenStationRoad('+objStation.stationRouteId+')">添加站点间路段</button>' +  
296 - '</div>';  
297 -  
298 - // 创建信息窗口  
299 - var infoWindow_target = new BMap.InfoWindow(htm, opts_polygon);  
300 - // 自定义标注物图片  
301 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
302 - // 创建点  
303 - marker = new BMap.Marker(pointPolygon,{icon : icon_target});  
304 - // 把标注添物加到地图上  
305 - mapBValue.addOverlay(marker);  
306 - // 是否在平移过程中禁止动画。(自1.2新增)  
307 - var PanOptions_ ={noAnimation :true};  
308 - // 将地图的中心点更改为给定的点。  
309 - mapBValue.panTo(pointPolygon,PanOptions_);  
310 - // 将地图在水平位置上移动x像素,垂直位置上移动y像素。  
311 - mapBValue.panBy(10,-150,PanOptions_);  
312 - //开启信息窗口  
313 - mapBValue.openInfoWindow(infoWindow_target,pointPolygon);  
314 - }  
315 -  
316 - },  
317 -  
318 - editPolyUpline : function() {  
319 - // 禁止覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)  
320 - polyUpline.disableMassClear();  
321 - WorldsBMap.clearMarkAndOverlays();  
322 - // 允许覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)  
323 - polyUpline.enableMassClear();  
324 - // 开启线路编辑  
325 - polyUpline.enableEditing();  
326 - // 添加双击折线保存事件  
327 - polyUpline.addEventListener('dblclick',function(e) {  
328 - // 关闭  
329 - layer.closeAll();  
330 - polyUpline.disableEditing();  
331 - // 获取折线坐标集合  
332 - var editPloyLineArray = polyUpline.getPath();  
333 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
334 - polyUpline= '';  
335 - // 加载修改路段弹出层mobal页面  
336 - $.get('editsection.html', function(m){  
337 - $(pjaxContainer).append(m);  
338 - $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
339 - });  
340 - });  
341 - },  
342 -  
343 - // 画圆  
344 - pointsCircle : function(objStation) {  
345 -  
346 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
347 - mapBValue.setZoom(16);  
348 -  
349 - if(objStation) {  
350 -  
351 - // 清除地图覆盖物  
352 - mapBValue.clearOverlays();  
353 -  
354 - // 获取中心坐标点字符串分割  
355 - var BJwpoints = objStation.stationBJwpoints.split(' ');  
356 -  
357 - // 中心坐标点  
358 - var point = new BMap.Point(BJwpoints[0], BJwpoints[1]);  
359 -  
360 - //创建圆  
361 - circle = new BMap.Circle(point,objStation.stationRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  
362 -  
363 - // 允许覆盖物在map.clearOverlays方法中被清除  
364 - circle.enableMassClear();  
365 -  
366 - // 百度地图添加覆盖物圆  
367 - mapBValue.addOverlay(circle);  
368 -  
369 - // 信息窗口参数属性  
370 - var opts = {  
371 - // 信息窗口宽度  
372 - width : 200,  
373 - // 信息窗口高度  
374 - height : 330,  
375 - // 信息窗位置偏移值。  
376 - // offset: new BMap.Size(500,120),  
377 - //标题  
378 - // title : '<h4 style="color:#ff8355">'+objStation.stationStationName+'站详情</h4>',  
379 - //设置不允许信窗发送短息  
380 - enableMessage : false,  
381 - //是否开启点击地图关闭信息窗口  
382 - enableCloseOnClick : false,  
383 - // 是否开启信息窗口打开时地图自动移动(默认开启)。(自 1.1 新增)  
384 - enableAutoPan:false  
385 - };  
386 -  
387 - var markTypeStr = '';  
388 - if(objStation.stationRouteStationMark=='B') {  
389 - markTypeStr='起点站';  
390 - }else if(objStation.stationRouteStationMark=='Z') {  
391 - markTypeStr ='中途站';  
392 - }else if(objStation.stationRouteStationMark=='E') {  
393 - markTypeStr='终点站';  
394 - }  
395 - var point1 = objStation.stationBJwpoints.split(" ");  
396 - var htm = '<span style="color: #ff8355;font-size: 20px;">' + objStation.stationStationName + '</span>' +  
397 - '<span class="help-block" >站点编码:' + objStation.stationStationCod + '</span>' +  
398 - '<span class="help-block" >站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +  
399 - '<span class="help-block" >站点类型:' + markTypeStr + '</span>' +  
400 - '<span class="help-block" >经度:&nbsp&nbsp' + point1[0] + '</span>' +  
401 - '<span class="help-block" >纬度:&nbsp&nbsp' + point1[1] + '</span>' +  
402 - '<span class="help-block" >到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +  
403 - '<span class="help-block" >到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +  
404 - '<span class="help-block" >缓冲区形状:' + (objStation.stationShapesType == "r"?"圆形":"多边形") + '</span>' +  
405 - '<span class="help-block" >半径&nbsp&nbsp:' + objStation.stationRadius + '</span>' +  
406 - '<span class="help-block" >版本号&nbsp&nbsp:' + objStation.stationRouteVersions + '</span>' +  
407 - '<div style="">' +  
408 - '<button style="float:left; background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn " ' +  
409 - 'id="editStation" onclick="WorldsBMap.editStation('+objStation.stationRouteDirections+')">修改站点</button>' +  
410 - '<button style="float:right; background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn " ' +  
411 - 'id="addBetweenStationRoad" onclick="WorldsBMap.addBetweenStationRoad('+objStation.stationRouteId+')">添加站点间路段</button>' +  
412 - '</div>';  
413 -  
414 - // 创建信息窗口  
415 - var infoWindow_target = new BMap.InfoWindow(htm, opts);  
416 - // 自定义标注物图片  
417 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
418 -  
419 - // 创建点  
420 - marker = new BMap.Marker(point,{icon : icon_target});  
421 -  
422 - // 把标注添物加到地图上  
423 - mapBValue.addOverlay(marker);  
424 -  
425 - setTimeout(function(){  
426 - //开启信息窗口  
427 - marker.openInfoWindow(infoWindow_target,point);  
428 -  
429 - },100);  
430 -  
431 - // 是否在平移过程中禁止动画。(自1.2新增)  
432 - var PanOptions_ ={noAnimation :true};  
433 -  
434 - // 将地图的中心点更改为给定的点。  
435 - mapBValue.panTo(point,PanOptions_);  
436 -  
437 - mapBValue.panBy(10,-200,PanOptions_);  
438 -  
439 - // 添加标志物监听事件  
440 - marker.addEventListener("click",function() {  
441 -  
442 - //开启信息窗口  
443 - marker.openInfoWindow(infoWindow_target,point);  
444 -  
445 - });  
446 -  
447 - }  
448 -  
449 - },  
450 -  
451 - // 根据地理名称获取百度经纬度坐标  
452 - localSearchFromAdreesToPoint: function(Address,callback) {  
453 -  
454 - // 创建一个搜索类实例  
455 - var localSearch = new BMap.LocalSearch(mapBValue);  
456 -  
457 - // 检索完成后的回调函数。  
458 - localSearch.setSearchCompleteCallback(function (searchResult) {  
459 -  
460 - var resultPoints = '';  
461 -  
462 - if(searchResult) {  
463 -  
464 - // 返回索引指定的结果。索引0表示第1条结果  
465 - var poi = searchResult.getPoi(0);  
466 -  
467 - if(poi) {  
468 -  
469 - //获取经度和纬度  
470 - resultPoints = poi.point.lng + ' ' + poi.point.lat;  
471 -  
472 - callback && callback(resultPoints);  
473 -  
474 - }else {  
475 -  
476 - callback && callback(false);  
477 -  
478 - }  
479 -  
480 - }else {  
481 -  
482 - callback && callback(false);  
483 - }  
484 -  
485 - });  
486 -  
487 - // 根据检索词发起检索。  
488 - localSearch.search(Address);  
489 -  
490 - },  
491 -  
492 - // 编辑图形  
493 - editShapes : function(editStationName,stationShapesTypeV,mindex) {  
494 - // 关闭信息窗口  
495 - marker.closeInfoWindow();  
496 -  
497 - // 清除marker  
498 - mapBValue.removeOverlay(marker);  
499 -  
500 - // 编辑圆  
501 - if(stationShapesTypeV =='r') {  
502 -  
503 - // 开启编辑功能  
504 - circle.enableEditing();  
505 -  
506 - // 编辑圆监听事件  
507 - circle.addEventListener('dblclick',function() {  
508 -  
509 - // 关闭提示弹出层  
510 - layer.close(mindex);  
511 -  
512 - // 返回圆形的半径,单位为米。  
513 - var newRadius = circle.getRadius();  
514 -  
515 - // 返回圆形的中心点坐标。  
516 - var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;  
517 -  
518 - var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];  
519 -  
520 - /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */  
521 - EditStationObj.setEitdStationBJwpoints(newCenter);  
522 -  
523 - /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */  
524 - EditStationObj.setEitdStationShapesType('r');  
525 -  
526 - /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */  
527 - EditStationObj.setEitdStationRadius(Math.round(newRadius));  
528 -  
529 - /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */  
530 - EditStationObj.setEitdBPolygonGrid('');  
531 -  
532 - // 加载编辑页面  
533 - $.get('edit.html', function(m){  
534 -  
535 - $(pjaxContainer).append(m);  
536 -  
537 - $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);  
538 -  
539 - });  
540 -  
541 - });  
542 -  
543 - // 编辑多变行  
544 - }else if(stationShapesTypeV =='d') {  
545 -  
546 - // 开启编辑功能(自 1.1 新增)  
547 - polygon.enableEditing();  
548 -  
549 - // 添加多变行编辑事件  
550 - polygon.addEventListener('dblclick',function(e) {  
551 -  
552 - // 获取编辑的多边形对象  
553 - var edit_pointE = polygon;  
554 -  
555 - var edit_bPloygonGrid = "";  
556 -  
557 - var editPolyGonLen_ = edit_pointE.getPath().length;  
558 -  
559 - for(var k =0;k<editPolyGonLen_;k++) {  
560 -  
561 - if(k==0) {  
562 -  
563 - edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
564 -  
565 - }else {  
566 -  
567 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
568 -  
569 - }  
570 -  
571 - }  
572 -  
573 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;  
574 -  
575 - // 多边形中心点  
576 - var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;  
577 -  
578 - /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */  
579 - EditStationObj.setEitdStationBJwpoints(centre_points);  
580 -  
581 - /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */  
582 - EditStationObj.setEitdStationShapesType('d');  
583 -  
584 - /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */  
585 - EditStationObj.setEitdStationRadius('');  
586 -  
587 - /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */  
588 - EditStationObj.setEitdBPolygonGrid(edit_bPloygonGrid);  
589 -  
590 - $.get('edit.html', function(m){  
591 -  
592 - $(pjaxContainer).append(m);  
593 -  
594 - $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);  
595 -  
596 - });  
597 -  
598 - });  
599 -  
600 - }  
601 -  
602 - },  
603 -  
604 - // 在地图上画出上行线路走向  
605 - drawingUpline : function (polylineArray,polyline_center,data) {  
606 - /*WorldsBMap.clearMarkAndOverlays();*/  
607 - polyUpline = '';  
608 - // 创建线路走向  
609 - polyUpline = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
610 - // polyUpline.data = data;  
611 - // 把折线添加到地图上  
612 - mapBValue.addOverlay(polyUpline);  
613 - /*var ceter_index = Math.round(resultdata.length / 2);  
614 -  
615 - var ceterPointsStr = resultdata[ceter_index].bJwpoints;  
616 -  
617 - var ceterPointsArray = ceterPointsStr.split(' ');  
618 -  
619 - var polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);*/  
620 - var PanOptions_ ={noAnimation :true};  
621 - mapBValue.reset();  
622 - mapBValue.panTo(polyline_center,PanOptions_);  
623 - mapBValue.panBy(500,-510,PanOptions_);  
624 - mapBValue.setZoom(14);  
625 -  
626 - // 信息窗口属性  
627 - var opts_polygon = { 26 +
  27 + /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆; road_win_show_p:信息窗口打开状态的路段,map_status:地图编辑状态,drawingManager:绘画工具*/
  28 + var mapBValue = '',polygon = '', polyUpline = '', circle = '', iseditStatus = false, road_win_show_p = '', editPolyline = '', sectionArray = [], stationArray = new Map(),map_status = 0,
  29 + drawingManager;
  30 + var styleOptions = {
  31 + strokeColor:"blue", //边线颜色。
  32 + fillColor:"blue", //填充颜色。当参数为空时,圆形将没有填充效果。
  33 + strokeWeight: 6, //边线的宽度,以像素为单位。
  34 + strokeOpacity: 0.7, //边线透明度,取值范围0 - 1。
  35 + fillOpacity: 0.6, //填充的透明度,取值范围0 - 1。
  36 + strokeStyle: 'solid' //边线的样式,solid或dashed。
  37 + }
  38 +
  39 + var Bmap = {
  40 +
  41 + init: function () {
  42 + // 设置中心点,
  43 + var CENTER_POINT = {lng: 121.528733, lat: 31.237425};
  44 + // 百度API Key
  45 + var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';
  46 + // 初始化百度地图
  47 + mapBValue = new BMap.Map("bmap_basic");
  48 + //中心点和缩放级别
  49 + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng, CENTER_POINT.lat), 15);
  50 + //启用地图拖拽事件,默认启用(可不写)
  51 + mapBValue.enableDragging();
  52 + //启用地图滚轮放大缩小
  53 + mapBValue.enableScrollWheelZoom();
  54 + //禁用鼠标双击放大
  55 + mapBValue.disableDoubleClickZoom();
  56 + //启用键盘上下左右键移动地图
  57 + mapBValue.enableKeyboard();
  58 + return mapBValue;
  59 + },
  60 +
  61 + /** 获取地图对象 @return 地图对象map */
  62 + getmapBValue: function () {
  63 + return mapBValue;
  64 + },
  65 + getPolygon: function () {
  66 + return polygon;
  67 + },
  68 + getPolyUpline: function () {
  69 + return polyUpline;
  70 + },
  71 + getCircle: function () {
  72 + return circle;
  73 + },
  74 + getIsEditStatus: function () {
  75 + return iseditStatus;
  76 + },
  77 + setMap_status : function (i) {
  78 + map_status = i;
  79 + },
  80 + setIsEditStatus: function (v) {
  81 + iseditStatus = v;
  82 + },
  83 + /*initDrawingManager: function (map, styleOptions) {
  84 + },*/
  85 + getDrawingManagerObj: function () {
  86 + return drawingManagerInitV;
  87 + },
  88 +
  89 + // 从百度地图抓去站点与路段数据
  90 + lineInfoPanl: function (lineNameValue, i, cb) {
  91 +
  92 + /** 根据线路名称与方向从百度地图获取站点与路段 @param lineNameValue:线路名称;i:方向<0:上行;1:下行> */
  93 + WorldsBMap.getBmapStationNames(lineNameValue, i, function (BusLine) {
  94 +
  95 + return cb && cb(BusLine);
  96 +
  97 + });
  98 +
  99 + },
  100 +
  101 + /** 获取距离与时间 @param <points:坐标点集合> */
  102 + getDistanceAndDuration: function (points, callback) {
  103 +
  104 + // 获取长度
  105 + var len = points.length;
  106 +
  107 + (function () {
  108 +
  109 + if (!arguments.callee.count) {
  110 +
  111 + arguments.callee.count = 0;
  112 +
  113 + }
  114 +
  115 + arguments.callee.count++;
  116 +
  117 + var index = parseInt(arguments.callee.count) - 1;
  118 +
  119 + if (index >= len - 1) {
  120 +
  121 + callback && callback(points);
  122 +
  123 + return;
  124 + }
  125 +
  126 + // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)
  127 + var f = arguments.callee;
  128 +
  129 + // 起点坐标 <坐标格式:40.056878,116.30815>
  130 + var origin = points[index].potion.lat + ',' + points[index].potion.lng;
  131 +
  132 + // 终点坐标 <坐标格式:40.056878,116.30815>
  133 + var destination = points[index + 1].potion.lat + ',' + points[index + 1].potion.lng;
  134 +
  135 + var region = '上海';
  136 +
  137 + var origin_region = '上海';
  138 +
  139 + var destination_region = '上海';
  140 +
  141 + var output = 'json';
  142 +
  143 + var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';
  144 +
  145 + /**
  146 + * origin:起点名称或经纬度;
  147 + *
  148 + * destination:终点名称或经纬度;
  149 + *
  150 + * origin_region:起始点所在城市,驾车导航时必填。
  151 + *
  152 + * destination_region:终点所在城市,驾车导航时必填。
  153 + *
  154 + * output :表示输出类型,可设置为xml或json,默认为xml。
  155 + *
  156 + **/
  157 + var paramsB = {
  158 + origin: origin,
  159 + destination: destination,
  160 + region: region,
  161 + origin_region: origin_region,
  162 + destination_region: destination_region,
  163 + output: output,
  164 + ak: ak_My
  165 + };
  166 +
  167 + /** @description :未认证开发者默认配额为:2000次/天。 */
  168 + $.ajax({
  169 +
  170 + // 百度地图根据坐标获取两点之间的时间与距离
  171 + url: 'http://api.map.baidu.com/direction/v1?mode=transit',
  172 +
  173 + data: paramsB,
  174 +
  175 + dataType: 'jsonp',
  176 +
  177 + success: function (r) {
  178 +
  179 + if (r) {
  180 +
  181 + if (r.message == 'ok') {
  182 +
  183 + if (r.result.taxi == null) {
  184 +
  185 + // 获取距离(单位:米)
  186 + points[index + 1].distance = 0;
  187 +
  188 + // 获取时间(单位:秒)
  189 + points[index + 1].duration = 0;
  190 +
  191 + } else {
  192 +
  193 + // 获取距离(单位:米)
  194 + points[index + 1].distance = r.result.taxi.distance;
  195 +
  196 + // 获取时间(单位:秒)
  197 + points[index + 1].duration = r.result.taxi.duration;
  198 +
  199 + }
  200 +
  201 +
  202 + }
  203 +
  204 + }
  205 +
  206 + f();
  207 + }
  208 + });
  209 +
  210 + })();
  211 +
  212 + },
  213 + // 打开站点信息窗口
  214 + openStationInfoWin : function (objStation) {
  215 + // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
  216 + mapBValue.setZoom(25);
  217 + if (objStation) {
  218 + // 站点形状
  219 + var shapes = objStation.stationShapesType;
  220 + // 获取中心坐标点字符串分割
  221 + var BJwpoints = objStation.stationJwpoints.split(' ');
  222 +
  223 + // 中心坐标点
  224 + var point = new BMap.Point(BJwpoints[0], BJwpoints[1]);
  225 + var width = WorldsBMap.strGetLength(objStation.stationRouteName) * 11;
  226 + // 信息窗口参数属性
  227 + var opts = {
628 // 信息窗口宽度 228 // 信息窗口宽度
629 - width : 200, 229 + width: (width < 200 ? 200 : width),
630 // 信息窗口高度 230 // 信息窗口高度
631 - height : 300, 231 + height: shapes=="r" ?330:300,
632 // 信息窗位置偏移值。 232 // 信息窗位置偏移值。
633 - // offset: new BMap.Size(500,20),  
634 - //标题  
635 - // title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>', 233 + offset: new BMap.Size(10,-20),
636 //设置不允许信窗发送短息 234 //设置不允许信窗发送短息
637 - enableMessage : false, 235 + enableMessage: false,
638 //是否开启点击地图关闭信息窗口 236 //是否开启点击地图关闭信息窗口
639 - enableCloseOnClick : false 237 + enableCloseOnClick: false,
  238 + // 是否开启信息窗口打开时地图自动移动(默认开启)。(自 1.1 新增)
  239 + enableAutoPan: false
640 }; 240 };
641 241
642 - // var markTypeStr = '';  
643 - // if(objStation.stationRouteStationMark=='B') {  
644 - // markTypeStr='起点站';  
645 - // }else if(objStation.stationRouteStationMark=='Z') {  
646 - // markTypeStr ='中途站';  
647 - // }else if(objStation.stationRouteStationMark=='E') {  
648 - // markTypeStr='终点站';  
649 - // }  
650 - // var point = objStation.stationBJwpoints.split(" ")  
651 - // var htm = '<span style="color: #ff8355;font-size: 20px;">' + objStation.stationStationName + '</span>' +  
652 - // '<span class="help-block" >站点编码:' + objStation.stationStationCod + '</span>' +  
653 - // '<span class="help-block" >站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +  
654 - // '<span class="help-block" >站点类型:' + markTypeStr + '</span>' +  
655 - // '<span class="help-block" >经度:&nbsp&nbsp' + point[0] + '</span>' +  
656 - // '<span class="help-block" >纬度:&nbsp&nbsp' + point[1] + '</span>' +  
657 - // '<span class="help-block" >到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +  
658 - // '<span class="help-block" >到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +  
659 - // '<span class="help-block" >缓冲区形状:' + (objStation.stationShapesType == "r"?"圆形":"多边形") + '</span>' +  
660 - // '<span class="help-block" >版本号:&nbsp&nbsp' + objStation.stationRouteVersions + '</span>' +  
661 - // '<div style="display: flex">' +  
662 - // '<span><button style="background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn btn-circle" ' +  
663 - // 'id="editStation" onclick="WorldsBMap.editStation('+objStation.stationRouteDirections+')">修改站点</button></span>' +  
664 - // '<span><button style="background: #ff8355; color: #fff; padding-bottom:5px; font-size: 9px;" class="btn btn-circle" ' +  
665 - // 'id="addBetweenStationRoad" onclick="WorldsBMap.addBetweenStationRoad('+objStation.stationRouteId+')">添加站点间路段</button></span>' +  
666 - // '</div>';  
667 - //  
668 - // // 创建信息窗口  
669 - // var infoWindow_target = new BMap.InfoWindow(htm, opts_polygon);  
670 - // // 自定义标注物图片  
671 - // var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
672 - // // 创建点  
673 - // marker = new BMap.Marker(pointPolygon,{icon : icon_target});  
674 - // // 把标注添物加到地图上  
675 - // mapBValue.addOverlay(marker);  
676 - // // 是否在平移过程中禁止动画。(自1.2新增)  
677 - // var PanOptions_ ={noAnimation :true};  
678 - // // 将地图的中心点更改为给定的点。  
679 - // mapBValue.panTo(pointPolygon,PanOptions_);  
680 - // // 将地图在水平位置上移动x像素,垂直位置上移动y像素。  
681 - // mapBValue.panBy(10,-150,PanOptions_);  
682 - // //开启信息窗口  
683 - // mapBValue.openInfoWindow(infoWindow_target,pointPolygon);  
684 - },  
685 -  
686 -  
687 - // 在地图上画出上行线路走向  
688 - drawingUpline01 : function (polylineArray,polyline_center,data) {  
689 - var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;  
690 - // 创建线路走向  
691 - polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
692 - polyUpline01.data = data;  
693 - // 把折线添加到地图上  
694 - mapBValue.addOverlay(polyUpline01);  
695 - polyUpline01.addEventListener('click',function(e) {  
696 - if(WorldsBMap.getIsEditStatus()) {  
697 - layer.msg('请先保存正在编辑的路段信息...');  
698 - return false;  
699 - }  
700 - polyUpline01.enableEditing();  
701 - WorldsBMap.setIsEditStatus(true);  
702 - });  
703 - // 添加双击折线保存事件  
704 - polyUpline01.addEventListener('dblclick',function(e) {  
705 - WorldsBMap.setIsEditStatus(false);  
706 - // 关闭  
707 - layer.closeAll();  
708 - polyUpline01.disableEditing();  
709 - EditSectionObj.setEitdSection(polyUpline01.data);  
710 - // 获取折线坐标集合  
711 - var editPloyLineArray = polyUpline01.getPath();  
712 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
713 - // polyUpline= '';  
714 - // 加载修改路段弹出层mobal页面  
715 - $.get('editsection.html', function(m){  
716 - $(pjaxContainer).append(m);  
717 - $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
718 - });  
719 - });  
720 - var PanOptions_ ={noAnimation :true};  
721 - mapBValue.reset();  
722 - mapBValue.panTo(polyline_center,PanOptions_);  
723 - mapBValue.panBy(500,-510,PanOptions_);  
724 - mapBValue.setZoom(14);  
725 - },  
726 -  
727 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
728 - drawingUpStationPoint : function(point_center,stationName,s) {  
729 -  
730 - // 自定义标注物图片  
731 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));  
732 -  
733 - var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'  
734 - + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'  
735 - + '</div>'  
736 - + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';  
737 -  
738 -  
739 - var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{  
740 - "anchor" : new BMap.Size(-10,8),  
741 - "enableDragging" : true});  
742 -  
743 -  
744 - myRichMarker1.disableDragging();  
745 - mapBValue.addOverlay(myRichMarker1);  
746 -  
747 -  
748 - // 创建标注物  
749 - marker = new BMap.Marker(point_center,{icon : icon_target});  
750 -  
751 - // 允许覆盖物在map.clearOverlays方法中被清除。  
752 - marker.enableMassClear();  
753 -  
754 - mapBValue.addOverlay(marker);  
755 - },  
756 -  
757 - // 站点名称获取百度坐标(手动规划)  
758 - stationsNameToPoints : function(arra,callback) {  
759 - // 获取长度  
760 - var len = arra.length;  
761 - var stationList = [];  
762 - (function(){  
763 - if (!arguments.callee.count) {  
764 - arguments.callee.count = 0;  
765 - }  
766 - arguments.callee.count++;  
767 - var index = parseInt(arguments.callee.count) - 1;  
768 - if (index >= len) {  
769 - callback && callback(stationList);  
770 - return ;  
771 - }  
772 - var f = arguments.callee;  
773 - if(arra[index].name!=''){  
774 - var localSearch = new BMap.LocalSearch(mapBValue);  
775 - localSearch.search(arra[index].name);  
776 - localSearch.setSearchCompleteCallback(function (searchResult) {  
777 - var poi = searchResult.getPoi(0);  
778 - if(poi) {  
779 - stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:poi.point.lng,lat:poi.point.lat}});  
780 - }else {  
781 - stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:arra[index].wgs.x,lat:arra[index].wgs.y}});  
782 - }  
783 - f();  
784 - });  
785 - }else {  
786 - f();  
787 - }  
788 - })();  
789 - },  
790 -  
791 - // 根据坐标点获取两点之间的时间与距离(手动规划)  
792 - getDistanceAndTotime : function(stationList,cb) {  
793 -  
794 - stationList[0].distance = '';  
795 -  
796 - stationList[0].duration = '';  
797 -  
798 - // var sectionList = [];  
799 -  
800 - // 获取长度  
801 - var len = stationList.length;  
802 -  
803 - (function(){  
804 -  
805 - if (!arguments.callee.count) {  
806 -  
807 - arguments.callee.count = 0;  
808 -  
809 - }  
810 -  
811 - arguments.callee.count++;  
812 -  
813 - var index = parseInt(arguments.callee.count) - 1;  
814 -  
815 - if (index >= len-1) {  
816 -  
817 - // cb && cb(stationList,sectionList);  
818 - cb && cb(stationList);  
819 - return;  
820 - }  
821 -  
822 - var f = arguments.callee;  
823 -  
824 - var poiOne = new BMap.Point(stationList[index].potion.lng,stationList[index].potion.lat);  
825 -  
826 - var poiTwo = new BMap.Point(stationList[index+1].potion.lng,stationList[index+1].potion.lat);  
827 -  
828 - var transit = new BMap.TransitRoute(mapBValue, {renderOptions: {map: mapBValue},onSearchComplete: searchComplete});  
829 -  
830 - transit.search(poiOne,poiTwo);  
831 -  
832 - function searchComplete(results){  
833 -  
834 - var plan = results.getPlan(0);  
835 -  
836 - if (transit.getStatus() != BMAP_STATUS_SUCCESS){  
837 -  
838 - stationList[index+1].distance = '';  
839 -  
840 - stationList[index+1].duration = '';  
841 -  
842 - // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:''});  
843 -  
844 - }else {  
845 -  
846 - stationList[index+1].distance = plan.getDistance(true);  
847 -  
848 - stationList[index+1].duration = plan.getDuration(true);  
849 -  
850 - // var line = plan.getRoute(0);  
851 -  
852 - // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:line.getPath()});  
853 -  
854 - }  
855 -  
856 - f();  
857 - }  
858 -  
859 - })();  
860 -  
861 - },  
862 -  
863 - // 根据坐标点获取两点之间的折线路段(手动规划)  
864 - getSectionListPlonly : function(stationsPoint,cb) {  
865 -  
866 - var len = stationsPoint.length;  
867 -  
868 - var sectionList = [];  
869 -  
870 - (function(){  
871 -  
872 - if (!arguments.callee.count) {  
873 -  
874 - arguments.callee.count = 0;  
875 -  
876 - }  
877 -  
878 - arguments.callee.count++;  
879 -  
880 - var index = parseInt(arguments.callee.count) - 1;  
881 -  
882 - if (index >= len-1 ) {  
883 -  
884 - cb && cb(sectionList);  
885 - return;  
886 - }  
887 -  
888 - var f = arguments.callee;  
889 -  
890 - var poiOne = new BMap.Point(stationsPoint[index].potion.lng,stationsPoint[index].potion.lat);  
891 -  
892 - var poiTwo = new BMap.Point(stationsPoint[index+1].potion.lng,stationsPoint[index+1].potion.lat);  
893 -  
894 - /* var transit = new BMap.TransitRoute(mapB, {renderOptions: {map: mapB},onPolylinesSet: searchPolylinesSet});*/  
895 -  
896 - var transit = new BMap.DrivingRoute(mapBValue, {renderOptions: {map: mapBValue},onPolylinesSet: searchPolylinesSet});  
897 -  
898 - function searchPolylinesSet(results){  
899 -  
900 - if (transit.getStatus() != BMAP_STATUS_SUCCESS){  
901 -  
902 -  
903 - }else {  
904 -  
905 - var sectionArrayList = [];  
906 - for (i = 0; i < results.length; i++){  
907 -  
908 - // console.log(results[i].getPolyline().getPath());  
909 - sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());  
910 -  
911 - }  
912 -  
913 - var sectionName = stationsPoint[index].name + '至' + stationsPoint[index+1].name;  
914 -  
915 - sectionList.push({sectionName:sectionName,points:sectionArrayList});  
916 -  
917 - }  
918 -  
919 - f();  
920 - }  
921 -  
922 - transit.search(poiOne,poiTwo);  
923 -  
924 - })();  
925 -  
926 - },  
927 -  
928 - localtionPoint : function(stationNameV) {  
929 -  
930 - WorldsBMap.localSearchFromAdreesToPoint(stationNameV,function(Points) {  
931 -  
932 - if(Points) {  
933 -  
934 - var BJwpointsArray = Points.split(' ');  
935 -  
936 - var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);  
937 -  
938 - var marker_stargt2 = new BMap.Marker(stationNameChangePoint);  
939 -  
940 - var PanOptions ={noAnimation :true};  
941 -  
942 - mapBValue.panTo(stationNameChangePoint,PanOptions);  
943 -  
944 - mapBValue.panBy(0,-100);  
945 -  
946 - // 将标注添加到地图中  
947 - mapBValue.addOverlay(marker_stargt2);  
948 -  
949 - //跳动的动画  
950 - marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);  
951 -  
952 - }  
953 -  
954 - });  
955 -  
956 - },  
957 -  
958 - /** 系统规划抓去数据 @param lineNameValue:线路名称;i:方向*/  
959 - getBmapStationNames : function(lineNameValue,i,callback) {  
960 -  
961 - var busline = new BMap.BusLineSearch(mapBValue,{  
962 -  
963 - // 设置公交列表查询后的回调函数。参数:rs: BusListResult类型  
964 - onGetBusListComplete:function(BusListResult) {  
965 -  
966 - // 如果不为空  
967 - if(BusListResult){  
968 -  
969 - //获取第一个公交列表显示到map上  
970 - var fstLine = BusListResult.getBusListItem(i);  
971 -  
972 - /*if(fstLine==undefined){  
973 -  
974 - layer.confirm('系统无法生成该线路【'+lineNameValue+'】的站点与路段!请点击返回选择其它方式规划', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){  
975 -  
976 - layer.closeAll();  
977 -  
978 - if(i==0){  
979 -  
980 - $('#upToolsMobal').show();  
981 -  
982 - }else if(i==1){  
983 -  
984 - $('#downToolsMobal').show();  
985 -  
986 - }  
987 -  
988 - return;  
989 - });  
990 -  
991 - }*/  
992 -  
993 - if(fstLine==undefined){  
994 -  
995 -  
996 - callback && callback(null);  
997 -  
998 - }  
999 -  
1000 - busline.getBusLine(fstLine);  
1001 -  
1002 - }  
1003 -  
1004 - },  
1005 -  
1006 - //设置公交线路查询后的回调函数.参数:rs: BusLine类型  
1007 - onGetBusLineComplete: function(BusLine){  
1008 -  
1009 - // 如果不为空  
1010 - if(BusLine){  
1011 -  
1012 - callback && callback(BusLine);  
1013 -  
1014 - }  
1015 -  
1016 - }  
1017 -  
1018 - });  
1019 -  
1020 - busline.getBusList(lineNameValue);  
1021 -  
1022 - },  
1023 - editStation : function(dir) {  
1024 - // $.get("/stationroute/findStationRouteInfo",{"id":stationRouteId},function (route) {  
1025 - $.get('edit_select.html', function(m){ 242 + var markTypeStr = '';
  243 + if (objStation.stationRouteStationMark == 'B') {
  244 + markTypeStr = '起点站';
  245 + } else if (objStation.stationRouteStationMark == 'Z') {
  246 + markTypeStr = '中途站';
  247 + } else if (objStation.stationRouteStationMark == 'E') {
  248 + markTypeStr = '终点站';
  249 + }
  250 + var htm = '<span style="color: #ff8355;font-size: 20px; overflow: hidden; white-space: nowrap; text-overflow:ellipsis;display: -webkit-box; -webkit-box-orient: vertical;">' + objStation.stationRouteName + '</span>' +
  251 + '<span class="help-block" >站点编码:' + objStation.stationCode + '</span>' +
  252 + '<span class="help-block" >站点序号:' + objStation.stationRouteCode + '</span>' +
  253 + '<span class="help-block" >站点类型:' + markTypeStr + '</span>' +
  254 + '<span class="help-block" >经度:&nbsp&nbsp' + BJwpoints[0] + '</span>' +
  255 + '<span class="help-block" >纬度:&nbsp&nbsp' + BJwpoints[1] + '</span>' +
  256 + '<span class="help-block" >到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +
  257 + '<span class="help-block" >到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +
  258 + '<span class="help-block" >缓冲区形状:' + (shapes == "r" ? "圆形" : "多边形") + '</span>' +
  259 + (shapes=="r" ? ("<span class='help-block' >半径&nbsp&nbsp:" + objStation.stationRadius + "</span>") : " ")+
  260 + '<span class="help-block" >版本号&nbsp&nbsp:' + objStation.stationRouteVersions + '</span>' +
  261 + '<div>' +
  262 + '<button class="info_win_btn" id="editStation" onclick="WorldsBMap.editStation(' + objStation.stationRouteId+','+objStation.stationRoutedirections + ')">修改站点</button>' +
  263 + '<button class="info_win_btn" id="addBetweenStationRoad" onclick="WorldsBMap.addBetweenStationRoad(' + objStation.stationRouteId + ')">添加站点间路段</button>' +
  264 + '<button class="info_win_btn" onclick="WorldsBMap.destroyStation('+ objStation.stationRouteId + ','+objStation.stationRouteLine+','+objStation.stationRoutedirections+')">撤销</button>' +
  265 + '</div>';
  266 +
  267 + // 创建信息窗口
  268 + var infoWindow_target = new BMap.InfoWindow(htm, opts);
  269 + setTimeout(function () {
  270 + //开启信息窗口
  271 + mapBValue.openInfoWindow(infoWindow_target, point);
  272 + }, 100);
  273 + // 是否在平移过程中禁止动画。(自1.2新增)
  274 + var PanOptions_ = {noAnimation: true};
  275 + // 将地图的中心点更改为给定的点。
  276 + mapBValue.panTo(point, PanOptions_);
  277 + // mapBValue.panBy(10, -150, PanOptions_);
  278 + }
  279 + },
  280 +
  281 + editPolyUpline: function () {
  282 + // 禁止覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)
  283 + polyUpline.disableMassClear();
  284 + WorldsBMap.clearMarkAndOverlays();
  285 + // 允许覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)
  286 + polyUpline.enableMassClear();
  287 + // 开启线路编辑
  288 + polyUpline.enableEditing();
  289 + // 添加双击折线保存事件
  290 + polyUpline.addEventListener('dblclick', function (e) {
  291 + // 关闭
  292 + layer.closeAll();
  293 + polyUpline.disableEditing();
  294 + // 获取折线坐标集合
  295 + var editPloyLineArray = polyUpline.getPath();
  296 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  297 + polyUpline = '';
  298 + // 加载修改路段弹出层mobal页面
  299 + $.get('editsection.html', function (m) {
  300 + $(pjaxContainer).append(m);
  301 + $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap, GetAjaxData, EditSectionObj, PublicFunctions]);
  302 + });
  303 + });
  304 + },
  305 +
  306 + // 根据地理名称获取百度经纬度坐标
  307 + localSearchFromAdreesToPoint: function (Address, callback) {
  308 +
  309 + // 创建一个搜索类实例
  310 + var localSearch = new BMap.LocalSearch(mapBValue);
  311 +
  312 + // 检索完成后的回调函数。
  313 + localSearch.setSearchCompleteCallback(function (searchResult) {
  314 +
  315 + var resultPoints = '';
  316 +
  317 + if (searchResult) {
  318 +
  319 + // 返回索引指定的结果。索引0表示第1条结果
  320 + var poi = searchResult.getPoi(0);
  321 +
  322 + if (poi) {
  323 +
  324 + //获取经度和纬度
  325 + resultPoints = poi.point.lng + ' ' + poi.point.lat;
  326 +
  327 + callback && callback(resultPoints);
  328 +
  329 + } else {
  330 +
  331 + callback && callback(false);
  332 +
  333 + }
  334 +
  335 + } else {
  336 +
  337 + callback && callback(false);
  338 + }
  339 +
  340 + });
  341 +
  342 + // 根据检索词发起检索。
  343 + localSearch.search(Address);
  344 +
  345 + },
  346 +
  347 + // 编辑图形
  348 + editShapes: function (obj) {
  349 + // 关闭信息窗口
  350 + mapBValue.closeInfoWindow();
  351 +
  352 + // 清除marker
  353 + // mapBValue.removeOverlay(marker);
  354 + var station = obj.getEitdStation();
  355 + var stationShapesTypeV = station.stationShapesType;
  356 + // 编辑圆
  357 + if (stationShapesTypeV == 'r') {
  358 +
  359 + // 获取中心坐标点字符串分割
  360 + var BJwpoints = station.stationJwpoints.split(' ');
  361 + // 中心坐标点
  362 + var point = new BMap.Point(BJwpoints[0], BJwpoints[1]);
  363 + //创建圆
  364 + circle = new BMap.Circle(point, station.stationRadius, {
  365 + strokeColor: "red",
  366 + strokeWeight: 2,
  367 + strokeOpacity: 0.7
  368 + });
  369 + // 允许覆盖物在map.clearOverlays方法中被清除
  370 + circle.enableMassClear();
  371 + // 百度地图添加覆盖物圆
  372 + mapBValue.addOverlay(circle);
  373 + // 开启编辑功能
  374 + circle.enableEditing();
  375 + // 编辑圆监听事件
  376 + circle.addEventListener('dblclick', function () {
  377 + // 返回圆形的半径,单位为米。
  378 + var newRadius = circle.getRadius();
  379 + // 返回圆形的中心点坐标。
  380 + var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;
  381 + var centre_New = [{potion: {lng: circle.getCenter().lng, lat: circle.getCenter().lat}}];
  382 + /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
  383 + EditStationObj.setEitdStationJwpoints(newCenter);
  384 + /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
  385 + EditStationObj.setEitdStationShapesType('r');
  386 + /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */
  387 + EditStationObj.setEitdStationRadius(Math.round(newRadius));
  388 + /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */
  389 + EditStationObj.setEitdBPolygonGrid('');
  390 + // 加载编辑页面
  391 + $.get('edit.html', function (m) {
1026 $(pjaxContainer).append(m); 392 $(pjaxContainer).append(m);
1027 - $('#edit_select_mobal').trigger('editSelectMobal_show', [WorldsBMap,DrawingManagerObj,GetAjaxData,EditStationObj,LineObj,PublicFunctions,dir]); 393 + $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap, GetAjaxData, EditStationObj, LineObj, PublicFunctions]);
1028 }); 394 });
1029 - // });  
1030 - },  
1031 - addBetweenStationRoad : function (stationRouteId) {  
1032 - $.get("/stationroute/findStationRouteInfo",{"id":stationRouteId},function (route) {  
1033 - var stationRouteBegin = route[0];  
1034 - // 查询下一个站点  
1035 - $.get("/stationroute/findDownStationRoute",{"lineId":stationRouteBegin.stationRouteLine, "direction":stationRouteBegin.stationRoutedirections, "stationRouteCode":stationRouteBegin.stationRouteCode},function (stationRoute) {  
1036 - var stationRouteFinish = stationRoute[0];  
1037 -  
1038 - if(stationRouteFinish){  
1039 - var pointBegin = stationRouteBegin.stationJwpoints.split(" ");  
1040 - var pointFinish = stationRouteFinish.stationJwpoints.split(" ")  
1041 - console.log(pointFinish);  
1042 - var sectionList = [];  
1043 - // 两个站点的坐标  
1044 - var poiOne = new BMap.Point(pointBegin[0],pointBegin[1]);  
1045 - var poiTwo = new BMap.Point(pointFinish[0],pointFinish[1]);  
1046 - // 路径规划保存按钮  
1047 - var label = new BMap.Label("保存路段", {  
1048 - offset: new BMap.Size(13, -53) 395 + });
  396 +
  397 + // 编辑多变行
  398 + } else if (stationShapesTypeV == 'd') {
  399 + // 获取中心点坐标字符串
  400 + var testpointStr = station.stationJwpoints;
  401 + // 按空格切割中心点坐标字符串
  402 + var BJwpointsPolygon = testpointStr.split(' ');
  403 + // 中心点坐标
  404 + var pointPolygon = new BMap.Point(BJwpointsPolygon[0], BJwpointsPolygon[1]);
  405 + // 获取多边形坐标字符串
  406 + var stationBPolygonGrid = station.stationBPolyonGrid;
  407 + // 截取多边形坐标字符串
  408 + var stationBPolygonGridStr = stationBPolygonGrid.substring(9, stationBPolygonGrid.length - 2);
  409 + // 按逗号切割
  410 + var pointPolygonArray = stationBPolygonGridStr.split(',');
  411 + // 多边形坐标集合
  412 + var polygonP = [];
  413 + for (var v = 0; v < pointPolygonArray.length; v++) {
  414 + polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0], pointPolygonArray[v].split(" ")[1]));
  415 + }
  416 +
  417 + // 画多边形
  418 + polygon = new BMap.Polygon(polygonP, {
  419 + // 线条显色
  420 + strokeColor: "red",
  421 + // 边线的宽度,以像素为单位。
  422 + strokeWeight: 2,
  423 + // 边线透明度,取值范围0 - 1。
  424 + strokeOpacity: 0.7
  425 + });
  426 +
  427 + // 增加地图覆盖物多边形
  428 + mapBValue.addOverlay(polygon);
  429 +
  430 + // 开启编辑功能(自 1.1 新增)
  431 + polygon.enableEditing();
  432 +
  433 + // 添加多变行编辑事件
  434 + polygon.addEventListener('dblclick', function (e) {
  435 +
  436 + // 获取编辑的多边形对象
  437 + var edit_pointE = polygon;
  438 +
  439 + var edit_bPloygonGrid = "";
  440 +
  441 + var editPolyGonLen_ = edit_pointE.getPath().length;
  442 +
  443 + for (var k = 0; k < editPolyGonLen_; k++) {
  444 +
  445 + if (k == 0) {
  446 +
  447 + edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  448 +
  449 + } else {
  450 +
  451 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  452 +
  453 + }
  454 +
  455 + }
  456 +
  457 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;
  458 +
  459 + // 多边形中心点
  460 + var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;
  461 +
  462 + /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
  463 + EditStationObj.setEitdStationJwpoints(centre_points);
  464 +
  465 + /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
  466 + EditStationObj.setEitdStationShapesType('d');
  467 +
  468 + /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */
  469 + EditStationObj.setEitdStationRadius('');
  470 +
  471 + /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */
  472 + EditStationObj.setEitdBPolygonGrid(edit_bPloygonGrid);
  473 +
  474 + $.get('edit.html', function (m) {
  475 +
  476 + $(pjaxContainer).append(m);
  477 +
  478 + $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap, GetAjaxData, EditStationObj, LineObj, PublicFunctions]);
  479 +
  480 + });
  481 +
  482 + });
  483 +
  484 + }
  485 +
  486 + },
  487 +
  488 + // 在地图上画出上行线路走向
  489 + /*drawingUpline: function (polylineArray, polyline_center, data) {
  490 + /!*WorldsBMap.clearMarkAndOverlays();*!/
  491 + polyUpline = '';
  492 + // 创建线路走向
  493 + polyUpline = new BMap.Polyline(polylineArray, {strokeColor: "red", strokeWeight: 6, strokeOpacity: 0.7});
  494 + // polyUpline.data = data;
  495 + // 把折线添加到地图上
  496 + mapBValue.addOverlay(polyUpline);
  497 + /!*var ceter_index = Math.round(resultdata.length / 2);
  498 +
  499 + var ceterPointsStr = resultdata[ceter_index].bJwpoints;
  500 +
  501 + var ceterPointsArray = ceterPointsStr.split(' ');
  502 +
  503 + var polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);*!/
  504 + var PanOptions_ = {noAnimation: true};
  505 + mapBValue.reset();
  506 + mapBValue.panTo(polyline_center, PanOptions_);
  507 + mapBValue.panBy(500, -510, PanOptions_);
  508 + mapBValue.setZoom(14);
  509 + },*/
  510 +
  511 +
  512 + // 画路段走向
  513 + drawingUpline01: function (polyline_center, datas) {
  514 + if (polyline_center && datas) {
  515 + // 编辑路段数据
  516 + sectionArray = [];
  517 + for (var d = 0; d < datas.length; d++) {
  518 + var data = datas[d];
  519 + // 地图折线坐标点集合
  520 + var polylineArray = [];
  521 + // 获取路段折线坐标字符串
  522 + var sectionBsectionVectorStr = data.sectionBsectionVector;
  523 + if (sectionBsectionVectorStr == null)
  524 + continue;
  525 + // 切割段折线坐标字符串
  526 + var tempStr = sectionBsectionVectorStr.substring(11, sectionBsectionVectorStr.length - 1);
  527 + // 分割折线坐标字符串
  528 + var lineArray = tempStr.split(',');
  529 + for (var i = 0; i < lineArray.length; i++) {
  530 + polylineArray.push(new BMap.Point(lineArray[i].split(' ')[0], lineArray[i].split(' ')[1]));
  531 + }
  532 + var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;
  533 + // 创建线路走向
  534 + polyUpline01 = new BMap.Polyline(polylineArray, {
  535 + strokeColor: "red",
  536 + strokeWeight: 6,
  537 + strokeOpacity: 0.7
  538 + });
  539 + polyUpline01.data = data;
  540 + polyUpline01.ct_source = '1';
  541 + // 把折线添加到地图上
  542 + mapBValue.addOverlay(polyUpline01);
  543 + // 聚焦事件
  544 + polyUpline01.addEventListener('mousemove', function (e) {
  545 + if (this != editPolyline)
  546 + this.setStrokeColor("#20bd26");
  547 + });
  548 + // 失去焦点
  549 + polyUpline01.addEventListener('mouseout', function (e) {
  550 + if (this != editPolyline && this != road_win_show_p)
  551 + this.setStrokeColor("red");
  552 + });
  553 + // 添加单击事件
  554 + polyUpline01.addEventListener('onclick', function (e) {
  555 + // 打开信息窗口
  556 + if (map_status != 1)
  557 + WorldsBMap.openSectionInfoWin(this);
  558 + });
  559 + sectionArray.push(polyUpline01);
  560 + }
  561 + mapBValue.setCenter(polyline_center);
  562 + mapBValue.setZoom(15);
  563 + // 禁止覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)
  564 + // polyUpline01.disableMassClear();
  565 + }
  566 + },
  567 +
  568 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  569 + drawingUpStationPoint: function (station, s) {
  570 + // 中心点坐标字符串
  571 + var bJwpointsStr = station.stationJwpoints;
  572 + var stationName = station.stationRouteName;
  573 + // 起个中心点坐标字符串
  574 + var bJwpointsArray = bJwpointsStr.split(' ');
  575 + // 设置中心点
  576 + var point_center = new BMap.Point(bJwpointsArray[0],bJwpointsArray[1]);
  577 + // 自定义标注物图片
  578 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png', new BMap.Size(10, 10));
  579 +
  580 + var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
  581 + + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
  582 + + '</div>'
  583 + + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">' + s + '</span>' + stationName + '</label>';
  584 +
  585 + var myRichMarker1 = new BMapLib.RichMarker(html2, point_center, {
  586 + "title": stationName,
  587 + "anchor": new BMap.Size(-10, 8),
  588 + "enableDragging": true
  589 + });
  590 + myRichMarker1.disableDragging();
  591 + myRichMarker1.ct_source = '1';
  592 + mapBValue.addOverlay(myRichMarker1);
  593 + myRichMarker1.addEventListener('click', function () {
  594 + if(map_status != 1)
  595 + WorldsBMap.openStationInfoWin(station);
  596 + });
  597 + stationArray[station.stationRouteId] = station;
  598 + },
  599 +
  600 + // 站点名称获取百度坐标(手动规划)
  601 + stationsNameToPoints: function (arra, callback) {
  602 + // 获取长度
  603 + var len = arra.length;
  604 + var stationList = [];
  605 + (function () {
  606 + if (!arguments.callee.count) {
  607 + arguments.callee.count = 0;
  608 + }
  609 + arguments.callee.count++;
  610 + var index = parseInt(arguments.callee.count) - 1;
  611 + if (index >= len) {
  612 + callback && callback(stationList);
  613 + return;
  614 + }
  615 + var f = arguments.callee;
  616 + if (arra[index].name != '') {
  617 + var localSearch = new BMap.LocalSearch(mapBValue);
  618 + localSearch.search(arra[index].name);
  619 + localSearch.setSearchCompleteCallback(function (searchResult) {
  620 + var poi = searchResult.getPoi(0);
  621 + if (poi) {
  622 + stationList.push({
  623 + name: arra[index].name.replace('公交车站', ''),
  624 + wgs: arra[index].wgs,
  625 + potion: {lng: poi.point.lng, lat: poi.point.lat}
  626 + });
  627 + } else {
  628 + stationList.push({
  629 + name: arra[index].name.replace('公交车站', ''),
  630 + wgs: arra[index].wgs,
  631 + potion: {lng: arra[index].wgs.x, lat: arra[index].wgs.y}
1049 }); 632 });
1050 - label.setStyle({  
1051 - color: '#fff',  
1052 - background:"url(/pages/base/stationroute/css/img/bg.png)",  
1053 - border: '0px solid',  
1054 - textAlign: "center",  
1055 - height: "28px",  
1056 - lineHeight: "26px",  
1057 - width: "80px",  
1058 - maxWidth: "none" 633 + }
  634 + f();
  635 + });
  636 + } else {
  637 + f();
  638 + }
  639 + })();
  640 + },
  641 +
  642 + // 根据坐标点获取两点之间的时间与距离(手动规划)
  643 + getDistanceAndTotime: function (stationList, cb) {
  644 + stationList[0].distance = '';
  645 + stationList[0].duration = '';
  646 + // var sectionList = [];
  647 + // 获取长度
  648 + var len = stationList.length;
  649 + (function () {
  650 + if (!arguments.callee.count) {
  651 + arguments.callee.count = 0;
  652 + }
  653 + arguments.callee.count++;
  654 + var index = parseInt(arguments.callee.count) - 1;
  655 + if (index >= len - 1) {
  656 + // cb && cb(stationList,sectionList);
  657 + cb && cb(stationList);
  658 + return;
  659 + }
  660 + var f = arguments.callee;
  661 + var poiOne = new BMap.Point(stationList[index].potion.lng, stationList[index].potion.lat);
  662 + var poiTwo = new BMap.Point(stationList[index + 1].potion.lng, stationList[index + 1].potion.lat);
  663 + var transit = new BMap.TransitRoute(mapBValue, {
  664 + renderOptions: {map: mapBValue},
  665 + onSearchComplete: searchComplete
  666 + });
  667 +
  668 + transit.search(poiOne, poiTwo);
  669 + function searchComplete(results) {
  670 + var plan = results.getPlan(0);
  671 + if (transit.getStatus() != BMAP_STATUS_SUCCESS) {
  672 + stationList[index + 1].distance = '';
  673 + stationList[index + 1].duration = '';
  674 + // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:''});
  675 + } else {
  676 + stationList[index + 1].distance = plan.getDistance(true);
  677 + stationList[index + 1].duration = plan.getDuration(true);
  678 + // var line = plan.getRoute(0);
  679 + // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:line.getPath()});
  680 + }
  681 + f();
  682 + }
  683 + })();
  684 + },
  685 +
  686 + // 根据坐标点获取两点之间的折线路段(手动规划)
  687 + getSectionListPlonly: function (stationsPoint, cb) {
  688 + var len = stationsPoint.length;
  689 + var sectionList = [];
  690 + (function () {
  691 + if (!arguments.callee.count) {
  692 + arguments.callee.count = 0;
  693 + }
  694 + arguments.callee.count++;
  695 + var index = parseInt(arguments.callee.count) - 1;
  696 + if (index >= len - 1) {
  697 + cb && cb(sectionList);
  698 + return;
  699 + }
  700 + var f = arguments.callee;
  701 + var poiOne = new BMap.Point(stationsPoint[index].potion.lng, stationsPoint[index].potion.lat);
  702 + var poiTwo = new BMap.Point(stationsPoint[index + 1].potion.lng, stationsPoint[index + 1].potion.lat);
  703 + /* var transit = new BMap.TransitRoute(mapB, {renderOptions: {map: mapB},onPolylinesSet: searchPolylinesSet});*/
  704 + var transit = new BMap.DrivingRoute(mapBValue, {
  705 + renderOptions: {map: mapBValue},
  706 + onPolylinesSet: searchPolylinesSet
  707 + });
  708 + function searchPolylinesSet(results) {
  709 + if (transit.getStatus() != BMAP_STATUS_SUCCESS) {
  710 + } else {
  711 + var sectionArrayList = [];
  712 + for (i = 0; i < results.length; i++) {
  713 + // console.log(results[i].getPolyline().getPath());
  714 + sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());
  715 + }
  716 + var sectionName = stationsPoint[index].name + '至' + stationsPoint[index + 1].name;
  717 + sectionList.push({sectionName: sectionName, points: sectionArrayList});
  718 + }
  719 + f();
  720 + }
  721 + transit.search(poiOne, poiTwo);
  722 + })();
  723 + },
  724 +
  725 + localtionPoint: function (stationNameV) {
  726 + // 关闭信息窗口
  727 + mapBValue.closeInfoWindow();
  728 +
  729 + WorldsBMap.localSearchFromAdreesToPoint(stationNameV, function (Points) {
  730 +
  731 + if (Points) {
  732 +
  733 + var BJwpointsArray = Points.split(' ');
  734 +
  735 + var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);
  736 +
  737 + var marker_stargt2 = new BMap.Marker(stationNameChangePoint);
  738 +
  739 + var PanOptions = {noAnimation: true};
  740 +
  741 + mapBValue.panTo(stationNameChangePoint, PanOptions);
  742 +
  743 + mapBValue.panBy(0, -100);
  744 +
  745 + // 将标注添加到地图中
  746 + mapBValue.addOverlay(marker_stargt2);
  747 +
  748 + //跳动的动画
  749 + marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);
  750 +
  751 + }
  752 +
  753 + });
  754 +
  755 + },
  756 +
  757 + /** 系统规划抓去数据 @param lineNameValue:线路名称;i:方向*/
  758 + getBmapStationNames: function (lineNameValue, i, callback) {
  759 +
  760 + var busline = new BMap.BusLineSearch(mapBValue, {
  761 +
  762 + // 设置公交列表查询后的回调函数。参数:rs: BusListResult类型
  763 + onGetBusListComplete: function (BusListResult) {
  764 +
  765 + // 如果不为空
  766 + if (BusListResult) {
  767 +
  768 + //获取第一个公交列表显示到map上
  769 + var fstLine = BusListResult.getBusListItem(i);
  770 +
  771 + /*if(fstLine==undefined){
  772 +
  773 + layer.confirm('系统无法生成该线路【'+lineNameValue+'】的站点与路段!请点击返回选择其它方式规划', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){
  774 +
  775 + layer.closeAll();
  776 +
  777 + if(i==0){
  778 +
  779 + $('#upToolsMobal').show();
  780 +
  781 + }else if(i==1){
  782 +
  783 + $('#downToolsMobal').show();
  784 +
  785 + }
  786 +
  787 + return;
1059 }); 788 });
1060 - label.addEventListener('click', function () {  
1061 - var params = {};  
1062 - params.lineId = stationRouteBegin.stationRouteLine;  
1063 - params.lineCode = stationRouteBegin.stationRouteLIneCode;  
1064 - params.directions = stationRouteBegin.stationRoutedirections;  
1065 - params.stationRouteBegin = stationRouteBegin.stationRouteName;  
1066 - params.stationRouteFinish = stationRouteFinish.stationRouteName; 789 +
  790 + }*/
  791 +
  792 + if (fstLine == undefined) {
  793 +
  794 +
  795 + callback && callback(null);
  796 +
  797 + }
  798 +
  799 + busline.getBusLine(fstLine);
  800 +
  801 + }
  802 +
  803 + },
  804 +
  805 + //设置公交线路查询后的回调函数.参数:rs: BusLine类型
  806 + onGetBusLineComplete: function (BusLine) {
  807 +
  808 + // 如果不为空
  809 + if (BusLine) {
  810 +
  811 + callback && callback(BusLine);
  812 +
  813 + }
  814 +
  815 + }
  816 +
  817 + });
  818 +
  819 + busline.getBusList(lineNameValue);
  820 +
  821 + },
  822 + // 修改站点
  823 + editStation: function (stationRouteId) {
  824 + // $.get("/stationroute/findStationRouteInfo",{"id":stationRouteId},function (route) {
  825 + $.get('edit_select.html', function (m) {
  826 + $(pjaxContainer).append(m);
  827 + $('#edit_select_mobal').trigger('editSelectMobal_show', [WorldsBMap, DrawingManagerObj, GetAjaxData, EditStationObj, LineObj, PublicFunctions, stationArray[stationRouteId]]);
  828 + });
  829 + // });
  830 + },
  831 + addBetweenStationRoad: function (stationRouteId) {
  832 + // 关闭信息窗口
  833 + mapBValue.closeInfoWindow();
  834 + $.get("/stationroute/findStationRouteInfo", {"id": stationRouteId}, function (route) {
  835 + var stationRouteBegin = route[0];
  836 + // 查询下一个站点
  837 + $.get("/stationroute/findDownStationRoute", {
  838 + "lineId": stationRouteBegin.stationRouteLine,
  839 + "direction": stationRouteBegin.stationRoutedirections,
  840 + "stationRouteCode": stationRouteBegin.stationRouteCode
  841 + }, function (stationRoute) {
  842 + var stationRouteFinish = stationRoute[0];
  843 +
  844 + if (stationRouteFinish) {
  845 + var pointBegin = stationRouteBegin.stationJwpoints.split(" ");
  846 + var pointFinish = stationRouteFinish.stationJwpoints.split(" ")
  847 + var sectionList = [];
  848 + // 两个站点的坐标
  849 + var poiOne = new BMap.Point(pointBegin[0], pointBegin[1]);
  850 + var poiTwo = new BMap.Point(pointFinish[0], pointFinish[1]);
  851 + // 路径规划保存按钮
  852 + var label = new BMap.Label("保存路段", {
  853 + offset: new BMap.Size(13, -53)
  854 + });
  855 + label.setStyle({
  856 + color: '#fff',
  857 + background: "url(/pages/base/stationroute/css/img/bg.png)",
  858 + border: '0px solid',
  859 + textAlign: "center",
  860 + height: "28px",
  861 + lineHeight: "26px",
  862 + width: "80px",
  863 + maxWidth: "none"
  864 + });
  865 + label.addEventListener('click', function () {
  866 + var params = {};
  867 + params.lineId = stationRouteBegin.stationRouteLine;
  868 + params.lineCode = stationRouteBegin.stationRouteLIneCode;
  869 + params.directions = stationRouteBegin.stationRoutedirections;
  870 + params.stationRouteBegin = stationRouteBegin.stationRouteName;
  871 + params.stationRouteFinish = stationRouteFinish.stationRouteName;
  872 + layer.confirm('确定保存', {
  873 + btn : [ '路段调整好了','继续调整','退出'], icon: 3, title:'提示'
  874 + ,btn3: function(index, layero){
  875 + PublicFunctions.resjtreeDate(params.lineId,params.directions);
  876 + PublicFunctions.editAChangeCssRemoveDisabled();
  877 + GetAjaxData.getSectionRouteInfo(params.lineId,params.directions,function(data) {
  878 + PublicFunctions.linePanlThree(params.lineId,data,params.directions);
  879 + });
  880 + PublicFunctions.editMapStatusRemove();
  881 + }
  882 + }, function(index, layero){
  883 + layer.close(index);
1067 params.route = $("#routePlanning").val(); 884 params.route = $("#routePlanning").val();
1068 - $.get('doublename_road.html', function(m){ 885 + $.get('doublename_road.html', function (m) {
1069 $(pjaxContainer).append(m); 886 $(pjaxContainer).append(m);
1070 - $('#doublename_road_mobal').trigger('doubleNameRoadMobal_show', [params,WorldsBMap,GetAjaxData,PublicFunctions]); 887 + $('#doublename_road_mobal').trigger('doubleNameRoadMobal_show', [params, WorldsBMap, GetAjaxData, PublicFunctions]);
1071 }); 888 });
  889 + PublicFunctions.editMapStatusRemove();
1072 }); 890 });
1073 - // 路径规划  
1074 - var transit = new BMap.DrivingRoute(mapBValue, {renderOptions: {map: mapBValue,enableDragging : true},onPolylinesSet: searchPolylinesSet});  
1075 - function searchPolylinesSet(results){  
1076 - if (transit.getStatus() == BMAP_STATUS_SUCCESS){  
1077 - var sectionArrayList = [];  
1078 - for (i = 0; i < results.length; i++){  
1079 - sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());  
1080 - }  
1081 - sectionList = sectionArrayList;//JSON.stringify()  
1082 - $("#routePlanning").val(JSON.stringify(sectionArrayList));  
1083 - var pointMap = new Map();  
1084 - pointMap = sectionArrayList[sectionArrayList.length-1];  
1085 - var pointLabel = new BMap.Point(pointMap.lng,pointMap.lat);  
1086 - label.enableMassClear();  
1087 - label.setPosition(pointLabel);  
1088 - mapBValue.addOverlay(label); 891 + });
  892 + // 路径规划
  893 + var transit = new BMap.DrivingRoute(mapBValue, {
  894 + renderOptions: {
  895 + map: mapBValue,
  896 + enableDragging: true
  897 + },
  898 + onPolylinesSet: searchPolylinesSet
  899 + });
  900 +
  901 + function searchPolylinesSet(results) {
  902 + if (transit.getStatus() == BMAP_STATUS_SUCCESS) {
  903 + var sectionArrayList = [];
  904 + for (i = 0; i < results.length; i++) {
  905 + sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());
1089 } 906 }
  907 + sectionList = sectionArrayList;//JSON.stringify()
  908 + $("#routePlanning").val(JSON.stringify(sectionArrayList));
  909 + var pointMap = new Map();
  910 + pointMap = sectionArrayList[sectionArrayList.length - 1];
  911 + var pointLabel = new BMap.Point(pointMap.lng, pointMap.lat);
  912 + label.enableMassClear();
  913 + label.setPosition(pointLabel);
  914 + mapBValue.addOverlay(label);
1090 } 915 }
1091 - transit.search(poiOne,poiTwo);  
1092 - transit.disableAutoViewport();  
1093 - } else {  
1094 - layer.msg("您选择的站点后没有站点了,不能生成站点间路段!")  
1095 - } 916 + }
  917 + transit.search(poiOne, poiTwo);
  918 + transit.disableAutoViewport();
  919 + // 地图编辑状态
  920 + PublicFunctions.editMapStatus();
  921 + } else {
  922 + layer.msg("您选择的站点后没有站点了,不能生成站点间路段!")
  923 + }
1096 924
  925 + });
  926 + });
  927 +
  928 + },
  929 + // 定位路段
  930 + focusSection: function(sectionRoudId) {
  931 + for (var i = 0, p; p = sectionArray[i++];) {
  932 + if (p.data.sectionrouteId == sectionRoudId) {
  933 + WorldsBMap.openSectionInfoWin(p);
  934 + break;
  935 + }
  936 + }
  937 + },
  938 + // 编辑路段
  939 + editSection : function(sectionRoudId) {
  940 + layer.confirm('进入编辑状态', {
  941 + btn : [ '确定','返回' ], icon: 3, title:'提示'
  942 + }, function() {
  943 + PublicFunctions.editMapStatus();
  944 + layer.msg('双击保存路段');
  945 + var p;
  946 + for (var i = 0; p = sectionArray[i++];) {
  947 + if (p.data.sectionrouteId == sectionRoudId) {
  948 + mapBValue.closeInfoWindow();//关闭infoWindow
  949 + p.enableEditing();
  950 + p.setStrokeColor('blue');
  951 + editPolyline = p;
  952 + break;
  953 + }
  954 + }
  955 + p.addEventListener('dblclick', function () {
  956 + /** 设置修改路段集合对象为空 */
  957 + editPolyline = '';
  958 + PublicFunctions.editMapStatusRemove();
  959 + $.get('editsection.html', function(m){
  960 + $('body').append(m);
  961 + $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,p,PublicFunctions]);
  962 + });
  963 + });
  964 + });
  965 + },
  966 + // 添加在路段之后
  967 + addSection : function(stecion) {
  968 + PublicFunctions.editMapStatus();
  969 + // 把数据填充到模版中
  970 + var addSectionHTML = template('add_draw_polyline-temp');
  971 + $('body .mian-portlet-body').append(addSectionHTML);
  972 + //暂停和开始绘制
  973 + $('.draw_polyline_switch>a').on('click', function () {
  974 + var t = $(this).text();
  975 + if(t=='暂停绘制'){
  976 + WorldsBMap.exitDrawStatus();
  977 + $(this).text('开始绘制');
  978 + }
  979 + else{
  980 + WorldsBMap.openDrawStatus();
  981 + $(this).text('暂停绘制');
  982 + }
  983 + });
  984 + // 开启绘制事件
  985 + WorldsBMap.showAddSectionPanel(stecion);
  986 +
  987 + //取消
  988 + $('#addSectionCancelBtn').on('click', function () {
  989 + $('.main_left_panel_m_layer').hide();
  990 + $(this).parents('.buffer_edit_body').parent().remove();
  991 + WorldsBMap.exitDrawStatus();
  992 + PublicFunctions.editMapStatusRemove();
  993 + });
  994 +
  995 + //确定
  996 + $('#addSectionSbmintBtn').on('click', function () {
  997 + var btn = this;
  998 + $('#addSectionSbmintBtn').addClass("disabled");
  999 + var sectionName = $('#sectionNameInput').val();
  1000 + var bsectionVector = $('#bsectionVectorInput').val();
  1001 + var params = {};
  1002 + if(sectionName && bsectionVector) {
  1003 + WorldsBMap.exitDrawStatus();
  1004 + GetAjaxData.getSectionCode(function(sectionCode) {
  1005 + var lineId = stecion.lineId;
  1006 + var dir = stecion.dir;
  1007 + params.lineId = lineId;
  1008 + params.lineCode = stecion.lineCode;
  1009 + params.sectionCode = sectionCode;// 设值路段编码.
  1010 + params.sectionName = sectionName;
  1011 + params.roadCoding = '';
  1012 + params.dbType = 'b';
  1013 + params.bsectionVector = bsectionVector;
  1014 + params.sectionrouteCode = 1;
  1015 + params.sectionTime = 0;
  1016 + params.sectionDistance = 60;
  1017 + params.speedLimit = 0;
  1018 + params.versions = stecion.versions;
  1019 + params.destroy = 0;
  1020 + params.directions = dir;
  1021 + params.descriptions = '';
  1022 + GetAjaxData.sectionSave(params, function (result) {
  1023 + if(result.status =="SUCCESS"){
  1024 + $('.main_left_panel_m_layer').hide();
  1025 + $(btn).parents('.buffer_edit_body').parent().remove();
  1026 + PublicFunctions.editMapStatusRemove();
  1027 + PublicFunctions.resjtreeDate(lineId,dir);
  1028 + PublicFunctions.editAChangeCssRemoveDisabled();
  1029 + GetAjaxData.getSectionRouteInfo(lineId,dir,function(data) {
  1030 + PublicFunctions.linePanlThree(lineId,data,dir);
  1031 + });
  1032 + layer.msg("添加成功!");
  1033 + } else if(result.status =="ERROR") {
  1034 + layer.msg("添加失败!");
  1035 + }
  1036 + });
  1037 + });
  1038 + } else if(sectionName){
  1039 + layer.msg('请填写路段名字!');
  1040 + } else if(bsectionVector){
  1041 + layer.msg('请填先绘制路段!');
  1042 + }
  1043 + setTimeout(function () {
  1044 + $("#addSectionSbmintBtn").removeClass("disabled");
  1045 + },1000);
  1046 + });
  1047 + },
  1048 + // 添加在路段之后
  1049 + addSectionAfter : function(sectionRoudId) {
  1050 + //order = after before;
  1051 + var beforeSection;
  1052 + // 关闭信息窗口
  1053 + mapBValue.closeInfoWindow();
  1054 + PublicFunctions.editMapStatus();
  1055 + // 把数据填充到模版中
  1056 + var addSectionHTML = template('add_draw_polyline-temp',{ 'id': sectionRoudId});
  1057 + $('body .mian-portlet-body').append(addSectionHTML);
  1058 + //暂停和开始绘制
  1059 + $('.draw_polyline_switch>a').on('click', function () {
  1060 + var t = $(this).text();
  1061 + if(t=='暂停绘制'){
  1062 + WorldsBMap.exitDrawStatus();
  1063 + $(this).text('开始绘制');
  1064 + }
  1065 + else{
  1066 + WorldsBMap.openDrawStatus();
  1067 + $(this).text('暂停绘制');
  1068 + }
  1069 + });
  1070 +
  1071 + //取消
  1072 + $('#addSectionCancelBtn').on('click', function () {
  1073 + $('.main_left_panel_m_layer').hide();
  1074 + $(this).parents('.buffer_edit_body').parent().remove();
  1075 + WorldsBMap.exitDrawStatus();
  1076 + PublicFunctions.editMapStatusRemove();
  1077 + });
  1078 + GetAjaxData.getSectionRouteInfoById(sectionRoudId, function(data){
  1079 + WorldsBMap.showAddSectionPanel(data[0]);
  1080 + beforeSection = data[0];
  1081 + });
  1082 +
  1083 + //确定
  1084 + $('#addSectionSbmintBtn').on('click', function () {
  1085 + var btn = this;
  1086 + $('#addSectionSbmintBtn').addClass("disabled");
  1087 + var sectionName = $('#sectionNameInput').val();
  1088 + var params = {};
  1089 + if(sectionName) {
  1090 + WorldsBMap.exitDrawStatus();
  1091 + GetAjaxData.getSectionCode(function(sectionCode) {
  1092 + var lineId = beforeSection.sectionRouteLine
  1093 + var dir = beforeSection.sectionRouteDirections
  1094 + params.lineId = lineId;
  1095 + params.lineCode = beforeSection.sectionRouteLineCode;
  1096 + params.sectionCode = sectionCode;// 设值路段编码.
  1097 + params.sectionName = sectionName;
  1098 + params.roadCoding = '';
  1099 + params.dbType = 'b';
  1100 + params.bsectionVector = $('#bsectionVectorInput').val();
  1101 + params.sectionrouteCode = beforeSection.sectionRouteCode+"_0";
  1102 + params.sectionTime = 0;
  1103 + params.sectionDistance = 60;
  1104 + params.speedLimit = 0;
  1105 + params.versions = beforeSection.sectionVersion;
  1106 + params.destroy = 0;
  1107 + params.directions = dir;
  1108 + params.descriptions = '';
  1109 + GetAjaxData.sectionSave(params, function (result) {
  1110 + if(result.status =="SUCCESS"){
  1111 + $('.main_left_panel_m_layer').hide();
  1112 + $(btn).parents('.buffer_edit_body').parent().remove();
  1113 + PublicFunctions.editMapStatusRemove();
  1114 + PublicFunctions.resjtreeDate(lineId,dir);
  1115 + PublicFunctions.editAChangeCssRemoveDisabled();
  1116 + GetAjaxData.getSectionRouteInfo(lineId,dir,function(data) {
  1117 + PublicFunctions.linePanlThree(lineId,data,dir);
  1118 + });
  1119 + layer.msg("添加成功!");
  1120 + } else if(result.status =="ERROR") {
  1121 + layer.msg("添加失败!");
  1122 + }
  1123 + });
  1124 + });
  1125 + } else {
  1126 + layer.msg('请填写路段名字');
  1127 + }
  1128 + setTimeout(function () {
  1129 + $("#addSectionSbmintBtn").removeClass("disabled");
  1130 + },1000);
  1131 + });
  1132 + },
  1133 + // 撤销站点
  1134 + destroyStation : function(stationRouteId,lineId,dir) {
  1135 + layer.confirm('你确定要撤销此站点吗?', {
  1136 + btn : [ '撤销','返回' ], icon: 3, title:'提示'
  1137 + }, function(){
  1138 + $.post('/stationroute/stationRouteIsDestroy',{'stationRouteId':stationRouteId,destroy:'1'},function(resuntDate) {
  1139 + if (resuntDate.status == 'SUCCESS') {
  1140 + // 弹出添加成功提示消息
  1141 + layer.msg('撤销成功!');
  1142 + } else {
  1143 + // 弹出添加失败提示消息
  1144 + layer.msg('撤销失败!');
  1145 + }
  1146 + // 刷新左边树
  1147 + PublicFunctions.resjtreeDate(lineId,dir);
  1148 + /** 查询路段信息 @param:<Line.id:线路Id;delBatch.dir:方向> @return:data:路段数据 */
  1149 + GetAjaxData.getSectionRouteInfo(lineId,dir,function(data) {
  1150 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;delBatch.dir:方向;data:路段数据> */
  1151 + PublicFunctions.linePanlThree(lineId,data,dir);
  1152 + });
  1153 + });
  1154 + });
  1155 + },
  1156 + // 撤销路段
  1157 + destroySection : function(sectionRoudId,lineId,dir) {
  1158 + layer.confirm('你确定要撤销此路段吗?', {
  1159 + btn : [ '撤销','返回' ], icon: 3, title:'提示'
  1160 + }, function(){
  1161 + $.post('/sectionroute/destroy',{'id': sectionRoudId},function(resuntDate) {
  1162 + if (resuntDate.status == 'SUCCESS') {
  1163 + // 弹出添加成功提示消息
  1164 + layer.msg('撤销成功!');
  1165 + } else {
  1166 + // 弹出添加失败提示消息
  1167 + layer.msg('撤销失败!');
  1168 + }
  1169 + // 刷新左边树
  1170 + PublicFunctions.resjtreeDate(lineId,dir);
  1171 + /** 查询路段信息 @param:<Line.id:线路Id;delBatch.dir:方向> @return:data:路段数据 */
  1172 + GetAjaxData.getSectionRouteInfo(lineId,dir,function(data) {
  1173 + /** 在地图上画出线路走向 @param:<Line.id:线路Id;delBatch.dir:方向;data:路段数据> */
  1174 + PublicFunctions.linePanlThree(lineId,data,dir);
1097 }); 1175 });
1098 }); 1176 });
  1177 + });
  1178 + },
  1179 + // 打开路段信息窗口
  1180 + openSectionInfoWin : function(p) {
  1181 + var section = p.data;
  1182 + var width = WorldsBMap.strGetLength(section.sectionName) * 10;
  1183 + // 信息窗口参数属性
  1184 + var opts = {
  1185 + // 信息窗口宽度
  1186 + width: (width < 200 ? 200 : width),
  1187 + // 信息窗口高度
  1188 + height: 150,
  1189 + //设置不允许信窗发送短息
  1190 + enableMessage: false,
  1191 + //是否开启点击地图关闭信息窗口
  1192 + enableCloseOnClick: false,
  1193 + // 是否开启信息窗口打开时地图自动移动(默认开启)。(自 1.1 新增)
  1194 + enableAutoPan: false
  1195 + };
  1196 + var htm = '<span style="color: #ff8355;font-size: 18px;">' + section.sectionName + '</span>' +
  1197 + '<span class="help-block" >路段编码:' + section.sectionCode + '</span>' +
  1198 + '<span class="help-block" >路段序号:' + section.sectionrouteCode + '</span>' +
  1199 + '<span class="help-block" >版本号&nbsp&nbsp:' + section.versions + '</span>' +
  1200 + '<div >' +
  1201 + '<button class="info_win_btn" id="editStation" onclick="WorldsBMap.editSection(' + section.sectionrouteId + ')">修改</button>' +
  1202 + '<button class="info_win_btn" id="addSectionAfter" onclick="WorldsBMap.addSectionAfter('+section.sectionrouteId+')">添加(之后)</button>' +
  1203 + '<button class="info_win_btn" id="addBetweenStationRoad" onclick="WorldsBMap.destroySection('+ section.sectionrouteId + ','+section.sectionrouteLine+','+section.sectionrouteDirections+')">撤销</button>' +
  1204 + '</div>';
  1205 +
  1206 + // 创建信息窗口
  1207 + var infoWindow_target = new BMap.InfoWindow(htm, opts);
  1208 + // 切割段折线坐标字符串
  1209 + var sectionStr = section.sectionBsectionVector.substring(11, section.sectionBsectionVector.length - 1);
  1210 + // 分割折线坐标字符串
  1211 + var lineArray = sectionStr.split(',');
  1212 + var sectionArray = [];
  1213 + for (var i = 0; i < lineArray.length; i++) {
  1214 + sectionArray.push(new BMap.Point(lineArray[i].split(' ')[0], lineArray[i].split(' ')[1]));
  1215 + }
  1216 + // 计算中间点
  1217 + var index = parseInt(sectionArray.length / 2);
  1218 + var centerPoint = sectionArray[index];
  1219 + //close event
  1220 + infoWindow_target.addEventListener('close', function (e) {
  1221 + p.setStrokeColor("red");
  1222 + road_win_show_p = null;
  1223 + });
  1224 + //open event
  1225 + infoWindow_target.addEventListener('open', function (e) {
  1226 + p.setStrokeColor("#20bd26");
  1227 + road_win_show_p = p;
  1228 + });
  1229 + //开启信息窗口
  1230 + mapBValue.openInfoWindow(infoWindow_target, centerPoint);
  1231 + mapBValue.setZoom(18);
  1232 + mapBValue.setCenter(centerPoint);
  1233 + },
  1234 + /**
  1235 + * 绘制新增路段
  1236 + * @param section
  1237 + */
  1238 + showAddSectionPanel : function (section) {
  1239 + var point;
  1240 + if(section){
  1241 + var sectionBsectionVectorStr = section.sectionBsectionVector;
  1242 + var line = sectionBsectionVectorStr.substring(11, sectionBsectionVectorStr.length - 1),
  1243 + points = line.split(','),
  1244 + pointStr = points[points.length-1].split(' ');
  1245 +
  1246 + point = new BMap.Point(pointStr[0], pointStr[1]);
  1247 + }
  1248 +
  1249 + mapBValue.centerAndZoom(point, 18);
  1250 +
  1251 + //开启鼠标绘制
  1252 + drawingManager = new BMapLib.DrawingManager(mapBValue, {
  1253 + polylineOptions: styleOptions
  1254 + });
  1255 +
  1256 + drawingManager.open();
  1257 + //drawingManager.enableCalculate();
  1258 + drawingManager.setDrawingMode('polyline');
  1259 +
  1260 + //绘制完成
  1261 + drawingManager.addEventListener('polylinecomplete', function (e) {
  1262 + console.log('eee', e, e.getPath());
  1263 + drawingManager.close();
  1264 +
  1265 + var polyline = new BMap.Polyline(e.getPath(), {strokeWeight: 7, strokeColor: 'blue', strokeOpacity: 0.7});
  1266 +
  1267 + mapBValue.removeOverlay(e);
  1268 + mapBValue.addOverlay(polyline);
  1269 + polyline.enableEditing();
  1270 +
  1271 + editPolyline = polyline;
  1272 + var sectionData = e.getPath();// 获取折线坐标集合
  1273 + $('#bsectionVectorInput').val(JSON.stringify(sectionData));
  1274 + });
  1275 + },
  1276 + exitDrawStatus : function () {
  1277 + if (drawingManager) {
  1278 + WorldsBMap.clearOtherOverlay();
  1279 + drawingManager.close();
  1280 + }
  1281 + },
  1282 + openDrawStatus : function () {
  1283 + if (drawingManager) {
  1284 + WorldsBMap.clearOtherOverlay();
  1285 + drawingManager.open();
  1286 + }
  1287 + },
  1288 + /** 清楚无需要的覆盖物(非站点/路段数据源)*/
  1289 + clearOtherOverlay : function () {
  1290 + var all = mapBValue.getOverlays();
  1291 + for (var i = 0, obj; obj = all[i++];) {
  1292 + if (obj.ct_source && obj.ct_source == '1')
  1293 + continue;
  1294 + mapBValue.removeOverlay(obj);
  1295 + }
  1296 + },
  1297 + clearMarkAndOverlays: function () {
  1298 + // 清楚地图覆盖物
  1299 + mapBValue.clearOverlays();
  1300 + mapBValue.removeOverlay();
  1301 + },
  1302 + clearMark: function () {
  1303 + // 清楚地图覆盖物
  1304 + mapBValue.removeOverlay();
  1305 + },
  1306 + strGetLength: function (str) {
  1307 + return str.replace(/[\u0391-\uFFE5]/g, "aa").length; //先把中文替换成两个字节的英文,在计算长度
  1308 + }
  1309 + }
  1310 +
  1311 + return Bmap;
1099 1312
1100 - },  
1101 -  
1102 - clearMarkAndOverlays : function() {  
1103 -  
1104 - // 清楚地图覆盖物  
1105 - mapBValue.clearOverlays();  
1106 -  
1107 - mapBValue.removeOverlay();  
1108 -  
1109 - }  
1110 -  
1111 - }  
1112 -  
1113 - return Bmap;  
1114 -  
1115 }(); 1313 }();
1116 \ No newline at end of file 1314 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/js/stationroute-list-reload.js
@@ -80,5 +80,7 @@ $(function(){ @@ -80,5 +80,7 @@ $(function(){
80 }); 80 });
81 81
82 } 82 }
83 - 83 + $('.green-seagreen dropdown-toggle').click(function(){
  84 + $('.dropdown-menu').css("display", "block");
  85 + });
84 }); 86 });
85 \ No newline at end of file 87 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/js/stationroute-list-treedata.js
@@ -22,44 +22,7 @@ var StationTreeData = function(){ @@ -22,44 +22,7 @@ var StationTreeData = function(){
22 EditSectionObj.setEitdSection({}); 22 EditSectionObj.setEitdSection({});
23 23
24 } 24 }
25 -  
26 - function upIsEidtStauts(shapesTypeT,chaildredType,data) {  
27 -  
28 - // 关闭弹出层  
29 - layer.closeAll();  
30 -  
31 - // 选中的是站点  
32 - if(chaildredType =='station') {  
33 -  
34 - // 如果是圆  
35 - if(shapesTypeT =='r') {  
36 -  
37 - // 百度地图画圆  
38 - WorldsBMap.pointsCircle(data);  
39 -  
40 - // 如果是多边形  
41 - }else if(shapesTypeT == 'd') {  
42 -  
43 - // 百度地图画多边形  
44 - WorldsBMap.pointsPolygon(data);  
45 -  
46 - }  
47 -  
48 - // 选中的是路段  
49 - }else if(chaildredType =='section'){  
50 - // 路段矢量坐标点  
51 - var polylineArray = [data];  
52 - // 路段方向  
53 - var dire_ = data.sectionrouteDirections;  
54 - // 线路ID  
55 - var Line = LineObj.getLineObj();  
56 - /*// 百度地图画路段  
57 - PublicFunctions.linePanlThree(Line.id,polylineArray,dire_);*/  
58 - // 百度地图画路段  
59 - PublicFunctions.treeSectionClick(Line.id,polylineArray,dire_);  
60 - }  
61 - }  
62 - 25 +
63 function TreeOnclickEvent(treeOjb) { 26 function TreeOnclickEvent(treeOjb) {
64 if(treeOjb==null) 27 if(treeOjb==null)
65 return; 28 return;
@@ -70,64 +33,15 @@ var StationTreeData = function(){ @@ -70,64 +33,15 @@ var StationTreeData = function(){
70 } 33 }
71 // 获取数据 34 // 获取数据
72 var stationData = treeOjb[0].original; 35 var stationData = treeOjb[0].original;
73 - // 站点范围类型  
74 - var shapesType_ = stationData.stationShapesType;  
75 - // 选中的节点类型  
76 - var chaildredType_ = stationData.chaildredType;  
77 - // 选中的其它节点  
78 - if(chaildredType_ ==null){  
79 - return;  
80 - }  
81 - var edtsta = EditStationObj.getEitdStation();  
82 - var edtste = EditSectionObj.getEitdSection();  
83 - if(!$.isEmptyObject(edtsta)){  
84 - var stationName = edtsta.stationStationName;  
85 - var txType = edtsta.stationShapesType;  
86 - // 是否继续弹出层  
87 - layer.confirm('您正处于站点【'+stationName+'】的编辑状态!是否退出!', {  
88 - btn : [ '确认并退出', '返回并继续' ]  
89 - }, function(index) {  
90 - DrawingManagerObj.closeDrawingManager();  
91 - PublicFunctions.editAChangeCssRemoveDisabled();  
92 - // 关闭弹出层  
93 - layer.close(index);  
94 - WorldsBMap.clearMarkAndOverlays();  
95 - if(txType=='r'){  
96 - WorldsBMap.pointsCircle(edtsta);  
97 - }else if(txType=='d') {  
98 - // 百度地图画多边形  
99 - WorldsBMap.pointsPolygon(edtsta);  
100 - }  
101 - parmasObj();  
102 - },function(){  
103 - // 关闭弹出层  
104 - layer.closeAll();  
105 - return false;  
106 - });  
107 -  
108 - }else if(!$.isEmptyObject(edtste)) {  
109 - var sectionName = edtste.sectionName;  
110 - // 是否继续弹出层  
111 - layer.confirm('您正处于路段【'+sectionName+'】的编辑状态!是否退出!', {  
112 - btn : [ '确认并退出', '返回并继续' ]  
113 - }, function(index) {  
114 - // 关闭弹出层  
115 - layer.close(index);  
116 - PublicFunctions.editAChangeCssRemoveDisabled();  
117 - var polylineArray_ = [edtste];  
118 - WorldsBMap.clearMarkAndOverlays();  
119 - // 百度地图画路段  
120 - PublicFunctions.treeSectionClick(Line.id,polylineArray,dire_);  
121 - parmasObj();  
122 -  
123 - },function(){  
124 - // 关闭弹出层  
125 - layer.closeAll();  
126 - return false;  
127 - });  
128 - }else {  
129 - WorldsBMap.clearMarkAndOverlays();  
130 - upIsEidtStauts(shapesType_,chaildredType_,stationData); 36 + // 选中的节点类型
  37 + var chaildredType_ = stationData.chaildredType;
  38 +
  39 + if(chaildredType_ == "section") {
  40 + WorldsBMap.focusSection(stationData.sectionrouteId);
  41 + } else if(chaildredType_ == "station") {
  42 + WorldsBMap.openStationInfoWin(stationData);
  43 + } else if(chaildredType_ == "addSection") {
  44 + WorldsBMap.addSection(stationData);
131 } 45 }
132 } 46 }
133 var stationTree = { 47 var stationTree = {
@@ -251,7 +165,11 @@ var StationTreeData = function(){ @@ -251,7 +165,11 @@ var StationTreeData = function(){
251 tree.settings.core.data = treeDateJson; 165 tree.settings.core.data = treeDateJson;
252 // 刷新上行树 166 // 刷新上行树
253 tree.refresh(); 167 tree.refresh();
254 - }, 168 + // 展开树
  169 + setTimeout(function () {
  170 + tree.open_all();
  171 + },500);
  172 + },
255 dwonreloadeTree : function (treeDateJson) { 173 dwonreloadeTree : function (treeDateJson) {
256 // 获取下行树 174 // 获取下行树
257 var tree = $.jstree.reference('#station_Down_tree'); 175 var tree = $.jstree.reference('#station_Down_tree');
@@ -259,6 +177,10 @@ var StationTreeData = function(){ @@ -259,6 +177,10 @@ var StationTreeData = function(){
259 tree.settings.core.data = treeDateJson; 177 tree.settings.core.data = treeDateJson;
260 // 刷行下行树 178 // 刷行下行树
261 tree.refresh(); 179 tree.refresh();
  180 + // 展开树
  181 + setTimeout(function () {
  182 + tree.open_all();
  183 + },500);
262 } 184 }
263 } 185 }
264 186
src/main/resources/static/pages/base/stationroute/list.html
1 <link href="/pages/base/stationroute/css/bmap_base.css" rel="stylesheet" type="text/css" /> 1 <link href="/pages/base/stationroute/css/bmap_base.css" rel="stylesheet" type="text/css" />
2 -<div class="portlet-body"> 2 +<link rel="stylesheet" href="/assets/plugins/layer-v2.4/layer/skin/layer.css">
  3 +
  4 +<div class="mian-portlet-body">
3 <!-- 地图 --> 5 <!-- 地图 -->
4 <div id="bmap_basic" class="bmaps"></div> 6 <div id="bmap_basic" class="bmaps"></div>
  7 + <!-- 搜索框 -->
  8 +
  9 + <div class="search_panel">
  10 + <div class="search_input_panel">
  11 + <input class="search_input" type="text" placeholder="输入位置搜索" id="searchInput">
  12 + <span class="fa fa-close fa-lg clear hide" aria-hidden="true"></span >
  13 + </div>
  14 + <div class="search_button_panel">
  15 + <button class="fa fa-search fa-lg search_button" >
  16 + </button >
  17 + </div>
  18 + </div>
  19 +
  20 + <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;z-index: 199;"></div>
5 <!-- 路径规划路段 --> 21 <!-- 路径规划路段 -->
6 <input class="hand" id="routePlanning" /> 22 <input class="hand" id="routePlanning" />
7 - <div class="portlet box protlet-box">  
8 - <!-- 左边标题栏 --> 23 + <div class="portlet box protlet-box">
  24 + <div class="protlet-box-layer"></div>
  25 + <!-- 左边标题栏 -->
9 <div class="portlet-title" style="background-color:#12527f;"> 26 <div class="portlet-title" style="background-color:#12527f;">
10 <div class="caption"> 27 <div class="caption">
11 <!-- 途径站点 --> 28 <!-- 途径站点 -->
@@ -51,7 +68,7 @@ @@ -51,7 +68,7 @@
51 <li> 68 <li>
52 <a href="javascript:;" id="addUpStation"><i class="fa fa-plus"></i> 添加站点</a> 69 <a href="javascript:;" id="addUpStation"><i class="fa fa-plus"></i> 添加站点</a>
53 </li> 70 </li>
54 - <li class="divider"> </li> 71 + <!--<li class="divider"> </li>-->
55 <!--<li> 72 <!--<li>
56 <a href="javascript:;" id="editUpStation"><i class="fa fa-pencil"></i> 修改站点</a> 73 <a href="javascript:;" id="editUpStation"><i class="fa fa-pencil"></i> 修改站点</a>
57 </li>--> 74 </li>-->
@@ -59,7 +76,11 @@ @@ -59,7 +76,11 @@
59 <li> 76 <li>
60 <a href="javascript:;" id="deleteUpStation"><i class="fa fa-close"></i> 撤销站点</a> 77 <a href="javascript:;" id="deleteUpStation"><i class="fa fa-close"></i> 撤销站点</a>
61 </li> 78 </li>
62 - <li class="divider"> </li> 79 + <li class="divider"> </li>
  80 + <!--<li>
  81 + <a href="javascript:;" id="addUpSection"><i class="fa fa-plus"></i> 添加路段</a>
  82 + </li>
  83 + <li class="divider"> </li>-->
63 <li> 84 <li>
64 <a href="javascript:;" id="batchUpDelete"><i class="fa fa-trash-o"></i> 批量撤销</a> 85 <a href="javascript:;" id="batchUpDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>
65 </li> 86 </li>
@@ -75,10 +96,10 @@ @@ -75,10 +96,10 @@
75 <li> 96 <li>
76 <a href="javascript:;" id="quoteDown"><i class="fa fa-long-arrow-down"></i> 引用下行路段</a> 97 <a href="javascript:;" id="quoteDown"><i class="fa fa-long-arrow-down"></i> 引用下行路段</a>
77 </li> 98 </li>
78 - <li class="divider"> </li>  
79 - <!-- <li>  
80 - <a href="javascript:;" id="editUplineTrend"><i class="fa fa-edit"></i> 编辑走向</a>  
81 - </li> --> 99 + <!-- <li class="divider"> </li>
  100 + <!-- <li>
  101 + <a href="javascript:;" id="editUplineTrend"><i class="fa fa-edit"></i> 编辑走向</a>
  102 + </li> -->
82 <!-- <li> 103 <!-- <li>
83 <a href="javascript:;" id="createUsingSingle"><i class="fa fa-edit"></i> 生成行单</a> 104 <a href="javascript:;" id="createUsingSingle"><i class="fa fa-edit"></i> 生成行单</a>
84 </li> --> 105 </li> -->
@@ -151,7 +172,7 @@ @@ -151,7 +172,7 @@
151 <li> 172 <li>
152 <a href="javascript:;" id="addDownStation"><i class="fa fa-plus"></i> 添加站点</a> 173 <a href="javascript:;" id="addDownStation"><i class="fa fa-plus"></i> 添加站点</a>
153 </li> 174 </li>
154 - <li class="divider"> </li> 175 + <!--<li class="divider"> </li>-->
155 <!--<li> 176 <!--<li>
156 <a href="javascript:;" id="editDownStation"><i class="fa fa-pencil"></i> 修改站点</a> 177 <a href="javascript:;" id="editDownStation"><i class="fa fa-pencil"></i> 修改站点</a>
157 </li>--> 178 </li>-->
@@ -159,7 +180,11 @@ @@ -159,7 +180,11 @@
159 <li> 180 <li>
160 <a href="javascript:;" id="deleteDownStation"><i class="fa fa-close"></i> 撤销站点</a> 181 <a href="javascript:;" id="deleteDownStation"><i class="fa fa-close"></i> 撤销站点</a>
161 </li> 182 </li>
162 - <li class="divider"> </li> 183 + <li class="divider"> </li>
  184 + <!--<li>
  185 + <a href="javascript:;" id="addDownSection"><i class="fa fa-plus"></i> 添加路段</a>
  186 + </li>
  187 + <li class="divider"> </li>-->
163 <li> 188 <li>
164 <a href="javascript:;" id="batchDownDelete"><i class="fa fa-trash-o"></i> 批量撤销</a> 189 <a href="javascript:;" id="batchDownDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>
165 </li> 190 </li>
@@ -253,4 +278,111 @@ @@ -253,4 +278,111 @@
253 <!-- reload事件 --> 278 <!-- reload事件 -->
254 <script src="/pages/base/stationroute/js/stationroute-list-reload.js"></script> 279 <script src="/pages/base/stationroute/js/stationroute-list-reload.js"></script>
255 <!-- 事件监听 --> 280 <!-- 事件监听 -->
256 -<script src="/pages/base/stationroute/js/stationroute-list-events.js"></script>  
257 \ No newline at end of file 281 \ No newline at end of file
  282 +<script src="/pages/base/stationroute/js/stationroute-list-events.js"></script>
  283 +
  284 +<script id="add_draw_polyline-temp" type="text/html">
  285 + <div class="add_road_search_point_wrap ">
  286 + <div class="buffer_edit_body" >
  287 + <div class="_title">绘制路段</div>
  288 + <div class="form-horizontal" id="add_station_form">
  289 + <input type="hidden" value="{{id}}" name="id">
  290 + <input type="hidden" id="bsectionVectorInput"> <!--路段-->
  291 +
  292 + <div class="form-group">
  293 + <div class="col-md-12">
  294 + <input type="text" class="input-medium" name="sectionName" id="sectionNameInput" placeholder="路段名">
  295 + </div>
  296 + </div>
  297 +
  298 + <div class="form-group">
  299 + <div class="col-md-5">
  300 + <span class="draw_polyline_switch"><a>暂停绘制</a></span>
  301 + </div>
  302 + <div class="col-md-6 btns">
  303 + <button class="sbmint-btn btn-sm" id="addSectionSbmintBtn">确定</button>
  304 + <button class="cancel-btn btn-sm" id="addSectionCancelBtn">取消</button>
  305 + </div>
  306 + </div>
  307 + </div>
  308 + </div>
  309 + </div>
  310 +</script>
  311 +
  312 +<script type="text/javascript">
  313 + setTimeout(function () {
  314 + // 百度地图API功能
  315 + function G(id) {
  316 + return document.getElementById(id);
  317 + }
  318 +
  319 + var myMap = WorldsBMap.getmapBValue();
  320 +
  321 + var ac = new BMap.Autocomplete( //建立一个自动完成的对象
  322 + {"input" : "searchInput"
  323 + ,"location" : myMap
  324 + });
  325 +
  326 + ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件
  327 + var str = "";
  328 + var _value = e.fromitem.value;
  329 + var value = "";
  330 + if (e.fromitem.index > -1) {
  331 + value = _value.province + _value.city + _value.district + _value.street + _value.business;
  332 + }
  333 + str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;
  334 +
  335 + value = "";
  336 + if (e.toitem.index > -1) {
  337 + _value = e.toitem.value;
  338 + value = _value.province + _value.city + _value.district + _value.street + _value.business;
  339 + }
  340 + str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
  341 + G("searchResultPanel").innerHTML = str;
  342 + });
  343 +
  344 + var myValue;
  345 + ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
  346 + var _value = e.item.value;
  347 + myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
  348 + G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
  349 +
  350 + setPlace();
  351 + });
  352 +
  353 + function setPlace(){
  354 + // myMap.clearOverlays(); //清除地图上所有覆盖物
  355 + WorldsBMap.clearOtherOverlay();
  356 + function myFun(){
  357 + var pp = local.getResults().getPoi(0) == undefined? null:local.getResults().getPoi(0).point;
  358 + if(pp) {
  359 + myMap.centerAndZoom(pp, 20);
  360 + myMap.addOverlay(new BMap.Marker(pp)); //添加标注
  361 + } else {
  362 + layer.msg('找不到您输入的位置!')
  363 + }
  364 + }
  365 + var local = new BMap.LocalSearch(myMap, { //智能搜索
  366 + onSearchComplete: myFun
  367 + });
  368 + local.search(myValue);
  369 + }
  370 + $("#searchInput").on('input propertychange change', function () {
  371 + if($("#searchInput").val() != null && $("#searchInput").val() != "")
  372 + $('.search_panel .clear').removeClass('hide');
  373 + else {
  374 + WorldsBMap.clearOtherOverlay();
  375 + $('.search_panel .clear').addClass('hide');
  376 + }
  377 + });
  378 +
  379 + $('.search_panel .clear').on('click',function () {
  380 + WorldsBMap.clearOtherOverlay();
  381 + $("#searchInput").val('');
  382 + $("#searchInput").change();
  383 + });
  384 + $('.search_panel .search_button').on('click',function () {
  385 + myValue = $("#searchInput").val();
  386 + setPlace();
  387 + });
  388 + },1000);
  389 +</script>
258 \ No newline at end of file 390 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/station_tabledate.html
@@ -56,8 +56,8 @@ @@ -56,8 +56,8 @@
56 </div> 56 </div>
57 </div> 57 </div>
58 <div class="modal-footer"> 58 <div class="modal-footer">
59 - <button type="button" class="btn default" data-dismiss="modal">取消</button>  
60 <button type="button" class="btn btn-primary" id="stationTabledatenextButton">确定</button> 59 <button type="button" class="btn btn-primary" id="stationTabledatenextButton">确定</button>
  60 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
61 </div> 61 </div>
62 </div> 62 </div>
63 </div> 63 </div>
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalScheduleObj.js
1 -/**  
2 - * 内部行车计划对象。  
3 - * @constructor  
4 - */  
5 -var InternalScheduleObj = function(paramObj, lpArray, factory) {  
6 - // 参数对象  
7 - var _paramObj = paramObj;  
8 - // 外部的路牌数组  
9 - var _lpArray = lpArray;  
10 - // 工厂对象  
11 - var _factory = factory;  
12 -  
13 - //------------------ 初始化方法1,以及计算关联的内部变量 -----------------//  
14 - var _qIsUp; // 每一圈是上行开始还是下行开始  
15 - var _qCount = 0; // 总的圈数  
16 - var _internalLpArray = []; // 内部对象数组  
17 - var _aBxDesc = [ // 各种班型描述(班型名称,平均工时,平均需要的班次数,平均工时)  
18 - {'sType':'六工一休', 'fHoursV':6.66, 'fBcCount': 0, 'fAverTime': 0},  
19 - {'sType':'五工一休', 'fHoursV':6.85, 'fBcCount': 0, 'fAverTime': 0},  
20 - {'sType':'四工一休', 'fHoursV':7.14, 'fBcCount': 0, 'fAverTime': 0},  
21 - {'sType':'三工一休', 'fHoursV':7.61, 'fBcCount': 0, 'fAverTime': 0},  
22 - {'sType':'二工一休', 'fHoursV':8.57, 'fBcCount': 0, 'fAverTime': 0},  
23 - {'sType':'一工一休', 'fHoursV':11.42, 'fBcCount': 0, 'fAverTime': 0},  
24 - {'sType':'五工二休', 'fHoursV':7.99, 'fBcCount': 0, 'fAverTime': 0},  
25 - {'sType':'无工休', 'fHoursV':5.43, 'fBcCount': 0, 'fAverTime': 0}  
26 - ];  
27 -  
28 - var _fnInitFun1 = function() { // 初始化方法1  
29 - console.log("//---------------- 行车计划,初始化方法1 start ----------------//");  
30 -  
31 - //----------------------- 1、确定上标线的方向,圈的方向 -------------------//  
32 -  
33 - // 确定_qIsUp,哪个方向的首班车晚就用哪个  
34 - _qIsUp = _paramObj.getUpFirstDTimeObj().isBefore(  
35 - _paramObj.getDownFirstDTimeObj()) ? false : true;  
36 - // 上标线开始时间,就是方向的首班车时间  
37 - var st = _qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();  
38 - // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向  
39 - var et;  
40 - var et_IsUp;  
41 - if (_paramObj.getUpLastDtimeObj().isBefore(  
42 - _paramObj.getDownLastDTimeObj())) {  
43 - et = _paramObj.getDownLastDTimeObj();  
44 - et_IsUp = false;  
45 - } else {  
46 - et = _paramObj.getUpLastDtimeObj();  
47 - et_IsUp = true;  
48 - }  
49 -  
50 - //------------------------ 2、计算总共有多少圈 ------------------------//  
51 -  
52 - // 以开始时间,结束时间,构造上标线用连班班次发车时间  
53 - var bcFcsjArrays = []; // 班次发车时间对象数组  
54 - var bcArsjArrays = []; // 班次到达时间对象数组  
55 - var isUp = _qIsUp; // 方向  
56 - var bcCount = 1; // 班次数  
57 -  
58 - var _kssj = st; // 开始时间  
59 - var _bcsj = paramObj.calcuTravelTime(_kssj, isUp); // 班次历时  
60 - var _arrsj = paramObj.addMinute(_kssj, _bcsj); // 到达时间  
61 - var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj); // 停站时间  
62 -  
63 - do {  
64 - bcFcsjArrays.push(_kssj);  
65 - bcArsjArrays.push(_arrsj);  
66 -  
67 - _kssj = paramObj.addMinute(_kssj, _bcsj + _stoptime);  
68 - _bcsj = paramObj.calcuTravelTime(_kssj, isUp);  
69 - _arrsj = paramObj.addMinute(_kssj, _bcsj);  
70 - _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj);  
71 -  
72 - bcCount ++;  
73 - isUp = !isUp;  
74 - } while(_kssj.isBefore(et));  
75 - bcCount--; // 因为先做do,所以总的班次要减1  
76 - //if (bcCount > 0 && bcArsjArrays[bcCount - 1].isAfter(et)) {  
77 - // // 如果最后一个班次的到达时间超过结束时间,也要去除  
78 - // bcFcsjArrays.splice(bcCount - 1, 1);  
79 - // bcArsjArrays.splice(bcCount - 1, 1);  
80 - // bcCount--;  
81 - //}  
82 - var _qCount_p1 = Math.floor(bcCount / 2); // 2个班次一圈  
83 - var _qCount_p2 = bcCount % 2; // 余下的1个班次也算一圈  
84 -  
85 - // 利用连班数组计算圈数  
86 - _qCount = 1; // 前面加1圈,补中标线的班次  
87 - _qCount += _qCount_p1;  
88 - _qCount += _qCount_p2;  
89 -  
90 - // 计算最后是不是还要补一圈  
91 - if (_qCount > 1) { // 总的圈数就1圈,没必要加了(其实是不可能的,除非参数里问题)  
92 - if (_qCount_p2 == 0) { // 没有余下班次,整数圈数  
93 - // 最后一个班次的方向一定和开始的方向相反,如:上-下,上-下,上-下,一共三圈,最后一个班次为下行  
94 - // 判定最后一个班次的方向和上标线判定结束时间的班次方向是否一致  
95 - if (!_qIsUp == et_IsUp) {  
96 - // 一致不用加圈数  
97 - } else {  
98 - // 不一致需要加圈补最后一个结束时间班次  
99 - _qCount ++;  
100 - }  
101 - } else {  
102 - // 有余下的圈数,最后要不补的班次不管上行,下行都在这一圈里  
103 - // 不需要在补圈数了  
104 - }  
105 - }  
106 -  
107 - //------------------------ 3、根据路牌数,圈数创建路牌对象 ----------------------//  
108 -  
109 - // 创建内部的路牌数组,并把之前的连班路牌添加进上标线路牌中  
110 - var i;  
111 - for (i = 0; i < _lpArray.length; i++) {  
112 - _internalLpArray.push(new InternalLpObj(_lpArray[i], _qCount, _qIsUp));  
113 - }  
114 - // 初始化上标线,从第1圈开始  
115 - _internalLpArray[0].initDataFromTimeToTime(bcFcsjArrays[0], et, _qIsUp, 1, _paramObj, _factory);  
116 -  
117 - // 以上标线为基础,计算各种班型工时对应的圈数、班次数  
118 - var aBcArray = _internalLpArray[0].getBcArray();  
119 - aBcArray[0].fnSetIsFirstBc(true); // 设置首班班次标识  
120 -  
121 - if (aBcArray.length % 2 != 0) { // 不能整除2,去除一个班次计算  
122 - aBcArray.splice(aBcArray.length - 1, 1);  
123 - }  
124 -  
125 - // 午饭吃饭时间  
126 - var iLTime = _paramObj.fnGetLunchTime();  
127 - // 晚饭吃饭时间  
128 - var iDTime = _paramObj.fnGetDinnerTime();  
129 - // 出场时间  
130 - var iOutTime = _qIsUp ? _paramObj.getUpOutTime() : _paramObj.getDownOutTime();  
131 - // 进场时间  
132 - var iInTime = _qIsUp ? _paramObj.getDownInTime() : _paramObj.getUpInTime();  
133 - // 例保时间  
134 - var iBTime = _paramObj.getLbTime();  
135 -  
136 - var sum = 0; // 总班次时间  
137 - for (i = 0; i < aBcArray.length; i++) {  
138 - sum += aBcArray[i].getBcTime() + aBcArray[i].getStopTime();  
139 - }  
140 - sum += iLTime; // 加午饭时间  
141 - sum += iDTime; // 加晚饭时间  
142 - for (i = 0; i < _aBxDesc.length; i++) {  
143 - _aBxDesc[i].fAverTime = sum / (aBcArray.length / 2); // 平均周转时间不算进出场,例保时间  
144 -  
145 - // 计算5休2的班次数(双进出场,4个例保)  
146 - if (i == 6) {  
147 - _aBxDesc[i].fQCount =  
148 - (_aBxDesc[i].fHoursV * 60 - iOutTime * 2 - iInTime * 2 - iBTime * 4) /  
149 - _aBxDesc[i].fAverTime;  
150 - _aBxDesc[i].fBcCount = _aBxDesc[i].fQCount * 2;  
151 - } else { // 进出场,2个例保  
152 - _aBxDesc[i].fQCount =  
153 - (_aBxDesc[i].fHoursV * 60 - iOutTime - iInTime - iBTime * 2) /  
154 - _aBxDesc[i].fAverTime;  
155 - _aBxDesc[i].fBcCount = _aBxDesc[i].fQCount * 2;  
156 - }  
157 - }  
158 -  
159 -  
160 - // 在第一个班次之前再添加一个模拟班次,用于中标线的作用  
161 - // 那一圈必定是低谷,而且圈索引0,班次索引1,暂时标记,最后删除  
162 - var iFirstStopTime =  
163 - _paramObj.fnCalcuFixedStopNumber(  
164 - _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -10),  
165 - _qIsUp  
166 - );  
167 - var iXXTime = _qIsUp ? _paramObj.getDownTroughTime() : _paramObj.getUpTroughTime();  
168 - var oFlagBc = _factory.createBcObj( // 标记班次  
169 - _internalLpArray[0],  
170 - "normal",  
171 - !_qIsUp,  
172 - 1,  
173 - _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -(iFirstStopTime + iXXTime)),  
174 - _paramObj  
175 - );  
176 - oFlagBc.fnSetDelFlag(true); // 标记了删除记号  
177 -  
178 - _internalLpArray[0].setBc(0, 1, oFlagBc);  
179 -  
180 - // 在最后一圈也补上一个或者2个模拟班次,暂时标记,最后需要删除  
181 - var aMaxBcIndex = _internalLpArray[0].getMaxBcObjPosition();  
182 - if (aMaxBcIndex[0] == _qCount - 1) { // 可能加半圈  
183 - oFlagBc = _factory.createBcObj( // 标记班次  
184 - _internalLpArray[0],  
185 - "normal",  
186 - !_qIsUp,  
187 - 1,  
188 - _paramObj.addMinute(  
189 - _internalLpArray[0].getBc(_qCount - 1, 0).getArrTimeObj(),  
190 - _internalLpArray[0].getBc(_qCount - 1, 0).getStopTime()),  
191 - _paramObj  
192 - );  
193 - oFlagBc.fnSetDelFlag(true); // 标记了删除记号  
194 - _internalLpArray[0].setBc(_qCount - 1, 1, oFlagBc);  
195 -  
196 - } else { // 加完整的一圈  
197 - oFlagBc = _factory.createBcObj( // 标记班次  
198 - _internalLpArray[0],  
199 - "normal",  
200 - _qIsUp,  
201 - 1,  
202 - _paramObj.addMinute(  
203 - _internalLpArray[0].getBc(_qCount - 2, 1).getArrTimeObj(),  
204 - _internalLpArray[0].getBc(_qCount - 2, 1).getStopTime()),  
205 - _paramObj  
206 - );  
207 - oFlagBc.fnSetDelFlag(true); // 标记了删除记号  
208 - _internalLpArray[0].setBc(_qCount - 1, 0, oFlagBc);  
209 -  
210 - oFlagBc = _factory.createBcObj( // 标记班次  
211 - _internalLpArray[0],  
212 - "normal",  
213 - !_qIsUp,  
214 - 1,  
215 - _paramObj.addMinute(  
216 - _internalLpArray[0].getBc(_qCount - 1, 0).getArrTimeObj(),  
217 - _internalLpArray[0].getBc(_qCount - 1, 0).getStopTime()),  
218 - _paramObj  
219 - );  
220 - oFlagBc.fnSetDelFlag(true); // 标记了删除记号  
221 - _internalLpArray[0].setBc(_qCount - 1, 1, oFlagBc);  
222 -  
223 - }  
224 -  
225 - console.log("上行首班车时间:" + _paramObj.getUpFirstDTimeObj().format("HH:mm") +  
226 - "上行末班车时间:" + _paramObj.getUpLastDtimeObj().format("HH:mm"));  
227 - console.log("下行首班车时间:" + _paramObj.getDownFirstDTimeObj().format("HH:mm") +  
228 - "下行末班车时间:" + _paramObj.getDownLastDTimeObj().format("HH:mm"));  
229 - console.log("总共计算的圈数:" + _qCount);  
230 - console.log("圈的方向isUP:" + _qIsUp);  
231 - console.log("班型描述(以下):");  
232 - console.log(_aBxDesc);  
233 - console.log("所有路牌间隔描述(以下):");  
234 - for (i = 0; i < _internalLpArray.length; i++) {  
235 - console.log(_internalLpArray[i]._$_aVerticalIntervalTime);  
236 - }  
237 - console.log("//---------------- 行车计划,初始化方法1 end ----------------//");  
238 -  
239 - };  
240 -  
241 - //------------------ 初始化方法2,以及计算关联的内部变量 ----------------//  
242 - var _approximate_zgfQIndex; // 预估早高峰车辆从第几圈开始全部发出  
243 - var _approximate_zgfBIndex; // 预估早高峰车辆从第几圈第几个班次开始全部发出(上行或下行)  
244 - var _approximate_wgfQIndex; // 预估晚高峰车辆从第几圈开始全部发出  
245 - var _approximate_wgfBIndex; // 预估晚高峰车辆从第几圈第几个班次开始全部发出(上行或下行)  
246 -  
247 - var _fnInitFun2 = function() { // 初始化方法2  
248 - console.log("//---------------- 行车计划,初始化方法2 start ----------------//");  
249 -  
250 - //------------------------ 1、计算车辆总数 ------------------------//  
251 - // 是用高峰上行周转时间除以高峰平均间隔得到的  
252 - // 这样算还算合理,车辆不多不少,待以后有新的算法再修正  
253 - var iClCount = _paramObj.calcuClzx();  
254 -  
255 - //------------------------ 2、计算所有路牌的发车在各个圈中的间隔 --------------------//  
256 - var i;  
257 - var j;  
258 - var iBindex = 1;  
259 - var iZzsj;  
260 - var oLp;  
261 - var iC1;  
262 - var iC2;  
263 -  
264 - for (i = 0; i < _qCount - 1; i++) {  
265 - while (iBindex <= 1) {  
266 - // 每圈每个方向的周转时间不一致,以上标线为主  
267 - oLp = _internalLpArray[0];  
268 - iZzsj = oLp.getBc(i + 1, iBindex).getFcTimeObj().diff(  
269 - oLp.getBc(i, iBindex).getFcTimeObj(), "m"  
270 - );  
271 -  
272 - iC1 = Math.floor(iZzsj / iClCount);  
273 - iC2 = iZzsj % iClCount;  
274 -  
275 - for (j = 0; j < iClCount - iC2; j++) {  
276 - oLp = _internalLpArray[j];  
277 - oLp.fnSetVerticalIntervalTime(i, iBindex, iC1);  
278 - }  
279 -  
280 - for (j = 0; j < iC2; j++) {  
281 - oLp = _internalLpArray[iClCount - iC2 + j];  
282 - oLp.fnSetVerticalIntervalTime(i, iBindex, iC1 + 1);  
283 - }  
284 -  
285 - iBindex ++;  
286 -  
287 - }  
288 - iBindex = 0;  
289 - }  
290 - // 最后一圈没有下一圈的参照,周转时间没发获取,由于都是低谷,所以使用倒数第二圈的间隔最为最后一圈的间隔  
291 - for (i = 0; i < _internalLpArray.length; i++) {  
292 - oLp = _internalLpArray[i];  
293 - oLp.fnSetVerticalIntervalTime(_qCount - 1, 0, oLp.fnGetVerticalIntervalTime(_qCount - 2, 0));  
294 - oLp.fnSetVerticalIntervalTime(_qCount - 1, 1, oLp.fnGetVerticalIntervalTime(_qCount - 2, 1));  
295 - }  
296 -  
297 - //------------------------ 3、预估早高峰全部出车第几圈第几个班次全部出车,计算路牌之间的发车间隔 ------------------//  
298 -  
299 - // 以上标线为标准,查找离早高峰开始时间最近的班次作为早高峰开始班次  
300 - // 以这个班次为早高峰起点,全部出车策略  
301 - var qbcIndexArray = _internalLpArray[0].getQBcIndexWithFcTime(  
302 - _paramObj.getMPeakStartTimeObj(), true, true);  
303 - var qIndex = qbcIndexArray[0]; // 第几圈  
304 - var bIndex = qbcIndexArray[1]; // 第几个班次  
305 -  
306 - for (i = 1; i < _internalLpArray.length; i++) {  
307 - _fnGenerateBcAndSetBc(i, qIndex, bIndex);  
308 - }  
309 -  
310 - _approximate_zgfQIndex = qIndex;  
311 - _approximate_zgfBIndex = bIndex;  
312 -  
313 - //------------------------ 4、预估晚高峰全部出车第几圈第几个班次全部出车,计算路牌之间的发车间隔 ------------------//  
314 -  
315 - // 以上标线为标准,查找离晚高峰开始时间最近的班次作为晚高峰开始班次  
316 - // 以这个班次为早高峰起点,全部出车策略  
317 - qbcIndexArray = _internalLpArray[0].getQBcIndexWithFcTime(  
318 - _paramObj.getEPeakStartTimeObj(), true, true);  
319 - qIndex = qbcIndexArray[0]; // 第几圈  
320 - bIndex = qbcIndexArray[1]; // 第几个班次  
321 -  
322 - for (i = 1; i < _internalLpArray.length; i++) {  
323 - _fnGenerateBcAndSetBc(i, qIndex, bIndex);  
324 - }  
325 -  
326 - _approximate_wgfQIndex = qIndex;  
327 - _approximate_wgfBIndex = bIndex;  
328 -  
329 - console.log("早高峰周转时间(固定最大停战时间):" + _paramObj.calcuPeakZzsj() + "分钟");  
330 - console.log("早高峰发车时间范围:" + _paramObj.getMPeakMinFcjx() + "分钟 --- " + _paramObj.getMPeakMaxFcjx() + "分钟");  
331 - console.log("预估早高峰第" + _approximate_zgfQIndex + "(index)圈,第" + _approximate_zgfBIndex + "(index)班次车辆全部发出");  
332 - console.log("预估晚高峰第" + _approximate_wgfQIndex + "(index)圈,第" + _approximate_wgfBIndex + "(index)班次车辆全部发出");  
333 - console.log("//---------------- 行车计划,初始化方法2 end ----------------//");  
334 - };  
335 -  
336 - //----------------------- 初始化方法3,计算连班分班的路牌分布 ----------------//  
337 - var _iBx_lb_lpcount; // 连班路牌数  
338 - var _iBx_5_2_fb_lpcount; // 5休2分班路牌数  
339 - var _iBx_other_fb_lpcount; // 其他分班路牌数  
340 -  
341 - var _fnInitFun3 = function() { // 初始化方法3  
342 - console.log("//---------------- 行车计划,初始化方法3 start ----------------//");  
343 -  
344 - //--------------------- 1、计算分班连班班型车辆分布数 --------------------//  
345 - // 总共车辆数(高峰最大车辆数)  
346 - var iCls = _paramObj.calcuClzx();  
347 - // 低谷最少配车(连班车数量)  
348 - var iDgminpc = Math.round(_paramObj.calcuTroughZzsj() / _paramObj.getTroughMaxFcjx());  
349 - // 加班车路牌数(做5休2的路牌数)  
350 - var i_5_2_lpes = _paramObj.getJBLpes();  
351 -  
352 - // 做些简单的验证  
353 - if (iCls < iDgminpc) {  
354 - alert("总配车数小于低谷最小配车");  
355 - throw "总配车数小于低谷最小配车";  
356 - }  
357 - if (iDgminpc < 2) {  
358 - alert("连班路牌小于2,办不到啊");  
359 - throw "连班路牌小于2,办不到啊";  
360 - }  
361 - if (iCls - iDgminpc < i_5_2_lpes) {  
362 - alert("总分班路牌数小于加班路牌数");  
363 - throw "总分班路牌数小于加班路牌数";  
364 - }  
365 -  
366 - //// 修正连班路牌数,班次间隔大于20的,加1,直至班次间隔小于20  
367 - //while(_paramObj.calcuPeakZzsj() / iDgminpc > 20) {  
368 - // iDgminpc ++;  
369 - //}  
370 - _iBx_lb_lpcount = iDgminpc;  
371 -  
372 - _iBx_5_2_fb_lpcount = i_5_2_lpes;  
373 - _iBx_other_fb_lpcount = iCls - _iBx_lb_lpcount - i_5_2_lpes;  
374 -  
375 - //------------------------ 2、利用间隔法计算连班路牌分布 --------------------//  
376 - var i;  
377 - var j;  
378 - var iC1 = Math.floor(_internalLpArray.length / _iBx_lb_lpcount);  
379 - var iC2 = _internalLpArray.length % _iBx_lb_lpcount;  
380 - var iLpIndex;  
381 -  
382 - for (i = 0; i < _iBx_lb_lpcount - iC2; i++) {  
383 - iLpIndex = i * iC1;  
384 - _internalLpArray[iLpIndex].setBxLb(true);  
385 - _internalLpArray[iLpIndex].setBxDesc("连班");  
386 - }  
387 - for (j = 0; j < iC2; j++) {  
388 - iLpIndex = i * iC1 + j * (iC1 + 1);  
389 - _internalLpArray[iLpIndex].setBxLb(true);  
390 - _internalLpArray[iLpIndex].setBxDesc("连班");  
391 - }  
392 -  
393 - //------------------------ 3、利用间隔法计算分班班型路牌分布 --------------------//  
394 - // 获取分班路牌索引  
395 - var aNotLbIndexes = [];  
396 - for (i = 0; i < _internalLpArray.length; i++) {  
397 - if (!_internalLpArray[i].isBxLb()) {  
398 - aNotLbIndexes.push(i);  
399 - }  
400 - }  
401 - // 先5休2分班  
402 - iC1 = Math.floor(aNotLbIndexes.length / _iBx_5_2_fb_lpcount);  
403 - iC2 = aNotLbIndexes.length % _iBx_5_2_fb_lpcount;  
404 -  
405 - for (i = 0; i < _iBx_5_2_fb_lpcount - iC2; i++) {  
406 - iLpIndex = aNotLbIndexes[i * iC1];  
407 - _internalLpArray[iLpIndex].setBxLb(false);  
408 - _internalLpArray[iLpIndex].setBxFb(true);  
409 - _internalLpArray[iLpIndex].setBxFb5_2(true);  
410 - _internalLpArray[iLpIndex].setBxDesc("5休2分班");  
411 - }  
412 - for (i = 0; i < iC2; i++) {  
413 - iLpIndex = aNotLbIndexes[_iBx_5_2_fb_lpcount - iC2 + i * (iC1 + 1)];  
414 - _internalLpArray[iLpIndex].setBxLb(false);  
415 - _internalLpArray[iLpIndex].setBxFb(true);  
416 - _internalLpArray[iLpIndex].setBxFb5_2(true);  
417 - _internalLpArray[iLpIndex].setBxDesc("5休2分班");  
418 - }  
419 - // 其他分班  
420 - for (i = 0; i < aNotLbIndexes.length; i++) {  
421 - iLpIndex = aNotLbIndexes[i];  
422 - if (!_internalLpArray[iLpIndex].isBxFb5_2()) {  
423 - _internalLpArray[iLpIndex].setBxLb(false);  
424 - _internalLpArray[iLpIndex].setBxFb(true);  
425 - _internalLpArray[iLpIndex].setBxFb5_2(false);  
426 - _internalLpArray[iLpIndex].setBxDesc("其他分班");  
427 - }  
428 - }  
429 -  
430 - console.log("高峰周转时间:" + _paramObj.calcuPeakZzsj());  
431 - console.log("连班路牌数:" + _iBx_lb_lpcount);  
432 - console.log("5休2分班路牌数:" + _iBx_5_2_fb_lpcount);  
433 - console.log("其他分班路牌数:" + _iBx_other_fb_lpcount);  
434 - var aLbIndexes = [];  
435 - for (i = 0; i < _internalLpArray.length; i++) {  
436 - if (_internalLpArray[i].isBxLb()) {  
437 - aLbIndexes.push(i);  
438 - }  
439 - }  
440 - console.log("连班路牌indexes=" + aLbIndexes);  
441 - var a_5_2_fbIndexes = [];  
442 - for (i = 0; i < _internalLpArray.length; i++) {  
443 - if (_internalLpArray[i].isBxFb() && _internalLpArray[i].isBxFb5_2()) {  
444 - a_5_2_fbIndexes.push(i);  
445 - }  
446 - }  
447 - console.log("5休2分班路牌indexes=" + a_5_2_fbIndexes);  
448 - var a_other_fbIndexes = [];  
449 - for (i = 0; i < _internalLpArray.length; i++) {  
450 - if (_internalLpArray[i].isBxFb() && !_internalLpArray[i].isBxFb5_2()) {  
451 - a_other_fbIndexes.push(i);  
452 - }  
453 - }  
454 - console.log("其他分班路牌indexes=" + a_other_fbIndexes);  
455 -  
456 - console.log("//---------------- 行车计划,初始化方法3 end ----------------//");  
457 - };  
458 -  
459 - //----------------------- 初始化方法4,计算中标线位置 -------------------------//  
460 - var _iZbx_lpIndex; // 中标线对应第几个路牌  
461 -  
462 - var _fnInitFun4 = function() { // 初始化方法4  
463 - console.log("//---------------- 行车计划,初始化方法4 start ----------------//");  
464 -  
465 - //---------------------------- 1、模拟一个中标线,使用临时路牌 ----------------------//  
466 - // 构造中标线  
467 - // 中标线开始时间,就是方向的首班车时间  
468 - var oSt = !_qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();  
469 - // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向  
470 - // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向  
471 - var oEt;  
472 - if (_paramObj.getUpLastDtimeObj().isBefore(  
473 - _paramObj.getDownLastDTimeObj())) {  
474 - oEt = _paramObj.getDownLastDTimeObj();  
475 - } else {  
476 - oEt = _paramObj.getUpLastDtimeObj();  
477 - }  
478 -  
479 - var oTempLp = new InternalLpObj({lpNo: -999, lpName: "-999"}, _qCount, _qIsUp);  
480 - oTempLp.initDataFromTimeToTime(  
481 - oSt,  
482 - oEt,  
483 - !_qIsUp,  
484 - 0,  
485 - _paramObj,  
486 - _factory  
487 - );  
488 -  
489 - //------------------------ 2、找出中标线的早高峰班次,计算应该插在当前路牌数组的那个位置 ----------------//  
490 - // 找出中标线对应的早高峰的班次对象  
491 - var oZb_gf_bc = oTempLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex);  
492 - //alert(oZb_gf_bc.getFcTimeObj().format("HH:mm"));  
493 -  
494 - // 把所有连班路牌高峰班次重新构造成一个一个的圈数组,计算对应中标线最近的是第几个路牌  
495 - // 中标线和上标线一样在连班路牌上  
496 - var aTempq = [];  
497 - var oTempq;  
498 - var oTempb;  
499 - var i;  
500 - var oLp;  
501 -  
502 - var aLbIndexes = []; // 连班的路牌索引  
503 - for (i = 0; i < _internalLpArray.length; i++) {  
504 - if (_internalLpArray[i].isBxLb()) {  
505 - aLbIndexes.push(i);  
506 - }  
507 - }  
508 -  
509 - for (i = 0; i < aLbIndexes.length; i++) {  
510 - oLp = _internalLpArray[aLbIndexes[i]];  
511 -  
512 - oTempb = oLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex);  
513 - if (oTempb.isUp() == _qIsUp) {  
514 - oTempq = new InternalGroupObj(oLp, _qIsUp, oTempb, undefined);  
515 - } else {  
516 - oTempq = new InternalGroupObj(oLp, _qIsUp, undefined, oTempb);  
517 - }  
518 - aTempq.push(oTempq);  
519 -  
520 - }  
521 -  
522 - var aTtindex = oTempLp.fnGetQBcIndexWithFcTimeFromGroupArray( // 找出最接近中标线的路牌索引  
523 - oZb_gf_bc.getFcTimeObj(),  
524 - aTempq,  
525 - true,  
526 - true  
527 - );  
528 -  
529 - _iZbx_lpIndex = aLbIndexes[aTtindex[0]]; // 中标线放在第几个路牌  
530 -  
531 - oTempLp.getMinBcObj().fnSetIsFirstBc(true); // 设置首班班次标识  
532 -  
533 - if (_iZbx_lpIndex == 0) { // 如果中标线和上标线一致  
534 - var oFirstBcIndexes = oTempLp.getMinBcObjPosition();  
535 - var oFirstBc = oTempLp.getMinBcObj();  
536 - oFirstBc.setLp(_internalLpArray[_iZbx_lpIndex]);  
537 - oFirstBc.fnSetDelFlag(false);  
538 - _internalLpArray[_iZbx_lpIndex].setBc(oFirstBcIndexes[0], oFirstBcIndexes[1], oFirstBc);  
539 - } else {  
540 - oTempLp.setLp(_lpArray[_iZbx_lpIndex]); // 设置原始路牌对象  
541 - oTempLp._$_aVerticalIntervalTime = _internalLpArray[_iZbx_lpIndex]._$_aVerticalIntervalTime; // 设置纵向最小发车间隔  
542 - oTempLp.setBxLb(_internalLpArray[_iZbx_lpIndex].isBxLb());  
543 - oTempLp.setBxFb(_internalLpArray[_iZbx_lpIndex].isBxFb());  
544 - oTempLp.setBxFb5_2(_internalLpArray[_iZbx_lpIndex].isBxFb5_2());  
545 -  
546 - // 修正除了第一个班次外,其余其他班次  
547 - var iBcindex = 0;  
548 - for (i = 1; i < _qCount; i++) {  
549 - while (iBcindex <= 1) {  
550 - if (oTempLp.getBc(i, iBcindex)) { // 替换存在的班次  
551 - oTempLp.setBc(i, iBcindex, _fnGenerateBc(_iZbx_lpIndex, i, iBcindex));  
552 - }  
553 - iBcindex ++;  
554 - }  
555 - iBcindex = 0;  
556 - }  
557 -  
558 - _internalLpArray[_iZbx_lpIndex] = oTempLp;  
559 - }  
560 -  
561 - console.log("中标线对应第" + (_iZbx_lpIndex + 1) + "个路牌");  
562 -  
563 - console.log("//---------------- 行车计划,初始化方法4 end ----------------//");  
564 - };  
565 -  
566 - //-------------------- 重要的内部方法 -----------------------//  
567 - /**  
568 - * 核心方法,利用路牌间隔纵向生成班次。  
569 - * @param iLpindex 路牌索引  
570 - * @param iQindex 圈索引  
571 - * @param iBcindex 班次索引  
572 - * @returns object InternalBcObj,失败 false  
573 - */  
574 - var _fnGenerateBc = function(iLpindex, iQindex, iBcindex) {  
575 - // 以上标线为起始点,使用路牌在不同圈,班次索引的发车间隔,计算班次  
576 - // 注意,发车间隔是指下一个班次应该距离当前班次间隔,是从下往上的  
577 -  
578 - // 1、参数验证  
579 - if (iLpindex == 0) { // 上标线的班次不需要生成  
580 - return false;  
581 - }  
582 -  
583 - // 2、计算间隔  
584 - var i;  
585 - var oLp;  
586 - var iTime = 0;  
587 - for (i = 0; i < iLpindex; i++) {  
588 - oLp = _internalLpArray[i];  
589 - iTime += oLp.fnGetVerticalIntervalTime(iQindex, iBcindex);  
590 - }  
591 -  
592 - // 3、生成班次  
593 - var _oKsbc = _internalLpArray[0].getBc(iQindex, iBcindex);  
594 - if (!_oKsbc) {  
595 - return false;  
596 - }  
597 - var _oKssj = _paramObj.addMinute(_oKsbc.getFcTimeObj(), iTime);  
598 - var _oBc = _factory.createBcObj(  
599 - _internalLpArray[iLpindex],  
600 - "normal", _oKsbc.isUp(),  
601 - 1, _oKssj, _paramObj);  
602 -  
603 - return _oBc;  
604 -  
605 - };  
606 -  
607 - /**  
608 - * 核心方法,在指定位置生成班次并添加到路牌指定位置中。  
609 - * @param lpIndex 第几个路牌  
610 - * @param qIndex 第几圈  
611 - * @param bcIndex 第几个班次  
612 - */  
613 - var _fnGenerateBcAndSetBc = function(lpIndex, qIndex, bcIndex) {  
614 - var _bcObj = _fnGenerateBc(lpIndex, qIndex, bcIndex);  
615 - if (_bcObj) {  
616 - _internalLpArray[lpIndex].setBc(qIndex, bcIndex, _bcObj);  
617 - }  
618 - };  
619 -  
620 - /**  
621 - * 获取班次列表。  
622 - * @param oIsUp 是否上行  
623 - * @param oStartTime 开始时间对象  
624 - * @returns [(InternalBcObj)]  
625 - */  
626 - var _fnGetBcList2 = function(oIsUp, oStartTime) {  
627 - var i;  
628 - var j;  
629 - var oLp;  
630 - var oBc;  
631 - var aBc = [];  
632 -  
633 - for (j = 0; j < _qCount; j++) {  
634 - for (i = 0; i < _internalLpArray.length; i++) {  
635 - oLp = _internalLpArray[i];  
636 - oBc = oLp.getBc(  
637 - j,  
638 - _qIsUp == oIsUp ? 0 : 1  
639 - );  
640 - if (oBc && oBc.getFcTimeObj().isAfter(oStartTime)) {  
641 - aBc.push(oBc);  
642 - }  
643 - }  
644 - }  
645 -  
646 - var aBcFcTime = [];  
647 - for (i = 0; i < aBc.length; i++) {  
648 - oBc = aBc[i];  
649 - aBcFcTime.push(oBc.getFcTimeObj().format("HH:mm"));  
650 - }  
651 - console.log((oIsUp ? "上行班次列表:" : "下行班次列表:") + aBcFcTime.join(","));  
652 -  
653 - return aBc;  
654 - };  
655 -  
656 - /**  
657 - * 获取班次列表。  
658 - * @param isUp boolean 是否上行  
659 - * @returns [(InternalBcObj)]  
660 - */  
661 - var _fnGetBcList = function(isUp) {  
662 - var i;  
663 - var j;  
664 - var oLp;  
665 - var oBc;  
666 - var aBc = [];  
667 -  
668 - for (j = 0; j < _qCount; j++) {  
669 - for (i = 0; i < _internalLpArray.length; i++) {  
670 - oLp = _internalLpArray[i];  
671 - oBc = oLp.getBc(  
672 - j,  
673 - _qIsUp == isUp ? 0 : 1  
674 - );  
675 - if (oBc) {  
676 - aBc.push(oBc);  
677 - }  
678 - }  
679 - }  
680 -  
681 - var aBcFcTime = [];  
682 - for (i = 0; i < aBc.length; i++) {  
683 - oBc = aBc[i];  
684 - aBcFcTime.push(oBc.getFcTimeObj().format("HH:mm"));  
685 - }  
686 - console.log((isUp ? "上行班次列表:" : "下行班次列表:") + aBcFcTime.join(","));  
687 -  
688 - return aBc;  
689 - };  
690 -  
691 - /**  
692 - * 查找离指定时间最近的前面的班次索引信息  
693 - * @param timeObj 查找时间  
694 - * @param isUp 是否上行  
695 - * @returns [{路牌index},{圈index},{班次index}]  
696 - */  
697 - var _fnFindUpClosedBcIndexWithTime = function(timeObj, isUp) {  
698 -  
699 - var _lpObj;  
700 - var _groupObj;  
701 - var _bcObj;  
702 - var _i;  
703 - var _j;  
704 - var timediff; // 时间差取绝对值  
705 -  
706 - var _lpIndex;  
707 - var _up_qIndex;  
708 - var _up_bIndex;  
709 -  
710 - for (_i = 0; _i < _qCount; _i++) {  
711 - for (_j = 0; _j < _internalLpArray.length; _j++) {  
712 - _lpObj = _internalLpArray[_j];  
713 - _groupObj = _lpObj.getGroup(_i);  
714 - _bcObj = isUp == _qIsUp ? _groupObj.getBc1() : _groupObj.getBc2();  
715 - if (!_bcObj) { // 没有班次动态生成一个,可能生成不出的  
716 - _bcObj = _fnGenerateBc(_j, _i, isUp == _qIsUp ? 0 : 1);  
717 - }  
718 - if (_bcObj) {  
719 - if (timeObj.diff(_bcObj.getFcTimeObj()) >= 0) {  
720 - if (!timediff) {  
721 - timediff = timeObj.diff(_bcObj.getFcTimeObj());  
722 - _lpIndex = _j;  
723 - _up_qIndex = _i;  
724 - _up_bIndex = isUp == _qIsUp ? 0 : 1;  
725 - } else {  
726 - if (timeObj.diff(_bcObj.getFcTimeObj()) < timediff) {  
727 - timediff = timeObj.diff(_bcObj.getFcTimeObj());  
728 - _lpIndex = _j;  
729 - _up_qIndex = _i;  
730 - _up_bIndex = isUp == _qIsUp ? 0 : 1;  
731 - }  
732 - }  
733 - }  
734 - }  
735 - }  
736 - }  
737 -  
738 - if (_lpIndex == undefined) {  
739 - return false;  
740 - }  
741 -  
742 - var bcindex = [];  
743 - bcindex.push(_lpIndex);  
744 - bcindex.push(_up_qIndex);  
745 - bcindex.push(_up_bIndex);  
746 -  
747 - return bcindex;  
748 - };  
749 -  
750 - /**  
751 - * 查找离指定时间最近的后面的班次索引信息  
752 - * @param timeObj 查找时间  
753 - * @param isUp 是否上行  
754 - * @returns [{路牌index},{圈index},{班次index}]  
755 - */  
756 - var _fnFindDownClosedBcIndexWithTime = function(timeObj, isUp) {  
757 - var _lpObj;  
758 - var _groupObj;  
759 - var _bcObj;  
760 - var _i;  
761 - var _j;  
762 - var timediff; // 时间差取绝对值  
763 -  
764 - var _lpIndex;  
765 - var _down_qIndex;  
766 - var _down_bIndex;  
767 -  
768 - var flag;  
769 -  
770 - for (_i = 0; _i < _qCount; _i++) {  
771 - for (_j = 0; _j < _internalLpArray.length; _j++) {  
772 - _lpObj = _internalLpArray[_j];  
773 - _groupObj = _lpObj.getGroup(_i);  
774 - // TODO:bug  
775 - _bcObj = isUp == _qIsUp ? _groupObj.getBc1() : _groupObj.getBc2();  
776 - if (!_bcObj) { // 没有班次动态生成一个,可能生成不出的  
777 - _bcObj = _fnGenerateBc(_j, _i, isUp == _qIsUp ? 0 : 1);  
778 - }  
779 - if (_bcObj) {  
780 - //console.log("timeobj -> bcobj diff flag " +  
781 - // timeObj.format("HH:mm") + "->" +  
782 - // _bcObj.getFcTimeObj().format("HH:mm") +  
783 - // timeObj.diff(_bcObj.getFcTimeObj()) +  
784 - // (timeObj.diff(_bcObj.getFcTimeObj()) <= 0)  
785 - //);  
786 -  
787 - flag = (timeObj.diff(_bcObj.getFcTimeObj())) <= 0;  
788 -  
789 - if (flag) {  
790 - if (!timediff) {  
791 - timediff = timeObj.diff(_bcObj.getFcTimeObj());  
792 - _lpIndex = _j;  
793 - _down_qIndex = _i;  
794 - _down_bIndex = isUp == _qIsUp ? 0 : 1;  
795 - } else {  
796 - if ((timeObj.diff(_bcObj.getFcTimeObj())) > timediff) {  
797 - timediff = timeObj.diff(_bcObj.getFcTimeObj());  
798 - _lpIndex = _j;  
799 - _down_qIndex = _i;  
800 - _down_bIndex = isUp == _qIsUp ? 0 : 1;  
801 - }  
802 - }  
803 - }  
804 - }  
805 - }  
806 - }  
807 -  
808 - if (_lpIndex == undefined) {  
809 - return false;  
810 - }  
811 -  
812 - var bcindex = [];  
813 - bcindex.push(_lpIndex);  
814 - bcindex.push(_down_qIndex);  
815 - bcindex.push(_down_bIndex);  
816 -  
817 - return bcindex;  
818 - };  
819 -  
820 - /**  
821 - * 获取班次索引。  
822 - * @param oBc 班次对象  
823 - * @returns [{路牌索引},{圈索引},{班次索引}]  
824 - */  
825 - var _fnGetBcIndex = function(oBc) {  
826 - // 路牌索引  
827 - var i;  
828 - var iLpIndex;  
829 - for (i = 0; i < _internalLpArray.length; i++) {  
830 - if (_internalLpArray[i]._$$_orign_lp_obj == oBc._$$_internal_lp_obj._$$_orign_lp_obj) {  
831 - iLpIndex = i;  
832 - break;  
833 - }  
834 - }  
835 - // 圈索引  
836 - var j;  
837 - var iGroupIndex;  
838 - var bFlag = false;  
839 - for (i = 0; i < _internalLpArray.length; i++) {  
840 - if (bFlag) {  
841 - break;  
842 - }  
843 - for (j = 0; j < _qCount; j++) {  
844 - if (_internalLpArray[i]._$_groupBcArray[j] == oBc._$$_internal_group_obj) {  
845 - iGroupIndex = j;  
846 - bFlag = true;  
847 - break;  
848 - }  
849 - }  
850 - }  
851 - // 班次索引  
852 - var iBcIndex = _qIsUp == oBc.isUp() ? 0 : 1;  
853 -  
854 - if (iLpIndex == undefined) {  
855 - return null;  
856 - } else {  
857 - return [].concat(iLpIndex, iGroupIndex, iBcIndex);  
858 - }  
859 -  
860 - };  
861 -  
862 - return {  
863 - //------------- 布局初始化方法 ------------//  
864 - /**  
865 - * 初始化数据,使用标线初始化  
866 - */  
867 - fnInitDataWithBxLayout: function() {  
868 - // 初始化布局1,构造上标线,计算圈数,把上标线数据放入第一个路牌中  
869 - _fnInitFun1();  
870 - // 初始化布局2,从上标线的某个班次开始,构造所有路牌的早高峰班次,晚高峰班次,计算路牌在各个圈中的间隔  
871 - _fnInitFun2();  
872 - // 初始化布局3,计算连班分班路牌分布  
873 - _fnInitFun3();  
874 - // 初始化布局4,计算中标线位置  
875 - _fnInitFun4();  
876 -  
877 - },  
878 -  
879 - /**  
880 - * 调整高峰班次,  
881 - * 初始化生成早高峰,晚高峰班次并不准确,因为根据高峰时间段,并不在一个完整圈内,应该是在两个或多个圈之间  
882 - * 当初始化定好布局后(上标线,中标线),然后确定每个路牌的班型(连班,分班,5休2分班)后  
883 - * 然后重新计算框在高峰时间段内的班次索引,不足的添加,之前多加的删除(只删除分班路牌上的)  
884 - * @param isZgf 是否早高峰  
885 - * @param isUp 是否上行  
886 - */  
887 - fnAdjustGfbc : function(isZgf, isUp) {  
888 - var oStartTime; // 开始时间  
889 - var oEndTime; // 结束时间  
890 - var aStartBcIndex; // 开始班次索引  
891 - var aEndBcIndex; // 结束班次索引  
892 -  
893 - oStartTime = isZgf ? _paramObj.getMPeakStartTimeObj() : _paramObj.getEPeakStartTimeObj();  
894 - oEndTime = isZgf ? _paramObj.getMPeakEndTimeObj() : _paramObj.getEPeakEndTimeObj();  
895 -  
896 - aStartBcIndex = _fnFindUpClosedBcIndexWithTime(oStartTime, isUp);  
897 - aEndBcIndex = _fnFindDownClosedBcIndexWithTime(oEndTime, isUp);  
898 -  
899 - var iLpIndex;  
900 - var iQIndex;  
901 - var iBcIndex;  
902 - var iQInternelCount; // 高峰时间段中间包含的圈数  
903 - var i;  
904 - var j;  
905 -  
906 - var oLp;  
907 -  
908 - if (aStartBcIndex && aEndBcIndex) {  
909 - iLpIndex = aStartBcIndex[0];  
910 - iQIndex = aStartBcIndex[1];  
911 - iBcIndex = aStartBcIndex[2];  
912 -  
913 - // 处理头  
914 - // 删除头部多余班次  
915 - for (j = 0; j < iLpIndex; j++) {  
916 - oLp = _internalLpArray[j];  
917 - if (oLp.isBxFb() && oLp.getBc(iQIndex, iBcIndex)) {  
918 - oLp.removeBc(iQIndex, iBcIndex);  
919 - }  
920 - }  
921 -  
922 - for (j = iLpIndex; j < _internalLpArray.length; j++) {  
923 - oLp = _internalLpArray[j];  
924 - if (!oLp.getBc(iQIndex, iBcIndex)) {  
925 - _fnGenerateBcAndSetBc(j, iQIndex, iBcIndex);  
926 - }  
927 - }  
928 -  
929 - // 处理中间  
930 - iQInternelCount = aEndBcIndex[1] - aStartBcIndex[1] - 1;  
931 - for (i = 1; i <= iQInternelCount; i++) {  
932 - oLp = _internalLpArray[iQIndex + i];  
933 -  
934 - if (!oLp.getBc(iQIndex + i, iBcIndex)) {  
935 - _fnGenerateBcAndSetBc(i, iQIndex + i, iBcIndex);  
936 - }  
937 - }  
938 -  
939 - // 处理尾部  
940 - iLpIndex = aEndBcIndex[0];  
941 - iQIndex = aEndBcIndex[1];  
942 - iBcIndex = aEndBcIndex[2];  
943 -  
944 - // 删除尾部多余的班次  
945 - for (j = iLpIndex; j < _internalLpArray.length; j++) {  
946 - oLp = _internalLpArray[j];  
947 - if (oLp.isBxFb() && oLp.getBc(iQIndex, iBcIndex)) {  
948 - oLp.removeBc(iQIndex, iBcIndex);  
949 - }  
950 - }  
951 -  
952 - if (aStartBcIndex[1] != aEndBcIndex[1]) { // 指定时间范围跨圈  
953 - for (j = 0; j < iLpIndex; j++) {  
954 - oLp = _internalLpArray[j];  
955 - if (!oLp.getBc(iQIndex, iBcIndex)) {  
956 - _fnGenerateBcAndSetBc(j, iQIndex, iBcIndex);  
957 - }  
958 - }  
959 - } else {  
960 - // 不跨圈,不用处理,处理头的时候已经加了  
961 - }  
962 -  
963 - }  
964 -  
965 - },  
966 -  
967 - /**  
968 - * 按照营运时间要求补充班次,  
969 - * 早高峰7:45分以前出场运营,  
970 - * 晚高峰16:10分以前出场运营  
971 - */  
972 - fnCalcuLpBc_yy: function() {  
973 - // 补班次的时候,针对的是分班班型  
974 - var i;  
975 - var _oLp;  
976 - var _oBc;  
977 - var _aMinBcIndex;  
978 - var _aMaxBcIndex;  
979 -  
980 - var _qIndex;  
981 - var _bIndex;  
982 -  
983 - var _zgfCDate = _paramObj.toTimeObj("7:45");  
984 - var _wgfCDate = _paramObj.toTimeObj("16:10");  
985 - var _ccsj;  
986 -  
987 - for (i = 0; i < _internalLpArray.length; i++) {  
988 - _oLp = _internalLpArray[i];  
989 - if (_oLp.isBxFb()) { // 分班路牌  
990 - // 早高峰部分  
991 - _aMinBcIndex = _oLp.getMinBcObjPosition();  
992 - _qIndex = _aMinBcIndex[0];  
993 - _bIndex = _aMinBcIndex[1];  
994 - _oBc = _oLp.getBc(_qIndex, _bIndex);  
995 - if (_qIsUp) {  
996 - _ccsj = _bIndex == 0 ?  
997 - _paramObj.getUpOutTime() :  
998 - _paramObj.getDownOutTime();  
999 - } else {  
1000 - _ccsj = _bIndex == 0 ?  
1001 - _paramObj.getDownOutTime() :  
1002 - _paramObj.getUpOutTime();  
1003 - }  
1004 - if (_zgfCDate.isBefore(_paramObj.addMinute(_oBc.getFcTimeObj(), -_ccsj))) {  
1005 - _fnGenerateBcAndSetBc(  
1006 - i,  
1007 - _bIndex == 0 ? _qIndex - 1 : _qIndex,  
1008 - _bIndex == 0 ? 1 : 0  
1009 - )  
1010 - }  
1011 -  
1012 - // 晚高峰部分  
1013 - _aMaxBcIndex = _oLp.getMaxBcObjPosition();  
1014 - _qIndex = _aMaxBcIndex[0];  
1015 - _bIndex = _aMaxBcIndex[1];  
1016 - _oBc = _oLp.getBc(  
1017 - _bIndex == 0 ? _qIndex - 1 : _qIndex,  
1018 - _bIndex == 0 ? 1 : 0  
1019 - );  
1020 - if (!_oBc) { // 前一个班次不存在,再判定加不加  
1021 - _oBc = _oLp.getBc(_qIndex, _bIndex);  
1022 - if (_qIsUp) {  
1023 - _ccsj = _bIndex == 0 ?  
1024 - _paramObj.getUpOutTime() :  
1025 - _paramObj.getDownOutTime();  
1026 - } else {  
1027 - _ccsj = _bIndex == 0 ?  
1028 - _paramObj.getDownOutTime() :  
1029 - _paramObj.getUpOutTime();  
1030 - }  
1031 - if (_wgfCDate.isBefore(_paramObj.addMinute(_oBc.getFcTimeObj(), -_ccsj))) {  
1032 - _fnGenerateBcAndSetBc(  
1033 - i,  
1034 - _bIndex == 0 ? _qIndex - 1 : _qIndex,  
1035 - _bIndex == 0 ? 1 : 0  
1036 - )  
1037 - }  
1038 - }  
1039 - }  
1040 - }  
1041 - },  
1042 -  
1043 - /**  
1044 - * 补充做5休2的班型班次。  
1045 - * 1、确认5_2班型大致多少圈(小数点过.7进位)  
1046 - * 2、获取当前5_2两端车次链的信息,每段的班次数目,还差几个班次没加  
1047 - * 3、如果前面的车次链班次少,则从前面的车次链开始加  
1048 - * 4、如果车次链班次数一样,从从后面的车次链开始加  
1049 - * 5、加班次时都是往车次链前方加  
1050 - * 6、如果前面车次链不能再加班次了,从后面车次链加  
1051 - */  
1052 - fnCalcuLpBx_5_2: function() {  
1053 - // 计算做5休2班型所需的班次数  
1054 - var iBxBcount = _aBxDesc[6].fBcCount;  
1055 - if (iBxBcount - Math.floor(iBxBcount) > 0.7) {  
1056 - iBxBcount = Math.floor(iBxBcount) + 1;  
1057 - } else {  
1058 - iBxBcount = Math.floor(iBxBcount);  
1059 - }  
1060 -  
1061 - var i;  
1062 - var j;  
1063 - var oLp;  
1064 - var iAddBcCount;  
1065 - var oBcChain1;  
1066 - var oBcChain2;  
1067 - var iQindex;  
1068 - var iBindex;  
1069 -  
1070 - for (i = 0; i < _internalLpArray.length; i++) {  
1071 - oLp = _internalLpArray[i];  
1072 - if (oLp.isBxFb5_2()) {  
1073 - iAddBcCount = iBxBcount - oLp.getBcArray().length; // 需要添加的班次数  
1074 - for (j = 1; j <= iAddBcCount; j++) {  
1075 - oBcChain1 = oLp.fnGetBcChainInfo(0);  
1076 - oBcChain2 = oLp.fnGetBcChainInfo(1);  
1077 -  
1078 - if (oBcChain1.bcount < oBcChain2.bcount) {  
1079 - iQindex = oBcChain1.s_b == 0 ? oBcChain1.s_q - 1 : oBcChain1.s_q;  
1080 - iBindex = oBcChain1.s_b == 0 ? 1 : 0;  
1081 - // 往车次链往前不能加,就往后加  
1082 - if (_fnGenerateBc(i, iQindex, iBindex)) {  
1083 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1084 - } else {  
1085 - iQindex = oBcChain1.e_b == 0 ? oBcChain1.e_q : oBcChain1.e_q + 1;  
1086 - iBindex = oBcChain1.e_b == 0 ? 1 : 0;  
1087 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1088 - }  
1089 -  
1090 - } else if (oBcChain1.bcount > oBcChain2.bcount) {  
1091 - iQindex = oBcChain2.s_b == 0 ? oBcChain2.s_q - 1 : oBcChain2.s_q;  
1092 - iBindex = oBcChain2.s_b == 0 ? 1 : 0;  
1093 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1094 - } else {  
1095 - iQindex = oBcChain2.s_b == 0 ? oBcChain2.s_q - 1 : oBcChain2.s_q;  
1096 - iBindex = oBcChain2.s_b == 0 ? 1 : 0;  
1097 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1098 - }  
1099 - }  
1100 - }  
1101 - }  
1102 -  
1103 - },  
1104 -  
1105 - /**  
1106 - * 补其他分班班型班次。  
1107 - * 从车次链的后面开始加  
1108 - */  
1109 - fnCalcuLpBx_other: function() {  
1110 - // TODO:根据上标线的首班时间确定班型,小于05:59的做一休一,否则做二休一  
1111 - var oSt = _qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();  
1112 - var iBxIndex = 4;  
1113 - if (oSt.isBefore(_paramObj.toTimeObj("05:59"))) {  
1114 - iBxIndex = 5;  
1115 - }  
1116 - // 计算做5休2班型所需的班次数  
1117 - var iQBcount = _aBxDesc[iBxIndex].fQCount;  
1118 - var iBxBcount = Math.round(iQBcount) * 2;  
1119 -  
1120 - var i;  
1121 - var j;  
1122 - var oLp;  
1123 - var iAddBcCount;  
1124 - var oBcChain1;  
1125 - var oBcChain2;  
1126 - var iQindex;  
1127 - var iBindex;  
1128 -  
1129 - for (i = 0; i < _internalLpArray.length; i++) {  
1130 - oLp = _internalLpArray[i];  
1131 - if (oLp.isBxFb() && !oLp.isBxFb5_2()) {  
1132 - iAddBcCount = iBxBcount - oLp.getBcArray().length; // 需要添加的班次数  
1133 - for (j = 1; j <= iAddBcCount; j++) {  
1134 - oBcChain1 = oLp.fnGetBcChainInfo(0);  
1135 - oBcChain2 = oLp.fnGetBcChainInfo(1);  
1136 -  
1137 - if (oBcChain1.bcount < oBcChain2.bcount) {  
1138 - iQindex = oBcChain1.e_b == 0 ? oBcChain1.e_q : oBcChain1.e_q + 1;  
1139 - iBindex = oBcChain1.e_b == 0 ? 1 : 0;  
1140 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1141 - } else if (oBcChain1.bcount > oBcChain2.bcount) {  
1142 - iQindex = oBcChain2.e_b == 0 ? oBcChain2.e_q : oBcChain2.e_q + 1;  
1143 - iBindex = oBcChain2.e_b == 0 ? 1 : 0;  
1144 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1145 - } else {  
1146 - iQindex = oBcChain2.e_b == 0 ? oBcChain2.e_q : oBcChain2.e_q + 1;  
1147 - iBindex = oBcChain2.e_b == 0 ? 1 : 0;  
1148 - _fnGenerateBcAndSetBc(i, iQindex, iBindex);  
1149 - }  
1150 - }  
1151 - }  
1152 - }  
1153 -  
1154 - },  
1155 -  
1156 - /**  
1157 - * 补充连班路牌班次。  
1158 - * 1、上标线,中标线中间的连班路牌班次从早高峰班次一直拉到底,从早高峰班次向上标线起始班次靠拢  
1159 - * 2、中标线以下的连班路牌班次从早高峰班次一直拉到底,从早高峰班次向中标线起始班次靠拢  
1160 - */  
1161 - fnCalcuLpBx_lb: function() {  
1162 - // 补充连班的班次,参照上标线,中标线补充不足的班次  
1163 -  
1164 - var aLbLpindexes = []; // 除上标线,中标线的连班路牌索引  
1165 - var i;  
1166 - for (i = 0; i < _internalLpArray.length; i++) {  
1167 - if (_internalLpArray[i].isBxLb() && i != 0 && i != _iZbx_lpIndex) {  
1168 - aLbLpindexes.push(i);  
1169 - }  
1170 - }  
1171 -  
1172 - var oEndsj = // 结束时间  
1173 - _paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj()) ?  
1174 - _paramObj.getDownLastDTimeObj() :  
1175 - _paramObj.getUpLastDtimeObj();  
1176 -  
1177 - var oLp;  
1178 - var aMinbcPos;  
1179 - var oBc;  
1180 - var j;  
1181 - var iTempBcIndex;  
1182 -  
1183 - // 1、从最小班次开始,往后补充班次  
1184 - for (i = 0; i < aLbLpindexes.length; i++) {  
1185 - oLp = _internalLpArray[aLbLpindexes[i]];  
1186 -  
1187 - // 最小班次索引  
1188 - aMinbcPos = oLp.getMinBcObjPosition();  
1189 - // 使用纵向分隔补充班次,从最小班次向后补  
1190 - iTempBcIndex = aMinbcPos[1] == 0 ? 1 : 0;  
1191 - j = iTempBcIndex == 0 ? aMinbcPos[0] + 1 : aMinbcPos[0];  
1192 -  
1193 - while (j < _qCount) {  
1194 - while (iTempBcIndex <= 1) {  
1195 - oBc = _fnGenerateBc(aLbLpindexes[i], j, iTempBcIndex);  
1196 - if (oBc &&  
1197 - oBc.getFcTimeObj().isBefore(oEndsj) ) {  
1198 - oLp.setBc(j, iTempBcIndex, oBc);  
1199 - }  
1200 - iTempBcIndex++;  
1201 - }  
1202 - iTempBcIndex = 0;  
1203 - j++;  
1204 - }  
1205 -  
1206 - }  
1207 -  
1208 - // 2、上标线中标线之间的路牌,从最小的班次往前补充班次  
1209 -  
1210 - // 还要补充缺失的班次,差上标线几个班次要往前补上  
1211 - var iBccount;  
1212 - var iQindex;  
1213 - var iBindex;  
1214 - // 补上标线到中标线之间的连班路牌的班次  
1215 - for (i = 0; i < aLbLpindexes.length; i++) {  
1216 - if (aLbLpindexes[i] > 0 && aLbLpindexes[i] < _iZbx_lpIndex) {  
1217 - oLp = _internalLpArray[aLbLpindexes[i]];  
1218 - aMinbcPos = oLp.getMinBcObjPosition();  
1219 - iQindex = aMinbcPos[0];  
1220 - iBindex = aMinbcPos[1];  
1221 - iBccount = (iQindex - 1) * 2 + iBindex; // 距离上标线起始站点差几个班次  
1222 - for (j = 0; j < iBccount; j++) {  
1223 - if (iBindex == 0) {  
1224 - iQindex --;  
1225 - iBindex = 1;  
1226 - _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);  
1227 - } else if (iBindex == 1) {  
1228 - iBindex --;  
1229 - _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);  
1230 - }  
1231 - }  
1232 -  
1233 - }  
1234 -  
1235 - }  
1236 -  
1237 - // 3、中标线之后的路牌,从最小的班次往前补充班次  
1238 -  
1239 - // 补中标线以下的连班路牌的班次  
1240 - for (i = 0; i < aLbLpindexes.length; i++) {  
1241 - if (aLbLpindexes[i] > _iZbx_lpIndex) {  
1242 - oLp = _internalLpArray[aLbLpindexes[i]];  
1243 - aMinbcPos = oLp.getMinBcObjPosition();  
1244 - iQindex = aMinbcPos[0];  
1245 - iBindex = aMinbcPos[1];  
1246 - iBccount = (iQindex - 0) * 2 + iBindex - 1; // 距离上标线起始站点差几个班次  
1247 - for (j = 0; j < iBccount; j++) {  
1248 - if (iBindex == 0) {  
1249 - iQindex --;  
1250 - iBindex = 1;  
1251 - _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);  
1252 - } else if (iBindex == 1) {  
1253 - iBindex --;  
1254 - _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);  
1255 - }  
1256 - }  
1257 - }  
1258 - }  
1259 -  
1260 - },  
1261 -  
1262 - /**  
1263 - * 计算末班车。  
1264 - * 1、将上下行拉成上下行两个班次列表(包括标记班次)  
1265 - * 2、分别找出离末班车发车时间最近的班次,并替换时间  
1266 - * 3、删除之后的班次  
1267 - */  
1268 - fnCalcuLastBc: function() {  
1269 - var i;  
1270 - var iTimeDiff;  
1271 - var iTempTime;  
1272 - var aBc;  
1273 - var oLastBcTime;  
1274 - var oLastBcIsUp;  
1275 - var iModifyIndex;  
1276 -  
1277 - // 查找末班车早的末班车时间和方向  
1278 - if (_paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj())) {  
1279 - oLastBcTime = _paramObj.getUpLastDtimeObj();  
1280 - oLastBcIsUp = true;  
1281 - } else {  
1282 - oLastBcTime = _paramObj.getDownLastDTimeObj();  
1283 - oLastBcIsUp = false;  
1284 - }  
1285 -  
1286 - // 确定早的末班车时间  
1287 - aBc = _fnGetBcList(oLastBcIsUp);  
1288 - for (i = 0; i < aBc.length; i++) {  
1289 - iTempTime = oLastBcTime.diff(aBc[i].getFcTimeObj(), "m");  
1290 - if (iTimeDiff == undefined) {  
1291 - iTimeDiff = iTempTime;  
1292 - iModifyIndex = i;  
1293 - } else if (Math.abs(iTempTime) <= Math.abs(iTimeDiff)) {  
1294 - iTimeDiff = iTempTime;  
1295 - iModifyIndex = i;  
1296 - }  
1297 - }  
1298 - aBc[iModifyIndex].addMinuteToFcsj(iTimeDiff); // 替换成末班车时间  
1299 - aBc[iModifyIndex].fnSetDelFlag(false);  
1300 - aBc[iModifyIndex].fnSetIsLastBc(true);  
1301 - for (i = iModifyIndex + 1; i < aBc.length; i++) { // 删除多余班次  
1302 - _qIsUp == oLastBcIsUp ?  
1303 - aBc[i]._$$_internal_group_obj.setBc1(undefined) :  
1304 - aBc[i]._$$_internal_group_obj.setBc2(undefined);  
1305 - }  
1306 -  
1307 - // 查找末班车晚的末班车时间和方向  
1308 - if (_paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj())) {  
1309 - oLastBcTime = _paramObj.getDownLastDTimeObj();  
1310 - oLastBcIsUp = false;  
1311 - } else {  
1312 - oLastBcTime = _paramObj.getUpLastDtimeObj();  
1313 - oLastBcIsUp = true;  
1314 - }  
1315 - // 确定晚的末班车时间  
1316 - aBc = _fnGetBcList(oLastBcIsUp);  
1317 - var oBc;  
1318 - var aBcIndex;  
1319 - var iLpIndex;  
1320 - var iQIndex;  
1321 - var iBcIndex;  
1322 -  
1323 - iTimeDiff = undefined;  
1324 - for (i = 0; i < aBc.length; i++) {  
1325 - oBc = aBc[i];  
1326 - aBcIndex = _fnGetBcIndex(oBc);  
1327 -  
1328 - iLpIndex = aBcIndex[0];  
1329 - iQIndex = aBcIndex[2] == 0 ? aBcIndex[1] -1 : aBcIndex[1];  
1330 - iBcIndex = aBcIndex[2] == 0 ? 1 : 0;  
1331 -  
1332 - if (!_internalLpArray[iLpIndex].getBc(iQIndex, iBcIndex)) {  
1333 - continue;  
1334 - }  
1335 -  
1336 - iTempTime = oLastBcTime.diff(aBc[i].getFcTimeObj(), "m");  
1337 - if (iTimeDiff == undefined) {  
1338 - iTimeDiff = iTempTime;  
1339 - iModifyIndex = i;  
1340 - } else if (Math.abs(iTempTime) <= Math.abs(iTimeDiff)) {  
1341 - iTimeDiff = iTempTime;  
1342 - iModifyIndex = i;  
1343 - }  
1344 - }  
1345 - aBc[iModifyIndex].addMinuteToFcsj(iTimeDiff); // 替换成末班车时间  
1346 - aBc[iModifyIndex].fnSetDelFlag(false);  
1347 - aBc[iModifyIndex].fnSetIsLastBc(true);  
1348 - for (i = iModifyIndex + 1; i < aBc.length; i++) { // 删除多余班次  
1349 - _qIsUp == oLastBcIsUp ?  
1350 - aBc[i]._$$_internal_group_obj.setBc1(undefined) :  
1351 - aBc[i]._$$_internal_group_obj.setBc2(undefined);  
1352 - }  
1353 -  
1354 - },  
1355 -  
1356 - /**  
1357 - * 添加吃饭班次。  
1358 - */  
1359 - fnCalcuEatBc: function() {  
1360 - // 吃午饭时间范围,10:15 到 12:15  
1361 - // 吃晚饭时间范围,18:00 到 19:00  
1362 -  
1363 - if (!_paramObj.fnIsEat()) {  
1364 - return;  
1365 - }  
1366 -  
1367 - // 午饭index  
1368 - var aLEIndex;  
1369 - // 晚饭index  
1370 - var aDEIndex;  
1371 -  
1372 - // 所有吃饭都默认在一个方向,两个方向暂时不考虑  
1373 - if (_paramObj.fnIsUpEat()) {  
1374 - aLEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("10:15"), true, false);  
1375 - aDEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("18:00"), true, false);  
1376 - } else {  
1377 - aLEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("10:15"), false, true);  
1378 - aDEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("18:00"), false, true);  
1379 - }  
1380 -  
1381 - // 午饭第几圈,第几个班次  
1382 - var iLEQIndex = aLEIndex[0];  
1383 - var iLEBIndex = aLEIndex[1];  
1384 - // 晚饭第几圈,第几个班次  
1385 - var iDEQIndex = aDEIndex[0];  
1386 - var iDEBIndex = aDEIndex[1];  
1387 -  
1388 - // 注意,本模型只有连班才有吃饭  
1389 -  
1390 - var i;  
1391 - var oLp;  
1392 - var aLbIndex = []; // 连班班型的路牌索引  
1393 - for (i = 0; i < _internalLpArray.length; i++) {  
1394 - oLp = _internalLpArray[i];  
1395 - if (oLp.isBxLb()) {  
1396 - aLbIndex.push(i);  
1397 - }  
1398 - }  
1399 -  
1400 - var iLTime;  
1401 - var iDtime;  
1402 - var j;  
1403 - for (i = 0; i < aLbIndex.length; i++) {  
1404 - oLp = _internalLpArray[aLbIndex[i]];  
1405 -  
1406 - // 午饭  
1407 - iLTime = oLp.fnAddEatBc(iLEQIndex, iLEBIndex, _factory, _paramObj);  
1408 - // 晚饭  
1409 - iDtime = oLp.fnAddEatBc(iDEQIndex, iDEBIndex, _factory, _paramObj);  
1410 -  
1411 - if (i == aLbIndex.length - 1) {  
1412 - for (j = aLbIndex[i]; j < _internalLpArray.length; j++) {  
1413 - oLp = _internalLpArray[j];  
1414 - if (oLp.isBxFb()) { // 5休2班型不调整  
1415 - // 修正午饭之后路牌班次的发车时间  
1416 - oLp.fnAddMinuteToBcFcsj(iLEQIndex, iLEBIndex, iLTime);  
1417 - oLp.fnAddMinuteToBcFcsj(iDEQIndex, iDEBIndex, iDtime);  
1418 - }  
1419 - }  
1420 - } else {  
1421 - for (j = aLbIndex[i]; j < aLbIndex[i + 1]; j++) {  
1422 - oLp = _internalLpArray[j];  
1423 - if (oLp.isBxFb()) {  
1424 - // 修正午饭之后路牌班次的发车时间  
1425 - oLp.fnAddMinuteToBcFcsj(iLEQIndex, iLEBIndex, iLTime);  
1426 - oLp.fnAddMinuteToBcFcsj(iDEQIndex, iDEBIndex, iDtime);  
1427 - }  
1428 - }  
1429 - }  
1430 - }  
1431 -  
1432 - },  
1433 -  
1434 - /**  
1435 - * 补每个路牌的其他班次(进出场,例保班次)。  
1436 - */  
1437 - fnCalcuOtherBc_: function() {  
1438 - var i;  
1439 - var _lpObj;  
1440 - var _minBcIndex;  
1441 - var _maxBcIndex;  
1442 - var _minBc;  
1443 - var _maxBc;  
1444 - var _otherbc = [];  
1445 - var _oFbbc;  
1446 -  
1447 - for (i = 0; i < _internalLpArray.length; i++) {  
1448 - _lpObj = _internalLpArray[i];  
1449 - _minBcIndex = _lpObj.getMinBcObjPosition();  
1450 - _maxBcIndex = _lpObj.getMaxBcObjPosition();  
1451 - _minBc = _lpObj.getBc(_minBcIndex[0], _minBcIndex[1]);  
1452 - _maxBc = _lpObj.getBc(_maxBcIndex[0], _maxBcIndex[1]);  
1453 -  
1454 - _otherbc = [];  
1455 - _otherbc.push(_factory.createBcObj(  
1456 - _lpObj, "bd", true, 1,  
1457 - _minBc.getFcTimeObj(),  
1458 - _paramObj  
1459 - ));  
1460 - _otherbc.push(_factory.createBcObj(  
1461 - _lpObj, "out", true, 1,  
1462 - _minBc.getFcTimeObj(),  
1463 - _paramObj  
1464 - ));  
1465 -  
1466 - _maxBc.setArrTimeObj(_paramObj.addMinute(_maxBc.getFcTimeObj(), _maxBc.getBcTime()));  
1467 - _maxBc.setStopTime(0);  
1468 - _otherbc.push(_factory.createBcObj(  
1469 - _lpObj, "in", true, 1,  
1470 - _maxBc.getArrTimeObj(),  
1471 - _paramObj  
1472 - ));  
1473 - _otherbc.push(_factory.createBcObj(  
1474 - _lpObj, "lc", true, 1,  
1475 - _maxBc.getArrTimeObj(),  
1476 - _paramObj  
1477 - ));  
1478 -  
1479 - // 5休2分班出场例保班次  
1480 - if (_lpObj.isBxFb5_2()) {  
1481 - _oFbbc = _lpObj.getBc(  
1482 - _lpObj.fnGetBcChainInfo(1)["s_q"],  
1483 - _lpObj.fnGetBcChainInfo(1)["s_b"]  
1484 - );  
1485 -  
1486 - _otherbc.push(_factory.createBcObj(  
1487 - _lpObj, "bd", true, 1,  
1488 - _oFbbc.getFcTimeObj(),  
1489 - _paramObj  
1490 - ));  
1491 - _otherbc.push(_factory.createBcObj(  
1492 - _lpObj, "out", true, 1,  
1493 - _oFbbc.getFcTimeObj(),  
1494 - _paramObj  
1495 - ));  
1496 - }  
1497 -  
1498 - _lpObj.addOtherBcArray(_otherbc);  
1499 - }  
1500 -  
1501 - },  
1502 -  
1503 - /**  
1504 - * 补每个路牌的其他班次(进出场,例保班次)  
1505 - * 所有的车次链前后都加进出场、报道班次  
1506 - */  
1507 - fnCalcuOtherBc: function() {  
1508 - var i;  
1509 - var j;  
1510 - var iBcChainCount;  
1511 - var oLp;  
1512 - var aOtherBc;  
1513 - var oStartBc;  
1514 - var oEndBc;  
1515 -  
1516 - for (i = 0; i < _internalLpArray.length; i++) {  
1517 - aOtherBc = [];  
1518 - oLp = _internalLpArray[i];  
1519 - iBcChainCount = oLp.fnGetBcChainCount();  
1520 -  
1521 - if (iBcChainCount == 1) { // 只有一个车次链,是连班班型  
1522 - // 头部要添加出场,例保班次  
1523 - oStartBc = oLp.getBc(  
1524 - oLp.fnGetBcChainInfo(0)["s_q"],  
1525 - oLp.fnGetBcChainInfo(0)["s_b"]  
1526 - );  
1527 - aOtherBc.push(_factory.createBcObj(  
1528 - oLp, "bd", true, 1,  
1529 - oStartBc.getFcTimeObj(),  
1530 - _paramObj  
1531 - ));  
1532 - aOtherBc.push(_factory.createBcObj(  
1533 - oLp, "out", true, 1,  
1534 - oStartBc.getFcTimeObj(),  
1535 - _paramObj  
1536 - ));  
1537 -  
1538 - // 尾部需添加进场,例保班次  
1539 - oEndBc = oLp.getBc(  
1540 - oLp.fnGetBcChainInfo(0)["e_q"],  
1541 - oLp.fnGetBcChainInfo(0)["e_b"]  
1542 - );  
1543 - aOtherBc.push(_factory.createBcObj(  
1544 - oLp, "in", true, 1,  
1545 - oEndBc.getArrTimeObj(),  
1546 - _paramObj  
1547 - ));  
1548 - aOtherBc.push(_factory.createBcObj(  
1549 - oLp, "lc", true, 1,  
1550 - oEndBc.getArrTimeObj(),  
1551 - _paramObj  
1552 - ));  
1553 - } else if (iBcChainCount == 2) { // 两个车次链,是分班班型  
1554 - // 第一个车次链开头有出场,报到班次,车次链结尾只有进场班次  
1555 - oStartBc = oLp.getBc(  
1556 - oLp.fnGetBcChainInfo(0)["s_q"],  
1557 - oLp.fnGetBcChainInfo(0)["s_b"]  
1558 - );  
1559 - aOtherBc.push(_factory.createBcObj(  
1560 - oLp, "bd", true, 1,  
1561 - oStartBc.getFcTimeObj(),  
1562 - _paramObj  
1563 - ));  
1564 - aOtherBc.push(_factory.createBcObj(  
1565 - oLp, "out", true, 1,  
1566 - oStartBc.getFcTimeObj(),  
1567 - _paramObj  
1568 - ));  
1569 -  
1570 - oEndBc = oLp.getBc(  
1571 - oLp.fnGetBcChainInfo(0)["e_q"],  
1572 - oLp.fnGetBcChainInfo(0)["e_b"]  
1573 - );  
1574 - aOtherBc.push(_factory.createBcObj(  
1575 - oLp, "in", true, 1,  
1576 - oEndBc.getArrTimeObj(),  
1577 - _paramObj  
1578 - ));  
1579 -  
1580 - // 第二个车次链开头只有出场班次,车次链结尾有进场,报到班次  
1581 - oStartBc = oLp.getBc(  
1582 - oLp.fnGetBcChainInfo(1)["s_q"],  
1583 - oLp.fnGetBcChainInfo(1)["s_b"]  
1584 - );  
1585 - aOtherBc.push(_factory.createBcObj(  
1586 - oLp, "out", true, 1,  
1587 - oStartBc.getFcTimeObj(),  
1588 - _paramObj  
1589 - ));  
1590 -  
1591 - oEndBc = oLp.getBc(  
1592 - oLp.fnGetBcChainInfo(1)["e_q"],  
1593 - oLp.fnGetBcChainInfo(1)["e_b"]  
1594 - );  
1595 - aOtherBc.push(_factory.createBcObj(  
1596 - oLp, "in", true, 1,  
1597 - oEndBc.getArrTimeObj(),  
1598 - _paramObj  
1599 - ));  
1600 - aOtherBc.push(_factory.createBcObj(  
1601 - oLp, "lc", true, 1,  
1602 - oEndBc.getArrTimeObj(),  
1603 - _paramObj  
1604 - ));  
1605 -  
1606 -  
1607 - } else {  
1608 - // 2个车次链以上,暂时没有此班型  
1609 - }  
1610 -  
1611 - oLp.addOtherBcArray(aOtherBc);  
1612 - }  
1613 - },  
1614 -  
1615 - /**  
1616 - * 祛除上标线开头的删除标记的班次。  
1617 - */  
1618 - fnRemoveDelFirstFlagBc: function() {  
1619 - var oLp = _internalLpArray[0];  
1620 - var aMinBcIndex = oLp.getMinBcObjPosition();  
1621 - if (oLp.getBc(aMinBcIndex[0], aMinBcIndex[1]).fnIsDelFlag()) {  
1622 - oLp.removeBc(aMinBcIndex[0], aMinBcIndex[1]);  
1623 - }  
1624 - },  
1625 - /**  
1626 - * 祛除上标线结尾的删除标记的班次。  
1627 - */  
1628 - fnRemoveDelLastFlagBc: function() {  
1629 - var oLp = _internalLpArray[0];  
1630 - var aMaxBcIndex = oLp.getMaxBcObjPosition();  
1631 - if (oLp.getBc(aMaxBcIndex[0], aMaxBcIndex[1]).fnIsDelFlag()) {  
1632 - oLp.removeBc(aMaxBcIndex[0], aMaxBcIndex[1]);  
1633 - }  
1634 - },  
1635 -  
1636 - /**  
1637 - * 调整路牌班次间隔(核准周转时间,停站时间)。  
1638 - * @param iFre int 迭代次数  
1639 - */  
1640 - fnAdjustLpBcInterval: function(iFre) {  
1641 - if (iFre > 0) {  
1642 - for (var i = 0; i < _internalLpArray.length; i++) {  
1643 - _internalLpArray[i].fnAdjustBcInterval(  
1644 - this.fnCalcuAverPeakStopTime(),  
1645 - this.fnCalcuAverTroughStopTime(),  
1646 - _paramObj);  
1647 - }  
1648 -  
1649 - this.fnAdjustLpBcInterval(iFre - 1);  
1650 - }  
1651 - },  
1652 -  
1653 - /**  
1654 - * 调整班次间隔。  
1655 - * @param bIsUp 是否上行  
1656 - * @param oStartTime 开始时间对象  
1657 - * @param iFre 迭代次数  
1658 - */  
1659 - fnAdjustBcInterval2_: function(bIsUp, oStartTime, iFre) {  
1660 - if (iFre > 0) {  
1661 - var aBc = _fnGetBcList2(bIsUp, oStartTime); // 指定方向的班次列表  
1662 - aBc.sort(function(o1, o2) {  
1663 - if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {  
1664 - return -1;  
1665 - } else {  
1666 - return 1;  
1667 - }  
1668 - });  
1669 - var i;  
1670 - var j;  
1671 -  
1672 - var iBcCountOfGroup = 3; // 3个班次取一次计算  
1673 - var aBcOfGroup; // 3个班次列表  
1674 - var aBcIntervalOfGroup; // 班次间隔列表,如:3个班次,2个间隔  
1675 -  
1676 - for (i = 0; i <= aBc.length - iBcCountOfGroup; i++) {  
1677 - aBcOfGroup = [];  
1678 - aBcIntervalOfGroup = [];  
1679 - for (j = i; j < i + iBcCountOfGroup; j++) {  
1680 - aBcOfGroup.push(aBc[j]);  
1681 - }  
1682 -  
1683 - for (j = 0; j < aBcOfGroup.length; j++) {  
1684 - if (j < aBcOfGroup.length - 1) {  
1685 - aBcIntervalOfGroup.push(aBcOfGroup[j + 1].getFcTimeObj().diff(  
1686 - aBcOfGroup[j].getFcTimeObj(), "m"));  
1687 - }  
1688 - }  
1689 -  
1690 - if (aBcIntervalOfGroup[0] < 19) {  
1691 - aBcOfGroup[1].addMinuteToFcsj(1);  
1692 - } else if (aBcIntervalOfGroup[0] > 20) {  
1693 - aBcOfGroup[1].addMinuteToFcsj(-1);  
1694 - } else {  
1695 - if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {  
1696 - //continue;  
1697 - } else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {  
1698 - aBcOfGroup[1].addMinuteToFcsj(-1);  
1699 - } else {  
1700 - aBcOfGroup[1].addMinuteToFcsj(1);  
1701 - }  
1702 - }  
1703 -  
1704 - }  
1705 -  
1706 - this.fnAdjustBcInterval2(bIsUp, oStartTime, iFre - 1);  
1707 - }  
1708 - },  
1709 -  
1710 - /**  
1711 - * 调整班次间隔。  
1712 - * @param boolean isUp 是否上行  
1713 - * @param oStartTime 开始时间对象  
1714 - * @param fre int 迭代次数  
1715 - */  
1716 - fnAdjustBcInterval: function(isUp, oStartTime, fre) {  
1717 - if (fre > 0) {  
1718 - var aBc = !oStartTime ? _fnGetBcList(isUp) : _fnGetBcList2(isUp, oStartTime); // 指定方向的班次列表  
1719 -  
1720 - aBc.sort(function(o1, o2) {  
1721 - if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {  
1722 - return -1;  
1723 - } else {  
1724 - return 1;  
1725 - }  
1726 - });  
1727 -  
1728 - var i;  
1729 - var j;  
1730 -  
1731 - var iBcCountOfGroup = 3; // 3个班次取一次计算  
1732 - var aBcOfGroup; // 3个班次列表  
1733 - var aBcIntervalOfGroup; // 班次间隔列表,如:3个班次,2个间隔  
1734 - var oBcFcTime; // 班次发车时间  
1735 -  
1736 - for (i = 0; i <= aBc.length - iBcCountOfGroup; i++) {  
1737 - aBcOfGroup = [];  
1738 - aBcIntervalOfGroup = [];  
1739 - for (j = i; j < i + iBcCountOfGroup; j++) {  
1740 - aBcOfGroup.push(aBc[j]);  
1741 - }  
1742 -  
1743 - for (j = 0; j < aBcOfGroup.length; j++) {  
1744 - if (j < aBcOfGroup.length - 1) {  
1745 - aBcIntervalOfGroup.push(aBcOfGroup[j + 1].getFcTimeObj().diff(  
1746 - aBcOfGroup[j].getFcTimeObj(), "m"));  
1747 - }  
1748 - }  
1749 -  
1750 - // 判定规则  
1751 - oBcFcTime = aBcOfGroup[1].getFcTimeObj();  
1752 -  
1753 - // 第一个班次发车时间不动,根据间隔,调整中间一个班次  
1754 - // 如果3个班次2个间隔时间差1分钟,不调整  
1755 - // 如果第一个间隔大,调整第二个班次往前1分钟  
1756 - // 如果第二个间隔大,调整第二个班次往后1分钟  
1757 -  
1758 - if (_paramObj.isTroughBc(oBcFcTime) &&  
1759 - aBcIntervalOfGroup[0] > _paramObj.getTroughMaxFcjx()) {  
1760 - aBcOfGroup[1].addMinuteToFcsj(-1);  
1761 - }  
1762 -  
1763 - //else if (_paramObj.isMPeakBc(oBcFcTime) &&  
1764 - // aBcIntervalOfGroup[0] < _paramObj.getMPeakMinFcjx()) {  
1765 - // aBcOfGroup[1].addMinuteToFcsj(1);  
1766 - //} else if (_paramObj.isMPeakBc(oBcFcTime) &&  
1767 - // aBcIntervalOfGroup[0] > _paramObj.getMPeakMaxFcjx()) {  
1768 - // aBcOfGroup[1].addMinuteToFcsj(-1);  
1769 - //} else if (_paramObj.isEPeakBc(oBcFcTime) &&  
1770 - // aBcIntervalOfGroup[0] < _paramObj.getEPeakMinFcjx()) {  
1771 - // aBcOfGroup[1].addMinuteToFcsj(1);  
1772 - //} else if (_paramObj.isEPeakBc(oBcFcTime) &&  
1773 - // aBcIntervalOfGroup[0] > _paramObj.getEPeakMaxFcjx()) {  
1774 - // aBcOfGroup[1].addMinuteToFcsj(-1);  
1775 - //}  
1776 -  
1777 -  
1778 - else {  
1779 - if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {  
1780 - //continue;  
1781 - } else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {  
1782 - aBcOfGroup[1].addMinuteToFcsj(-1);  
1783 - } else {  
1784 - aBcOfGroup[1].addMinuteToFcsj(1);  
1785 - }  
1786 - }  
1787 -  
1788 - //if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {  
1789 - // //continue;  
1790 - //} else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {  
1791 - // aBcOfGroup[1].addMinuteToFcsj(-1);  
1792 - //} else {  
1793 - // aBcOfGroup[1].addMinuteToFcsj(1);  
1794 - //}  
1795 -  
1796 -  
1797 - }  
1798 -  
1799 - this.fnAdjustBcInterval(isUp, oStartTime, fre - 1);  
1800 - }  
1801 -  
1802 - },  
1803 -  
1804 - /**  
1805 - * 调整班次间隔(平均间隔)。  
1806 - * @param bIsUp 是否上行  
1807 - * @param oStartTime 开始时间对象  
1808 - */  
1809 - fnAdjustBcInterval2_avg: function(bIsUp, oStartTime) {  
1810 - var aBc = !oStartTime ? _fnGetBcList(bIsUp) : _fnGetBcList2(bIsUp, oStartTime); // 指定方向的班次列表  
1811 - aBc.sort(function(o1, o2) {  
1812 - if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {  
1813 - return -1;  
1814 - } else {  
1815 - return 1;  
1816 - }  
1817 - });  
1818 -  
1819 - var j;  
1820 - var iCount = aBc.length - 1;  
1821 - var iC1 = Math.floor(aBc[aBc.length - 1].getFcTimeObj().diff(aBc[0].getFcTimeObj(), "m") / iCount);  
1822 - var iC2 = aBc[aBc.length - 1].getFcTimeObj().diff(aBc[0].getFcTimeObj(), "m") % iCount;  
1823 - var iTempTime;  
1824 -  
1825 - for (j = 0; j < iCount - iC2; j++) {  
1826 - iTempTime = aBc[j + 1].getFcTimeObj().diff(aBc[j].getFcTimeObj(), "m");  
1827 - aBc[j + 1].addMinuteToFcsj(iC1 - iTempTime);  
1828 - }  
1829 - for (j = 0; j < iC2; j++) {  
1830 - iTempTime = aBc[iCount - iC2 + j + 1].getFcTimeObj().diff(aBc[iCount - iC2 + j].getFcTimeObj(), "m");  
1831 - aBc[iCount - iC2 + j + 1].addMinuteToFcsj(iC1 + 1 - iTempTime);  
1832 - }  
1833 -  
1834 - },  
1835 -  
1836 - /**  
1837 - * 计算高峰平均停站时间。  
1838 - */  
1839 - fnCalcuAverPeakStopTime: function() {  
1840 - var i;  
1841 - var j;  
1842 - var aBc;  
1843 - var iBcCount = 0;  
1844 - var iSum = 0;  
1845 - for (i = 0; i < _internalLpArray.length; i++) {  
1846 - aBc = _internalLpArray[i].getBcArray();  
1847 -  
1848 - for (j = 0; j < aBc.length; j++) {  
1849 - if (!_paramObj.isTroughBc(aBc[j].getArrTimeObj())) {  
1850 - iBcCount ++;  
1851 - iSum += aBc[j].getStopTime();  
1852 - }  
1853 - }  
1854 - }  
1855 -  
1856 - return Math.floor(iSum / iBcCount);  
1857 - },  
1858 -  
1859 - /**  
1860 - * 计算低谷平均停站时间。  
1861 - */  
1862 - fnCalcuAverTroughStopTime: function() {  
1863 - var i;  
1864 - var j;  
1865 - var aBc;  
1866 - var iBcCount = 0;  
1867 - var iSum = 0;  
1868 - for (i = 0; i < _internalLpArray.length; i++) {  
1869 - aBc = _internalLpArray[i].getBcArray();  
1870 - for (j = 0; j < aBc.length; j++) {  
1871 - if (_paramObj.isTroughBc(aBc[j].getArrTimeObj())) {  
1872 - iBcCount ++;  
1873 - iSum += aBc[j].getStopTime();  
1874 - }  
1875 - }  
1876 - }  
1877 -  
1878 - return Math.floor(iSum / iBcCount);  
1879 - },  
1880 -  
1881 - //------------- 其他方法 -------------//  
1882 - /**  
1883 - * 返回内部路牌数据列表。  
1884 - * @returns {Array}  
1885 - */  
1886 - fnGetLpArray: function() {  
1887 - return _internalLpArray;  
1888 - },  
1889 -  
1890 - /**  
1891 - * 内部数据转化成显示用的班次数组。  
1892 - */  
1893 - fnToGanttBcArray: function() {  
1894 - var aAllBc = [];  
1895 - var aLpBc = [];  
1896 - var aEatBc = [];  
1897 - var oLp;  
1898 - var i;  
1899 - var j;  
1900 -  
1901 - for (i = 0; i < _internalLpArray.length; i++) {  
1902 - oLp = _internalLpArray[i];  
1903 - aLpBc = [];  
1904 - aLpBc = aLpBc.concat(oLp.getOtherBcArray(), oLp.getBcArray());  
1905 -  
1906 - aEatBc = [];  
1907 - // 根据班次的吃饭时间添加吃饭班次  
1908 - for (j = 0; j < aLpBc.length; j++) {  
1909 - if (aLpBc[j].fnGetEatTime() > 0) {  
1910 - aEatBc.push(_factory.createBcObj(  
1911 - oLp,  
1912 - "cf",  
1913 - !aLpBc[j].isUp(), // 和上一个班次方向相反  
1914 - 1,  
1915 - _paramObj.addMinute(aLpBc[j].getArrTimeObj(), aLpBc[j].getStopTime()), // 使用上一个班次的到达时间作为开始时间  
1916 - _paramObj  
1917 - ));  
1918 - }  
1919 - }  
1920 - aLpBc = aLpBc.concat(aEatBc);  
1921 -  
1922 - // 按照发车时间排序  
1923 - aLpBc.sort(function(o1, o2) {  
1924 - if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {  
1925 - return -1;  
1926 - } else {  
1927 - return 1;  
1928 - }  
1929 - });  
1930 -  
1931 - // 重新赋值fcno  
1932 - for (j = 0; j < aLpBc.length; j++) {  
1933 - aLpBc[j].fnSetFcno(j + 1);  
1934 - }  
1935 -  
1936 - aAllBc = aAllBc.concat(aLpBc);  
1937 - }  
1938 -  
1939 - var aGanttBc = [];  
1940 - for (i = 0; i < aAllBc.length; i++) {  
1941 - aGanttBc.push(aAllBc[i].toGanttBcObj());  
1942 - }  
1943 -  
1944 - return aGanttBc;  
1945 - }  
1946 -  
1947 - };  
1948 - 1 +/**
  2 + * 内部行车计划对象。
  3 + * @constructor
  4 + */
  5 +var InternalScheduleObj = function(paramObj, lpArray, factory) {
  6 + // 参数对象
  7 + var _paramObj = paramObj;
  8 + // 外部的路牌数组
  9 + var _lpArray = lpArray;
  10 + // 工厂对象
  11 + var _factory = factory;
  12 +
  13 + //------------------ 初始化方法1,以及计算关联的内部变量 -----------------//
  14 + var _qIsUp; // 每一圈是上行开始还是下行开始
  15 + var _qCount = 0; // 总的圈数
  16 + var _internalLpArray = []; // 内部对象数组
  17 + var _aBxDesc = [ // 各种班型描述(班型名称,平均工时,平均需要的班次数,平均工时)
  18 + {'sType':'六工一休', 'fHoursV':6.66, 'fBcCount': 0, 'fAverTime': 0},
  19 + {'sType':'五工一休', 'fHoursV':6.85, 'fBcCount': 0, 'fAverTime': 0},
  20 + {'sType':'四工一休', 'fHoursV':7.14, 'fBcCount': 0, 'fAverTime': 0},
  21 + {'sType':'三工一休', 'fHoursV':7.61, 'fBcCount': 0, 'fAverTime': 0},
  22 + {'sType':'二工一休', 'fHoursV':8.57, 'fBcCount': 0, 'fAverTime': 0},
  23 + {'sType':'一工一休', 'fHoursV':11.42, 'fBcCount': 0, 'fAverTime': 0},
  24 + {'sType':'五工二休', 'fHoursV':7.99, 'fBcCount': 0, 'fAverTime': 0},
  25 + {'sType':'无工休', 'fHoursV':5.43, 'fBcCount': 0, 'fAverTime': 0}
  26 + ];
  27 +
  28 + var _fnInitFun1 = function() { // 初始化方法1
  29 + console.log("//---------------- 行车计划,初始化方法1 start ----------------//");
  30 +
  31 + //----------------------- 1、确定上标线的方向,圈的方向 -------------------//
  32 +
  33 + // 确定_qIsUp,哪个方向的首班车晚就用哪个
  34 + _qIsUp = _paramObj.getUpFirstDTimeObj().isBefore(
  35 + _paramObj.getDownFirstDTimeObj()) ? false : true;
  36 + // 上标线开始时间,就是方向的首班车时间
  37 + var st = _qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();
  38 + // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向
  39 + var et;
  40 + var et_IsUp;
  41 + if (_paramObj.getUpLastDtimeObj().isBefore(
  42 + _paramObj.getDownLastDTimeObj())) {
  43 + et = _paramObj.getDownLastDTimeObj();
  44 + et_IsUp = false;
  45 + } else {
  46 + et = _paramObj.getUpLastDtimeObj();
  47 + et_IsUp = true;
  48 + }
  49 +
  50 + //------------------------ 2、计算总共有多少圈 ------------------------//
  51 +
  52 + // 以开始时间,结束时间,构造上标线用连班班次发车时间
  53 + var bcFcsjArrays = []; // 班次发车时间对象数组
  54 + var bcArsjArrays = []; // 班次到达时间对象数组
  55 + var isUp = _qIsUp; // 方向
  56 + var bcCount = 1; // 班次数
  57 +
  58 + var _kssj = st; // 开始时间
  59 + var _bcsj = paramObj.calcuTravelTime(_kssj, isUp); // 班次历时
  60 + var _arrsj = paramObj.addMinute(_kssj, _bcsj); // 到达时间
  61 + var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj); // 停站时间
  62 +
  63 + do {
  64 + bcFcsjArrays.push(_kssj);
  65 + bcArsjArrays.push(_arrsj);
  66 +
  67 + _kssj = paramObj.addMinute(_kssj, _bcsj + _stoptime);
  68 + _bcsj = paramObj.calcuTravelTime(_kssj, isUp);
  69 + _arrsj = paramObj.addMinute(_kssj, _bcsj);
  70 + _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj);
  71 +
  72 + bcCount ++;
  73 + isUp = !isUp;
  74 + } while(_kssj.isBefore(et));
  75 + bcCount--; // 因为先做do,所以总的班次要减1
  76 + //if (bcCount > 0 && bcArsjArrays[bcCount - 1].isAfter(et)) {
  77 + // // 如果最后一个班次的到达时间超过结束时间,也要去除
  78 + // bcFcsjArrays.splice(bcCount - 1, 1);
  79 + // bcArsjArrays.splice(bcCount - 1, 1);
  80 + // bcCount--;
  81 + //}
  82 + var _qCount_p1 = Math.floor(bcCount / 2); // 2个班次一圈
  83 + var _qCount_p2 = bcCount % 2; // 余下的1个班次也算一圈
  84 +
  85 + // 利用连班数组计算圈数
  86 + _qCount = 1; // 前面加1圈,补中标线的班次
  87 + _qCount += _qCount_p1;
  88 + _qCount += _qCount_p2;
  89 +
  90 + // 计算最后是不是还要补一圈
  91 + if (_qCount > 1) { // 总的圈数就1圈,没必要加了(其实是不可能的,除非参数里问题)
  92 + if (_qCount_p2 == 0) { // 没有余下班次,整数圈数
  93 + // 最后一个班次的方向一定和开始的方向相反,如:上-下,上-下,上-下,一共三圈,最后一个班次为下行
  94 + // 判定最后一个班次的方向和上标线判定结束时间的班次方向是否一致
  95 + if (!_qIsUp == et_IsUp) {
  96 + // 一致不用加圈数
  97 + } else {
  98 + // 不一致需要加圈补最后一个结束时间班次
  99 + _qCount ++;
  100 + }
  101 + } else {
  102 + // 有余下的圈数,最后要不补的班次不管上行,下行都在这一圈里
  103 + // 不需要在补圈数了
  104 + }
  105 + }
  106 +
  107 + //------------------------ 3、根据路牌数,圈数创建路牌对象 ----------------------//
  108 +
  109 + // 创建内部的路牌数组,并把之前的连班路牌添加进上标线路牌中
  110 + var i;
  111 + for (i = 0; i < _lpArray.length; i++) {
  112 + _internalLpArray.push(new InternalLpObj(_lpArray[i], _qCount, _qIsUp));
  113 + }
  114 + // 初始化上标线,从第1圈开始
  115 + _internalLpArray[0].initDataFromTimeToTime(bcFcsjArrays[0], et, _qIsUp, 1, _paramObj, _factory);
  116 +
  117 + // 以上标线为基础,计算各种班型工时对应的圈数、班次数
  118 + var aBcArray = _internalLpArray[0].getBcArray();
  119 + aBcArray[0].fnSetIsFirstBc(true); // 设置首班班次标识
  120 +
  121 + if (aBcArray.length % 2 != 0) { // 不能整除2,去除一个班次计算
  122 + aBcArray.splice(aBcArray.length - 1, 1);
  123 + }
  124 +
  125 + // 午饭吃饭时间
  126 + var iLTime = _paramObj.fnGetLunchTime();
  127 + // 晚饭吃饭时间
  128 + var iDTime = _paramObj.fnGetDinnerTime();
  129 + // 出场时间
  130 + var iOutTime = _qIsUp ? _paramObj.getUpOutTime() : _paramObj.getDownOutTime();
  131 + // 进场时间
  132 + var iInTime = _qIsUp ? _paramObj.getDownInTime() : _paramObj.getUpInTime();
  133 + // 例保时间
  134 + var iBTime = _paramObj.getLbTime();
  135 +
  136 + var sum = 0; // 总班次时间
  137 + for (i = 0; i < aBcArray.length; i++) {
  138 + sum += aBcArray[i].getBcTime() + aBcArray[i].getStopTime();
  139 + }
  140 + sum += iLTime; // 加午饭时间
  141 + sum += iDTime; // 加晚饭时间
  142 + for (i = 0; i < _aBxDesc.length; i++) {
  143 + _aBxDesc[i].fAverTime = sum / (aBcArray.length / 2); // 平均周转时间不算进出场,例保时间
  144 +
  145 + // 计算5休2的班次数(双进出场,4个例保)
  146 + if (i == 6) {
  147 + _aBxDesc[i].fQCount =
  148 + (_aBxDesc[i].fHoursV * 60 - iOutTime * 2 - iInTime * 2 - iBTime * 4) /
  149 + _aBxDesc[i].fAverTime;
  150 + _aBxDesc[i].fBcCount = _aBxDesc[i].fQCount * 2;
  151 + } else { // 进出场,2个例保
  152 + _aBxDesc[i].fQCount =
  153 + (_aBxDesc[i].fHoursV * 60 - iOutTime - iInTime - iBTime * 2) /
  154 + _aBxDesc[i].fAverTime;
  155 + _aBxDesc[i].fBcCount = _aBxDesc[i].fQCount * 2;
  156 + }
  157 + }
  158 +
  159 +
  160 + // 在第一个班次之前再添加一个模拟班次,用于中标线的作用
  161 + // 那一圈必定是低谷,而且圈索引0,班次索引1,暂时标记,最后删除
  162 + var iFirstStopTime =
  163 + _paramObj.fnCalcuFixedStopNumber(
  164 + _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -10),
  165 + _qIsUp
  166 + );
  167 + var iXXTime = _qIsUp ? _paramObj.getDownTroughTime() : _paramObj.getUpTroughTime();
  168 + var oFlagBc = _factory.createBcObj( // 标记班次
  169 + _internalLpArray[0],
  170 + "normal",
  171 + !_qIsUp,
  172 + 1,
  173 + _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -(iFirstStopTime + iXXTime)),
  174 + _paramObj
  175 + );
  176 + oFlagBc.fnSetDelFlag(true); // 标记了删除记号
  177 +
  178 + _internalLpArray[0].setBc(0, 1, oFlagBc);
  179 +
  180 + // 在最后一圈也补上一个或者2个模拟班次,暂时标记,最后需要删除
  181 + var aMaxBcIndex = _internalLpArray[0].getMaxBcObjPosition();
  182 + if (aMaxBcIndex[0] == _qCount - 1) { // 可能加半圈
  183 + oFlagBc = _factory.createBcObj( // 标记班次
  184 + _internalLpArray[0],
  185 + "normal",
  186 + !_qIsUp,
  187 + 1,
  188 + _paramObj.addMinute(
  189 + _internalLpArray[0].getBc(_qCount - 1, 0).getArrTimeObj(),
  190 + _internalLpArray[0].getBc(_qCount - 1, 0).getStopTime()),
  191 + _paramObj
  192 + );
  193 + oFlagBc.fnSetDelFlag(true); // 标记了删除记号
  194 + _internalLpArray[0].setBc(_qCount - 1, 1, oFlagBc);
  195 +
  196 + } else { // 加完整的一圈
  197 + oFlagBc = _factory.createBcObj( // 标记班次
  198 + _internalLpArray[0],
  199 + "normal",
  200 + _qIsUp,
  201 + 1,
  202 + _paramObj.addMinute(
  203 + _internalLpArray[0].getBc(_qCount - 2, 1).getArrTimeObj(),
  204 + _internalLpArray[0].getBc(_qCount - 2, 1).getStopTime()),
  205 + _paramObj
  206 + );
  207 + oFlagBc.fnSetDelFlag(true); // 标记了删除记号
  208 + _internalLpArray[0].setBc(_qCount - 1, 0, oFlagBc);
  209 +
  210 + oFlagBc = _factory.createBcObj( // 标记班次
  211 + _internalLpArray[0],
  212 + "normal",
  213 + !_qIsUp,
  214 + 1,
  215 + _paramObj.addMinute(
  216 + _internalLpArray[0].getBc(_qCount - 1, 0).getArrTimeObj(),
  217 + _internalLpArray[0].getBc(_qCount - 1, 0).getStopTime()),
  218 + _paramObj
  219 + );
  220 + oFlagBc.fnSetDelFlag(true); // 标记了删除记号
  221 + _internalLpArray[0].setBc(_qCount - 1, 1, oFlagBc);
  222 +
  223 + }
  224 +
  225 + console.log("上行首班车时间:" + _paramObj.getUpFirstDTimeObj().format("HH:mm") +
  226 + "上行末班车时间:" + _paramObj.getUpLastDtimeObj().format("HH:mm"));
  227 + console.log("下行首班车时间:" + _paramObj.getDownFirstDTimeObj().format("HH:mm") +
  228 + "下行末班车时间:" + _paramObj.getDownLastDTimeObj().format("HH:mm"));
  229 + console.log("总共计算的圈数:" + _qCount);
  230 + console.log("圈的方向isUP:" + _qIsUp);
  231 + console.log("班型描述(以下):");
  232 + console.log(_aBxDesc);
  233 + console.log("所有路牌间隔描述(以下):");
  234 + for (i = 0; i < _internalLpArray.length; i++) {
  235 + console.log(_internalLpArray[i]._$_aVerticalIntervalTime);
  236 + }
  237 + console.log("//---------------- 行车计划,初始化方法1 end ----------------//");
  238 +
  239 + };
  240 +
  241 + //------------------ 初始化方法2,以及计算关联的内部变量 ----------------//
  242 + var _approximate_zgfQIndex; // 预估早高峰车辆从第几圈开始全部发出
  243 + var _approximate_zgfBIndex; // 预估早高峰车辆从第几圈第几个班次开始全部发出(上行或下行)
  244 + var _approximate_wgfQIndex; // 预估晚高峰车辆从第几圈开始全部发出
  245 + var _approximate_wgfBIndex; // 预估晚高峰车辆从第几圈第几个班次开始全部发出(上行或下行)
  246 +
  247 + var _fnInitFun2 = function() { // 初始化方法2
  248 + console.log("//---------------- 行车计划,初始化方法2 start ----------------//");
  249 +
  250 + //------------------------ 1、计算车辆总数 ------------------------//
  251 + // 是用高峰上行周转时间除以高峰平均间隔得到的
  252 + // 这样算还算合理,车辆不多不少,待以后有新的算法再修正
  253 + var iClCount = _paramObj.calcuClzx();
  254 +
  255 + //------------------------ 2、计算所有路牌的发车在各个圈中的间隔 --------------------//
  256 + var i;
  257 + var j;
  258 + var iBindex = 1;
  259 + var iZzsj;
  260 + var oLp;
  261 + var iC1;
  262 + var iC2;
  263 +
  264 + for (i = 0; i < _qCount - 1; i++) {
  265 + while (iBindex <= 1) {
  266 + // 每圈每个方向的周转时间不一致,以上标线为主
  267 + oLp = _internalLpArray[0];
  268 + iZzsj = oLp.getBc(i + 1, iBindex).getFcTimeObj().diff(
  269 + oLp.getBc(i, iBindex).getFcTimeObj(), "m"
  270 + );
  271 +
  272 + iC1 = Math.floor(iZzsj / iClCount);
  273 + iC2 = iZzsj % iClCount;
  274 +
  275 + for (j = 0; j < iClCount - iC2; j++) {
  276 + oLp = _internalLpArray[j];
  277 + oLp.fnSetVerticalIntervalTime(i, iBindex, iC1);
  278 + }
  279 +
  280 + for (j = 0; j < iC2; j++) {
  281 + oLp = _internalLpArray[iClCount - iC2 + j];
  282 + oLp.fnSetVerticalIntervalTime(i, iBindex, iC1 + 1);
  283 + }
  284 +
  285 + iBindex ++;
  286 +
  287 + }
  288 + iBindex = 0;
  289 + }
  290 + // 最后一圈没有下一圈的参照,周转时间没发获取,由于都是低谷,所以使用倒数第二圈的间隔最为最后一圈的间隔
  291 + for (i = 0; i < _internalLpArray.length; i++) {
  292 + oLp = _internalLpArray[i];
  293 + oLp.fnSetVerticalIntervalTime(_qCount - 1, 0, oLp.fnGetVerticalIntervalTime(_qCount - 2, 0));
  294 + oLp.fnSetVerticalIntervalTime(_qCount - 1, 1, oLp.fnGetVerticalIntervalTime(_qCount - 2, 1));
  295 + }
  296 +
  297 + //------------------------ 3、预估早高峰全部出车第几圈第几个班次全部出车,计算路牌之间的发车间隔 ------------------//
  298 +
  299 + // 以上标线为标准,查找离早高峰开始时间最近的班次作为早高峰开始班次
  300 + // 以这个班次为早高峰起点,全部出车策略
  301 + var qbcIndexArray = _internalLpArray[0].getQBcIndexWithFcTime(
  302 + _paramObj.getMPeakStartTimeObj(), true, true);
  303 + var qIndex = qbcIndexArray[0]; // 第几圈
  304 + var bIndex = qbcIndexArray[1]; // 第几个班次
  305 +
  306 + for (i = 1; i < _internalLpArray.length; i++) {
  307 + _fnGenerateBcAndSetBc(i, qIndex, bIndex);
  308 + }
  309 +
  310 + _approximate_zgfQIndex = qIndex;
  311 + _approximate_zgfBIndex = bIndex;
  312 +
  313 + //------------------------ 4、预估晚高峰全部出车第几圈第几个班次全部出车,计算路牌之间的发车间隔 ------------------//
  314 +
  315 + // 以上标线为标准,查找离晚高峰开始时间最近的班次作为晚高峰开始班次
  316 + // 以这个班次为早高峰起点,全部出车策略
  317 + qbcIndexArray = _internalLpArray[0].getQBcIndexWithFcTime(
  318 + _paramObj.getEPeakStartTimeObj(), true, true);
  319 + qIndex = qbcIndexArray[0]; // 第几圈
  320 + bIndex = qbcIndexArray[1]; // 第几个班次
  321 +
  322 + for (i = 1; i < _internalLpArray.length; i++) {
  323 + _fnGenerateBcAndSetBc(i, qIndex, bIndex);
  324 + }
  325 +
  326 + _approximate_wgfQIndex = qIndex;
  327 + _approximate_wgfBIndex = bIndex;
  328 +
  329 + console.log("早高峰周转时间(固定最大停战时间):" + _paramObj.calcuPeakZzsj() + "分钟");
  330 + console.log("早高峰发车时间范围:" + _paramObj.getMPeakMinFcjx() + "分钟 --- " + _paramObj.getMPeakMaxFcjx() + "分钟");
  331 + console.log("预估早高峰第" + _approximate_zgfQIndex + "(index)圈,第" + _approximate_zgfBIndex + "(index)班次车辆全部发出");
  332 + console.log("预估晚高峰第" + _approximate_wgfQIndex + "(index)圈,第" + _approximate_wgfBIndex + "(index)班次车辆全部发出");
  333 + console.log("//---------------- 行车计划,初始化方法2 end ----------------//");
  334 + };
  335 +
  336 + //----------------------- 初始化方法3,计算连班分班的路牌分布 ----------------//
  337 + var _iBx_lb_lpcount; // 连班路牌数
  338 + var _iBx_5_2_fb_lpcount; // 5休2分班路牌数
  339 + var _iBx_other_fb_lpcount; // 其他分班路牌数
  340 +
  341 + var _fnInitFun3 = function() { // 初始化方法3
  342 + console.log("//---------------- 行车计划,初始化方法3 start ----------------//");
  343 +
  344 + //--------------------- 1、计算分班连班班型车辆分布数 --------------------//
  345 + // 总共车辆数(高峰最大车辆数)
  346 + var iCls = _paramObj.calcuClzx();
  347 + // 低谷最少配车(连班车数量)
  348 + var iDgminpc = Math.round(_paramObj.calcuTroughZzsj() / _paramObj.getTroughMaxFcjx());
  349 + // 加班车路牌数(做5休2的路牌数)
  350 + var i_5_2_lpes = _paramObj.getJBLpes();
  351 +
  352 + // 做些简单的验证
  353 + if (iCls < iDgminpc) {
  354 + alert("总配车数小于低谷最小配车");
  355 + throw "总配车数小于低谷最小配车";
  356 + }
  357 + if (iDgminpc < 2) {
  358 + alert("连班路牌小于2,办不到啊");
  359 + throw "连班路牌小于2,办不到啊";
  360 + }
  361 + if (iCls - iDgminpc < i_5_2_lpes) {
  362 + alert("总分班路牌数小于加班路牌数");
  363 + throw "总分班路牌数小于加班路牌数";
  364 + }
  365 +
  366 + //// 修正连班路牌数,班次间隔大于20的,加1,直至班次间隔小于20
  367 + //while(_paramObj.calcuPeakZzsj() / iDgminpc > 20) {
  368 + // iDgminpc ++;
  369 + //}
  370 + _iBx_lb_lpcount = iDgminpc;
  371 +
  372 + _iBx_5_2_fb_lpcount = i_5_2_lpes;
  373 + _iBx_other_fb_lpcount = iCls - _iBx_lb_lpcount - i_5_2_lpes;
  374 +
  375 + //------------------------ 2、利用间隔法计算连班路牌分布 --------------------//
  376 + var i;
  377 + var j;
  378 + var iC1 = Math.floor(_internalLpArray.length / _iBx_lb_lpcount);
  379 + var iC2 = _internalLpArray.length % _iBx_lb_lpcount;
  380 + var iLpIndex;
  381 +
  382 + for (i = 0; i < _iBx_lb_lpcount - iC2; i++) {
  383 + iLpIndex = i * iC1;
  384 + _internalLpArray[iLpIndex].setBxLb(true);
  385 + _internalLpArray[iLpIndex].setBxDesc("连班");
  386 + }
  387 + for (j = 0; j < iC2; j++) {
  388 + iLpIndex = i * iC1 + j * (iC1 + 1);
  389 + _internalLpArray[iLpIndex].setBxLb(true);
  390 + _internalLpArray[iLpIndex].setBxDesc("连班");
  391 + }
  392 +
  393 + //------------------------ 3、利用间隔法计算分班班型路牌分布 --------------------//
  394 + // 获取分班路牌索引
  395 + var aNotLbIndexes = [];
  396 + for (i = 0; i < _internalLpArray.length; i++) {
  397 + if (!_internalLpArray[i].isBxLb()) {
  398 + aNotLbIndexes.push(i);
  399 + }
  400 + }
  401 + // 先5休2分班
  402 + iC1 = Math.floor(aNotLbIndexes.length / _iBx_5_2_fb_lpcount);
  403 + iC2 = aNotLbIndexes.length % _iBx_5_2_fb_lpcount;
  404 +
  405 + for (i = 0; i < _iBx_5_2_fb_lpcount - iC2; i++) {
  406 + iLpIndex = aNotLbIndexes[i * iC1];
  407 + _internalLpArray[iLpIndex].setBxLb(false);
  408 + _internalLpArray[iLpIndex].setBxFb(true);
  409 + _internalLpArray[iLpIndex].setBxFb5_2(true);
  410 + _internalLpArray[iLpIndex].setBxDesc("5休2分班");
  411 + }
  412 + for (i = 0; i < iC2; i++) {
  413 + iLpIndex = aNotLbIndexes[_iBx_5_2_fb_lpcount - iC2 + i * (iC1 + 1)];
  414 + _internalLpArray[iLpIndex].setBxLb(false);
  415 + _internalLpArray[iLpIndex].setBxFb(true);
  416 + _internalLpArray[iLpIndex].setBxFb5_2(true);
  417 + _internalLpArray[iLpIndex].setBxDesc("5休2分班");
  418 + }
  419 + // 其他分班
  420 + for (i = 0; i < aNotLbIndexes.length; i++) {
  421 + iLpIndex = aNotLbIndexes[i];
  422 + if (!_internalLpArray[iLpIndex].isBxFb5_2()) {
  423 + _internalLpArray[iLpIndex].setBxLb(false);
  424 + _internalLpArray[iLpIndex].setBxFb(true);
  425 + _internalLpArray[iLpIndex].setBxFb5_2(false);
  426 + _internalLpArray[iLpIndex].setBxDesc("其他分班");
  427 + }
  428 + }
  429 +
  430 + console.log("高峰周转时间:" + _paramObj.calcuPeakZzsj());
  431 + console.log("连班路牌数:" + _iBx_lb_lpcount);
  432 + console.log("5休2分班路牌数:" + _iBx_5_2_fb_lpcount);
  433 + console.log("其他分班路牌数:" + _iBx_other_fb_lpcount);
  434 + var aLbIndexes = [];
  435 + for (i = 0; i < _internalLpArray.length; i++) {
  436 + if (_internalLpArray[i].isBxLb()) {
  437 + aLbIndexes.push(i);
  438 + }
  439 + }
  440 + console.log("连班路牌indexes=" + aLbIndexes);
  441 + var a_5_2_fbIndexes = [];
  442 + for (i = 0; i < _internalLpArray.length; i++) {
  443 + if (_internalLpArray[i].isBxFb() && _internalLpArray[i].isBxFb5_2()) {
  444 + a_5_2_fbIndexes.push(i);
  445 + }
  446 + }
  447 + console.log("5休2分班路牌indexes=" + a_5_2_fbIndexes);
  448 + var a_other_fbIndexes = [];
  449 + for (i = 0; i < _internalLpArray.length; i++) {
  450 + if (_internalLpArray[i].isBxFb() && !_internalLpArray[i].isBxFb5_2()) {
  451 + a_other_fbIndexes.push(i);
  452 + }
  453 + }
  454 + console.log("其他分班路牌indexes=" + a_other_fbIndexes);
  455 +
  456 + console.log("//---------------- 行车计划,初始化方法3 end ----------------//");
  457 + };
  458 +
  459 + //----------------------- 初始化方法4,计算中标线位置 -------------------------//
  460 + var _iZbx_lpIndex; // 中标线对应第几个路牌
  461 +
  462 + var _fnInitFun4 = function() { // 初始化方法4
  463 + console.log("//---------------- 行车计划,初始化方法4 start ----------------//");
  464 +
  465 + //---------------------------- 1、模拟一个中标线,使用临时路牌 ----------------------//
  466 + // 构造中标线
  467 + // 中标线开始时间,就是方向的首班车时间
  468 + var oSt = !_qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();
  469 + // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向
  470 + // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向
  471 + var oEt;
  472 + if (_paramObj.getUpLastDtimeObj().isBefore(
  473 + _paramObj.getDownLastDTimeObj())) {
  474 + oEt = _paramObj.getDownLastDTimeObj();
  475 + } else {
  476 + oEt = _paramObj.getUpLastDtimeObj();
  477 + }
  478 +
  479 + var oTempLp = new InternalLpObj({lpNo: -999, lpName: "-999"}, _qCount, _qIsUp);
  480 + oTempLp.initDataFromTimeToTime(
  481 + oSt,
  482 + oEt,
  483 + !_qIsUp,
  484 + 0,
  485 + _paramObj,
  486 + _factory
  487 + );
  488 +
  489 + //------------------------ 2、找出中标线的早高峰班次,计算应该插在当前路牌数组的那个位置 ----------------//
  490 + // 找出中标线对应的早高峰的班次对象
  491 + var oZb_gf_bc = oTempLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex);
  492 + //alert(oZb_gf_bc.getFcTimeObj().format("HH:mm"));
  493 +
  494 + // 把所有连班路牌高峰班次重新构造成一个一个的圈数组,计算对应中标线最近的是第几个路牌
  495 + // 中标线和上标线一样在连班路牌上
  496 + var aTempq = [];
  497 + var oTempq;
  498 + var oTempb;
  499 + var i;
  500 + var oLp;
  501 +
  502 + var aLbIndexes = []; // 连班的路牌索引
  503 + for (i = 0; i < _internalLpArray.length; i++) {
  504 + if (_internalLpArray[i].isBxLb()) {
  505 + aLbIndexes.push(i);
  506 + }
  507 + }
  508 +
  509 + for (i = 0; i < aLbIndexes.length; i++) {
  510 + oLp = _internalLpArray[aLbIndexes[i]];
  511 +
  512 + oTempb = oLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex);
  513 + if (oTempb.isUp() == _qIsUp) {
  514 + oTempq = new InternalGroupObj(oLp, _qIsUp, oTempb, undefined);
  515 + } else {
  516 + oTempq = new InternalGroupObj(oLp, _qIsUp, undefined, oTempb);
  517 + }
  518 + aTempq.push(oTempq);
  519 +
  520 + }
  521 +
  522 + var aTtindex = oTempLp.fnGetQBcIndexWithFcTimeFromGroupArray( // 找出最接近中标线的路牌索引
  523 + oZb_gf_bc.getFcTimeObj(),
  524 + aTempq,
  525 + true,
  526 + true
  527 + );
  528 +
  529 + _iZbx_lpIndex = aLbIndexes[aTtindex[0]]; // 中标线放在第几个路牌
  530 +
  531 + oTempLp.getMinBcObj().fnSetIsFirstBc(true); // 设置首班班次标识
  532 +
  533 + if (_iZbx_lpIndex == 0) { // 如果中标线和上标线一致
  534 + var oFirstBcIndexes = oTempLp.getMinBcObjPosition();
  535 + var oFirstBc = oTempLp.getMinBcObj();
  536 + oFirstBc.setLp(_internalLpArray[_iZbx_lpIndex]);
  537 + oFirstBc.fnSetDelFlag(false);
  538 + _internalLpArray[_iZbx_lpIndex].setBc(oFirstBcIndexes[0], oFirstBcIndexes[1], oFirstBc);
  539 + } else {
  540 + oTempLp.setLp(_lpArray[_iZbx_lpIndex]); // 设置原始路牌对象
  541 + oTempLp._$_aVerticalIntervalTime = _internalLpArray[_iZbx_lpIndex]._$_aVerticalIntervalTime; // 设置纵向最小发车间隔
  542 + oTempLp.setBxLb(_internalLpArray[_iZbx_lpIndex].isBxLb());
  543 + oTempLp.setBxFb(_internalLpArray[_iZbx_lpIndex].isBxFb());
  544 + oTempLp.setBxFb5_2(_internalLpArray[_iZbx_lpIndex].isBxFb5_2());
  545 +
  546 + // 修正除了第一个班次外,其余其他班次
  547 + var iBcindex = 0;
  548 + for (i = 1; i < _qCount; i++) {
  549 + while (iBcindex <= 1) {
  550 + if (oTempLp.getBc(i, iBcindex)) { // 替换存在的班次
  551 + oTempLp.setBc(i, iBcindex, _fnGenerateBc(_iZbx_lpIndex, i, iBcindex));
  552 + }
  553 + iBcindex ++;
  554 + }
  555 + iBcindex = 0;
  556 + }
  557 +
  558 + _internalLpArray[_iZbx_lpIndex] = oTempLp;
  559 + }
  560 +
  561 + console.log("中标线对应第" + (_iZbx_lpIndex + 1) + "个路牌");
  562 +
  563 + console.log("//---------------- 行车计划,初始化方法4 end ----------------//");
  564 + };
  565 +
  566 + //-------------------- 重要的内部方法 -----------------------//
  567 + /**
  568 + * 核心方法,利用路牌间隔纵向生成班次。
  569 + * @param iLpindex 路牌索引
  570 + * @param iQindex 圈索引
  571 + * @param iBcindex 班次索引
  572 + * @returns object InternalBcObj,失败 false
  573 + */
  574 + var _fnGenerateBc = function(iLpindex, iQindex, iBcindex) {
  575 + // 以上标线为起始点,使用路牌在不同圈,班次索引的发车间隔,计算班次
  576 + // 注意,发车间隔是指下一个班次应该距离当前班次间隔,是从下往上的
  577 +
  578 + // 1、参数验证
  579 + if (iLpindex == 0) { // 上标线的班次不需要生成
  580 + return false;
  581 + }
  582 +
  583 + // 2、计算间隔
  584 + var i;
  585 + var oLp;
  586 + var iTime = 0;
  587 + for (i = 0; i < iLpindex; i++) {
  588 + oLp = _internalLpArray[i];
  589 + iTime += oLp.fnGetVerticalIntervalTime(iQindex, iBcindex);
  590 + }
  591 +
  592 + // 3、生成班次
  593 + var _oKsbc = _internalLpArray[0].getBc(iQindex, iBcindex);
  594 + if (!_oKsbc) {
  595 + return false;
  596 + }
  597 + var _oKssj = _paramObj.addMinute(_oKsbc.getFcTimeObj(), iTime);
  598 + var _oBc = _factory.createBcObj(
  599 + _internalLpArray[iLpindex],
  600 + "normal", _oKsbc.isUp(),
  601 + 1, _oKssj, _paramObj);
  602 +
  603 + return _oBc;
  604 +
  605 + };
  606 +
  607 + /**
  608 + * 核心方法,在指定位置生成班次并添加到路牌指定位置中。
  609 + * @param lpIndex 第几个路牌
  610 + * @param qIndex 第几圈
  611 + * @param bcIndex 第几个班次
  612 + */
  613 + var _fnGenerateBcAndSetBc = function(lpIndex, qIndex, bcIndex) {
  614 + var _bcObj = _fnGenerateBc(lpIndex, qIndex, bcIndex);
  615 + if (_bcObj) {
  616 + _internalLpArray[lpIndex].setBc(qIndex, bcIndex, _bcObj);
  617 + }
  618 + };
  619 +
  620 + /**
  621 + * 获取班次列表。
  622 + * @param oIsUp 是否上行
  623 + * @param oStartTime 开始时间对象
  624 + * @returns [(InternalBcObj)]
  625 + */
  626 + var _fnGetBcList2 = function(oIsUp, oStartTime) {
  627 + var i;
  628 + var j;
  629 + var oLp;
  630 + var oBc;
  631 + var aBc = [];
  632 +
  633 + for (j = 0; j < _qCount; j++) {
  634 + for (i = 0; i < _internalLpArray.length; i++) {
  635 + oLp = _internalLpArray[i];
  636 + oBc = oLp.getBc(
  637 + j,
  638 + _qIsUp == oIsUp ? 0 : 1
  639 + );
  640 + if (oBc && oBc.getFcTimeObj().isAfter(oStartTime)) {
  641 + aBc.push(oBc);
  642 + }
  643 + }
  644 + }
  645 +
  646 + var aBcFcTime = [];
  647 + for (i = 0; i < aBc.length; i++) {
  648 + oBc = aBc[i];
  649 + aBcFcTime.push(oBc.getFcTimeObj().format("HH:mm"));
  650 + }
  651 + console.log((oIsUp ? "上行班次列表:" : "下行班次列表:") + aBcFcTime.join(","));
  652 +
  653 + return aBc;
  654 + };
  655 +
  656 + /**
  657 + * 获取班次列表。
  658 + * @param isUp boolean 是否上行
  659 + * @returns [(InternalBcObj)]
  660 + */
  661 + var _fnGetBcList = function(isUp) {
  662 + var i;
  663 + var j;
  664 + var oLp;
  665 + var oBc;
  666 + var aBc = [];
  667 +
  668 + for (j = 0; j < _qCount; j++) {
  669 + for (i = 0; i < _internalLpArray.length; i++) {
  670 + oLp = _internalLpArray[i];
  671 + oBc = oLp.getBc(
  672 + j,
  673 + _qIsUp == isUp ? 0 : 1
  674 + );
  675 + if (oBc) {
  676 + aBc.push(oBc);
  677 + }
  678 + }
  679 + }
  680 +
  681 + var aBcFcTime = [];
  682 + for (i = 0; i < aBc.length; i++) {
  683 + oBc = aBc[i];
  684 + aBcFcTime.push(oBc.getFcTimeObj().format("HH:mm"));
  685 + }
  686 + console.log((isUp ? "上行班次列表:" : "下行班次列表:") + aBcFcTime.join(","));
  687 +
  688 + return aBc;
  689 + };
  690 +
  691 + /**
  692 + * 查找离指定时间最近的前面的班次索引信息
  693 + * @param timeObj 查找时间
  694 + * @param isUp 是否上行
  695 + * @returns [{路牌index},{圈index},{班次index}]
  696 + */
  697 + var _fnFindUpClosedBcIndexWithTime = function(timeObj, isUp) {
  698 +
  699 + var _lpObj;
  700 + var _groupObj;
  701 + var _bcObj;
  702 + var _i;
  703 + var _j;
  704 + var timediff; // 时间差取绝对值
  705 +
  706 + var _lpIndex;
  707 + var _up_qIndex;
  708 + var _up_bIndex;
  709 +
  710 + for (_i = 0; _i < _qCount; _i++) {
  711 + for (_j = 0; _j < _internalLpArray.length; _j++) {
  712 + _lpObj = _internalLpArray[_j];
  713 + _groupObj = _lpObj.getGroup(_i);
  714 + _bcObj = isUp == _qIsUp ? _groupObj.getBc1() : _groupObj.getBc2();
  715 + if (!_bcObj) { // 没有班次动态生成一个,可能生成不出的
  716 + _bcObj = _fnGenerateBc(_j, _i, isUp == _qIsUp ? 0 : 1);
  717 + }
  718 + if (_bcObj) {
  719 + if (timeObj.diff(_bcObj.getFcTimeObj()) >= 0) {
  720 + if (!timediff) {
  721 + timediff = timeObj.diff(_bcObj.getFcTimeObj());
  722 + _lpIndex = _j;
  723 + _up_qIndex = _i;
  724 + _up_bIndex = isUp == _qIsUp ? 0 : 1;
  725 + } else {
  726 + if (timeObj.diff(_bcObj.getFcTimeObj()) < timediff) {
  727 + timediff = timeObj.diff(_bcObj.getFcTimeObj());
  728 + _lpIndex = _j;
  729 + _up_qIndex = _i;
  730 + _up_bIndex = isUp == _qIsUp ? 0 : 1;
  731 + }
  732 + }
  733 + }
  734 + }
  735 + }
  736 + }
  737 +
  738 + if (_lpIndex == undefined) {
  739 + return false;
  740 + }
  741 +
  742 + var bcindex = [];
  743 + bcindex.push(_lpIndex);
  744 + bcindex.push(_up_qIndex);
  745 + bcindex.push(_up_bIndex);
  746 +
  747 + return bcindex;
  748 + };
  749 +
  750 + /**
  751 + * 查找离指定时间最近的后面的班次索引信息
  752 + * @param timeObj 查找时间
  753 + * @param isUp 是否上行
  754 + * @returns [{路牌index},{圈index},{班次index}]
  755 + */
  756 + var _fnFindDownClosedBcIndexWithTime = function(timeObj, isUp) {
  757 + var _lpObj;
  758 + var _groupObj;
  759 + var _bcObj;
  760 + var _i;
  761 + var _j;
  762 + var timediff; // 时间差取绝对值
  763 +
  764 + var _lpIndex;
  765 + var _down_qIndex;
  766 + var _down_bIndex;
  767 +
  768 + var flag;
  769 +
  770 + for (_i = 0; _i < _qCount; _i++) {
  771 + for (_j = 0; _j < _internalLpArray.length; _j++) {
  772 + _lpObj = _internalLpArray[_j];
  773 + _groupObj = _lpObj.getGroup(_i);
  774 + // TODO:bug
  775 + _bcObj = isUp == _qIsUp ? _groupObj.getBc1() : _groupObj.getBc2();
  776 + if (!_bcObj) { // 没有班次动态生成一个,可能生成不出的
  777 + _bcObj = _fnGenerateBc(_j, _i, isUp == _qIsUp ? 0 : 1);
  778 + }
  779 + if (_bcObj) {
  780 + //console.log("timeobj -> bcobj diff flag " +
  781 + // timeObj.format("HH:mm") + "->" +
  782 + // _bcObj.getFcTimeObj().format("HH:mm") +
  783 + // timeObj.diff(_bcObj.getFcTimeObj()) +
  784 + // (timeObj.diff(_bcObj.getFcTimeObj()) <= 0)
  785 + //);
  786 +
  787 + flag = (timeObj.diff(_bcObj.getFcTimeObj())) <= 0;
  788 +
  789 + if (flag) {
  790 + if (!timediff) {
  791 + timediff = timeObj.diff(_bcObj.getFcTimeObj());
  792 + _lpIndex = _j;
  793 + _down_qIndex = _i;
  794 + _down_bIndex = isUp == _qIsUp ? 0 : 1;
  795 + } else {
  796 + if ((timeObj.diff(_bcObj.getFcTimeObj())) > timediff) {
  797 + timediff = timeObj.diff(_bcObj.getFcTimeObj());
  798 + _lpIndex = _j;
  799 + _down_qIndex = _i;
  800 + _down_bIndex = isUp == _qIsUp ? 0 : 1;
  801 + }
  802 + }
  803 + }
  804 + }
  805 + }
  806 + }
  807 +
  808 + if (_lpIndex == undefined) {
  809 + return false;
  810 + }
  811 +
  812 + var bcindex = [];
  813 + bcindex.push(_lpIndex);
  814 + bcindex.push(_down_qIndex);
  815 + bcindex.push(_down_bIndex);
  816 +
  817 + return bcindex;
  818 + };
  819 +
  820 + /**
  821 + * 获取班次索引。
  822 + * @param oBc 班次对象
  823 + * @returns [{路牌索引},{圈索引},{班次索引}]
  824 + */
  825 + var _fnGetBcIndex = function(oBc) {
  826 + // 路牌索引
  827 + var i;
  828 + var iLpIndex;
  829 + for (i = 0; i < _internalLpArray.length; i++) {
  830 + if (_internalLpArray[i]._$$_orign_lp_obj == oBc._$$_internal_lp_obj._$$_orign_lp_obj) {
  831 + iLpIndex = i;
  832 + break;
  833 + }
  834 + }
  835 + // 圈索引
  836 + var j;
  837 + var iGroupIndex;
  838 + var bFlag = false;
  839 + for (i = 0; i < _internalLpArray.length; i++) {
  840 + if (bFlag) {
  841 + break;
  842 + }
  843 + for (j = 0; j < _qCount; j++) {
  844 + if (_internalLpArray[i]._$_groupBcArray[j] == oBc._$$_internal_group_obj) {
  845 + iGroupIndex = j;
  846 + bFlag = true;
  847 + break;
  848 + }
  849 + }
  850 + }
  851 + // 班次索引
  852 + var iBcIndex = _qIsUp == oBc.isUp() ? 0 : 1;
  853 +
  854 + if (iLpIndex == undefined) {
  855 + return null;
  856 + } else {
  857 + return [].concat(iLpIndex, iGroupIndex, iBcIndex);
  858 + }
  859 +
  860 + };
  861 +
  862 + return {
  863 + //------------- 布局初始化方法 ------------//
  864 + /**
  865 + * 初始化数据,使用标线初始化
  866 + */
  867 + fnInitDataWithBxLayout: function() {
  868 + // 初始化布局1,构造上标线,计算圈数,把上标线数据放入第一个路牌中
  869 + _fnInitFun1();
  870 + // 初始化布局2,从上标线的某个班次开始,构造所有路牌的早高峰班次,晚高峰班次,计算路牌在各个圈中的间隔
  871 + _fnInitFun2();
  872 + // 初始化布局3,计算连班分班路牌分布
  873 + _fnInitFun3();
  874 + // 初始化布局4,计算中标线位置
  875 + _fnInitFun4();
  876 +
  877 + },
  878 +
  879 + /**
  880 + * 调整高峰班次,
  881 + * 初始化生成早高峰,晚高峰班次并不准确,因为根据高峰时间段,并不在一个完整圈内,应该是在两个或多个圈之间
  882 + * 当初始化定好布局后(上标线,中标线),然后确定每个路牌的班型(连班,分班,5休2分班)后
  883 + * 然后重新计算框在高峰时间段内的班次索引,不足的添加,之前多加的删除(只删除分班路牌上的)
  884 + * @param isZgf 是否早高峰
  885 + * @param isUp 是否上行
  886 + */
  887 + fnAdjustGfbc : function(isZgf, isUp) {
  888 + var oStartTime; // 开始时间
  889 + var oEndTime; // 结束时间
  890 + var aStartBcIndex; // 开始班次索引
  891 + var aEndBcIndex; // 结束班次索引
  892 +
  893 + oStartTime = isZgf ? _paramObj.getMPeakStartTimeObj() : _paramObj.getEPeakStartTimeObj();
  894 + oEndTime = isZgf ? _paramObj.getMPeakEndTimeObj() : _paramObj.getEPeakEndTimeObj();
  895 +
  896 + aStartBcIndex = _fnFindUpClosedBcIndexWithTime(oStartTime, isUp);
  897 + aEndBcIndex = _fnFindDownClosedBcIndexWithTime(oEndTime, isUp);
  898 +
  899 + var iLpIndex;
  900 + var iQIndex;
  901 + var iBcIndex;
  902 + var iQInternelCount; // 高峰时间段中间包含的圈数
  903 + var i;
  904 + var j;
  905 +
  906 + var oLp;
  907 +
  908 + if (aStartBcIndex && aEndBcIndex) {
  909 + iLpIndex = aStartBcIndex[0];
  910 + iQIndex = aStartBcIndex[1];
  911 + iBcIndex = aStartBcIndex[2];
  912 +
  913 + // 处理头
  914 + // 删除头部多余班次
  915 + for (j = 0; j < iLpIndex; j++) {
  916 + oLp = _internalLpArray[j];
  917 + if (oLp.isBxFb() && oLp.getBc(iQIndex, iBcIndex)) {
  918 + oLp.removeBc(iQIndex, iBcIndex);
  919 + }
  920 + }
  921 +
  922 + for (j = iLpIndex; j < _internalLpArray.length; j++) {
  923 + oLp = _internalLpArray[j];
  924 + if (!oLp.getBc(iQIndex, iBcIndex)) {
  925 + _fnGenerateBcAndSetBc(j, iQIndex, iBcIndex);
  926 + }
  927 + }
  928 +
  929 + // 处理中间
  930 + iQInternelCount = aEndBcIndex[1] - aStartBcIndex[1] - 1;
  931 + for (i = 1; i <= iQInternelCount; i++) {
  932 + oLp = _internalLpArray[iQIndex + i];
  933 +
  934 + if (!oLp.getBc(iQIndex + i, iBcIndex)) {
  935 + _fnGenerateBcAndSetBc(i, iQIndex + i, iBcIndex);
  936 + }
  937 + }
  938 +
  939 + // 处理尾部
  940 + iLpIndex = aEndBcIndex[0];
  941 + iQIndex = aEndBcIndex[1];
  942 + iBcIndex = aEndBcIndex[2];
  943 +
  944 + // 删除尾部多余的班次
  945 + for (j = iLpIndex; j < _internalLpArray.length; j++) {
  946 + oLp = _internalLpArray[j];
  947 + if (oLp.isBxFb() && oLp.getBc(iQIndex, iBcIndex)) {
  948 + oLp.removeBc(iQIndex, iBcIndex);
  949 + }
  950 + }
  951 +
  952 + if (aStartBcIndex[1] != aEndBcIndex[1]) { // 指定时间范围跨圈
  953 + for (j = 0; j < iLpIndex; j++) {
  954 + oLp = _internalLpArray[j];
  955 + if (!oLp.getBc(iQIndex, iBcIndex)) {
  956 + _fnGenerateBcAndSetBc(j, iQIndex, iBcIndex);
  957 + }
  958 + }
  959 + } else {
  960 + // 不跨圈,不用处理,处理头的时候已经加了
  961 + }
  962 +
  963 + }
  964 +
  965 + },
  966 +
  967 + /**
  968 + * 按照营运时间要求补充班次,
  969 + * 早高峰7:45分以前出场运营,
  970 + * 晚高峰16:10分以前出场运营
  971 + */
  972 + fnCalcuLpBc_yy: function() {
  973 + // 补班次的时候,针对的是分班班型
  974 + var i;
  975 + var _oLp;
  976 + var _oBc;
  977 + var _aMinBcIndex;
  978 + var _aMaxBcIndex;
  979 +
  980 + var _qIndex;
  981 + var _bIndex;
  982 +
  983 + var _zgfCDate = _paramObj.toTimeObj("7:45");
  984 + var _wgfCDate = _paramObj.toTimeObj("16:10");
  985 + var _ccsj;
  986 +
  987 + for (i = 0; i < _internalLpArray.length; i++) {
  988 + _oLp = _internalLpArray[i];
  989 + if (_oLp.isBxFb()) { // 分班路牌
  990 + // 早高峰部分
  991 + _aMinBcIndex = _oLp.getMinBcObjPosition();
  992 + _qIndex = _aMinBcIndex[0];
  993 + _bIndex = _aMinBcIndex[1];
  994 + _oBc = _oLp.getBc(_qIndex, _bIndex);
  995 + if (_qIsUp) {
  996 + _ccsj = _bIndex == 0 ?
  997 + _paramObj.getUpOutTime() :
  998 + _paramObj.getDownOutTime();
  999 + } else {
  1000 + _ccsj = _bIndex == 0 ?
  1001 + _paramObj.getDownOutTime() :
  1002 + _paramObj.getUpOutTime();
  1003 + }
  1004 + if (_zgfCDate.isBefore(_paramObj.addMinute(_oBc.getFcTimeObj(), -_ccsj))) {
  1005 + _fnGenerateBcAndSetBc(
  1006 + i,
  1007 + _bIndex == 0 ? _qIndex - 1 : _qIndex,
  1008 + _bIndex == 0 ? 1 : 0
  1009 + )
  1010 + }
  1011 +
  1012 + // 晚高峰部分
  1013 + _aMaxBcIndex = _oLp.getMaxBcObjPosition();
  1014 + _qIndex = _aMaxBcIndex[0];
  1015 + _bIndex = _aMaxBcIndex[1];
  1016 + _oBc = _oLp.getBc(
  1017 + _bIndex == 0 ? _qIndex - 1 : _qIndex,
  1018 + _bIndex == 0 ? 1 : 0
  1019 + );
  1020 + if (!_oBc) { // 前一个班次不存在,再判定加不加
  1021 + _oBc = _oLp.getBc(_qIndex, _bIndex);
  1022 + if (_qIsUp) {
  1023 + _ccsj = _bIndex == 0 ?
  1024 + _paramObj.getUpOutTime() :
  1025 + _paramObj.getDownOutTime();
  1026 + } else {
  1027 + _ccsj = _bIndex == 0 ?
  1028 + _paramObj.getDownOutTime() :
  1029 + _paramObj.getUpOutTime();
  1030 + }
  1031 + if (_wgfCDate.isBefore(_paramObj.addMinute(_oBc.getFcTimeObj(), -_ccsj))) {
  1032 + _fnGenerateBcAndSetBc(
  1033 + i,
  1034 + _bIndex == 0 ? _qIndex - 1 : _qIndex,
  1035 + _bIndex == 0 ? 1 : 0
  1036 + )
  1037 + }
  1038 + }
  1039 + }
  1040 + }
  1041 + },
  1042 +
  1043 + /**
  1044 + * 补充做5休2的班型班次。
  1045 + * 1、确认5_2班型大致多少圈(小数点过.7进位)
  1046 + * 2、获取当前5_2两端车次链的信息,每段的班次数目,还差几个班次没加
  1047 + * 3、如果前面的车次链班次少,则从前面的车次链开始加
  1048 + * 4、如果车次链班次数一样,从从后面的车次链开始加
  1049 + * 5、加班次时都是往车次链前方加
  1050 + * 6、如果前面车次链不能再加班次了,从后面车次链加
  1051 + */
  1052 + fnCalcuLpBx_5_2: function() {
  1053 + // 计算做5休2班型所需的班次数
  1054 + var iBxBcount = _aBxDesc[6].fBcCount;
  1055 + if (iBxBcount - Math.floor(iBxBcount) > 0.7) {
  1056 + iBxBcount = Math.floor(iBxBcount) + 1;
  1057 + } else {
  1058 + iBxBcount = Math.floor(iBxBcount);
  1059 + }
  1060 +
  1061 + var i;
  1062 + var j;
  1063 + var oLp;
  1064 + var iAddBcCount;
  1065 + var oBcChain1;
  1066 + var oBcChain2;
  1067 + var iQindex;
  1068 + var iBindex;
  1069 +
  1070 + for (i = 0; i < _internalLpArray.length; i++) {
  1071 + oLp = _internalLpArray[i];
  1072 + if (oLp.isBxFb5_2()) {
  1073 + iAddBcCount = iBxBcount - oLp.getBcArray().length; // 需要添加的班次数
  1074 + for (j = 1; j <= iAddBcCount; j++) {
  1075 + oBcChain1 = oLp.fnGetBcChainInfo(0);
  1076 + oBcChain2 = oLp.fnGetBcChainInfo(1);
  1077 +
  1078 + if (oBcChain1.bcount < oBcChain2.bcount) {
  1079 + iQindex = oBcChain1.s_b == 0 ? oBcChain1.s_q - 1 : oBcChain1.s_q;
  1080 + iBindex = oBcChain1.s_b == 0 ? 1 : 0;
  1081 + // 往车次链往前不能加,就往后加
  1082 + if (_fnGenerateBc(i, iQindex, iBindex)) {
  1083 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1084 + } else {
  1085 + iQindex = oBcChain1.e_b == 0 ? oBcChain1.e_q : oBcChain1.e_q + 1;
  1086 + iBindex = oBcChain1.e_b == 0 ? 1 : 0;
  1087 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1088 + }
  1089 +
  1090 + } else if (oBcChain1.bcount > oBcChain2.bcount) {
  1091 + iQindex = oBcChain2.s_b == 0 ? oBcChain2.s_q - 1 : oBcChain2.s_q;
  1092 + iBindex = oBcChain2.s_b == 0 ? 1 : 0;
  1093 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1094 + } else {
  1095 + iQindex = oBcChain2.s_b == 0 ? oBcChain2.s_q - 1 : oBcChain2.s_q;
  1096 + iBindex = oBcChain2.s_b == 0 ? 1 : 0;
  1097 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1098 + }
  1099 + }
  1100 + }
  1101 + }
  1102 +
  1103 + },
  1104 +
  1105 + /**
  1106 + * 补其他分班班型班次。
  1107 + * 从车次链的后面开始加
  1108 + */
  1109 + fnCalcuLpBx_other: function() {
  1110 + // TODO:根据上标线的首班时间确定班型,小于05:59的做一休一,否则做二休一
  1111 + var oSt = _qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();
  1112 + var iBxIndex = 4;
  1113 + if (oSt.isBefore(_paramObj.toTimeObj("05:59"))) {
  1114 + iBxIndex = 5;
  1115 + }
  1116 + // 计算做5休2班型所需的班次数
  1117 + var iQBcount = _aBxDesc[iBxIndex].fQCount;
  1118 + var iBxBcount = Math.round(iQBcount) * 2;
  1119 +
  1120 + var i;
  1121 + var j;
  1122 + var oLp;
  1123 + var iAddBcCount;
  1124 + var oBcChain1;
  1125 + var oBcChain2;
  1126 + var iQindex;
  1127 + var iBindex;
  1128 +
  1129 + for (i = 0; i < _internalLpArray.length; i++) {
  1130 + oLp = _internalLpArray[i];
  1131 + if (oLp.isBxFb() && !oLp.isBxFb5_2()) {
  1132 + iAddBcCount = iBxBcount - oLp.getBcArray().length; // 需要添加的班次数
  1133 + for (j = 1; j <= iAddBcCount; j++) {
  1134 + oBcChain1 = oLp.fnGetBcChainInfo(0);
  1135 + oBcChain2 = oLp.fnGetBcChainInfo(1);
  1136 +
  1137 + if (oBcChain1.bcount < oBcChain2.bcount) {
  1138 + iQindex = oBcChain1.e_b == 0 ? oBcChain1.e_q : oBcChain1.e_q + 1;
  1139 + iBindex = oBcChain1.e_b == 0 ? 1 : 0;
  1140 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1141 + } else if (oBcChain1.bcount > oBcChain2.bcount) {
  1142 + iQindex = oBcChain2.e_b == 0 ? oBcChain2.e_q : oBcChain2.e_q + 1;
  1143 + iBindex = oBcChain2.e_b == 0 ? 1 : 0;
  1144 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1145 + } else {
  1146 + iQindex = oBcChain2.e_b == 0 ? oBcChain2.e_q : oBcChain2.e_q + 1;
  1147 + iBindex = oBcChain2.e_b == 0 ? 1 : 0;
  1148 + _fnGenerateBcAndSetBc(i, iQindex, iBindex);
  1149 + }
  1150 + }
  1151 + }
  1152 + }
  1153 +
  1154 + },
  1155 +
  1156 + /**
  1157 + * 补充连班路牌班次。
  1158 + * 1、上标线,中标线中间的连班路牌班次从早高峰班次一直拉到底,从早高峰班次向上标线起始班次靠拢
  1159 + * 2、中标线以下的连班路牌班次从早高峰班次一直拉到底,从早高峰班次向中标线起始班次靠拢
  1160 + */
  1161 + fnCalcuLpBx_lb: function() {
  1162 + // 补充连班的班次,参照上标线,中标线补充不足的班次
  1163 +
  1164 + var aLbLpindexes = []; // 除上标线,中标线的连班路牌索引
  1165 + var i;
  1166 + for (i = 0; i < _internalLpArray.length; i++) {
  1167 + if (_internalLpArray[i].isBxLb() && i != 0 && i != _iZbx_lpIndex) {
  1168 + aLbLpindexes.push(i);
  1169 + }
  1170 + }
  1171 +
  1172 + var oEndsj = // 结束时间
  1173 + _paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj()) ?
  1174 + _paramObj.getDownLastDTimeObj() :
  1175 + _paramObj.getUpLastDtimeObj();
  1176 +
  1177 + var oLp;
  1178 + var aMinbcPos;
  1179 + var oBc;
  1180 + var j;
  1181 + var iTempBcIndex;
  1182 +
  1183 + // 1、从最小班次开始,往后补充班次
  1184 + for (i = 0; i < aLbLpindexes.length; i++) {
  1185 + oLp = _internalLpArray[aLbLpindexes[i]];
  1186 +
  1187 + // 最小班次索引
  1188 + aMinbcPos = oLp.getMinBcObjPosition();
  1189 + // 使用纵向分隔补充班次,从最小班次向后补
  1190 + iTempBcIndex = aMinbcPos[1] == 0 ? 1 : 0;
  1191 + j = iTempBcIndex == 0 ? aMinbcPos[0] + 1 : aMinbcPos[0];
  1192 +
  1193 + while (j < _qCount) {
  1194 + while (iTempBcIndex <= 1) {
  1195 + oBc = _fnGenerateBc(aLbLpindexes[i], j, iTempBcIndex);
  1196 + if (oBc &&
  1197 + oBc.getFcTimeObj().isBefore(oEndsj) ) {
  1198 + oLp.setBc(j, iTempBcIndex, oBc);
  1199 + }
  1200 + iTempBcIndex++;
  1201 + }
  1202 + iTempBcIndex = 0;
  1203 + j++;
  1204 + }
  1205 +
  1206 + }
  1207 +
  1208 + // 2、上标线中标线之间的路牌,从最小的班次往前补充班次
  1209 +
  1210 + // 还要补充缺失的班次,差上标线几个班次要往前补上
  1211 + var iBccount;
  1212 + var iQindex;
  1213 + var iBindex;
  1214 + // 补上标线到中标线之间的连班路牌的班次
  1215 + for (i = 0; i < aLbLpindexes.length; i++) {
  1216 + if (aLbLpindexes[i] > 0 && aLbLpindexes[i] < _iZbx_lpIndex) {
  1217 + oLp = _internalLpArray[aLbLpindexes[i]];
  1218 + aMinbcPos = oLp.getMinBcObjPosition();
  1219 + iQindex = aMinbcPos[0];
  1220 + iBindex = aMinbcPos[1];
  1221 + iBccount = (iQindex - 1) * 2 + iBindex; // 距离上标线起始站点差几个班次
  1222 + for (j = 0; j < iBccount; j++) {
  1223 + if (iBindex == 0) {
  1224 + iQindex --;
  1225 + iBindex = 1;
  1226 + _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);
  1227 + } else if (iBindex == 1) {
  1228 + iBindex --;
  1229 + _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);
  1230 + }
  1231 + }
  1232 +
  1233 + }
  1234 +
  1235 + }
  1236 +
  1237 + // 3、中标线之后的路牌,从最小的班次往前补充班次
  1238 +
  1239 + // 补中标线以下的连班路牌的班次
  1240 + for (i = 0; i < aLbLpindexes.length; i++) {
  1241 + if (aLbLpindexes[i] > _iZbx_lpIndex) {
  1242 + oLp = _internalLpArray[aLbLpindexes[i]];
  1243 + aMinbcPos = oLp.getMinBcObjPosition();
  1244 + iQindex = aMinbcPos[0];
  1245 + iBindex = aMinbcPos[1];
  1246 + iBccount = (iQindex - 0) * 2 + iBindex - 1; // 距离上标线起始站点差几个班次
  1247 + for (j = 0; j < iBccount; j++) {
  1248 + if (iBindex == 0) {
  1249 + iQindex --;
  1250 + iBindex = 1;
  1251 + _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);
  1252 + } else if (iBindex == 1) {
  1253 + iBindex --;
  1254 + _fnGenerateBcAndSetBc(aLbLpindexes[i], iQindex, iBindex);
  1255 + }
  1256 + }
  1257 + }
  1258 + }
  1259 +
  1260 + },
  1261 +
  1262 + /**
  1263 + * 计算末班车。
  1264 + * 1、将上下行拉成上下行两个班次列表(包括标记班次)
  1265 + * 2、分别找出离末班车发车时间最近的班次,并替换时间
  1266 + * 3、删除之后的班次
  1267 + */
  1268 + fnCalcuLastBc: function() {
  1269 + var i;
  1270 + var iTimeDiff;
  1271 + var iTempTime;
  1272 + var aBc;
  1273 + var oLastBcTime;
  1274 + var oLastBcIsUp;
  1275 + var iModifyIndex;
  1276 +
  1277 + // 查找末班车早的末班车时间和方向
  1278 + if (_paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj())) {
  1279 + oLastBcTime = _paramObj.getUpLastDtimeObj();
  1280 + oLastBcIsUp = true;
  1281 + } else {
  1282 + oLastBcTime = _paramObj.getDownLastDTimeObj();
  1283 + oLastBcIsUp = false;
  1284 + }
  1285 +
  1286 + // 确定早的末班车时间
  1287 + aBc = _fnGetBcList(oLastBcIsUp);
  1288 + for (i = 0; i < aBc.length; i++) {
  1289 + iTempTime = oLastBcTime.diff(aBc[i].getFcTimeObj(), "m");
  1290 + if (iTimeDiff == undefined) {
  1291 + iTimeDiff = iTempTime;
  1292 + iModifyIndex = i;
  1293 + } else if (Math.abs(iTempTime) <= Math.abs(iTimeDiff)) {
  1294 + iTimeDiff = iTempTime;
  1295 + iModifyIndex = i;
  1296 + }
  1297 + }
  1298 + aBc[iModifyIndex].addMinuteToFcsj(iTimeDiff); // 替换成末班车时间
  1299 + aBc[iModifyIndex].fnSetDelFlag(false);
  1300 + aBc[iModifyIndex].fnSetIsLastBc(true);
  1301 + for (i = iModifyIndex + 1; i < aBc.length; i++) { // 删除多余班次
  1302 + _qIsUp == oLastBcIsUp ?
  1303 + aBc[i]._$$_internal_group_obj.setBc1(undefined) :
  1304 + aBc[i]._$$_internal_group_obj.setBc2(undefined);
  1305 + }
  1306 +
  1307 + // 查找末班车晚的末班车时间和方向
  1308 + if (_paramObj.getUpLastDtimeObj().isBefore(_paramObj.getDownLastDTimeObj())) {
  1309 + oLastBcTime = _paramObj.getDownLastDTimeObj();
  1310 + oLastBcIsUp = false;
  1311 + } else {
  1312 + oLastBcTime = _paramObj.getUpLastDtimeObj();
  1313 + oLastBcIsUp = true;
  1314 + }
  1315 + // 确定晚的末班车时间
  1316 + aBc = _fnGetBcList(oLastBcIsUp);
  1317 + var oBc;
  1318 + var aBcIndex;
  1319 + var iLpIndex;
  1320 + var iQIndex;
  1321 + var iBcIndex;
  1322 +
  1323 + iTimeDiff = undefined;
  1324 + for (i = 0; i < aBc.length; i++) {
  1325 + oBc = aBc[i];
  1326 + aBcIndex = _fnGetBcIndex(oBc);
  1327 +
  1328 + iLpIndex = aBcIndex[0];
  1329 + iQIndex = aBcIndex[2] == 0 ? aBcIndex[1] -1 : aBcIndex[1];
  1330 + iBcIndex = aBcIndex[2] == 0 ? 1 : 0;
  1331 +
  1332 + if (!_internalLpArray[iLpIndex].getBc(iQIndex, iBcIndex)) {
  1333 + continue;
  1334 + }
  1335 +
  1336 + iTempTime = oLastBcTime.diff(aBc[i].getFcTimeObj(), "m");
  1337 + if (iTimeDiff == undefined) {
  1338 + iTimeDiff = iTempTime;
  1339 + iModifyIndex = i;
  1340 + } else if (Math.abs(iTempTime) <= Math.abs(iTimeDiff)) {
  1341 + iTimeDiff = iTempTime;
  1342 + iModifyIndex = i;
  1343 + }
  1344 + }
  1345 + aBc[iModifyIndex].addMinuteToFcsj(iTimeDiff); // 替换成末班车时间
  1346 + aBc[iModifyIndex].fnSetDelFlag(false);
  1347 + aBc[iModifyIndex].fnSetIsLastBc(true);
  1348 + for (i = iModifyIndex + 1; i < aBc.length; i++) { // 删除多余班次
  1349 + _qIsUp == oLastBcIsUp ?
  1350 + aBc[i]._$$_internal_group_obj.setBc1(undefined) :
  1351 + aBc[i]._$$_internal_group_obj.setBc2(undefined);
  1352 + }
  1353 +
  1354 + },
  1355 +
  1356 + /**
  1357 + * 添加吃饭班次。
  1358 + */
  1359 + fnCalcuEatBc: function() {
  1360 + // 吃午饭时间范围,10:15 到 12:15
  1361 + // 吃晚饭时间范围,18:00 到 19:00
  1362 +
  1363 + if (!_paramObj.fnIsEat()) {
  1364 + return;
  1365 + }
  1366 +
  1367 + // 午饭index
  1368 + var aLEIndex;
  1369 + // 晚饭index
  1370 + var aDEIndex;
  1371 +
  1372 + // 所有吃饭都默认在一个方向,两个方向暂时不考虑
  1373 + if (_paramObj.fnIsUpEat()) {
  1374 + aLEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("10:15"), true, false);
  1375 + aDEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("18:00"), true, false);
  1376 + } else {
  1377 + aLEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("10:15"), false, true);
  1378 + aDEIndex = _internalLpArray[0].getQBcIndexWithFcTime(_paramObj.toTimeObj("18:00"), false, true);
  1379 + }
  1380 +
  1381 + // 午饭第几圈,第几个班次
  1382 + var iLEQIndex = aLEIndex[0];
  1383 + var iLEBIndex = aLEIndex[1];
  1384 + // 晚饭第几圈,第几个班次
  1385 + var iDEQIndex = aDEIndex[0];
  1386 + var iDEBIndex = aDEIndex[1];
  1387 +
  1388 + // 注意,本模型只有连班才有吃饭
  1389 +
  1390 + var i;
  1391 + var oLp;
  1392 + var aLbIndex = []; // 连班班型的路牌索引
  1393 + for (i = 0; i < _internalLpArray.length; i++) {
  1394 + oLp = _internalLpArray[i];
  1395 + if (oLp.isBxLb()) {
  1396 + aLbIndex.push(i);
  1397 + }
  1398 + }
  1399 +
  1400 + var iLTime;
  1401 + var iDtime;
  1402 + var j;
  1403 + for (i = 0; i < aLbIndex.length; i++) {
  1404 + oLp = _internalLpArray[aLbIndex[i]];
  1405 +
  1406 + // 午饭
  1407 + iLTime = oLp.fnAddEatBc(iLEQIndex, iLEBIndex, _factory, _paramObj);
  1408 + // 晚饭
  1409 + iDtime = oLp.fnAddEatBc(iDEQIndex, iDEBIndex, _factory, _paramObj);
  1410 +
  1411 + if (i == aLbIndex.length - 1) {
  1412 + for (j = aLbIndex[i]; j < _internalLpArray.length; j++) {
  1413 + oLp = _internalLpArray[j];
  1414 + if (oLp.isBxFb()) { // 5休2班型不调整
  1415 + // 修正午饭之后路牌班次的发车时间
  1416 + oLp.fnAddMinuteToBcFcsj(iLEQIndex, iLEBIndex, iLTime);
  1417 + oLp.fnAddMinuteToBcFcsj(iDEQIndex, iDEBIndex, iDtime);
  1418 + }
  1419 + }
  1420 + } else {
  1421 + for (j = aLbIndex[i]; j < aLbIndex[i + 1]; j++) {
  1422 + oLp = _internalLpArray[j];
  1423 + if (oLp.isBxFb()) {
  1424 + // 修正午饭之后路牌班次的发车时间
  1425 + oLp.fnAddMinuteToBcFcsj(iLEQIndex, iLEBIndex, iLTime);
  1426 + oLp.fnAddMinuteToBcFcsj(iDEQIndex, iDEBIndex, iDtime);
  1427 + }
  1428 + }
  1429 + }
  1430 + }
  1431 +
  1432 + },
  1433 +
  1434 + /**
  1435 + * 补每个路牌的其他班次(进出场,例保班次)。
  1436 + */
  1437 + fnCalcuOtherBc_: function() {
  1438 + var i;
  1439 + var _lpObj;
  1440 + var _minBcIndex;
  1441 + var _maxBcIndex;
  1442 + var _minBc;
  1443 + var _maxBc;
  1444 + var _otherbc = [];
  1445 + var _oFbbc;
  1446 +
  1447 + for (i = 0; i < _internalLpArray.length; i++) {
  1448 + _lpObj = _internalLpArray[i];
  1449 + _minBcIndex = _lpObj.getMinBcObjPosition();
  1450 + _maxBcIndex = _lpObj.getMaxBcObjPosition();
  1451 + _minBc = _lpObj.getBc(_minBcIndex[0], _minBcIndex[1]);
  1452 + _maxBc = _lpObj.getBc(_maxBcIndex[0], _maxBcIndex[1]);
  1453 +
  1454 + _otherbc = [];
  1455 + _otherbc.push(_factory.createBcObj(
  1456 + _lpObj, "bd", true, 1,
  1457 + _minBc.getFcTimeObj(),
  1458 + _paramObj
  1459 + ));
  1460 + _otherbc.push(_factory.createBcObj(
  1461 + _lpObj, "out", true, 1,
  1462 + _minBc.getFcTimeObj(),
  1463 + _paramObj
  1464 + ));
  1465 +
  1466 + _maxBc.setArrTimeObj(_paramObj.addMinute(_maxBc.getFcTimeObj(), _maxBc.getBcTime()));
  1467 + _maxBc.setStopTime(0);
  1468 + _otherbc.push(_factory.createBcObj(
  1469 + _lpObj, "in", true, 1,
  1470 + _maxBc.getArrTimeObj(),
  1471 + _paramObj
  1472 + ));
  1473 + _otherbc.push(_factory.createBcObj(
  1474 + _lpObj, "lc", true, 1,
  1475 + _maxBc.getArrTimeObj(),
  1476 + _paramObj
  1477 + ));
  1478 +
  1479 + // 5休2分班出场例保班次
  1480 + if (_lpObj.isBxFb5_2()) {
  1481 + _oFbbc = _lpObj.getBc(
  1482 + _lpObj.fnGetBcChainInfo(1)["s_q"],
  1483 + _lpObj.fnGetBcChainInfo(1)["s_b"]
  1484 + );
  1485 +
  1486 + _otherbc.push(_factory.createBcObj(
  1487 + _lpObj, "bd", true, 1,
  1488 + _oFbbc.getFcTimeObj(),
  1489 + _paramObj
  1490 + ));
  1491 + _otherbc.push(_factory.createBcObj(
  1492 + _lpObj, "out", true, 1,
  1493 + _oFbbc.getFcTimeObj(),
  1494 + _paramObj
  1495 + ));
  1496 + }
  1497 +
  1498 + _lpObj.addOtherBcArray(_otherbc);
  1499 + }
  1500 +
  1501 + },
  1502 +
  1503 + /**
  1504 + * 补每个路牌的其他班次(进出场,例保班次)
  1505 + * 所有的车次链前后都加进出场、报道班次
  1506 + */
  1507 + fnCalcuOtherBc: function() {
  1508 + var i;
  1509 + var j;
  1510 + var iBcChainCount;
  1511 + var oLp;
  1512 + var aOtherBc;
  1513 + var oStartBc;
  1514 + var oEndBc;
  1515 +
  1516 + for (i = 0; i < _internalLpArray.length; i++) {
  1517 + aOtherBc = [];
  1518 + oLp = _internalLpArray[i];
  1519 + iBcChainCount = oLp.fnGetBcChainCount();
  1520 +
  1521 + if (iBcChainCount == 1) { // 只有一个车次链,是连班班型
  1522 + // 头部要添加出场,例保班次
  1523 + oStartBc = oLp.getBc(
  1524 + oLp.fnGetBcChainInfo(0)["s_q"],
  1525 + oLp.fnGetBcChainInfo(0)["s_b"]
  1526 + );
  1527 + aOtherBc.push(_factory.createBcObj(
  1528 + oLp, "bd", true, 1,
  1529 + oStartBc.getFcTimeObj(),
  1530 + _paramObj
  1531 + ));
  1532 + aOtherBc.push(_factory.createBcObj(
  1533 + oLp, "out", true, 1,
  1534 + oStartBc.getFcTimeObj(),
  1535 + _paramObj
  1536 + ));
  1537 +
  1538 + // 尾部需添加进场,例保班次
  1539 + oEndBc = oLp.getBc(
  1540 + oLp.fnGetBcChainInfo(0)["e_q"],
  1541 + oLp.fnGetBcChainInfo(0)["e_b"]
  1542 + );
  1543 + aOtherBc.push(_factory.createBcObj(
  1544 + oLp, "in", true, 1,
  1545 + oEndBc.getArrTimeObj(),
  1546 + _paramObj
  1547 + ));
  1548 + aOtherBc.push(_factory.createBcObj(
  1549 + oLp, "lc", true, 1,
  1550 + oEndBc.getArrTimeObj(),
  1551 + _paramObj
  1552 + ));
  1553 + } else if (iBcChainCount == 2) { // 两个车次链,是分班班型
  1554 + // 第一个车次链开头有出场,报到班次,车次链结尾只有进场班次
  1555 + oStartBc = oLp.getBc(
  1556 + oLp.fnGetBcChainInfo(0)["s_q"],
  1557 + oLp.fnGetBcChainInfo(0)["s_b"]
  1558 + );
  1559 + aOtherBc.push(_factory.createBcObj(
  1560 + oLp, "bd", true, 1,
  1561 + oStartBc.getFcTimeObj(),
  1562 + _paramObj
  1563 + ));
  1564 + aOtherBc.push(_factory.createBcObj(
  1565 + oLp, "out", true, 1,
  1566 + oStartBc.getFcTimeObj(),
  1567 + _paramObj
  1568 + ));
  1569 +
  1570 + oEndBc = oLp.getBc(
  1571 + oLp.fnGetBcChainInfo(0)["e_q"],
  1572 + oLp.fnGetBcChainInfo(0)["e_b"]
  1573 + );
  1574 + aOtherBc.push(_factory.createBcObj(
  1575 + oLp, "in", true, 1,
  1576 + oEndBc.getArrTimeObj(),
  1577 + _paramObj
  1578 + ));
  1579 +
  1580 + // 第二个车次链开头有出场,报到班次,车次链结尾有进场,报到班次
  1581 + oStartBc = oLp.getBc(
  1582 + oLp.fnGetBcChainInfo(1)["s_q"],
  1583 + oLp.fnGetBcChainInfo(1)["s_b"]
  1584 + );
  1585 + aOtherBc.push(_factory.createBcObj(
  1586 + oLp, "bd", true, 1,
  1587 + oStartBc.getFcTimeObj(),
  1588 + _paramObj
  1589 + ));
  1590 + aOtherBc.push(_factory.createBcObj(
  1591 + oLp, "out", true, 1,
  1592 + oStartBc.getFcTimeObj(),
  1593 + _paramObj
  1594 + ));
  1595 +
  1596 + oEndBc = oLp.getBc(
  1597 + oLp.fnGetBcChainInfo(1)["e_q"],
  1598 + oLp.fnGetBcChainInfo(1)["e_b"]
  1599 + );
  1600 + aOtherBc.push(_factory.createBcObj(
  1601 + oLp, "in", true, 1,
  1602 + oEndBc.getArrTimeObj(),
  1603 + _paramObj
  1604 + ));
  1605 + aOtherBc.push(_factory.createBcObj(
  1606 + oLp, "lc", true, 1,
  1607 + oEndBc.getArrTimeObj(),
  1608 + _paramObj
  1609 + ));
  1610 +
  1611 +
  1612 + } else {
  1613 + // 2个车次链以上,暂时没有此班型
  1614 + }
  1615 +
  1616 + oLp.addOtherBcArray(aOtherBc);
  1617 + }
  1618 + },
  1619 +
  1620 + /**
  1621 + * 祛除上标线开头的删除标记的班次。
  1622 + */
  1623 + fnRemoveDelFirstFlagBc: function() {
  1624 + var oLp = _internalLpArray[0];
  1625 + var aMinBcIndex = oLp.getMinBcObjPosition();
  1626 + if (oLp.getBc(aMinBcIndex[0], aMinBcIndex[1]).fnIsDelFlag()) {
  1627 + oLp.removeBc(aMinBcIndex[0], aMinBcIndex[1]);
  1628 + }
  1629 + },
  1630 + /**
  1631 + * 祛除上标线结尾的删除标记的班次。
  1632 + */
  1633 + fnRemoveDelLastFlagBc: function() {
  1634 + var oLp = _internalLpArray[0];
  1635 + var aMaxBcIndex = oLp.getMaxBcObjPosition();
  1636 + if (oLp.getBc(aMaxBcIndex[0], aMaxBcIndex[1]).fnIsDelFlag()) {
  1637 + oLp.removeBc(aMaxBcIndex[0], aMaxBcIndex[1]);
  1638 + }
  1639 + },
  1640 +
  1641 + /**
  1642 + * 调整路牌班次间隔(核准周转时间,停站时间)。
  1643 + * @param iFre int 迭代次数
  1644 + */
  1645 + fnAdjustLpBcInterval: function(iFre) {
  1646 + if (iFre > 0) {
  1647 + for (var i = 0; i < _internalLpArray.length; i++) {
  1648 + _internalLpArray[i].fnAdjustBcInterval(
  1649 + this.fnCalcuAverPeakStopTime(),
  1650 + this.fnCalcuAverTroughStopTime(),
  1651 + _paramObj);
  1652 + }
  1653 +
  1654 + this.fnAdjustLpBcInterval(iFre - 1);
  1655 + }
  1656 + },
  1657 +
  1658 + /**
  1659 + * 调整班次间隔。
  1660 + * @param bIsUp 是否上行
  1661 + * @param oStartTime 开始时间对象
  1662 + * @param iFre 迭代次数
  1663 + */
  1664 + fnAdjustBcInterval2_: function(bIsUp, oStartTime, iFre) {
  1665 + if (iFre > 0) {
  1666 + var aBc = _fnGetBcList2(bIsUp, oStartTime); // 指定方向的班次列表
  1667 + aBc.sort(function(o1, o2) {
  1668 + if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {
  1669 + return -1;
  1670 + } else {
  1671 + return 1;
  1672 + }
  1673 + });
  1674 + var i;
  1675 + var j;
  1676 +
  1677 + var iBcCountOfGroup = 3; // 3个班次取一次计算
  1678 + var aBcOfGroup; // 3个班次列表
  1679 + var aBcIntervalOfGroup; // 班次间隔列表,如:3个班次,2个间隔
  1680 +
  1681 + for (i = 0; i <= aBc.length - iBcCountOfGroup; i++) {
  1682 + aBcOfGroup = [];
  1683 + aBcIntervalOfGroup = [];
  1684 + for (j = i; j < i + iBcCountOfGroup; j++) {
  1685 + aBcOfGroup.push(aBc[j]);
  1686 + }
  1687 +
  1688 + for (j = 0; j < aBcOfGroup.length; j++) {
  1689 + if (j < aBcOfGroup.length - 1) {
  1690 + aBcIntervalOfGroup.push(aBcOfGroup[j + 1].getFcTimeObj().diff(
  1691 + aBcOfGroup[j].getFcTimeObj(), "m"));
  1692 + }
  1693 + }
  1694 +
  1695 + if (aBcIntervalOfGroup[0] < 19) {
  1696 + aBcOfGroup[1].addMinuteToFcsj(1);
  1697 + } else if (aBcIntervalOfGroup[0] > 20) {
  1698 + aBcOfGroup[1].addMinuteToFcsj(-1);
  1699 + } else {
  1700 + if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {
  1701 + //continue;
  1702 + } else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {
  1703 + aBcOfGroup[1].addMinuteToFcsj(-1);
  1704 + } else {
  1705 + aBcOfGroup[1].addMinuteToFcsj(1);
  1706 + }
  1707 + }
  1708 +
  1709 + }
  1710 +
  1711 + this.fnAdjustBcInterval2(bIsUp, oStartTime, iFre - 1);
  1712 + }
  1713 + },
  1714 +
  1715 + /**
  1716 + * 调整班次间隔。
  1717 + * @param boolean isUp 是否上行
  1718 + * @param oStartTime 开始时间对象
  1719 + * @param fre int 迭代次数
  1720 + */
  1721 + fnAdjustBcInterval: function(isUp, oStartTime, fre) {
  1722 + if (fre > 0) {
  1723 + var aBc = !oStartTime ? _fnGetBcList(isUp) : _fnGetBcList2(isUp, oStartTime); // 指定方向的班次列表
  1724 +
  1725 + aBc.sort(function(o1, o2) {
  1726 + if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {
  1727 + return -1;
  1728 + } else {
  1729 + return 1;
  1730 + }
  1731 + });
  1732 +
  1733 + var i;
  1734 + var j;
  1735 +
  1736 + var iBcCountOfGroup = 3; // 3个班次取一次计算
  1737 + var aBcOfGroup; // 3个班次列表
  1738 + var aBcIntervalOfGroup; // 班次间隔列表,如:3个班次,2个间隔
  1739 + var oBcFcTime; // 班次发车时间
  1740 +
  1741 + for (i = 0; i <= aBc.length - iBcCountOfGroup; i++) {
  1742 + aBcOfGroup = [];
  1743 + aBcIntervalOfGroup = [];
  1744 + for (j = i; j < i + iBcCountOfGroup; j++) {
  1745 + aBcOfGroup.push(aBc[j]);
  1746 + }
  1747 +
  1748 + for (j = 0; j < aBcOfGroup.length; j++) {
  1749 + if (j < aBcOfGroup.length - 1) {
  1750 + aBcIntervalOfGroup.push(aBcOfGroup[j + 1].getFcTimeObj().diff(
  1751 + aBcOfGroup[j].getFcTimeObj(), "m"));
  1752 + }
  1753 + }
  1754 +
  1755 + // 判定规则
  1756 + oBcFcTime = aBcOfGroup[1].getFcTimeObj();
  1757 +
  1758 + // 第一个班次发车时间不动,根据间隔,调整中间一个班次
  1759 + // 如果3个班次2个间隔时间差1分钟,不调整
  1760 + // 如果第一个间隔大,调整第二个班次往前1分钟
  1761 + // 如果第二个间隔大,调整第二个班次往后1分钟
  1762 +
  1763 + if (_paramObj.isTroughBc(oBcFcTime) &&
  1764 + aBcIntervalOfGroup[0] > _paramObj.getTroughMaxFcjx()) {
  1765 + aBcOfGroup[1].addMinuteToFcsj(-1);
  1766 + }
  1767 +
  1768 + //else if (_paramObj.isMPeakBc(oBcFcTime) &&
  1769 + // aBcIntervalOfGroup[0] < _paramObj.getMPeakMinFcjx()) {
  1770 + // aBcOfGroup[1].addMinuteToFcsj(1);
  1771 + //} else if (_paramObj.isMPeakBc(oBcFcTime) &&
  1772 + // aBcIntervalOfGroup[0] > _paramObj.getMPeakMaxFcjx()) {
  1773 + // aBcOfGroup[1].addMinuteToFcsj(-1);
  1774 + //} else if (_paramObj.isEPeakBc(oBcFcTime) &&
  1775 + // aBcIntervalOfGroup[0] < _paramObj.getEPeakMinFcjx()) {
  1776 + // aBcOfGroup[1].addMinuteToFcsj(1);
  1777 + //} else if (_paramObj.isEPeakBc(oBcFcTime) &&
  1778 + // aBcIntervalOfGroup[0] > _paramObj.getEPeakMaxFcjx()) {
  1779 + // aBcOfGroup[1].addMinuteToFcsj(-1);
  1780 + //}
  1781 +
  1782 +
  1783 + else {
  1784 + if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {
  1785 + //continue;
  1786 + } else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {
  1787 + aBcOfGroup[1].addMinuteToFcsj(-1);
  1788 + } else {
  1789 + aBcOfGroup[1].addMinuteToFcsj(1);
  1790 + }
  1791 + }
  1792 +
  1793 + //if (Math.abs(aBcIntervalOfGroup[0] - aBcIntervalOfGroup[1]) <= 1) {
  1794 + // //continue;
  1795 + //} else if (aBcIntervalOfGroup[0] > aBcIntervalOfGroup[1]) {
  1796 + // aBcOfGroup[1].addMinuteToFcsj(-1);
  1797 + //} else {
  1798 + // aBcOfGroup[1].addMinuteToFcsj(1);
  1799 + //}
  1800 +
  1801 +
  1802 + }
  1803 +
  1804 + this.fnAdjustBcInterval(isUp, oStartTime, fre - 1);
  1805 + }
  1806 +
  1807 + },
  1808 +
  1809 + /**
  1810 + * 调整班次间隔(平均间隔)。
  1811 + * @param bIsUp 是否上行
  1812 + * @param oStartTime 开始时间对象
  1813 + */
  1814 + fnAdjustBcInterval2_avg: function(bIsUp, oStartTime) {
  1815 + var aBc = !oStartTime ? _fnGetBcList(bIsUp) : _fnGetBcList2(bIsUp, oStartTime); // 指定方向的班次列表
  1816 + aBc.sort(function(o1, o2) {
  1817 + if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {
  1818 + return -1;
  1819 + } else {
  1820 + return 1;
  1821 + }
  1822 + });
  1823 +
  1824 + var j;
  1825 + var iCount = aBc.length - 1;
  1826 + var iC1 = Math.floor(aBc[aBc.length - 1].getFcTimeObj().diff(aBc[0].getFcTimeObj(), "m") / iCount);
  1827 + var iC2 = aBc[aBc.length - 1].getFcTimeObj().diff(aBc[0].getFcTimeObj(), "m") % iCount;
  1828 + var iTempTime;
  1829 +
  1830 + for (j = 0; j < iCount - iC2; j++) {
  1831 + iTempTime = aBc[j + 1].getFcTimeObj().diff(aBc[j].getFcTimeObj(), "m");
  1832 + aBc[j + 1].addMinuteToFcsj(iC1 - iTempTime);
  1833 + }
  1834 + for (j = 0; j < iC2; j++) {
  1835 + iTempTime = aBc[iCount - iC2 + j + 1].getFcTimeObj().diff(aBc[iCount - iC2 + j].getFcTimeObj(), "m");
  1836 + aBc[iCount - iC2 + j + 1].addMinuteToFcsj(iC1 + 1 - iTempTime);
  1837 + }
  1838 +
  1839 + },
  1840 +
  1841 + /**
  1842 + * 计算高峰平均停站时间。
  1843 + */
  1844 + fnCalcuAverPeakStopTime: function() {
  1845 + var i;
  1846 + var j;
  1847 + var aBc;
  1848 + var iBcCount = 0;
  1849 + var iSum = 0;
  1850 + for (i = 0; i < _internalLpArray.length; i++) {
  1851 + aBc = _internalLpArray[i].getBcArray();
  1852 +
  1853 + for (j = 0; j < aBc.length; j++) {
  1854 + if (!_paramObj.isTroughBc(aBc[j].getArrTimeObj())) {
  1855 + iBcCount ++;
  1856 + iSum += aBc[j].getStopTime();
  1857 + }
  1858 + }
  1859 + }
  1860 +
  1861 + return Math.floor(iSum / iBcCount);
  1862 + },
  1863 +
  1864 + /**
  1865 + * 计算低谷平均停站时间。
  1866 + */
  1867 + fnCalcuAverTroughStopTime: function() {
  1868 + var i;
  1869 + var j;
  1870 + var aBc;
  1871 + var iBcCount = 0;
  1872 + var iSum = 0;
  1873 + for (i = 0; i < _internalLpArray.length; i++) {
  1874 + aBc = _internalLpArray[i].getBcArray();
  1875 + for (j = 0; j < aBc.length; j++) {
  1876 + if (_paramObj.isTroughBc(aBc[j].getArrTimeObj())) {
  1877 + iBcCount ++;
  1878 + iSum += aBc[j].getStopTime();
  1879 + }
  1880 + }
  1881 + }
  1882 +
  1883 + return Math.floor(iSum / iBcCount);
  1884 + },
  1885 +
  1886 + //------------- 其他方法 -------------//
  1887 + /**
  1888 + * 返回内部路牌数据列表。
  1889 + * @returns {Array}
  1890 + */
  1891 + fnGetLpArray: function() {
  1892 + return _internalLpArray;
  1893 + },
  1894 +
  1895 + /**
  1896 + * 内部数据转化成显示用的班次数组。
  1897 + */
  1898 + fnToGanttBcArray: function() {
  1899 + var aAllBc = [];
  1900 + var aLpBc = [];
  1901 + var aEatBc = [];
  1902 + var oLp;
  1903 + var i;
  1904 + var j;
  1905 +
  1906 + for (i = 0; i < _internalLpArray.length; i++) {
  1907 + oLp = _internalLpArray[i];
  1908 + aLpBc = [];
  1909 + aLpBc = aLpBc.concat(oLp.getOtherBcArray(), oLp.getBcArray());
  1910 +
  1911 + aEatBc = [];
  1912 + // 根据班次的吃饭时间添加吃饭班次
  1913 + for (j = 0; j < aLpBc.length; j++) {
  1914 + if (aLpBc[j].fnGetEatTime() > 0) {
  1915 + aEatBc.push(_factory.createBcObj(
  1916 + oLp,
  1917 + "cf",
  1918 + !aLpBc[j].isUp(), // 和上一个班次方向相反
  1919 + 1,
  1920 + _paramObj.addMinute(aLpBc[j].getArrTimeObj(), aLpBc[j].getStopTime()), // 使用上一个班次的到达时间作为开始时间
  1921 + _paramObj
  1922 + ));
  1923 + }
  1924 + }
  1925 + aLpBc = aLpBc.concat(aEatBc);
  1926 +
  1927 + // 按照发车时间排序
  1928 + aLpBc.sort(function(o1, o2) {
  1929 + if (o1.getFcTimeObj().isBefore(o2.getFcTimeObj())) {
  1930 + return -1;
  1931 + } else {
  1932 + return 1;
  1933 + }
  1934 + });
  1935 +
  1936 + // 重新赋值fcno
  1937 + for (j = 0; j < aLpBc.length; j++) {
  1938 + aLpBc[j].fnSetFcno(j + 1);
  1939 + }
  1940 +
  1941 + aAllBc = aAllBc.concat(aLpBc);
  1942 + }
  1943 +
  1944 + var aGanttBc = [];
  1945 + for (i = 0; i < aAllBc.length; i++) {
  1946 + aGanttBc.push(aAllBc[i].toGanttBcObj());
  1947 + }
  1948 +
  1949 + return aGanttBc;
  1950 + }
  1951 +
  1952 + };
  1953 +
1949 }; 1954 };
1950 \ No newline at end of file 1955 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/v2/main_v2.js
1 -/**  
2 - * 主类。  
3 - */  
4 -var Main_v2 = function() {  
5 -  
6 - // 内部工厂类  
7 - var _factoryFun = function() {  
8 - return {  
9 - // 创建参数  
10 - createParameterObj: function(formMap, dataMap) {  
11 - var paramObj = ParameterObj();  
12 - paramObj.wrap(formMap, dataMap);  
13 - return paramObj;  
14 - },  
15 - // 创建班次对象  
16 - createBcObj: function(lpObj, bcType, isUp, fcno, fcTimeObj, paramObj) {  
17 - var _bclc = paramObj.calcuTravelLcNumber(isUp, bcType);  
18 - var _fcsj = fcTimeObj;  
19 - var _bcsj = paramObj.calcuTravelTime(_fcsj, isUp);  
20 - var _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
21 - //var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj);  
22 - var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, undefined);  
23 - var _tccid = paramObj.getTTinfoId();  
24 - var _ttinfoid = paramObj.getTTinfoId();  
25 - var _xl = paramObj.getXlId();  
26 - var _qdz = isUp ? paramObj.getUpQdzObj().id : paramObj.getDownQdzObj().id;  
27 - var _zdz = isUp ? paramObj.getUpZdzObj().id : paramObj.getDownZdzObj().id;  
28 -  
29 - if (bcType == "bd") { // 早例保,传过来的发车时间是第一个班次的发车时间  
30 - if (isUp) { // 上行  
31 - _fcsj = paramObj.addMinute(  
32 - _fcsj,  
33 - -(paramObj.getUpOutTime() + paramObj.getLbTime()));  
34 - _bcsj = paramObj.getLbTime();  
35 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
36 - _stoptime = 0;  
37 - } else { // 下行  
38 - _fcsj = paramObj.addMinute(  
39 - _fcsj,  
40 - -(paramObj.getDownOutTime() + paramObj.getLbTime()));  
41 - _bcsj = paramObj.getLbTime();  
42 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
43 - _stoptime = 0;  
44 - }  
45 - } else if (bcType == "lc") { // 晚例保,传过来的发车时间是最后一个班次的到达时间  
46 - if (isUp) { // 上行  
47 - _fcsj = paramObj.addMinute(  
48 - _fcsj,  
49 - paramObj.getUpInTime());  
50 - _bcsj = paramObj.getLbTime();  
51 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
52 - _stoptime = 0;  
53 - } else { // 下行  
54 - _fcsj = paramObj.addMinute(  
55 - _fcsj,  
56 - paramObj.getDownInTime());  
57 - _bcsj = paramObj.getLbTime();  
58 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
59 - _stoptime = 0;  
60 - }  
61 - } else if (bcType == "out") { // 出场,传过来的发车时间是第一个班次的发车时间  
62 - if (isUp) { // 上行  
63 - _fcsj = paramObj.addMinute(  
64 - _fcsj,  
65 - -paramObj.getUpOutTime());  
66 - _bcsj = paramObj.getUpOutTime();  
67 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
68 - _stoptime = 0;  
69 - } else { // 下行  
70 - _fcsj = paramObj.addMinute(  
71 - _fcsj,  
72 - -paramObj.getDownOutTime());  
73 - _bcsj = paramObj.getDownOutTime();  
74 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
75 - _stoptime = 0;  
76 - }  
77 - } else if (bcType == "in") { // 进场,传过来的发车时间是最后一个班次的到达时间  
78 - if (isUp) { // 上行  
79 - _bcsj = paramObj.getUpInTime();  
80 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
81 - _stoptime = 0;  
82 - } else { // 下行  
83 - _bcsj = paramObj.getDownInTime();  
84 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
85 - _stoptime = 0;  
86 - }  
87 - } else if (bcType == "cf") { // 吃饭班次  
88 - // 以13:00为分界,之前的为午饭,之后的为晚饭  
89 - if (fcTimeObj.isBefore(paramObj.toTimeObj("13:00"))) {  
90 - _bcsj = paramObj.fnGetLunchTime();  
91 - } else {  
92 - _bcsj = paramObj.fnGetDinnerTime();  
93 - }  
94 - _arrsj = paramObj.addMinute(_fcsj, _bcsj);  
95 - _stoptime = 0;  
96 - }  
97 -  
98 - var bcParamObj = {};  
99 - bcParamObj.bcType = bcType; // 班次类型(normal,in_,out, bd, lc, cf等)  
100 - bcParamObj.isUp = isUp; // boolean是否上下行  
101 - bcParamObj.fcno = fcno; // 发车顺序号  
102 - bcParamObj.fcTimeObj = _fcsj; // 发车时间对象  
103 - bcParamObj.bclc = _bclc; // 班次里程  
104 - bcParamObj.bcsj = _bcsj; // 班次历时  
105 - bcParamObj.arrtime = _arrsj; // 到达时间对象  
106 - bcParamObj.stoptime = _stoptime; // 停站时间  
107 - bcParamObj.tccid = _tccid; // 停车场id  
108 - bcParamObj.ttinfoid = _ttinfoid; // 时刻表id  
109 - bcParamObj.xl = _xl; // 线路id  
110 - bcParamObj.qdzid = _qdz; // 起点站id  
111 - bcParamObj.zdzid = _zdz; // 终点站id  
112 -  
113 - return new InternalBcObj(lpObj, bcParamObj);  
114 - }  
115 - };  
116 - };  
117 - var _factory = _factoryFun();  
118 -  
119 - // 所有的时间使用moment.js计算  
120 -  
121 - var _paramObj; // 参数对象  
122 -  
123 - var _bxDesc = [ // 班型描述  
124 - {'type':'六工一休','hoursV':6.66, 'minueV':'6:40', 'qcount': 0, 'avertime': 0},  
125 - {'type':'五工一休','hoursV':6.85, 'minueV':'6:51', 'qcount': 0, 'avertime': 0},  
126 - {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0, 'avertime': 0},  
127 - {'type':'三工一休','hoursV':7.61, 'minueV':'7:37', 'qcount': 0, 'avertime': 0},  
128 - {'type':'二工一休','hoursV':8.57, 'minueV':'8:34', 'qcount': 0, 'avertime': 0},  
129 - {'type':'一工一休','hoursV':11.42, 'minueV':'11:25', 'qcount': 0, 'avertime': 0},  
130 - {'type':'五工二休','hoursV':7.99, 'minueV':'8:00', 'qcount': 0, 'avertime': 0},  
131 - {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0, 'avertime': 0}  
132 - ];  
133 -  
134 - var _funCalcuExportData_lpObjList = function(aInternalLpObj) {  
135 - // 构造路牌对象  
136 - var aLpObj = [];  
137 - var i;  
138 - var j;  
139 - var z;  
140 - var oInternalLp;  
141 - var oInternalBc;  
142 - var oInternalBc_temp;  
143 - var oLp;  
144 - var iZbc;  
145 - var iZgs;  
146 - for (i = 0; i < aInternalLpObj.length; i++) {  
147 - oInternalLp = aInternalLpObj[i];  
148 - iZbc = 0;  
149 - iZgs = 0;  
150 - oLp = {  
151 - "lpname": oInternalLp.getLpName(), // 路牌名字  
152 - "isUp": oInternalLp.isUp(), // 每圈的第一个班次是否上行  
153 - "bcObjList": [], // 班次列表  
154 - "groupCount": oInternalLp.fnGetGroupCount(), // 总圈数  
155 - "zgs": 0, // 总工时  
156 - "zbc": 0, // 总班次  
157 - "stationRouteId1": 0, // 第一个班次起点站路由id  
158 - "stationRouteId2": 0 // 第二个班次起点站路由id  
159 - };  
160 -  
161 - // 将报到班次,进出场班次加到班次的时间上  
162 - var iBcChainCount;  
163 - var oStartBc;  
164 - var oEndBc;  
165 - var oTempBc;  
166 - var aFcsj = [];  
167 -  
168 - iBcChainCount = oInternalLp.fnGetBcChainCount();  
169 - if (iBcChainCount == 1) { // 单一车次链,连班班型  
170 - oStartBc = oInternalLp.getBc(  
171 - oInternalLp.fnGetBcChainInfo(0)["s_q"],  
172 - oInternalLp.fnGetBcChainInfo(0)["s_b"]  
173 - );  
174 - oTempBc = _factory.createBcObj(  
175 - oLp, "bd", true, 1,  
176 - oStartBc.getFcTimeObj(),  
177 - _paramObj  
178 - );  
179 - aFcsj.push("(到" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
180 - oTempBc = _factory.createBcObj(  
181 - oLp, "out", true, 1,  
182 - oStartBc.getFcTimeObj(),  
183 - _paramObj  
184 - );  
185 - aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
186 - aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");  
187 - oStartBc._$_fcsj_desc = aFcsj.join("");  
188 -  
189 - oLp.bcObjList.push({ // 出场班次  
190 - "bcsj": oTempBc.getBcTime(), // 班次时间  
191 - "ssj": oTempBc.getStopTime(), // 停站时间  
192 - "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间  
193 -  
194 - "tccid": oTempBc._$_tccid, // 停车场id  
195 - "qdzid": oTempBc._$_qdzid, // 起点站id  
196 - "zdzid": oTempBc._$_zdzid, // 终点站id  
197 -  
198 - "isUp": oTempBc._$_isUp, // 是否上行  
199 -  
200 - "bcType": oTempBc._$_bcType, // 班次类型  
201 - "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述  
202 -  
203 - "groupNo": -1, // 第几圈  
204 - "groupBcNo": -1 // 圈里第几个班次  
205 -  
206 - });  
207 -  
208 - aFcsj = [];  
209 -  
210 - oEndBc = oInternalLp.getBc(  
211 - oInternalLp.fnGetBcChainInfo(0)["e_q"],  
212 - oInternalLp.fnGetBcChainInfo(0)["e_b"]  
213 - );  
214 - aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");  
215 - oTempBc = _factory.createBcObj(  
216 - oLp, "in", true, 1,  
217 - oEndBc.getArrTimeObj(),  
218 - _paramObj  
219 - );  
220 - aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
221 -  
222 - oLp.bcObjList.push({ // 进场班次  
223 - "bcsj": oTempBc.getBcTime(), // 班次时间  
224 - "ssj": oTempBc.getStopTime(), // 停站时间  
225 - "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间  
226 -  
227 - "tccid": oTempBc._$_tccid, // 停车场id  
228 - "qdzid": oTempBc._$_qdzid, // 起点站id  
229 - "zdzid": oTempBc._$_zdzid, // 终点站id  
230 -  
231 - "isUp": oTempBc._$_isUp, // 是否上行  
232 -  
233 - "bcType": oTempBc._$_bcType, // 班次类型  
234 - "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述  
235 -  
236 - "groupNo": -2, // 第几圈  
237 - "groupBcNo": -2 // 圈里第几个班次  
238 -  
239 - });  
240 -  
241 - oTempBc = _factory.createBcObj(  
242 - oLp, "lc", true, 1,  
243 - oEndBc.getArrTimeObj(),  
244 - _paramObj  
245 - );  
246 - aFcsj.push("(离" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
247 - oEndBc._$_fcsj_desc = aFcsj.join("");  
248 -  
249 - } else if (iBcChainCount == 2) { // 两个车次链,分班班型  
250 - oStartBc = oInternalLp.getBc(  
251 - oInternalLp.fnGetBcChainInfo(0)["s_q"],  
252 - oInternalLp.fnGetBcChainInfo(0)["s_b"]  
253 - );  
254 - oTempBc = _factory.createBcObj(  
255 - oLp, "bd", true, 1,  
256 - oStartBc.getFcTimeObj(),  
257 - _paramObj  
258 - );  
259 - aFcsj.push("(到" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
260 - oTempBc = _factory.createBcObj(  
261 - oLp, "out", true, 1,  
262 - oStartBc.getFcTimeObj(),  
263 - _paramObj  
264 - );  
265 - aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
266 - aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");  
267 - oStartBc._$_fcsj_desc = aFcsj.join("");  
268 -  
269 - oLp.bcObjList.push({ // 出场班次  
270 - "bcsj": oTempBc.getBcTime(), // 班次时间  
271 - "ssj": oTempBc.getStopTime(), // 停站时间  
272 - "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间  
273 -  
274 - "tccid": oTempBc._$_tccid, // 停车场id  
275 - "qdzid": oTempBc._$_qdzid, // 起点站id  
276 - "zdzid": oTempBc._$_zdzid, // 终点站id  
277 -  
278 - "isUp": oTempBc._$_isUp, // 是否上行  
279 -  
280 - "bcType": oTempBc._$_bcType, // 班次类型  
281 - "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述  
282 -  
283 - "groupNo": -1, // 第几圈  
284 - "groupBcNo": -1 // 圈里第几个班次  
285 -  
286 - });  
287 -  
288 - aFcsj = [];  
289 -  
290 - oEndBc = oInternalLp.getBc(  
291 - oInternalLp.fnGetBcChainInfo(0)["e_q"],  
292 - oInternalLp.fnGetBcChainInfo(0)["e_b"]  
293 - );  
294 - aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");  
295 - oTempBc = _factory.createBcObj(  
296 - oLp, "in", true, 1,  
297 - oEndBc.getArrTimeObj(),  
298 - _paramObj  
299 - );  
300 - aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
301 - oTempBc = _factory.createBcObj(  
302 - oLp, "lc", true, 1,  
303 - oEndBc.getArrTimeObj(),  
304 - _paramObj  
305 - );  
306 - oEndBc._$_fcsj_desc = aFcsj.join("");  
307 -  
308 - aFcsj = [];  
309 -  
310 - oStartBc = oInternalLp.getBc(  
311 - oInternalLp.fnGetBcChainInfo(1)["s_q"],  
312 - oInternalLp.fnGetBcChainInfo(1)["s_b"]  
313 - );  
314 - oTempBc = _factory.createBcObj(  
315 - oLp, "out", true, 1,  
316 - oStartBc.getFcTimeObj(),  
317 - _paramObj  
318 - );  
319 - aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
320 - aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");  
321 - oStartBc._$_fcsj_desc = aFcsj.join("");  
322 -  
323 - aFcsj = [];  
324 -  
325 - oEndBc = oInternalLp.getBc(  
326 - oInternalLp.fnGetBcChainInfo(1)["e_q"],  
327 - oInternalLp.fnGetBcChainInfo(1)["e_b"]  
328 - );  
329 - aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");  
330 - oTempBc = _factory.createBcObj(  
331 - oLp, "in", true, 1,  
332 - oEndBc.getArrTimeObj(),  
333 - _paramObj  
334 - );  
335 - aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
336 -  
337 - oLp.bcObjList.push({ // 进场班次  
338 - "bcsj": oTempBc.getBcTime(), // 班次时间  
339 - "ssj": oTempBc.getStopTime(), // 停站时间  
340 - "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间  
341 -  
342 - "tccid": oTempBc._$_tccid, // 停车场id  
343 - "qdzid": oTempBc._$_qdzid, // 起点站id  
344 - "zdzid": oTempBc._$_zdzid, // 终点站id  
345 -  
346 - "isUp": oTempBc._$_isUp, // 是否上行  
347 -  
348 - "bcType": oTempBc._$_bcType, // 班次类型  
349 - "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述  
350 -  
351 - "groupNo": -2, // 第几圈  
352 - "groupBcNo": -2 // 圈里第几个班次  
353 -  
354 - });  
355 -  
356 - oTempBc = _factory.createBcObj(  
357 - oLp, "lc", true, 1,  
358 - oEndBc.getArrTimeObj(),  
359 - _paramObj  
360 - );  
361 - aFcsj.push("(离" + oTempBc.getFcTimeObj().format("HH:mm") + ")");  
362 - oEndBc._$_fcsj_desc = aFcsj.join("");  
363 -  
364 - }  
365 -  
366 - for (j = 0; j < oInternalLp.fnGetGroupCount(); j++) {  
367 - for (z = 0; z < 2; z++) {  
368 - oInternalBc = oInternalLp.getBc(j, z);  
369 - if (oInternalBc) {  
370 - if (oInternalBc.fnGetEatTime() > 0) {  
371 - // 吃饭班次是下一个班次开始吃,和本班次方向相反  
372 - oInternalBc_temp = oInternalLp.getBc(  
373 - z == 1 ? j + 1 : j,  
374 - z == 1 ? 0 : 1);  
375 -  
376 - oInternalBc_temp._$_fcsj_desc = "(吃" + oInternalBc_temp.getFcTimeObj().format("HH:mm") + ")";  
377 - }  
378 -  
379 - oLp.bcObjList.push({  
380 - "bcsj": oInternalBc.getBcTime(), // 班次时间  
381 - "ssj": oInternalBc.getStopTime(), // 停站时间  
382 - "eatsj": oInternalBc.fnGetEatTime(), // 吃饭时间  
383 -  
384 - "tccid": oInternalBc._$_tccid, // 停车场id  
385 - "qdzid": oInternalBc._$_qdzid, // 起点站id  
386 - "zdzid": oInternalBc._$_zdzid, // 终点站id  
387 -  
388 - "isUp": oInternalBc._$_isUp, // 是否上行  
389 -  
390 - "bcType": oInternalBc._$_bcType, // 班次类型  
391 - "fcsj": oInternalBc._$_fcsjObj.format("HH:mm"), // 发车时间描述  
392 - "fcsjDesc" : oInternalBc._$_fcsj_desc || oInternalBc._$_fcsjObj.format("HH:mm"),  
393 -  
394 - "groupNo": j, // 第几圈  
395 - "groupBcNo": z // 圈里第几个班次  
396 -  
397 - });  
398 -  
399 - iZgs = iZgs +  
400 - oInternalBc.getBcTime() + // 班次时间  
401 - oInternalBc.getStopTime() + // 停站时间  
402 - oInternalBc.fnGetEatTime(); // 吃饭时间  
403 - iZbc = iZbc + 1;  
404 -  
405 - // 设置圈站点路由id  
406 - if (oInternalBc.isUp() == oInternalLp.isUp()) { // 第一个班次  
407 - if (oLp.stationRouteId1 == 0) {  
408 - oLp.stationRouteId1 = oInternalBc._$_qdzid;  
409 - }  
410 - } else { // 第二个班次  
411 - if (oLp.stationRouteId2 == 0) {  
412 - oLp.stationRouteId2 = oInternalBc._$_qdzid;  
413 - }  
414 - }  
415 -  
416 - }  
417 - }  
418 -  
419 - }  
420 -  
421 - for (z = 0; z < oInternalLp.getOtherBcArray().length; z++) {  
422 - oInternalBc = oInternalLp.getOtherBcArray()[z];  
423 - iZgs = iZgs +  
424 - oInternalBc.getBcTime() + // 班次时间  
425 - oInternalBc.getStopTime(); // 停站时间  
426 - if (oInternalBc._$_bcType != "bd" &&  
427 - oInternalBc._$_bcType != "lc" &&  
428 - oInternalBc._$_bcType != "cf") {  
429 - iZbc = iZbc + 1;  
430 - }  
431 - }  
432 -  
433 - oLp.zgs = iZgs;  
434 - oLp.zbc = iZbc;  
435 - aLpObj.push(oLp);  
436 - }  
437 -  
438 - return aLpObj;  
439 - };  
440 -  
441 - var _funCalcuExportData_statInfoList = function(aInternalLpObj) {  
442 - var countBc = 0, // 总班次  
443 - serviceBc = 0, // 营运班次  
444 - jcbc = 0, // 进场总班次.  
445 - ccbc = 0, // 出场总班次.  
446 - cfbc = 0, // 吃饭总班次.  
447 - zwlbbc = 0, // 早晚例保总班次.  
448 - countGs = 0.0, // 总工时  
449 - servicesj = 0, // 营运班次总时间  
450 - jcsj = 0.0, // 进场总时间.  
451 - ccsj = 0.0, // 出场总时间.  
452 - cfsj = 0.0, // 吃饭总时间.  
453 - zwlbsj = 0.0, // 早晚例保总时间.  
454 - ksBc = 0, // 空驶班次  
455 - serviceLc = 0.0, // 营运里程  
456 - ksLc = 0.0, // 空驶里程  
457 - avgTzjx = 0.0, // 平均停站间隙  
458 - gfServiceBc = 0, // 高峰营运班次  
459 - dgServiceBc = 0, // 低谷营运班次  
460 - gfAvgTzjx = 0.0, // 高峰平均停站间隙  
461 - dgAvgTzjx = 0.0; // 低谷平均停站间隙  
462 -  
463 - var aAllBc = [];  
464 - var oLp;  
465 - var oBc;  
466 - var i;  
467 - var j;  
468 -  
469 - for (i = 0; i < aInternalLpObj.length; i++) {  
470 - oLp = aInternalLpObj[i];  
471 - for (j = 0; j < oLp.getBcArray().length; j++) {  
472 - aAllBc.push(oLp.getBcArray()[j]);  
473 - }  
474 - for (j = 0; j < oLp.getOtherBcArray().length; j++) {  
475 - aAllBc.push(oLp.getOtherBcArray()[j]);  
476 - }  
477 - }  
478 -  
479 - for (i = 0; i < aAllBc.length; i++) {  
480 - oBc = aAllBc[i];  
481 -  
482 - if (oBc.getBcTime() > 0) {  
483 - countBc = countBc + 1;  
484 - countGs = countGs + oBc.getStopTime() + oBc.getBcTime();  
485 - if (_paramObj.isTroughBc(oBc.getFcTimeObj())) {  
486 - if (oBc._$_bcType == "normal") {  
487 - dgServiceBc = dgServiceBc + 1;  
488 - dgAvgTzjx = dgAvgTzjx + oBc.getStopTime();  
489 - }  
490 - } else {  
491 - if (oBc._$_bcType == "normal") {  
492 - gfServiceBc = gfServiceBc + 1;  
493 - gfAvgTzjx = gfAvgTzjx + oBc.getStopTime();  
494 - }  
495 - }  
496 -  
497 - if (oBc._$_bcType == "normal") {  
498 - serviceBc = serviceBc + 1;  
499 - serviceLc = serviceLc + oBc._$_bclc;  
500 - servicesj = servicesj + oBc.getBcTime();  
501 - avgTzjx = avgTzjx + oBc.getStopTime();  
502 -  
503 - if (oBc.fnGetEatTime() > 0) {  
504 - cfbc = cfbc + 1;  
505 - cfsj = cfsj + oBc.fnGetEatTime();  
506 - }  
507 - } else if (oBc._$_bcType == "in") {  
508 - jcbc = jcbc + 1;  
509 - jcsj = jcsj + oBc.getBcTime();  
510 - } else if (oBc._$_bcType == "out") {  
511 - ccbc = ccbc + 1;  
512 - ccsj = ccsj + oBc.getBcTime();  
513 - } else if (oBc._$_bcType == "bd") {  
514 - zwlbbc = zwlbbc + 1;  
515 - zwlbsj = zwlbsj + oBc.getBcTime();  
516 - } else if (oBc._$_bcType == "lc") {  
517 - zwlbbc = zwlbbc + 1;  
518 - zwlbsj = zwlbsj + oBc.getBcTime();  
519 - }  
520 - }  
521 - }  
522 -  
523 - dgAvgTzjx = dgAvgTzjx / dgServiceBc;  
524 - gfAvgTzjx = gfAvgTzjx / gfServiceBc;  
525 - avgTzjx = avgTzjx / dgServiceBc;  
526 -  
527 - return [  
528 - {'statItem': '总班次(包括进出场、吃饭时间、早晚例保、营运且班次时间大于零的班次)', 'statValue': countBc},  
529 - {'statItem': '进场总班次(包括进场且班次时间大于零的班次)', 'statValue': jcbc},  
530 - {'statItem': '出场总班次(包括进场且班次时间大于零的班次)', 'statValue': ccbc},  
531 - {'statItem': '吃饭总班次(包括吃饭且班次时间大于零的班次)', 'statValue': cfbc},  
532 - {'statItem': '早晚例保总班次(包括早晚例保且时间大于零的班次)', 'statValue': zwlbbc},  
533 - {'statItem': '营运总班次(包括正常、区间、放大站且班次时间大于零班次)','statValue': serviceBc},  
534 - {'statItem': '进场总时间(包括进场班次且班次时间大于零)', 'statValue': jcsj/60},  
535 - {'statItem': '出场总时间(包括进场班次且班次时间大于零)', 'statValue': ccsj/60},  
536 - {'statItem': '吃饭总时间(包括吃饭班次且班次时间大于零)', 'statValue': cfsj/60},  
537 - {'statItem': '早晚例保总时间(包括早晚例保班次且时间大于零的)', 'statValue': zwlbsj/60},  
538 - {'statItem': '营运班次总时间(包括正常、区间、放大站且班次时间大于零)', 'statValue': servicesj/60},  
539 - {'statItem': '总工时(包括进出场、吃饭时间、早晚例保、营运班次时间)', 'statValue': countGs/60},  
540 - {'statItem': '空驶班次(包括直放班次)', 'statValue': ksBc},  
541 - {'statItem': '营运里程(包括正常、区间、放大站里程)', 'statValue': serviceLc},  
542 - {'statItem': '空驶里程(包括直放里程)', 'statValue': ksLc},  
543 - {'statItem': '平均停站时间(营运班次停站时间总和/营运总班次)', 'statValue': avgTzjx},  
544 - {'statItem': '高峰营运班次(包括早晚高峰时段的正常、区间、放大站班次)', 'statValue': gfServiceBc},  
545 - {'statItem': '低谷营运班次(包括低谷时段的正常、区间、放大站班次)', 'statValue': dgServiceBc},  
546 - {'statItem': '高峰平均停站间隙(高峰营运班次停站时间总和/高峰营运班次总和)', 'statValue': gfAvgTzjx},  
547 - {'statItem': '低谷平均停站间隙(低谷营运班次停站时间总和/低谷营运班次总和)', 'statValue': dgAvgTzjx},  
548 - {'statItem': '综合评估', 'statValue': 3}  
549 - ];  
550 -  
551 - };  
552 -  
553 - return {  
554 - /**  
555 - * 工厂对象,创建不同的对象。  
556 - * @returns {{createParameterObj, createBcObj}}  
557 - */  
558 - getFactory: function() {  
559 - return _factory;  
560 - },  
561 -  
562 - /**  
563 - * 使用发车间隔策略生成时刻表。  
564 - * @param paramObj 参数对象  
565 - * @param lpArray 路牌数组  
566 - * @constructor  
567 - */  
568 - BXPplaceClassesTime03 : function(paramObj, lpArray) {  
569 - // 参数对象  
570 - _paramObj = paramObj;  
571 -  
572 - // 1、初始化行车计划  
573 - var schedule = new InternalScheduleObj(_paramObj, lpArray, _factory);  
574 - schedule.fnInitDataWithBxLayout();  
575 - // 2、将连班路牌的班次补足  
576 - schedule.fnCalcuLpBx_lb();  
577 -  
578 - // 3、修正针对初始化时生成的高峰班次,之前不足的补上,多余的删除  
579 - schedule.fnAdjustGfbc(true, true); // 修正上行早高峰  
580 - schedule.fnAdjustGfbc(true, false); // 修正下行早高峰  
581 - schedule.fnAdjustGfbc(false, true); // 修正上行晚高峰  
582 - schedule.fnAdjustGfbc(false, false); // 修正下行晚高峰  
583 -  
584 - // 6、补吃饭班次  
585 - schedule.fnCalcuEatBc();  
586 -  
587 - // 4、按照车辆投入运营要求补充班次  
588 - schedule.fnCalcuLpBc_yy();  
589 -  
590 - // 5、根据班型补充所有的不足班次  
591 - schedule.fnCalcuLpBx_5_2();  
592 - schedule.fnCalcuLpBx_other();  
593 -  
594 - // 7、祛除上标线开头有删除标记的班次  
595 - schedule.fnRemoveDelFirstFlagBc();  
596 -  
597 - // TODO:8、调整路牌班次间隔  
598 - schedule.fnAdjustLpBcInterval(1);  
599 -  
600 - // TODO:9、调整纵向班次间隔  
601 - schedule.fnAdjustBcInterval(true, false, 10);  
602 - schedule.fnAdjustBcInterval(false, false, 10);  
603 -  
604 - // 10、确定末班车  
605 - schedule.fnCalcuLastBc();  
606 -  
607 - // 11、祛除上标线结尾有删除标记的班次  
608 - schedule.fnRemoveDelLastFlagBc();  
609 -  
610 - // TODO:12、平均化指定时间后的班次列表间隔  
611 - schedule.fnAdjustBcInterval2_avg(true, _paramObj.toTimeObj("19:50"));  
612 - schedule.fnAdjustBcInterval2_avg(false, _paramObj.toTimeObj("19:50"));  
613 -  
614 - // 10、补进出场例保班次  
615 - schedule.fnCalcuOtherBc();  
616 -  
617 - //-------------------- 输出ganut图上的班次,班型描述 ----------------------//  
618 - // TODO:班型再议  
619 - return {  
620 - 'json':schedule.fnToGanttBcArray(),'bxrcgs':null,  
621 - 'aInternalLpObj': schedule.fnGetLpArray()  
622 - };  
623 -  
624 - },  
625 - /**  
626 - * 导出时刻表配置。  
627 - * @param aInternalLpObj 内部路牌对象列表  
628 - */  
629 - exportDataConfig: function(aInternalLpObj) {  
630 - $('.exportAdd').on('click',function() {  
631 - var aInfos = {  
632 - "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表  
633 - "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表  
634 - };  
635 -  
636 - console.log(aInfos);  
637 -  
638 - $(".exportAdd").addClass("disabled");  
639 - $(".exportAdd").html("<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>" + " 正在导出...");  
640 -  
641 - // 提交  
642 - $.ajax({  
643 - type: 'POST',  
644 - url: "/tidc/exportDTDFile",  
645 - dataType: 'binary',  
646 - contentType: "application/json",  
647 - data: JSON.stringify(aInfos),  
648 - success: function(data){  
649 - Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xls");  
650 -  
651 - $(".exportAdd").removeClass("disabled");  
652 - $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据");  
653 - },  
654 - error: function(xhr, type){  
655 - alert('错误:TODO');  
656 -  
657 - $(".exportAdd").removeClass("disabled");  
658 - $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据");  
659 - }  
660 - });  
661 -  
662 - });  
663 - },  
664 -  
665 - downloadFile: function (data, mimeType, fileName) {  
666 - var success = false;  
667 - var blob = new Blob([data], { type: mimeType });  
668 - try {  
669 - if (navigator.msSaveBlob)  
670 - navigator.msSaveBlob(blob, fileName);  
671 - else {  
672 - // Try using other saveBlob implementations, if available  
673 - var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;  
674 - if (saveBlob === undefined) throw "Not supported";  
675 - saveBlob(blob, fileName);  
676 - }  
677 - success = true;  
678 - } catch (ex) {  
679 - console.log("saveBlob method failed with the following exception:");  
680 - console.log(ex);  
681 - }  
682 -  
683 - if (!success) {  
684 - // Get the blob url creator  
685 - var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;  
686 - if (urlCreator) {  
687 - // Try to use a download link  
688 - var link = document.createElement('a');  
689 - if ('download' in link) {  
690 - // Try to simulate a click  
691 - try {  
692 - // Prepare a blob URL  
693 - var url = urlCreator.createObjectURL(blob);  
694 - link.setAttribute('href', url);  
695 -  
696 - // Set the download attribute (Supported in Chrome 14+ / Firefox 20+)  
697 - link.setAttribute("download", fileName);  
698 -  
699 - // Simulate clicking the download link  
700 - var event = document.createEvent('MouseEvents');  
701 - event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);  
702 - link.dispatchEvent(event);  
703 - success = true;  
704 -  
705 - } catch (ex) {  
706 - console.log("Download link method with simulated click failed with the following exception:");  
707 - console.log(ex);  
708 - }  
709 - }  
710 -  
711 - if (!success) {  
712 - // Fallback to window.location method  
713 - try {  
714 - // Prepare a blob URL  
715 - // Use application/octet-stream when using window.location to force download  
716 - var url = urlCreator.createObjectURL(blob);  
717 - window.location = url;  
718 - console.log("Download link method with window.location succeeded");  
719 - success = true;  
720 - } catch (ex) {  
721 - console.log("Download link method with window.location failed with the following exception:");  
722 - console.log(ex);  
723 - }  
724 - }  
725 - }  
726 - }  
727 -  
728 - if (!success) {  
729 - // Fallback to window.open method  
730 - console.log("No methods worked for saving the arraybuffer, using last resort window.open");  
731 - window.open("", '_blank', '');  
732 - }  
733 - }  
734 -  
735 - };  
736 -  
737 -}(); 1 +/**
  2 + * 主类。
  3 + */
  4 +var Main_v2 = function() {
  5 +
  6 + // 内部工厂类
  7 + var _factoryFun = function() {
  8 + return {
  9 + // 创建参数
  10 + createParameterObj: function(formMap, dataMap) {
  11 + var paramObj = ParameterObj();
  12 + paramObj.wrap(formMap, dataMap);
  13 + return paramObj;
  14 + },
  15 + // 创建班次对象
  16 + createBcObj: function(lpObj, bcType, isUp, fcno, fcTimeObj, paramObj) {
  17 + var _bclc = paramObj.calcuTravelLcNumber(isUp, bcType);
  18 + var _fcsj = fcTimeObj;
  19 + var _bcsj = paramObj.calcuTravelTime(_fcsj, isUp);
  20 + var _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  21 + //var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, _bcsj);
  22 + var _stoptime = paramObj.fnCalcuFixedStopNumber(_arrsj, !isUp, undefined);
  23 + var _tccid = paramObj.getTTinfoId();
  24 + var _ttinfoid = paramObj.getTTinfoId();
  25 + var _xl = paramObj.getXlId();
  26 + var _qdz = isUp ? paramObj.getUpQdzObj().id : paramObj.getDownQdzObj().id;
  27 + var _zdz = isUp ? paramObj.getUpZdzObj().id : paramObj.getDownZdzObj().id;
  28 +
  29 + if (bcType == "bd") { // 早例保,传过来的发车时间是第一个班次的发车时间
  30 + if (isUp) { // 上行
  31 + _fcsj = paramObj.addMinute(
  32 + _fcsj,
  33 + -(paramObj.getUpOutTime() + paramObj.getLbTime()));
  34 + _bcsj = paramObj.getLbTime();
  35 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  36 + _stoptime = 0;
  37 + } else { // 下行
  38 + _fcsj = paramObj.addMinute(
  39 + _fcsj,
  40 + -(paramObj.getDownOutTime() + paramObj.getLbTime()));
  41 + _bcsj = paramObj.getLbTime();
  42 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  43 + _stoptime = 0;
  44 + }
  45 + } else if (bcType == "lc") { // 晚例保,传过来的发车时间是最后一个班次的到达时间
  46 + if (isUp) { // 上行
  47 + _fcsj = paramObj.addMinute(
  48 + _fcsj,
  49 + paramObj.getUpInTime());
  50 + _bcsj = paramObj.getLbTime();
  51 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  52 + _stoptime = 0;
  53 + } else { // 下行
  54 + _fcsj = paramObj.addMinute(
  55 + _fcsj,
  56 + paramObj.getDownInTime());
  57 + _bcsj = paramObj.getLbTime();
  58 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  59 + _stoptime = 0;
  60 + }
  61 + } else if (bcType == "out") { // 出场,传过来的发车时间是第一个班次的发车时间
  62 + if (isUp) { // 上行
  63 + _fcsj = paramObj.addMinute(
  64 + _fcsj,
  65 + -paramObj.getUpOutTime());
  66 + _bcsj = paramObj.getUpOutTime();
  67 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  68 + _stoptime = 0;
  69 + } else { // 下行
  70 + _fcsj = paramObj.addMinute(
  71 + _fcsj,
  72 + -paramObj.getDownOutTime());
  73 + _bcsj = paramObj.getDownOutTime();
  74 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  75 + _stoptime = 0;
  76 + }
  77 + } else if (bcType == "in") { // 进场,传过来的发车时间是最后一个班次的到达时间
  78 + if (isUp) { // 上行
  79 + _bcsj = paramObj.getUpInTime();
  80 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  81 + _stoptime = 0;
  82 + } else { // 下行
  83 + _bcsj = paramObj.getDownInTime();
  84 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  85 + _stoptime = 0;
  86 + }
  87 + } else if (bcType == "cf") { // 吃饭班次
  88 + // 以13:00为分界,之前的为午饭,之后的为晚饭
  89 + if (fcTimeObj.isBefore(paramObj.toTimeObj("13:00"))) {
  90 + _bcsj = paramObj.fnGetLunchTime();
  91 + } else {
  92 + _bcsj = paramObj.fnGetDinnerTime();
  93 + }
  94 + _arrsj = paramObj.addMinute(_fcsj, _bcsj);
  95 + _stoptime = 0;
  96 + }
  97 +
  98 + var bcParamObj = {};
  99 + bcParamObj.bcType = bcType; // 班次类型(normal,in_,out, bd, lc, cf等)
  100 + bcParamObj.isUp = isUp; // boolean是否上下行
  101 + bcParamObj.fcno = fcno; // 发车顺序号
  102 + bcParamObj.fcTimeObj = _fcsj; // 发车时间对象
  103 + bcParamObj.bclc = _bclc; // 班次里程
  104 + bcParamObj.bcsj = _bcsj; // 班次历时
  105 + bcParamObj.arrtime = _arrsj; // 到达时间对象
  106 + bcParamObj.stoptime = _stoptime; // 停站时间
  107 + bcParamObj.tccid = _tccid; // 停车场id
  108 + bcParamObj.ttinfoid = _ttinfoid; // 时刻表id
  109 + bcParamObj.xl = _xl; // 线路id
  110 + bcParamObj.qdzid = _qdz; // 起点站id
  111 + bcParamObj.zdzid = _zdz; // 终点站id
  112 +
  113 + return new InternalBcObj(lpObj, bcParamObj);
  114 + }
  115 + };
  116 + };
  117 + var _factory = _factoryFun();
  118 +
  119 + // 所有的时间使用moment.js计算
  120 +
  121 + var _paramObj; // 参数对象
  122 +
  123 + var _bxDesc = [ // 班型描述
  124 + {'type':'六工一休','hoursV':6.66, 'minueV':'6:40', 'qcount': 0, 'avertime': 0},
  125 + {'type':'五工一休','hoursV':6.85, 'minueV':'6:51', 'qcount': 0, 'avertime': 0},
  126 + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0, 'avertime': 0},
  127 + {'type':'三工一休','hoursV':7.61, 'minueV':'7:37', 'qcount': 0, 'avertime': 0},
  128 + {'type':'二工一休','hoursV':8.57, 'minueV':'8:34', 'qcount': 0, 'avertime': 0},
  129 + {'type':'一工一休','hoursV':11.42, 'minueV':'11:25', 'qcount': 0, 'avertime': 0},
  130 + {'type':'五工二休','hoursV':7.99, 'minueV':'8:00', 'qcount': 0, 'avertime': 0},
  131 + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0, 'avertime': 0}
  132 + ];
  133 +
  134 + var _funCalcuExportData_lpObjList = function(aInternalLpObj) {
  135 + // 构造路牌对象
  136 + var aLpObj = [];
  137 + var i;
  138 + var j;
  139 + var z;
  140 + var oInternalLp;
  141 + var oInternalBc;
  142 + var oInternalBc_temp;
  143 + var oLp;
  144 + var iZlc;
  145 + var iYylc;
  146 + var iKslc;
  147 + var iZbc;
  148 + var iZgs;
  149 + var iYygs;
  150 + var iYybc;
  151 + for (i = 0; i < aInternalLpObj.length; i++) {
  152 + oInternalLp = aInternalLpObj[i];
  153 + iZlc = 0;
  154 + iYylc = 0;
  155 + iKslc = 0;
  156 + iZgs = 0;
  157 + iZbc = 0;
  158 + iYygs = 0;
  159 + iYybc = 0;
  160 + oLp = {
  161 + "lpname": oInternalLp.getLpName(), // 路牌名字
  162 + "isUp": oInternalLp.isUp(), // 每圈的第一个班次是否上行
  163 + "bcObjList": [], // 班次列表
  164 + "groupCount": oInternalLp.fnGetGroupCount(), // 总圈数
  165 + "zlc": 0, // 总里程
  166 + "yylc": 0, // 营运里程
  167 + "kslc": 0, // 空驶里程
  168 + "zgs": 0, // 总工时
  169 + "zbc": 0, // 总班次
  170 + "yygs": 0, // 营运工时
  171 + "yybc": 0, // 营运班次
  172 + "stationRouteId1": 0, // 第一个班次起点站路由id
  173 + "stationRouteId2": 0 // 第二个班次起点站路由id
  174 + };
  175 +
  176 + // 将报到班次,进出场班次加到班次的时间上
  177 + var iBcChainCount;
  178 + var oStartBc;
  179 + var oEndBc;
  180 + var oTempBc;
  181 + var aFcsj = [];
  182 +
  183 + iBcChainCount = oInternalLp.fnGetBcChainCount();
  184 + if (iBcChainCount == 1) { // 单一车次链,连班班型
  185 + oStartBc = oInternalLp.getBc(
  186 + oInternalLp.fnGetBcChainInfo(0)["s_q"],
  187 + oInternalLp.fnGetBcChainInfo(0)["s_b"]
  188 + );
  189 + oTempBc = _factory.createBcObj(
  190 + oLp, "bd", true, 1,
  191 + oStartBc.getFcTimeObj(),
  192 + _paramObj
  193 + );
  194 + aFcsj.push("(到" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  195 + oLp.bcObjList.push({ // 报到班次
  196 + "bcsj": oTempBc.getBcTime(), // 班次时间
  197 + "ssj": oTempBc.getStopTime(), // 停站时间
  198 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  199 +
  200 + "tccid": oTempBc._$_tccid, // 停车场id
  201 + "qdzid": oTempBc._$_qdzid, // 起点站id
  202 + "zdzid": oTempBc._$_zdzid, // 终点站id
  203 +
  204 + "isUp": oTempBc._$_isUp, // 是否上行
  205 +
  206 + "bcType": oTempBc._$_bcType, // 班次类型
  207 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  208 +
  209 + "groupNo": -1, // 第几圈
  210 + "groupBcNo": -1 // 圈里第几个班次
  211 +
  212 + });
  213 +
  214 + oTempBc = _factory.createBcObj(
  215 + oLp, "out", true, 1,
  216 + oStartBc.getFcTimeObj(),
  217 + _paramObj
  218 + );
  219 + aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  220 + aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");
  221 + oStartBc._$_fcsj_desc = aFcsj.join("");
  222 +
  223 + oLp.bcObjList.push({ // 出场班次
  224 + "bcsj": oTempBc.getBcTime(), // 班次时间
  225 + "ssj": oTempBc.getStopTime(), // 停站时间
  226 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  227 +
  228 + "tccid": oTempBc._$_tccid, // 停车场id
  229 + "qdzid": oTempBc._$_qdzid, // 起点站id
  230 + "zdzid": oTempBc._$_zdzid, // 终点站id
  231 +
  232 + "isUp": oTempBc._$_isUp, // 是否上行
  233 +
  234 + "bcType": oTempBc._$_bcType, // 班次类型
  235 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  236 +
  237 + "groupNo": -1, // 第几圈
  238 + "groupBcNo": -2 // 圈里第几个班次
  239 +
  240 + });
  241 +
  242 + aFcsj = [];
  243 +
  244 + oEndBc = oInternalLp.getBc(
  245 + oInternalLp.fnGetBcChainInfo(0)["e_q"],
  246 + oInternalLp.fnGetBcChainInfo(0)["e_b"]
  247 + );
  248 + aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");
  249 + oTempBc = _factory.createBcObj(
  250 + oLp, "in", true, 1,
  251 + oEndBc.getArrTimeObj(),
  252 + _paramObj
  253 + );
  254 + aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  255 +
  256 + oLp.bcObjList.push({ // 进场班次
  257 + "bcsj": oTempBc.getBcTime(), // 班次时间
  258 + "ssj": oTempBc.getStopTime(), // 停站时间
  259 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  260 +
  261 + "tccid": oTempBc._$_tccid, // 停车场id
  262 + "qdzid": oTempBc._$_qdzid, // 起点站id
  263 + "zdzid": oTempBc._$_zdzid, // 终点站id
  264 +
  265 + "isUp": oTempBc._$_isUp, // 是否上行
  266 +
  267 + "bcType": oTempBc._$_bcType, // 班次类型
  268 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  269 +
  270 + "groupNo": -2, // 第几圈
  271 + "groupBcNo": -3 // 圈里第几个班次
  272 +
  273 + });
  274 +
  275 + oTempBc = _factory.createBcObj(
  276 + oLp, "lc", true, 1,
  277 + oEndBc.getArrTimeObj(),
  278 + _paramObj
  279 + );
  280 + aFcsj.push("(离" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  281 + oLp.bcObjList.push({ // 离场班次
  282 + "bcsj": oTempBc.getBcTime(), // 班次时间
  283 + "ssj": oTempBc.getStopTime(), // 停站时间
  284 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  285 +
  286 + "tccid": oTempBc._$_tccid, // 停车场id
  287 + "qdzid": oTempBc._$_qdzid, // 起点站id
  288 + "zdzid": oTempBc._$_zdzid, // 终点站id
  289 +
  290 + "isUp": oTempBc._$_isUp, // 是否上行
  291 +
  292 + "bcType": oTempBc._$_bcType, // 班次类型
  293 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  294 +
  295 + "groupNo": -2, // 第几圈
  296 + "groupBcNo": -4 // 圈里第几个班次
  297 +
  298 + });
  299 +
  300 + oEndBc._$_fcsj_desc = aFcsj.join("");
  301 +
  302 + } else if (iBcChainCount == 2) { // 两个车次链,分班班型
  303 + oStartBc = oInternalLp.getBc(
  304 + oInternalLp.fnGetBcChainInfo(0)["s_q"],
  305 + oInternalLp.fnGetBcChainInfo(0)["s_b"]
  306 + );
  307 + oTempBc = _factory.createBcObj(
  308 + oLp, "bd", true, 1,
  309 + oStartBc.getFcTimeObj(),
  310 + _paramObj
  311 + );
  312 + aFcsj.push("(到" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  313 + oLp.bcObjList.push({ // 报到班次
  314 + "bcsj": oTempBc.getBcTime(), // 班次时间
  315 + "ssj": oTempBc.getStopTime(), // 停站时间
  316 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  317 +
  318 + "tccid": oTempBc._$_tccid, // 停车场id
  319 + "qdzid": oTempBc._$_qdzid, // 起点站id
  320 + "zdzid": oTempBc._$_zdzid, // 终点站id
  321 +
  322 + "isUp": oTempBc._$_isUp, // 是否上行
  323 +
  324 + "bcType": oTempBc._$_bcType, // 班次类型
  325 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  326 +
  327 + "groupNo": -1, // 第几圈
  328 + "groupBcNo": -1 // 圈里第几个班次
  329 +
  330 + });
  331 +
  332 + oTempBc = _factory.createBcObj(
  333 + oLp, "out", true, 1,
  334 + oStartBc.getFcTimeObj(),
  335 + _paramObj
  336 + );
  337 + aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  338 + aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");
  339 + oStartBc._$_fcsj_desc = aFcsj.join("");
  340 +
  341 + oLp.bcObjList.push({ // 出场班次
  342 + "bcsj": oTempBc.getBcTime(), // 班次时间
  343 + "ssj": oTempBc.getStopTime(), // 停站时间
  344 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  345 +
  346 + "tccid": oTempBc._$_tccid, // 停车场id
  347 + "qdzid": oTempBc._$_qdzid, // 起点站id
  348 + "zdzid": oTempBc._$_zdzid, // 终点站id
  349 +
  350 + "isUp": oTempBc._$_isUp, // 是否上行
  351 +
  352 + "bcType": oTempBc._$_bcType, // 班次类型
  353 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  354 +
  355 + "groupNo": -1, // 第几圈
  356 + "groupBcNo": -2 // 圈里第几个班次
  357 +
  358 + });
  359 +
  360 + aFcsj = [];
  361 +
  362 + oEndBc = oInternalLp.getBc(
  363 + oInternalLp.fnGetBcChainInfo(0)["e_q"],
  364 + oInternalLp.fnGetBcChainInfo(0)["e_b"]
  365 + );
  366 + aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");
  367 + oTempBc = _factory.createBcObj(
  368 + oLp, "in", true, 1,
  369 + oEndBc.getArrTimeObj(),
  370 + _paramObj
  371 + );
  372 + aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  373 + oLp.bcObjList.push({ // 进场班次
  374 + "bcsj": oTempBc.getBcTime(), // 班次时间
  375 + "ssj": oTempBc.getStopTime(), // 停站时间
  376 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  377 +
  378 + "tccid": oTempBc._$_tccid, // 停车场id
  379 + "qdzid": oTempBc._$_qdzid, // 起点站id
  380 + "zdzid": oTempBc._$_zdzid, // 终点站id
  381 +
  382 + "isUp": oTempBc._$_isUp, // 是否上行
  383 +
  384 + "bcType": oTempBc._$_bcType, // 班次类型
  385 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  386 +
  387 + "groupNo": oInternalLp.fnGetBcChainInfo(0)["e_b"] == 0 ?
  388 + oInternalLp.fnGetBcChainInfo(0)["e_q"] :
  389 + oInternalLp.fnGetBcChainInfo(0)["e_q"] + 1, // 第几圈
  390 + "groupBcNo": oInternalLp.fnGetBcChainInfo(0)["e_b"] == 0 ? 1 : 0 // 圈里第几个班次
  391 +
  392 + });
  393 + oEndBc._$_fcsj_desc = aFcsj.join("");
  394 +
  395 + aFcsj = [];
  396 +
  397 + oStartBc = oInternalLp.getBc(
  398 + oInternalLp.fnGetBcChainInfo(1)["s_q"],
  399 + oInternalLp.fnGetBcChainInfo(1)["s_b"]
  400 + );
  401 + oTempBc = _factory.createBcObj(
  402 + oLp, "bd", true, 1,
  403 + oStartBc.getFcTimeObj(),
  404 + _paramObj
  405 + );
  406 + aFcsj.push("(到" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  407 + oLp.bcObjList.push({ // 报到班次
  408 + "bcsj": oTempBc.getBcTime(), // 班次时间
  409 + "ssj": oTempBc.getStopTime(), // 停站时间
  410 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  411 +
  412 + "tccid": oTempBc._$_tccid, // 停车场id
  413 + "qdzid": oTempBc._$_qdzid, // 起点站id
  414 + "zdzid": oTempBc._$_zdzid, // 终点站id
  415 +
  416 + "isUp": oTempBc._$_isUp, // 是否上行
  417 +
  418 + "bcType": oTempBc._$_bcType, // 班次类型
  419 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  420 +
  421 + "groupNo": oInternalLp.fnGetBcChainInfo(1)["s_q"] - 1, // 第几圈
  422 + "groupBcNo": oInternalLp.fnGetBcChainInfo(1)["s_b"] // 圈里第几个班次
  423 +
  424 + });
  425 +
  426 + oTempBc = _factory.createBcObj(
  427 + oLp, "out", true, 1,
  428 + oStartBc.getFcTimeObj(),
  429 + _paramObj
  430 + );
  431 + oLp.bcObjList.push({ // 出场班次
  432 + "bcsj": oTempBc.getBcTime(), // 班次时间
  433 + "ssj": oTempBc.getStopTime(), // 停站时间
  434 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  435 +
  436 + "tccid": oTempBc._$_tccid, // 停车场id
  437 + "qdzid": oTempBc._$_qdzid, // 起点站id
  438 + "zdzid": oTempBc._$_zdzid, // 终点站id
  439 +
  440 + "isUp": oTempBc._$_isUp, // 是否上行
  441 +
  442 + "bcType": oTempBc._$_bcType, // 班次类型
  443 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  444 +
  445 + "groupNo": oInternalLp.fnGetBcChainInfo(1)["s_b"] == 0 ?
  446 + oInternalLp.fnGetBcChainInfo(1)["s_q"] - 1 :
  447 + oInternalLp.fnGetBcChainInfo(1)["s_q"], // 第几圈
  448 + "groupBcNo": oInternalLp.fnGetBcChainInfo(1)["s_b"] == 0 ? 1 : 0 // 圈里第几个班次
  449 +
  450 + });
  451 + aFcsj.push("(出" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  452 + aFcsj.push("(" + oStartBc.getFcTimeObj().format("HH:mm") + ")");
  453 + oStartBc._$_fcsj_desc = aFcsj.join("");
  454 +
  455 + aFcsj = [];
  456 +
  457 + oEndBc = oInternalLp.getBc(
  458 + oInternalLp.fnGetBcChainInfo(1)["e_q"],
  459 + oInternalLp.fnGetBcChainInfo(1)["e_b"]
  460 + );
  461 + aFcsj.push("(" + oEndBc.getFcTimeObj().format("HH:mm") + ")");
  462 + oTempBc = _factory.createBcObj(
  463 + oLp, "in", true, 1,
  464 + oEndBc.getArrTimeObj(),
  465 + _paramObj
  466 + );
  467 + aFcsj.push("(进" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  468 +
  469 + oLp.bcObjList.push({ // 进场班次
  470 + "bcsj": oTempBc.getBcTime(), // 班次时间
  471 + "ssj": oTempBc.getStopTime(), // 停站时间
  472 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  473 +
  474 + "tccid": oTempBc._$_tccid, // 停车场id
  475 + "qdzid": oTempBc._$_qdzid, // 起点站id
  476 + "zdzid": oTempBc._$_zdzid, // 终点站id
  477 +
  478 + "isUp": oTempBc._$_isUp, // 是否上行
  479 +
  480 + "bcType": oTempBc._$_bcType, // 班次类型
  481 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  482 +
  483 + "groupNo": -2, // 第几圈
  484 + "groupBcNo": -3 // 圈里第几个班次
  485 +
  486 + });
  487 +
  488 + oTempBc = _factory.createBcObj(
  489 + oLp, "lc", true, 1,
  490 + oEndBc.getArrTimeObj(),
  491 + _paramObj
  492 + );
  493 +
  494 + oLp.bcObjList.push({ // 离场班次
  495 + "bcsj": oTempBc.getBcTime(), // 班次时间
  496 + "ssj": oTempBc.getStopTime(), // 停站时间
  497 + "eatsj": oTempBc.fnGetEatTime(), // 吃饭时间
  498 +
  499 + "tccid": oTempBc._$_tccid, // 停车场id
  500 + "qdzid": oTempBc._$_qdzid, // 起点站id
  501 + "zdzid": oTempBc._$_zdzid, // 终点站id
  502 +
  503 + "isUp": oTempBc._$_isUp, // 是否上行
  504 +
  505 + "bcType": oTempBc._$_bcType, // 班次类型
  506 + "fcsj": oTempBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  507 +
  508 + "groupNo": -2, // 第几圈
  509 + "groupBcNo": -4 // 圈里第几个班次
  510 +
  511 + });
  512 +
  513 + aFcsj.push("(离" + oTempBc.getFcTimeObj().format("HH:mm") + ")");
  514 + oEndBc._$_fcsj_desc = aFcsj.join("");
  515 +
  516 + }
  517 +
  518 + for (j = 0; j < oInternalLp.fnGetGroupCount(); j++) {
  519 + for (z = 0; z < 2; z++) {
  520 + oInternalBc = oInternalLp.getBc(j, z);
  521 + if (oInternalBc) {
  522 + if (oInternalBc.fnGetEatTime() > 0) {
  523 + // 吃饭班次是下一个班次开始吃,和本班次方向相反
  524 + oInternalBc_temp = oInternalLp.getBc(
  525 + z == 1 ? j + 1 : j,
  526 + z == 1 ? 0 : 1);
  527 +
  528 + oInternalBc_temp._$_fcsj_desc = "(吃" + oInternalBc_temp.getFcTimeObj().format("HH:mm") + ")";
  529 + }
  530 +
  531 + oLp.bcObjList.push({
  532 + "bcsj": oInternalBc.getBcTime(), // 班次时间
  533 + "ssj": oInternalBc.getStopTime(), // 停站时间
  534 + "eatsj": oInternalBc.fnGetEatTime(), // 吃饭时间
  535 +
  536 + "tccid": oInternalBc._$_tccid, // 停车场id
  537 + "qdzid": oInternalBc._$_qdzid, // 起点站id
  538 + "zdzid": oInternalBc._$_zdzid, // 终点站id
  539 +
  540 + "isUp": oInternalBc._$_isUp, // 是否上行
  541 +
  542 + "bcType": oInternalBc._$_bcType, // 班次类型
  543 + "fcsj": oInternalBc._$_fcsjObj.format("HH:mm"), // 发车时间描述
  544 + "fcsjDesc" : oInternalBc._$_fcsj_desc || oInternalBc._$_fcsjObj.format("HH:mm"),
  545 +
  546 + "groupNo": j, // 第几圈
  547 + "groupBcNo": z // 圈里第几个班次
  548 +
  549 + });
  550 +
  551 + // iZlc = 0;
  552 + // iYylc = 0;
  553 + // iKslc = 0;
  554 + // iZgs = 0;
  555 + // iZbc = 0;
  556 + // iYygs = 0;
  557 + // iYybc = 0;
  558 +
  559 + iZlc = iZlc +
  560 + oInternalBc._$_bclc; // 里程
  561 + iYylc = iYylc +
  562 + oInternalBc._$_bclc; // 里程
  563 + iYygs = iYygs +
  564 + oInternalBc.getBcTime() + // 班次时间
  565 + oInternalBc.getStopTime() + // 停站时间
  566 + oInternalBc.fnGetEatTime(); // 吃饭时间
  567 + iYybc = iYybc + 1;
  568 +
  569 + iZgs = iZgs +
  570 + oInternalBc.getBcTime() + // 班次时间
  571 + oInternalBc.getStopTime() + // 停站时间
  572 + oInternalBc.fnGetEatTime(); // 吃饭时间
  573 + iZbc = iZbc + 1;
  574 +
  575 + // 设置圈站点路由id
  576 + if (oInternalBc.isUp() == oInternalLp.isUp()) { // 第一个班次
  577 + if (oLp.stationRouteId1 == 0) {
  578 + oLp.stationRouteId1 = oInternalBc._$_qdzid;
  579 + }
  580 + } else { // 第二个班次
  581 + if (oLp.stationRouteId2 == 0) {
  582 + oLp.stationRouteId2 = oInternalBc._$_qdzid;
  583 + }
  584 + }
  585 +
  586 + }
  587 + }
  588 +
  589 + }
  590 +
  591 + for (z = 0; z < oInternalLp.getOtherBcArray().length; z++) {
  592 + oInternalBc = oInternalLp.getOtherBcArray()[z];
  593 + iKslc = iKslc +
  594 + oInternalBc._$_bclc; // 里程
  595 + iZlc = iZlc +
  596 + oInternalBc._$_bclc; // 里程
  597 + iZgs = iZgs +
  598 + oInternalBc.getBcTime() + // 班次时间
  599 + oInternalBc.getStopTime(); // 停站时间
  600 + if (oInternalBc._$_bcType != "bd" &&
  601 + oInternalBc._$_bcType != "lc" &&
  602 + oInternalBc._$_bcType != "cf") {
  603 + iZbc = iZbc + 1;
  604 + }
  605 + }
  606 +
  607 + oLp.zlc = iZlc;
  608 + oLp.yylc = iYylc;
  609 + oLp.kslc = iKslc;
  610 + oLp.zgs = iZgs;
  611 + oLp.zbc = iZbc;
  612 + oLp.yygs = iYygs;
  613 + oLp.yybc = iYybc;
  614 + aLpObj.push(oLp);
  615 + }
  616 +
  617 + return aLpObj;
  618 + };
  619 +
  620 + var _funCalcuExportData_statInfoList = function(aInternalLpObj) {
  621 + var countBc = 0, // 总班次
  622 + serviceBc = 0, // 营运班次
  623 + jcbc = 0, // 进场总班次.
  624 + ccbc = 0, // 出场总班次.
  625 + cfbc = 0, // 吃饭总班次.
  626 + zwlbbc = 0, // 早晚例保总班次.
  627 + countGs = 0.0, // 总工时
  628 + servicesj = 0, // 营运班次总时间
  629 + jcsj = 0.0, // 进场总时间.
  630 + ccsj = 0.0, // 出场总时间.
  631 + cfsj = 0.0, // 吃饭总时间.
  632 + zwlbsj = 0.0, // 早晚例保总时间.
  633 + ksBc = 0, // 空驶班次
  634 + serviceLc = 0.0, // 营运里程
  635 + ksLc = 0.0, // 空驶里程
  636 + avgTzjx = 0.0, // 平均停站间隙
  637 + gfServiceBc = 0, // 高峰营运班次
  638 + dgServiceBc = 0, // 低谷营运班次
  639 + gfAvgTzjx = 0.0, // 高峰平均停站间隙
  640 + dgAvgTzjx = 0.0; // 低谷平均停站间隙
  641 +
  642 + var aAllBc = [];
  643 + var oLp;
  644 + var oBc;
  645 + var i;
  646 + var j;
  647 +
  648 + for (i = 0; i < aInternalLpObj.length; i++) {
  649 + oLp = aInternalLpObj[i];
  650 + for (j = 0; j < oLp.getBcArray().length; j++) {
  651 + aAllBc.push(oLp.getBcArray()[j]);
  652 + }
  653 + for (j = 0; j < oLp.getOtherBcArray().length; j++) {
  654 + aAllBc.push(oLp.getOtherBcArray()[j]);
  655 + }
  656 + }
  657 +
  658 + for (i = 0; i < aAllBc.length; i++) {
  659 + oBc = aAllBc[i];
  660 +
  661 + if (oBc.getBcTime() > 0) {
  662 + countBc = countBc + 1;
  663 + countGs = countGs + oBc.getStopTime() + oBc.getBcTime();
  664 + if (_paramObj.isTroughBc(oBc.getFcTimeObj())) {
  665 + if (oBc._$_bcType == "normal") {
  666 + dgServiceBc = dgServiceBc + 1;
  667 + dgAvgTzjx = dgAvgTzjx + oBc.getStopTime();
  668 + }
  669 + } else {
  670 + if (oBc._$_bcType == "normal") {
  671 + gfServiceBc = gfServiceBc + 1;
  672 + gfAvgTzjx = gfAvgTzjx + oBc.getStopTime();
  673 + }
  674 + }
  675 +
  676 + if (oBc._$_bcType == "normal") {
  677 + serviceBc = serviceBc + 1;
  678 + serviceLc = serviceLc + oBc._$_bclc;
  679 + servicesj = servicesj + oBc.getBcTime();
  680 + avgTzjx = avgTzjx + oBc.getStopTime();
  681 +
  682 + if (oBc.fnGetEatTime() > 0) {
  683 + cfbc = cfbc + 1;
  684 + cfsj = cfsj + oBc.fnGetEatTime();
  685 + }
  686 + } else if (oBc._$_bcType == "in") {
  687 + jcbc = jcbc + 1;
  688 + jcsj = jcsj + oBc.getBcTime();
  689 + } else if (oBc._$_bcType == "out") {
  690 + ccbc = ccbc + 1;
  691 + ccsj = ccsj + oBc.getBcTime();
  692 + } else if (oBc._$_bcType == "bd") {
  693 + zwlbbc = zwlbbc + 1;
  694 + zwlbsj = zwlbsj + oBc.getBcTime();
  695 + } else if (oBc._$_bcType == "lc") {
  696 + zwlbbc = zwlbbc + 1;
  697 + zwlbsj = zwlbsj + oBc.getBcTime();
  698 + }
  699 + }
  700 + }
  701 +
  702 + dgAvgTzjx = dgAvgTzjx / dgServiceBc;
  703 + gfAvgTzjx = gfAvgTzjx / gfServiceBc;
  704 + avgTzjx = avgTzjx / dgServiceBc;
  705 +
  706 + return [
  707 + {'statItem': '总班次(包括进出场、吃饭时间、早晚例保、营运且班次时间大于零的班次)', 'statValue': countBc},
  708 + {'statItem': '进场总班次(包括进场且班次时间大于零的班次)', 'statValue': jcbc},
  709 + {'statItem': '出场总班次(包括进场且班次时间大于零的班次)', 'statValue': ccbc},
  710 + {'statItem': '吃饭总班次(包括吃饭且班次时间大于零的班次)', 'statValue': cfbc},
  711 + {'statItem': '早晚例保总班次(包括早晚例保且时间大于零的班次)', 'statValue': zwlbbc},
  712 + {'statItem': '营运总班次(包括正常、区间、放大站且班次时间大于零班次)','statValue': serviceBc},
  713 + {'statItem': '进场总时间(包括进场班次且班次时间大于零)', 'statValue': jcsj/60},
  714 + {'statItem': '出场总时间(包括进场班次且班次时间大于零)', 'statValue': ccsj/60},
  715 + {'statItem': '吃饭总时间(包括吃饭班次且班次时间大于零)', 'statValue': cfsj/60},
  716 + {'statItem': '早晚例保总时间(包括早晚例保班次且时间大于零的)', 'statValue': zwlbsj/60},
  717 + {'statItem': '营运班次总时间(包括正常、区间、放大站且班次时间大于零)', 'statValue': servicesj/60},
  718 + {'statItem': '总工时(包括进出场、吃饭时间、早晚例保、营运班次时间)', 'statValue': countGs/60},
  719 + {'statItem': '空驶班次(包括直放班次)', 'statValue': ksBc},
  720 + {'statItem': '营运里程(包括正常、区间、放大站里程)', 'statValue': serviceLc},
  721 + {'statItem': '空驶里程(包括直放里程)', 'statValue': ksLc},
  722 + {'statItem': '平均停站时间(营运班次停站时间总和/营运总班次)', 'statValue': avgTzjx},
  723 + {'statItem': '高峰营运班次(包括早晚高峰时段的正常、区间、放大站班次)', 'statValue': gfServiceBc},
  724 + {'statItem': '低谷营运班次(包括低谷时段的正常、区间、放大站班次)', 'statValue': dgServiceBc},
  725 + {'statItem': '高峰平均停站间隙(高峰营运班次停站时间总和/高峰营运班次总和)', 'statValue': gfAvgTzjx},
  726 + {'statItem': '低谷平均停站间隙(低谷营运班次停站时间总和/低谷营运班次总和)', 'statValue': dgAvgTzjx},
  727 + {'statItem': '综合评估', 'statValue': 3}
  728 + ];
  729 +
  730 + };
  731 +
  732 + return {
  733 + /**
  734 + * 工厂对象,创建不同的对象。
  735 + * @returns {{createParameterObj, createBcObj}}
  736 + */
  737 + getFactory: function() {
  738 + return _factory;
  739 + },
  740 +
  741 + /**
  742 + * 使用发车间隔策略生成时刻表。
  743 + * @param paramObj 参数对象
  744 + * @param lpArray 路牌数组
  745 + * @constructor
  746 + */
  747 + BXPplaceClassesTime03 : function(paramObj, lpArray) {
  748 + // 参数对象
  749 + _paramObj = paramObj;
  750 +
  751 + // 1、初始化行车计划
  752 + var schedule = new InternalScheduleObj(_paramObj, lpArray, _factory);
  753 + schedule.fnInitDataWithBxLayout();
  754 + // 2、将连班路牌的班次补足
  755 + schedule.fnCalcuLpBx_lb();
  756 +
  757 + // 3、修正针对初始化时生成的高峰班次,之前不足的补上,多余的删除
  758 + schedule.fnAdjustGfbc(true, true); // 修正上行早高峰
  759 + schedule.fnAdjustGfbc(true, false); // 修正下行早高峰
  760 + schedule.fnAdjustGfbc(false, true); // 修正上行晚高峰
  761 + schedule.fnAdjustGfbc(false, false); // 修正下行晚高峰
  762 +
  763 + // 6、补吃饭班次
  764 + schedule.fnCalcuEatBc();
  765 +
  766 + // 4、按照车辆投入运营要求补充班次
  767 + schedule.fnCalcuLpBc_yy();
  768 +
  769 + // 5、根据班型补充所有的不足班次
  770 + schedule.fnCalcuLpBx_5_2();
  771 + schedule.fnCalcuLpBx_other();
  772 +
  773 + // 7、祛除上标线开头有删除标记的班次
  774 + schedule.fnRemoveDelFirstFlagBc();
  775 +
  776 + // TODO:8、调整路牌班次间隔
  777 + schedule.fnAdjustLpBcInterval(1);
  778 +
  779 + // TODO:9、调整纵向班次间隔
  780 + schedule.fnAdjustBcInterval(true, false, 10);
  781 + schedule.fnAdjustBcInterval(false, false, 10);
  782 +
  783 + // 10、确定末班车
  784 + schedule.fnCalcuLastBc();
  785 +
  786 + // 11、祛除上标线结尾有删除标记的班次
  787 + schedule.fnRemoveDelLastFlagBc();
  788 +
  789 + // TODO:12、平均化指定时间后的班次列表间隔
  790 + schedule.fnAdjustBcInterval2_avg(true, _paramObj.toTimeObj("19:50"));
  791 + schedule.fnAdjustBcInterval2_avg(false, _paramObj.toTimeObj("19:50"));
  792 +
  793 + // 10、补进出场例保班次
  794 + schedule.fnCalcuOtherBc();
  795 +
  796 + //-------------------- 输出ganut图上的班次,班型描述 ----------------------//
  797 + // TODO:班型再议
  798 + return {
  799 + 'json':schedule.fnToGanttBcArray(),'bxrcgs':null,
  800 + 'aInternalLpObj': schedule.fnGetLpArray()
  801 + };
  802 +
  803 + },
  804 + /**
  805 + * 导出时刻表配置。
  806 + * @param aInternalLpObj 内部路牌对象列表
  807 + */
  808 + exportDataConfig: function(aInternalLpObj) {
  809 + $('.exportAdd').on('click',function() {
  810 + var aInfos = {
  811 + "lpObjList": _funCalcuExportData_lpObjList(aInternalLpObj), // 路牌班次信息列表
  812 + "statInfoList": _funCalcuExportData_statInfoList(aInternalLpObj) // 统计项目列表
  813 + };
  814 +
  815 + console.log(aInfos);
  816 +
  817 + $(".exportAdd").addClass("disabled");
  818 + $(".exportAdd").html("<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>" + " 正在导出...");
  819 +
  820 + // 提交
  821 + $.ajax({
  822 + type: 'POST',
  823 + url: "/tidc/exportDTDFile",
  824 + dataType: 'binary',
  825 + contentType: "application/json",
  826 + data: JSON.stringify(aInfos),
  827 + success: function(data){
  828 + Main_v2.downloadFile(data, "application/octet-stream", "时刻表信息.xls");
  829 +
  830 + $(".exportAdd").removeClass("disabled");
  831 + $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据");
  832 + },
  833 + error: function(xhr, type){
  834 + alert('错误:TODO');
  835 +
  836 + $(".exportAdd").removeClass("disabled");
  837 + $(".exportAdd").html("<i class=\"fa fa-file-excel-o\"></i>" + " 导出数据");
  838 + }
  839 + });
  840 +
  841 + });
  842 + },
  843 +
  844 + downloadFile: function (data, mimeType, fileName) {
  845 + var success = false;
  846 + var blob = new Blob([data], { type: mimeType });
  847 + try {
  848 + if (navigator.msSaveBlob)
  849 + navigator.msSaveBlob(blob, fileName);
  850 + else {
  851 + // Try using other saveBlob implementations, if available
  852 + var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;
  853 + if (saveBlob === undefined) throw "Not supported";
  854 + saveBlob(blob, fileName);
  855 + }
  856 + success = true;
  857 + } catch (ex) {
  858 + console.log("saveBlob method failed with the following exception:");
  859 + console.log(ex);
  860 + }
  861 +
  862 + if (!success) {
  863 + // Get the blob url creator
  864 + var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
  865 + if (urlCreator) {
  866 + // Try to use a download link
  867 + var link = document.createElement('a');
  868 + if ('download' in link) {
  869 + // Try to simulate a click
  870 + try {
  871 + // Prepare a blob URL
  872 + var url = urlCreator.createObjectURL(blob);
  873 + link.setAttribute('href', url);
  874 +
  875 + // Set the download attribute (Supported in Chrome 14+ / Firefox 20+)
  876 + link.setAttribute("download", fileName);
  877 +
  878 + // Simulate clicking the download link
  879 + var event = document.createEvent('MouseEvents');
  880 + event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
  881 + link.dispatchEvent(event);
  882 + success = true;
  883 +
  884 + } catch (ex) {
  885 + console.log("Download link method with simulated click failed with the following exception:");
  886 + console.log(ex);
  887 + }
  888 + }
  889 +
  890 + if (!success) {
  891 + // Fallback to window.location method
  892 + try {
  893 + // Prepare a blob URL
  894 + // Use application/octet-stream when using window.location to force download
  895 + var url = urlCreator.createObjectURL(blob);
  896 + window.location = url;
  897 + console.log("Download link method with window.location succeeded");
  898 + success = true;
  899 + } catch (ex) {
  900 + console.log("Download link method with window.location failed with the following exception:");
  901 + console.log(ex);
  902 + }
  903 + }
  904 + }
  905 + }
  906 +
  907 + if (!success) {
  908 + // Fallback to window.open method
  909 + console.log("No methods worked for saving the arraybuffer, using last resort window.open");
  910 + window.open("", '_blank', '');
  911 + }
  912 + }
  913 +
  914 + };
  915 +
  916 +}();
src/main/resources/static/pages/report/inoutstation.html
@@ -389,6 +389,14 @@ @@ -389,6 +389,14 @@
389 var id=params[0].split("\\")[0]; 389 var id=params[0].split("\\")[0];
390 var fcsj = $('.in_carpark_fcsj[data-id='+id+']', '#forms').html(); 390 var fcsj = $('.in_carpark_fcsj[data-id='+id+']', '#forms').html();
391 var ddsj= $('.in_carpark_zdsj[data-id='+id+']', '#forms').html(); 391 var ddsj= $('.in_carpark_zdsj[data-id='+id+']', '#forms').html();
  392 + var d1 = new Date(fcsj+":00");
  393 + var d2 = new Date(ddsj+":00");
  394 + console.log(parseInt(d1 - d2) / 1000 / 60);//两个时间相差的分钟数
  395 + if(parseInt(d1 - d2)>0){
  396 + d2.setDate(d2.getDate()+1);//设置天数 -1 天
  397 + ddsj = d2.getFullYear() + '-' + (d2.getMonth() + 1) + '-' + d2.getDate() + ' ' + d2.getHours() + ':' + d2.getMinutes();
  398 + }
  399 +
392 if(!(typeof(fcsj)=='undefined'|| typeof(ddsj)=='undefined')){ 400 if(!(typeof(fcsj)=='undefined'|| typeof(ddsj)=='undefined')){
393 $get('/report/queryListZdxx',{clzbh:nbbm,date:rq,line:line,fcsj:fcsj,ddsj:ddsj},function(result){ 401 $get('/report/queryListZdxx',{clzbh:nbbm,date:rq,line:line,fcsj:fcsj,ddsj:ddsj},function(result){
394 var xlmc="线路: "+$("#select2-line-container").html(); 402 var xlmc="线路: "+$("#select2-line-container").html();
@@ -396,8 +404,8 @@ @@ -396,8 +404,8 @@
396 var rqmc="日期: "+rq; 404 var rqmc="日期: "+rq;
397 var bcmc="班次: "+fcsj+"-"+ddsj; 405 var bcmc="班次: "+fcsj+"-"+ddsj;
398 $("#dlzmx").html("到离站详细 "+xlmc+" "+clmc+" "+rqmc+" "+bcmc); 406 $("#dlzmx").html("到离站详细 "+xlmc+" "+clmc+" "+rqmc+" "+bcmc);
399 - $("#fcsj_xx").val(fcsj);  
400 - $("#ddsj_xx").val(ddsj); 407 + $("#fcsj_xx").val(fcsj);
  408 + $("#ddsj_xx").val(ddsj);
401 var ludan_ll_1 = template('ludan_ll_1',{list:result}); 409 var ludan_ll_1 = template('ludan_ll_1',{list:result});
402 // 把渲染好的模版html文本追加到表格中 410 // 把渲染好的模版html文本追加到表格中
403 $('#forms1 .ludan_ll_1').html(ludan_ll_1); 411 $('#forms1 .ludan_ll_1').html(ludan_ll_1);
@@ -419,7 +427,7 @@ @@ -419,7 +427,7 @@
419 layer.msg("请选择时间"); 427 layer.msg("请选择时间");
420 }else if(zdlx=="" || zdlx==null){ 428 }else if(zdlx=="" || zdlx==null){
421 layer.msg("请选择方向"); 429 layer.msg("请选择方向");
422 - }else if(zd=="" || zd==null){ 430 + }else if(zd=="" || zd==null||zd==" "){
423 layer.msg("请选择站点"); 431 layer.msg("请选择站点");
424 }else{ 432 }else{
425 var xlmc="线路: "+$("#select2-line-container").html(); 433 var xlmc="线路: "+$("#select2-line-container").html();
src/main/resources/static/real_control_v2/alone_page/map/alone_wrap.html
@@ -110,6 +110,7 @@ @@ -110,6 +110,7 @@
110 <!-- jquery.serializejson JSON序列化插件 --> 110 <!-- jquery.serializejson JSON序列化插件 -->
111 <script src="/assets/plugins/jquery.serializejson.js" merge="uikit_js"></script> 111 <script src="/assets/plugins/jquery.serializejson.js" merge="uikit_js"></script>
112 112
  113 +<script src="/assets/plugins/pinyin.js" merge="plugins"></script>
113 </body> 114 </body>
114 <script> 115 <script>
115 gb_data_gps.fixedTimeRefresh(); 116 gb_data_gps.fixedTimeRefresh();
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 <div class="uk-autocomplete uk-form " > 36 <div class="uk-autocomplete uk-form " >
37 <select name="abnormalStatus"> 37 <select name="abnormalStatus">
38 <option value="">全部</option> 38 <option value="">全部</option>
  39 + <option value="timeError">时间戳异常</option>
39 <option value="outBounds">越界</option> 40 <option value="outBounds">越界</option>
40 <option value="overspeed">超速</option> 41 <option value="overspeed">超速</option>
41 <option value="offline">离线</option> 42 <option value="offline">离线</option>
@@ -58,11 +59,11 @@ @@ -58,11 +59,11 @@
58 <th style="width: 14%;">站点</th> 59 <th style="width: 14%;">站点</th>
59 <th style="width: 11%;">车辆</th> 60 <th style="width: 11%;">车辆</th>
60 <th style="width: 11%;">设备号</th> 61 <th style="width: 11%;">设备号</th>
61 - <th style="width: 9%;">走向/营运</th> 62 + <th style="width: 12%;">走向/营运</th>
62 <th style="width: 9%;">程序版本</th> 63 <th style="width: 9%;">程序版本</th>
63 <th>最后GPS时间</th> 64 <th>最后GPS时间</th>
64 - <th style="width: 9%;">状态</th>  
65 - <th style="width: 8%;">来源</th> 65 + <th style="width: 8%;">状态</th>
  66 + <th style="width: 6%;">源</th>
66 </tr> 67 </tr>
67 </thead> 68 </thead>
68 <tbody> 69 <tbody>
@@ -81,7 +82,11 @@ @@ -81,7 +82,11 @@
81 <td>{{gps.stationName}}</td> 82 <td>{{gps.stationName}}</td>
82 <td>{{gps.nbbm}}</td> 83 <td>{{gps.nbbm}}</td>
83 <td>{{gps.deviceId}}</td> 84 <td>{{gps.deviceId}}</td>
84 - <td>{{gps.upDown}}/{{gps.state}}</td> 85 + <td>{{gps.upDown}}/{{gps.state}}
  86 + {{if gps.origStateStr!=null}}
  87 + (<span style="color: #fe6262;">{{gps.origStateStr}}</span>)
  88 + {{/if}}
  89 + </td>
85 <td>{{gps.version}}</td> 90 <td>{{gps.version}}</td>
86 <td>{{gps.timeStr}}</td> 91 <td>{{gps.timeStr}}</td>
87 <td> 92 <td>
@@ -95,18 +100,14 @@ @@ -95,18 +100,14 @@
95 <span class="sm-red">GPS (0,0)</span> 100 <span class="sm-red">GPS (0,0)</span>
96 {{else if gps.abnormalStatus=='offline'}} 101 {{else if gps.abnormalStatus=='offline'}}
97 <span>离线</span> 102 <span>离线</span>
  103 + {{else if gps.abnormalStatus=='timeError'}}
  104 + <span class="sm-red" title="设备时间戳异常,尝试以服务器时间修正">time_ex</span>
98 {{else}} 105 {{else}}
99 ... 106 ...
100 {{/if}} 107 {{/if}}
101 </td> 108 </td>
102 <td> 109 <td>
103 - {{if gps.source==1}}  
104 - <span style="color: #1e1ef5;" title="已切换至新网关">网关</span>  
105 - {{else if gps.source==0}}  
106 - <span style="color: #8e8e8e;" title="转接的数据,无法下发指令">转发</span>  
107 - {{else}}  
108 - <span class="sm-grey">未知</span>  
109 - {{/if}} 110 + <span class="sm-grey">{{gps.source}}</span>
110 </td> 111 </td>
111 </tr> 112 </tr>
112 {{/each}} 113 {{/each}}