Commit 2377da07f0093df3c7fa07765982075e9bf2bfb1

Authored by 廖磊
2 parents 41e5778d 7707696e

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
src/main/java/com/bsth/controller/excep/NowOutboundController.java
1 1 package com.bsth.controller.excep;
2 2  
  3 +import java.text.ParseException;
3 4 import java.util.HashMap;
  5 +import java.util.List;
4 6 import java.util.Map;
5 7  
6 8 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -10,7 +12,9 @@ import org.springframework.web.bind.annotation.RequestParam;
10 12 import org.springframework.web.bind.annotation.RestController;
11 13  
12 14 import com.bsth.controller.BaseController;
  15 +import com.bsth.data.BasicData;
13 16 import com.bsth.entity.excep.Outbound;
  17 +import com.bsth.entity.excep.Speeding;
14 18 import com.bsth.entity.sys.SysUser;
15 19 import com.bsth.service.excep.NowOutboundService;
16 20 import com.bsth.util.PageObject;
... ... @@ -44,5 +48,11 @@ public class NowOutboundController extends BaseController<SysUser, Integer>{
44 48 return modelMap;
45 49 }
46 50  
  51 + @RequestMapping(value = "/findPosition", method = RequestMethod.GET)
  52 + public List<Outbound> findPosition(@RequestParam String vehicle,@RequestParam String startdate,@RequestParam String enddate) throws ParseException {
  53 + String deviceid = BasicData.deviceId2NbbmMap.inverse().get(vehicle);
  54 + List<Outbound> listOutbound = nowOutboundService.findPosition(deviceid,startdate,enddate);
  55 + return listOutbound;
  56 + }
47 57  
48 58 }
... ...
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
... ... @@ -198,6 +198,7 @@ public class SchAttrCalculator {
198 198 public ScheduleRealInfo calcCurrentExecSch(List<ScheduleRealInfo> list){
199 199 String lineCode = list.get(0).getXlBm();
200 200 LineConfig conf = lineConfigData.get(lineCode);
  201 + long t = System.currentTimeMillis();
201 202 int outConfig = -1;
202 203 //限定出站既出场的停车场
203 204 String park = null;
... ... @@ -221,8 +222,62 @@ public class SchAttrCalculator {
221 222 if(StringUtils.isNotEmpty(sch.getZdsjActual()))
222 223 continue;
223 224  
  225 + if(Math.abs((t - sch.getDfsjT())) > 1000 * 60 * 60){
  226 + //差值较大,倒着找看有没有更合适的
  227 + ScheduleRealInfo schReverse = calcCurrentExecSchReverse(list, outConfig, limitPark, park);
  228 + if(null != schReverse && !schReverse.getId().equals(sch.getId())){
  229 + logger.info("calc_current_exec_sch_reverse... -" + schReverse.getId());
  230 + return suitableExecSch(schReverse, sch, t);
  231 + }
  232 + }
224 233 return sch;
225 234 }
226 235 return null;
227 236 }
  237 +
  238 + /**
  239 + * 反转匹配一个班次
  240 + * @param list
  241 + * @param outConfig
  242 + * @param limitPark
  243 + * @param park
  244 + * @return
  245 + */
  246 + private ScheduleRealInfo calcCurrentExecSchReverse(List<ScheduleRealInfo> list, int outConfig, boolean limitPark, String park){
  247 + ScheduleRealInfo near = null;
  248 + for(ScheduleRealInfo sch : list){
  249 + //如果是出站既出场,忽略出场班次
  250 + if(outConfig == 2 && isInout(sch)
  251 + && (!limitPark || park.equals(sch.getQdzCode()) || park.equals(sch.getZdzCode())))
  252 + continue;
  253 +
  254 + //忽略烂班
  255 + if(sch.isDestroy())
  256 + continue;
  257 +
  258 + if(StringUtils.isNotEmpty(sch.getZdsjActual())){
  259 + near = null;
  260 + continue;
  261 + }
  262 +
  263 + if(null == near)
  264 + near = sch;
  265 + }
  266 + return near;
  267 + }
  268 +
  269 + /**
  270 + * 比较2个班次,谁是指定时间更合适执行的
  271 + * @param schReverse
  272 + * @param sch
  273 + * @param t
  274 + * @return
  275 + */
  276 + private ScheduleRealInfo suitableExecSch(ScheduleRealInfo schReverse, ScheduleRealInfo sch, long t){
  277 + return Math.abs(t - schReverse.getDfsjT()) > Math.abs(t - sch.getDfsjT())?sch: schReverse;
  278 + }
  279 +
  280 + private boolean isInout(ScheduleRealInfo sch){
  281 + return sch.getBcType().equals("out") || sch.getBcType().equals("in");
  282 + }
228 283 }
... ...
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
... ... @@ -101,6 +101,7 @@ public class LateAdjustHandle implements ApplicationContextAware{
101 101 lateSchMap.remove(sch.getClZbh());
102 102 sch.setLate2(false);
103 103 sch.setLateMinute(0);
  104 + sch.setDfAuto(false);
104 105 }
105 106 }catch (Exception e){
106 107 logger.error("", e);
... ...
src/main/java/com/bsth/entity/excep/Outbound.java
... ... @@ -34,9 +34,6 @@ public class Outbound {
34 34 */
35 35 private String lineName;
36 36  
37   -
38   -
39   -
40 37 /**
41 38 * 上下行(0 上行 , 1 下行 , -1 无效)
42 39 */
... ... @@ -57,18 +54,66 @@ public class Outbound {
57 54 */
58 55 private String location;
59 56  
  57 + /**
  58 + * 超速结束时经度
  59 + */
  60 + private Float endlon;
  61 +
  62 + /**
  63 + * 超速结束时纬度
  64 + */
  65 + private Float endlat;
60 66  
61 67 /**
62 68 * 时间戳
63 69 */
64 70 private Long timestamp;
65 71  
  72 + public Float getEndlon() {
  73 + return endlon;
  74 + }
  75 +
  76 + public void setEndlon(Float endlon) {
  77 + this.endlon = endlon;
  78 + }
  79 +
  80 + public Float getEndlat() {
  81 + return endlat;
  82 + }
  83 +
  84 + public void setEndlat(Float endlat) {
  85 + this.endlat = endlat;
  86 + }
  87 +
  88 + public Long getEndtimestamp() {
  89 + return endtimestamp;
  90 + }
  91 +
  92 + public void setEndtimestamp(Long endtimestamp) {
  93 + this.endtimestamp = endtimestamp;
  94 + }
  95 +
  96 + public String getEndtimestampDate() {
  97 + return endtimestampDate;
  98 + }
  99 +
  100 + public void setEndtimestampDate(String endtimestampDate) {
  101 + this.endtimestampDate = endtimestampDate;
  102 + }
  103 +
66 104 /**
67 105 * 时间戳转换的时间
68 106 */
69 107 private String timestampDate;
70 108  
71 109  
  110 + //结束时间,单位:秒/s
  111 + @Transient
  112 + private Long endtimestamp;
  113 +
  114 + @Transient
  115 + private String endtimestampDate;
  116 +
72 117 /**
73 118 * 时间
74 119 */
... ...
src/main/java/com/bsth/service/excep/NowOutboundService.java
1 1 package com.bsth.service.excep;
2 2  
  3 +import java.util.List;
3 4 import java.util.Map;
4 5  
5 6 import com.bsth.entity.excep.Outbound;
... ... @@ -8,4 +9,6 @@ import com.bsth.util.PageObject;
8 9 public interface NowOutboundService {
9 10 PageObject <Outbound> Pagequery(Map<String, Object> map) ;
10 11 Map<String, Object> getReport( Map<String, Object> map);
  12 + List<Outbound> findPosition(String deviceid, String startdate,
  13 + String enddate);
11 14 }
... ...
src/main/java/com/bsth/service/excep/impl/NowOutboundServiceImpl.java
... ... @@ -14,16 +14,16 @@ import java.util.Map;
14 14  
15 15 import org.springframework.beans.factory.annotation.Autowired;
16 16 import org.springframework.jdbc.core.JdbcTemplate;
17   -import org.springframework.jdbc.core.RowMapper;
18 17 import org.springframework.stereotype.Service;
19 18  
20 19 import com.bsth.data.BasicData;
21 20 import com.bsth.entity.excep.Outbound;
22   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
23 21 import com.bsth.service.excep.NowOutboundService;
24 22 import com.bsth.util.EchartConver;
25 23 import com.bsth.util.PageHelper;
26 24 import com.bsth.util.PageObject;
  25 +import com.bsth.util.TransGPS;
  26 +import com.bsth.util.TransGPS.Location;
27 27 import com.bsth.util.db.DBUtils_MS;
28 28 import com.github.abel533.echarts.Option;
29 29 import com.google.gson.Gson;
... ... @@ -37,7 +37,7 @@ public class NowOutboundServiceImpl implements NowOutboundService{
37 37 ResultSet rs = null;
38 38 int page=Integer.parseInt(map.get("page").toString());
39 39 List<Outbound> list=new ArrayList<Outbound>();
40   - String sql="select * from bsth_c_outbound where 1=1 ";
  40 + String sql="select * from bsth_c_outbound_handle where 1=1 ";
41 41 Object line=map.get("line");
42 42 Object nbbm=map.get("nbbm");
43 43 Object updown=map.get("updown");
... ... @@ -61,7 +61,7 @@ public class NowOutboundServiceImpl implements NowOutboundService{
61 61 try {
62 62 Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
63 63 Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
64   - sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  64 + sql += " and starttimestamp >="+t1 +" and endtimestamp <="+t2;
65 65 } catch (ParseException e) {
66 66 // TODO Auto-generated catch block
67 67 e.printStackTrace();
... ... @@ -69,8 +69,10 @@ public class NowOutboundServiceImpl implements NowOutboundService{
69 69 }
70 70  
71 71 }
72   - // sql +=" order by id limit ?,?";
73   - sql +=" order by timestamp limit ?,?";
  72 +
  73 + sql +=" and endtimestamp - starttimestamp >10000 ";//越界超过30秒的才显示,有待探讨。
  74 +
  75 + sql +=" order by starttimestamp limit ?,?";
74 76  
75 77 try {
76 78 conn = DBUtils_MS.getConnection();
... ... @@ -90,22 +92,29 @@ public class NowOutboundServiceImpl implements NowOutboundService{
90 92 }
91 93  
92 94 static List<Outbound> resultSet2Set(ResultSet rs) throws SQLException{
93   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  95 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
94 96 List<Outbound> list=new ArrayList<Outbound>();
95 97 Outbound outbound;
  98 + Location location;
96 99 while(rs.next()){
97 100 outbound=new Outbound();
98   - // outbound.setId(Integer.valueOf(rs.getObject("id").toString()));
  101 + outbound.setId(Integer.valueOf(rs.getObject("id").toString()));
99 102 outbound.setLine(Integer.valueOf(rs.getObject("line").toString()));
100 103 outbound.setUpDown(Integer.valueOf(rs.getObject("up_down").toString()));
101   - outbound.setLon(Float.valueOf(rs.getObject("lon").toString()));
102   - outbound.setLat(Float.valueOf(rs.getObject("lat").toString()));
  104 + //将gps的经纬度转成百度的经纬度
  105 + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(rs.getFloat("startLon"), rs.getFloat("startLat"))));
  106 + outbound.setLon((float)location.getLng());
  107 + outbound.setLat((float)location.getLat());
  108 + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(rs.getFloat("endLon"), rs.getFloat("endLat"))));
  109 + outbound.setEndlon((float)location.getLng());
  110 + outbound.setEndlat((float)location.getLat());
  111 + outbound.setTimestamp((Long.valueOf(rs.getObject("startTimestamp").toString())));
  112 + outbound.setTimestampDate(sdf.format(new Date(outbound.getTimestamp())));
  113 + outbound.setEndtimestamp((Long.valueOf(rs.getObject("endTimestamp").toString())));
  114 + outbound.setEndtimestampDate(sdf.format(new Date(outbound.getEndtimestamp())));
103 115 //run 时注解
104 116 outbound.setLineName(BasicData.lineCode2NameMap.get(outbound.getLine().toString()));
105   - outbound.setTimestamp((Long.valueOf(rs.getObject("timestamp").toString())));
106   - outbound.setTimestampDate(sdf.format(new Date(outbound.getTimestamp())));
107 117 outbound.setVehicle(BasicData.deviceId2NbbmMap.get(rs.getObject("vehicle").toString()));
108   -// outbound.setLocation(rs.getObject("location")==null?"":rs.getObject("location").toString());
109 118 list.add(outbound);
110 119 }
111 120 return list;
... ... @@ -114,7 +123,7 @@ public class NowOutboundServiceImpl implements NowOutboundService{
114 123 @Override
115 124 public PageObject<Outbound> Pagequery(Map<String, Object> map) {
116 125 // TODO Auto-generated method stub PageObject<Outbound> Pagequery
117   - String sql="select count(*) record from bsth_c_outbound where 1=1 ";
  126 + String sql="select count(*) record from bsth_c_outbound_handle where 1=1 ";
118 127 Object line=map.get("line");
119 128 Object nbbm=map.get("nbbm");
120 129 Object updown=map.get("updown");
... ... @@ -139,7 +148,7 @@ public class NowOutboundServiceImpl implements NowOutboundService{
139 148 try {
140 149 Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
141 150 Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
142   - sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  151 + sql += " and starttimestamp >="+t1 +" and endtimestamp <="+t2;
143 152 } catch (ParseException e) {
144 153 // TODO Auto-generated catch block
145 154 e.printStackTrace();
... ... @@ -147,6 +156,9 @@ public class NowOutboundServiceImpl implements NowOutboundService{
147 156 }
148 157  
149 158 }
  159 +
  160 + sql +=" and endtimestamp - starttimestamp >10000 ";//yue越界超过10秒的才显示,有待探讨。
  161 +
150 162 Connection conn = null;
151 163 PreparedStatement ps = null;
152 164 ResultSet rs = null;
... ... @@ -165,10 +177,9 @@ public class NowOutboundServiceImpl implements NowOutboundService{
165 177 }finally {
166 178 DBUtils_MS.close(rs, ps, conn);
167 179 }
168   -
169 180 PageHelper pageHelper = new PageHelper(totalData, map);
170 181 List<Outbound> list=findAll(pageHelper.getMap());
171   - for (int i = 0; i < list.size(); i++) {
  182 +/* for (int i = 0; i < list.size(); i++) {
172 183 String nbbm2=list.get(i).getVehicle() ;
173 184 Long d1=list.get(i).getTimestamp();
174 185 Date datess = new Date(d1);
... ... @@ -194,7 +205,7 @@ public class NowOutboundServiceImpl implements NowOutboundService{
194 205  
195 206 }
196 207  
197   - }
  208 + }*/
198 209 PageObject<Outbound> pageObject = pageHelper.getPageObject();
199 210 pageObject.setDataList(list);
200 211 return pageObject;
... ... @@ -319,4 +330,45 @@ public class NowOutboundServiceImpl implements NowOutboundService{
319 330  
320 331 return dataList;
321 332 }
  333 +
  334 + @Override
  335 + public List<Outbound> findPosition(String deviceid, String startdate,
  336 + String enddate){
  337 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  338 + String sql = "select vehicle,line,up_down,lon,lat,timestamp from bsth_c_outbound where vehicle = ? and timestamp >= ? and timestamp <= ? order by timestamp ";
  339 + Connection conn = null;
  340 + PreparedStatement ps = null;
  341 + ResultSet rs = null;
  342 + List<Outbound> listResult = new ArrayList<Outbound>();
  343 + Outbound outbound = null;
  344 + try {
  345 + conn = DBUtils_MS.getConnection();
  346 + ps = conn.prepareStatement(sql);
  347 + long startTime = sdf.parse(startdate).getTime();
  348 + long endTime = sdf.parse(enddate).getTime();
  349 + ps.setString(1, deviceid);
  350 + ps.setLong(2,startTime);
  351 + ps.setLong(3,endTime);
  352 + rs = ps.executeQuery();
  353 + Location location;
  354 + while (rs.next()) {
  355 + outbound = new Outbound();
  356 + outbound.setVehicle(BasicData.deviceId2NbbmMap.get(rs.getObject("vehicle").toString()));
  357 + location = TransGPS.LocationMake(rs.getFloat("lon"), rs.getFloat("lat"));
  358 + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location));
  359 + outbound.setLon((float)location.getLng());
  360 + outbound.setLat((float)location.getLat());
  361 + outbound.setTimestamp(rs.getLong("timestamp"));
  362 + // 上下行
  363 + listResult.add(outbound);
  364 + }
  365 + } catch (Exception e) {
  366 + e.printStackTrace();
  367 + } finally {
  368 + DBUtils_MS.close(rs, ps, conn);
  369 + }
  370 + return listResult;
  371 +
  372 + }
  373 +
322 374 }
... ...
src/main/java/com/bsth/service/excep/impl/NowSpeedingServiceImpl.java
... ... @@ -39,7 +39,7 @@ public class NowSpeedingServiceImpl implements NowSpeedingService {
39 39 ResultSet rs = null;
40 40 int page=Integer.parseInt(map.get("page").toString());
41 41 List<Speeding> list=new ArrayList<Speeding>();
42   - String sql="select * from bsth_c_speedingmh where 1=1 ";
  42 + String sql="select * from bsth_c_speeding_handle where 1=1 ";
43 43 Object line=map.get("line");
44 44 Object updown=map.get("updown");
45 45 Object startDate=map.get("startDate");
... ... @@ -128,7 +128,7 @@ public class NowSpeedingServiceImpl implements NowSpeedingService {
128 128  
129 129 @Override
130 130 public PageObject<Speeding> Pagequery(Map<String, Object> map) {
131   - String sql="select count(*) record from bsth_c_speedingmh where 1=1 ";
  131 + String sql="select count(*) record from bsth_c_speeding_handle where 1=1 ";
132 132 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
133 133 Object line=map.get("line");
134 134 Object updown=map.get("updown");
... ...
src/main/resources/static/pages/base/interval/edit.html
... ... @@ -49,7 +49,7 @@
49 49 <div class="col-md-12" style="margin-top:10px">
50 50 <label class="control-label col-md-5"> 间隔等级&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label>
51 51 <div class="col-md-4">
52   - <input type="text" class="form-control" name="level" id="levelInput" placeholder="间隔等级">
  52 + <input type="text" class="form-control" name="level" id="levelInput" placeholder="间隔等级" readonly>
53 53 </div>
54 54 </div>
55 55  
... ...
src/main/resources/static/pages/base/interval/js/interval-add-form.js
... ... @@ -30,21 +30,18 @@ $(function(){
30 30 focusInvalid : true,
31 31 // 需要验证的表单元素
32 32 rules : {
33   - // 公司名称编码
34 33 'level' : {
35 34 // 必填项
36 35 required : true,
37 36 // 最大长度
38 37 maxlength: 10
39 38 },
40   - // 公司名称
41 39 'peak' : {
42 40 // 必填项
43 41 required : true,
44 42 // 最大长度
45 43 maxlength: 10
46 44 },
47   - // 公司名称
48 45 'trough' : {
49 46 // 必填项
50 47 required : true,
... ...
src/main/resources/static/pages/base/interval/js/interval-edit-form.js
... ... @@ -12,7 +12,7 @@
12 12 var intervalId = $.url().param('no');
13 13 // 如果参数ID不为空
14 14 if(intervalId) {
15   - // 获取线路Id元素并设值
  15 + // 获取间隔信息Id元素并设值
16 16 $('#intervalId').val(intervalId);
17 17 /** 根据ID查询详细信息 */
18 18 $get('/interval/' + intervalId ,null, function(result){
... ... @@ -50,21 +50,18 @@
50 50 focusInvalid : true,
51 51 // 需要验证的表单元素
52 52 rules : {
53   - // 公司名称编码
54 53 'level' : {
55 54 // 必填项
56 55 required : true,
57 56 // 最大长度
58 57 maxlength: 10
59 58 },
60   - // 公司名称
61 59 'peak' : {
62 60 // 必填项
63 61 required : true,
64 62 // 最大长度
65 63 maxlength: 10
66 64 },
67   - // 公司名称
68 65 'trough' : {
69 66 // 必填项
70 67 required : true,
... ...
src/main/resources/static/pages/base/interval/js/interval-list-table.js
... ... @@ -114,6 +114,25 @@
114 114 // 把数据填充到模版中
115 115 var tbodyHtml = template('interval_list_temp',{list:result.content});
116 116 $('#datatable_interval tbody').html(tbodyHtml);
  117 + /**
  118 + * 绑定删除事件。
  119 + */
  120 + $(".delete").click(function(){
  121 + var intervalId = $(this).data('id');
  122 + layer.confirm('是否要删除间隔信息?', {
  123 + btn: ['确定','取消'] //按钮
  124 + }, function(){
  125 + $.ajax({
  126 + url: '/interval/' + intervalId,
  127 + type: 'DELETE',
  128 + success: function(result) {
  129 + window.location.href = 'list.html';
  130 + }
  131 + });
  132 + }, function(){
  133 + });
  134 + });
  135 +
117 136 // 是重新分页且返回数据长度大于0
118 137 if(isPon && result.content.length > 0){
119 138 // 重新分页
... ... @@ -154,4 +173,5 @@
154 173 }
155 174 });
156 175 }
  176 +
157 177 })();
158 178 \ No newline at end of file
... ...
src/main/resources/static/pages/base/interval/list.html
... ... @@ -25,7 +25,7 @@
25 25 <span class="caption-subject font-dark sbold uppercase">间隔信息</span>
26 26 </div>
27 27 <div class="actions">
28   - <div class="btn-group btn-group-devided" data-toggle="buttons">
  28 + <div class="btn-group btn-group-devided" data-toggle="buttons" style="display:none">
29 29 <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加间隔信息</a>
30 30 </div>
31 31 </div>
... ... @@ -36,7 +36,6 @@
36 36 <thead>
37 37 <tr role="row" class="heading">
38 38 <th >序号</th>
39   - <th >间隔ID</th>
40 39 <th >间隔等级</th>
41 40 <th >高峰间隔时间</th>
42 41 <th >低谷间隔时间</th>
... ... @@ -47,7 +46,6 @@
47 46 <td></td>
48 47 <td></td>
49 48 <td></td>
50   - <td></td>
51 49 <td>
52 50 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >
53 51 <i class="fa fa-search"></i> 搜索
... ... @@ -76,9 +74,6 @@
76 74 {{(list.page*10)+(i+1)}}
77 75 </td>
78 76 <td>
79   - {{obj.id}}
80   - </td>
81   - <td>
82 77 {{obj.level}}
83 78 </td>
84 79 <td>
... ... @@ -89,7 +84,7 @@
89 84 </td>
90 85 <td>
91 86 <a href="edit.html?no={{obj.id}}" class="btn btn-info btn-sm" data-pjax> 修改 </a>
92   - <a class="btn btn-danger btn-sm" onclick="del({{obj.id}})"> 删除</a>
  87 + <a class="btn btn-danger btn-sm delete" data-id={{obj.id}}> 删除</a>
93 88 </td>
94 89 </tr>
95 90 {{/each}}
... ... @@ -99,22 +94,4 @@
99 94 </tr>
100 95 {{/if}}
101 96 </script>
102   -<!-- <script src="/pages/base/line/js/tipso.js"></script> -->
103   -<!-- 线路信息片段JS模块 -->
104   -<script src="/pages/base/interval/js/interval-list-table.js"></script>
105   -<script>
106   - function del(intervalId){
107   - layer.confirm('确定要删除间隔信息吗?', {
108   - btn: ['确定','取消'] //按钮
109   - }, function(){
110   - $.ajax({
111   - url: '/interval/' + intervalId,
112   - type: 'DELETE',
113   - success: function(result) {
114   - window.location.href = 'list.html';
115   - }
116   - });
117   - }, function(){
118   - });
119   - }
120   -</script>
121 97 \ No newline at end of file
  98 +<script src="/pages/base/interval/js/interval-list-table.js"></script>
122 99 \ No newline at end of file
... ...
src/main/resources/static/pages/excep/js/line-list-function.js
... ... @@ -48,7 +48,7 @@ var PublicFunctions = function () {
48 48 linePanlThree : function(lineId,data,direction) {
49 49 /** 获取站点路由信息 @param:<Line.id:线路Id;0:上行> @return:<resultdata:站点路由数据> */
50 50 $get('/stationroute/getStationRouteCenterPoints',{lineId:lineId,direction:direction},function(resultdata) {
51   - SpeedingMap.clearMarkAndOverlays();
  51 + BasicMap.clearMarkAndOverlays();
52 52 var polyline_center;
53 53 // 如果站点路由数据不为空
54 54 if(resultdata.length>0) {
... ... @@ -66,7 +66,7 @@ var PublicFunctions = function () {
66 66 // 设置中心点
67 67 var point_center = new BMap.Point(bJwpointsArray[0],bJwpointsArray[1]);
68 68 /** 在地图上画点 @param:<point_center:中心坐标点> */
69   - SpeedingMap.drawingUpStationPoint(point_center,stationName,s+1);
  69 + BasicMap.drawingUpStationPoint(point_center,stationName,s+1);
70 70 }
71 71  
72 72 }
... ... @@ -91,7 +91,7 @@ var PublicFunctions = function () {
91 91 polylineArray.push(new BMap.Point(lineArray[i].split(' ')[0],lineArray[i].split(' ')[1]));
92 92 }
93 93 /** 在地图上画出线路走向 @param:<polylineArray:地图折线坐标点集合;resultdata:站点路由数据> */
94   - SpeedingMap.drawingUpline01(polylineArray,polyline_center,data[d]);
  94 + BasicMap.drawingUpline01(polylineArray,polyline_center,data[d]);
95 95 }
96 96 }
97 97 });
... ...
src/main/resources/static/pages/excep/js/map.js 0 → 100644
  1 +/**
  2 + * 百度地图
  3 + *
  4 + * - - - - - -》init:地图初始化
  5 + *
  6 + * - - - - - -》getDistanceAndDuration:获取距离与时间
  7 + *
  8 + * - - - - - -》drawingUpline:在地图上画出上行线路走向
  9 + *
  10 + * - - - - - -》stationsPointsToLibraryPoint:根据站点坐标匹配库中的公交站点(手动规划)
  11 + */
  12 +
  13 +var BasicMap = function () {
  14 +
  15 + /** BasicMap 全局变量定义 mapBValue:地图对象;polyUpline:走向折线;sectionList:截取过的路段 ;pointIndex:计算路段被切的次数;
  16 + * firstPoint:截取路段的第一个点;iseditStatus:路段是否在编辑状态;isCutSection : 获取路段是否在截取状态*/
  17 + var mapBValue = '', polyUpline='', sectionList = [], pointIndex = 0, iseditStatus = false, firstPoint = {}, isCutSection = false;
  18 +
  19 + var Bmap = {
  20 +
  21 + init : function() {
  22 +
  23 + // 设置中心点,
  24 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  25 +
  26 + // 百度API Key
  27 + var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';
  28 +
  29 + // 初始化百度地图
  30 + mapBValue = new BMap.Map("BasicMap");
  31 +
  32 + //中心点和缩放级别
  33 + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat),15);
  34 +
  35 + //启用地图拖拽事件,默认启用(可不写)
  36 + mapBValue.enableDragging();
  37 +
  38 + //启用地图滚轮放大缩小
  39 + mapBValue.enableScrollWheelZoom();
  40 +
  41 + //禁用鼠标双击放大
  42 + mapBValue.disableDoubleClickZoom();
  43 +
  44 + //启用键盘上下左右键移动地图
  45 + mapBValue.enableKeyboard();
  46 +
  47 + return mapBValue;
  48 + },
  49 + /** 获取第一个切路段的点 @return Point*/
  50 + getFirstPoint : function() {
  51 + return firstPoint;
  52 + },
  53 + /** 获取地图对象 @return 地图对象map */
  54 + getmapBValue : function() {
  55 +
  56 + return mapBValue;
  57 +
  58 + },
  59 +
  60 + getPolyUpline : function() {
  61 +
  62 + return polyUpline;
  63 + },
  64 +
  65 + /** 获取截取过的路段 @return 路段对象List */
  66 + getSectionList : function() {
  67 +
  68 + return sectionList;
  69 +
  70 + },
  71 + setSectionList : function(list) {
  72 +
  73 + sectionList = list;
  74 + },
  75 + initCutSectionPoint : function() {
  76 + sectionList = [];
  77 + var tbodyHtml = template('section_list',{list : sectionList});
  78 + $('#section_table tbody').html(tbodyHtml);
  79 + },
  80 + /** 获取切路段的点下标 @return int*/
  81 + setPointIndex : function(index) {
  82 + pointIndex = index;
  83 + },
  84 + getPointIndex : function() {
  85 +
  86 + return pointIndex;
  87 +
  88 + },
  89 + /** 获取路段是否在编辑状态 @return boolean*/
  90 + getIsEditStatus : function() {
  91 + return iseditStatus;
  92 + },
  93 + setIsEditStatus : function(v) {
  94 + iseditStatus = v ;
  95 + },
  96 +
  97 + /** 获取路段是否在截取状态 @return boolean*/
  98 + getIsCutSection : function() {
  99 + return isCutSection;
  100 + },
  101 + setIsCutSection : function(v) {
  102 + isCutSection = v ;
  103 + },
  104 +
  105 + /** 获取距离与时间 @param <points:坐标点集合> */
  106 + getDistanceAndDuration : function(points,callback){
  107 +
  108 + // 获取长度
  109 + var len = points.length;
  110 + (function(){
  111 +
  112 + if (!arguments.callee.count) {
  113 +
  114 + arguments.callee.count = 0;
  115 +
  116 + }
  117 +
  118 + arguments.callee.count++;
  119 +
  120 + var index = parseInt(arguments.callee.count) - 1;
  121 +
  122 + if (index >= len-1) {
  123 +
  124 + callback && callback(points);
  125 +
  126 + return;
  127 + }
  128 +
  129 + // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)
  130 + var f = arguments.callee;
  131 + // 起点坐标 <坐标格式:40.056878,116.30815>
  132 + var origin = points[index].potion.lat + ',' + points[index].potion.lng;
  133 +
  134 + // 终点坐标 <坐标格式:40.056878,116.30815>
  135 + var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;
  136 + var region = '上海';
  137 +
  138 + var origin_region = '上海';
  139 +
  140 + var destination_region = '上海';
  141 +
  142 + var output = 'json';
  143 +
  144 + var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';
  145 +
  146 + /**
  147 + * origin:起点名称或经纬度;
  148 + *
  149 + * destination:终点名称或经纬度;
  150 + *
  151 + * origin_region:起始点所在城市,驾车导航时必填。
  152 + *
  153 + * destination_region:终点所在城市,驾车导航时必填。
  154 + *
  155 + * output :表示输出类型,可设置为xml或json,默认为xml。
  156 + *
  157 + **/
  158 + var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};
  159 +
  160 + /** @description :未认证开发者默认配额为:2000次/天。 */
  161 + $.ajax({
  162 +
  163 + // 百度地图根据坐标获取两点之间的时间与距离
  164 + url: 'http://api.map.baidu.com/direction/v1?mode=transit',
  165 +
  166 + data: paramsB,
  167 +
  168 + dataType: 'jsonp',
  169 +
  170 + success: function(r){
  171 +
  172 + if(r) {
  173 +
  174 + if(r.message=='ok') {
  175 +
  176 + if(r.result.taxi==null) {
  177 +
  178 + // 获取距离(单位:米)
  179 + points[index+1].distance = 0;
  180 +
  181 + // 获取时间(单位:秒)
  182 + points[index+1].duration = 0;
  183 +
  184 + }else {
  185 +
  186 + // 获取距离(单位:米)
  187 + points[index+1].distance = r.result.taxi.distance;
  188 +
  189 + // 获取时间(单位:秒)
  190 + points[index+1].duration = r.result.taxi.duration;
  191 +
  192 + }
  193 +
  194 +
  195 + }
  196 +
  197 + }
  198 +
  199 + f();
  200 + }
  201 + });
  202 +
  203 + })();
  204 +
  205 + },
  206 + // 在地图上画出上行线路走向
  207 + drawingUpline01 : function (polylineArray,polyline_center,data) {
  208 + var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;
  209 + // 创建线路走向
  210 + polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});
  211 + polyUpline01.data = data;
  212 + // 把折线添加到地图上
  213 + mapBValue.addOverlay(polyUpline01);
  214 + var sectionPoint = [];
  215 + // 线路单击事件
  216 + polyUpline01.addEventListener('click',function(e) {
  217 + if(BasicMap.getIsEditStatus()) {
  218 + layer.msg('请先保存正在编辑的路段信息...');
  219 + return false;
  220 + }
  221 + if(BasicMap.getIsCutSection()) {
  222 + layer.msg('请先撤销所有切路段的点...');
  223 + return false;
  224 + }
  225 + polyUpline01.enableEditing();
  226 + BasicMap.setIsEditStatus(true);
  227 + });
  228 +
  229 + // 添加路段双击事件
  230 + polyUpline01.addEventListener("dblclick",function(e){
  231 + if(BasicMap.getIsCutSection()) {
  232 + layer.msg('请先撤销所有切路段的点...');
  233 + return false;
  234 + }
  235 + BasicMap.setIsEditStatus(false);
  236 + // 关闭
  237 + layer.closeAll();
  238 + polyUpline01.disableEditing();
  239 + EditSectionObj.setEitdSection(polyUpline01.data);
  240 + // 获取折线坐标集合
  241 + var editPloyLineArray = polyUpline01.getPath();
  242 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  243 + sectionList = [];
  244 + var tbodyHtml = template('section_list',{list : sectionList});
  245 + // 截取路段
  246 + $('#section_table tbody').html(tbodyHtml);
  247 + // 加载修改路段弹出层mobal页面
  248 + $.get('editsection.html', function(m){
  249 + $(pjaxContainer).append(m);
  250 + $('#edit_section_mobal_cache').trigger('editSectionMobalCache_show', [BasicMap,GetAjaxData,EditSectionObj,PublicFunctions]);
  251 + });
  252 + });
  253 +
  254 + // 路段右击事件
  255 + var editSection = function(e,ee,marker){
  256 + if(BasicMap.getIsEditStatus()) {
  257 + layer.msg('请先保存正在编辑的路段信息...');
  258 + return false;
  259 + }
  260 + var lng = e.lng;
  261 + var lat = e.lat;
  262 + var sectionName = null;
  263 + var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建点
  264 + marker.isFlag = true;
  265 + if(pointIndex == 0) {
  266 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  267 + layer.msg('进入切路段状态,请选择本路段的终点!');
  268 + mapBValue.addOverlay(marker);// 添加覆盖物
  269 + firstPoint = {lng:lng, lat:lat};
  270 + pointIndex++;
  271 + EditSectionObj.setEitdSection(polyUpline01.data);
  272 + // 获取折线坐标集合
  273 + var editPloyLineArray = polyUpline01.getPath();
  274 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  275 + } else if (pointIndex > 0) {
  276 + layer.prompt({title: '请输入路段名!'}, function(sectionName, index){
  277 + pointList = [];
  278 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  279 + pointList[0] = sectionPoint[pointIndex-1];
  280 + pointList[1] = sectionPoint[pointIndex];
  281 + sectionList.push({name:sectionName, section:pointList});
  282 + layer.close(index);
  283 + layer.msg('路段截取成功,请选择下一个路段的终点');
  284 + mapBValue.addOverlay(marker);// 添加覆盖物
  285 + var tbodyHtml = template('section_list',{list : sectionList});
  286 + // 截取路段
  287 + $('#section_table tbody').html(tbodyHtml);
  288 + pointIndex++;
  289 + });
  290 + }
  291 + BasicMap.setIsCutSection(true);
  292 + }
  293 + var markerMenu=new BMap.ContextMenu();
  294 + markerMenu.addItem(new BMap.MenuItem('切路段',editSection.bind(polyUpline01)));
  295 + polyUpline01.addContextMenu(markerMenu);
  296 +
  297 +
  298 + var PanOptions_ ={noAnimation :true};
  299 + mapBValue.reset();
  300 + mapBValue.panTo(polyline_center,PanOptions_);
  301 + mapBValue.panBy(500,-510,PanOptions_);
  302 + mapBValue.setZoom(14);
  303 + },
  304 + // 删除点刷新cutSectionTable
  305 + refreshCutSectionTable : function() {
  306 + var tbodyHtml = template('section_list',{list : sectionList});
  307 + $('#section_table tbody').html(tbodyHtml);
  308 + },
  309 + // 删除点刷新覆盖物
  310 + deleteCutSectionPoint : function(point) {
  311 + var lng = point.lng;
  312 + var lat = point.lat;
  313 + var allOverlay = mapBValue.getOverlays();
  314 + // 删除最后一个点
  315 + for (var i = 0; i < allOverlay.length -1; i++){
  316 + if(allOverlay[i].isFlag) {
  317 + if(allOverlay[i].point.lng == lng && allOverlay[i].point.lat == lat){
  318 + mapBValue.removeOverlay(allOverlay[i]);
  319 + break;
  320 + }
  321 + }
  322 + }
  323 + },
  324 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  325 + drawingUpStationPoint : function(point_center,stationName,s) {
  326 +
  327 + // 自定义标注物图片
  328 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));
  329 +
  330 + var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
  331 + + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
  332 + + '</div>'
  333 + + '<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>';
  334 +
  335 +
  336 + var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{
  337 + "anchor" : new BMap.Size(-10,8),
  338 + "enableDragging" : true});
  339 +
  340 +
  341 + myRichMarker1.disableDragging();
  342 + mapBValue.addOverlay(myRichMarker1);
  343 +
  344 +
  345 + // 创建标注物
  346 + marker = new BMap.Marker(point_center,{icon : icon_target});
  347 +
  348 + // 允许覆盖物在map.clearOverlays方法中被清除。
  349 + marker.enableMassClear();
  350 +
  351 + mapBValue.addOverlay(marker);
  352 + },
  353 +
  354 + // 根据站点坐标匹配库中的公交站点(手动规划)
  355 + stationsPointsToLibraryPoint : function(arra,callback) {
  356 + // 获取长度
  357 + var len = arra.length;
  358 + var station = {};
  359 + var stationList = [];
  360 + (function(){
  361 + if (!arguments.callee.count) {
  362 + arguments.callee.count = 0;
  363 + }
  364 + arguments.callee.count++;
  365 + var index = parseInt(arguments.callee.count) - 1;
  366 + if (index >= len) {
  367 + callback && callback(stationList);
  368 + return ;
  369 + }
  370 + var f = arguments.callee;
  371 + station = arra[index];
  372 + if(arra[index].name!=''){
  373 +
  374 + $.get('/station/matchStation',station,function(resultStation) {
  375 + stationList.push({name:resultStation.name ,wgs:arra[index].wgs,potion:{lng:resultStation.potion_lng, lat:resultStation.potion_lat}, isHave:resultStation.isHave , id:resultStation.id});
  376 + f();
  377 + });
  378 + }else {
  379 + f();
  380 + }
  381 + })()
  382 + },
  383 + clearMarkAndOverlays : function() {
  384 +
  385 + // 清楚地图覆盖物
  386 + mapBValue.clearOverlays();
  387 +
  388 + mapBValue.removeOverlay();
  389 +
  390 + }
  391 +
  392 + }
  393 +
  394 + return Bmap;
  395 +
  396 +}();
0 397 \ No newline at end of file
... ...
src/main/resources/static/pages/excep/mhspeedingList.html
... ... @@ -128,7 +128,7 @@
128 128 data-startdate="{{obj.timestampDate}}" data-enddate="{{obj.endtimestampDate}}"
129 129 data-lon="{{obj.lon}}" data-lat="{{obj.lat}}" data-endlon="{{obj.endlon}}"
130 130 data-endlat="{{obj.endlat}}" data-lineid="{{obj.lineId}}" data-updown="{{obj.upDown}}">
131   - 查看轨迹
  131 + 轨迹回放
132 132 </a>
133 133 </td>
134 134 <td>
... ... @@ -270,7 +270,6 @@ $(function(){
270 270 index++;
271 271 });
272 272 })();
273   - console.log(listResult);
274 273 });
275 274 }
276 275  
... ...
src/main/resources/static/pages/excep/outBoundMap.html deleted 100644 → 0
1   -<link href="/pages/base/stationroute/css/bmap_base.css" rel="stylesheet" type="text/css" />
2   -<div class="portlet-body">
3   - <!-- 地图 -->
4   - <div id="bmap_basic" class="bmaps"></div>
5   -</div>
6   -<!-- load事件 -->
7   -<script src="/pages/excep/js/outboundmap-load.js"></script>
8   -<!-- 线路类 -->
9   -<script src="/pages/excep/js/outboundline.js"></script>
10   -<!-- 绘图类 -->
11   -<script src="/pages/base/stationroute/js/drawingManager.js"></script>
12   -<!-- 地图类 -->
13   -<script src="/pages/excep/js/outbound-map.js"></script>
14   -<!-- 函数与方法 -->
15   -<script src="/pages/excep/js/outboundmap-function.js"></script>
16   -<!-- ajax请求类 -->
17   -<script src="/pages/base/stationroute/js/stationroute-ajax-getdata.js"></script>
18   -
src/main/resources/static/pages/excep/outboundMap.html 0 → 100644
  1 +<style>
  2 + .play_back-layer .layui-layer-title{
  3 + height: 36px;
  4 + border-bottom: none;
  5 + }
  6 +</style>
  7 +
  8 +<div id="titleMap">
  9 +<button id="run" style="margin-left:10px" class="btn btn-sm green btn-outline filter-submit margin-bottom">运行</button>
  10 +</div>
  11 +<div id="BasicMap">
  12 +</div>
  13 +<style type="text/css">
  14 +
  15 +#BasicMap{
  16 + width: 100%;
  17 + border: 2px solid #fdfdfd;
  18 + height: calc(100% - 30px);
  19 + overflow: hidden;
  20 +}
  21 +</style>
  22 +<script type="text/javascript" src="/pages/excep/js/map.js"></script>
  23 +<script type="text/javascript" src="/pages/excep/js/line-list-function.js"></script>
  24 +
  25 +<script type="text/javascript">
  26 +$(function(){
  27 + var dataArr = window.localStorage.zbhAndDate.split(",");//获取页面传递过来的车辆自编号以及超速起始时间和超速结束时间
  28 + localStorage.clear();//清楚前端缓存
  29 + var vehicle = dataArr[0];
  30 + var startdate = dataArr[1];
  31 + var enddate = dataArr[2];
  32 + var lon = dataArr[3];//起点经度
  33 + var lat = dataArr[4];//起点纬度
  34 + var endLon = dataArr[5];//终点经度
  35 + var endLat = dataArr[6];//终点纬度
  36 + var lineid = dataArr[7];
  37 + var directionData = dataArr[8];
  38 + var pointObj;//坐标和速度组成的对象
  39 + var Points = [];//坐标和速度对象的集合
  40 + var coordinateArr = [];//坐标点数组
  41 + $.ajax({
  42 + type: "GET",
  43 + async:false,
  44 + url: '/nowbound/findPosition',
  45 + data: {vehicle:vehicle,startdate:startdate,enddate:enddate},
  46 + success: function(data){
  47 + $.each(data,function(i,item){
  48 + if(item.lon>1 && item.lat>1){
  49 + pointObj = new Object();
  50 + pointObj.coordinate = new BMap.Point(item.lon,item.lat);
  51 + pointObj.vehicle = item.vehicle;
  52 + Points.push(pointObj);
  53 + }
  54 + });
  55 + }
  56 + });
  57 + setTimeout(function(){
  58 + var map = BasicMap.init();//创建地图
  59 + $get('/sectionroute/findSection',{'line.id_eq' : lineid , 'directions_eq' :directionData},function(data) {
  60 + // 在地图上画出线路走向
  61 + PublicFunctions.linePanlThree(lineid,data,directionData);
  62 + });
  63 + var myP1 = new BMap.Point(lon,lat); //起点
  64 + var myP2 = new BMap.Point(endLon,endLat); //终点
  65 + for(i in Points){
  66 + coordinateArr.push(Points[i].coordinate);
  67 + }
  68 + var polyline = new BMap.Polyline(coordinateArr, {strokeColor:"red", strokeWeight:5, strokeOpacity:0.5});//创建折线
  69 + var myIcon = new BMap.Icon("/pages/excep/img/bus.png", new BMap.Size(32, 70), {//小车图片
  70 + imageOffset: new BMap.Size(5,20) //图片的偏移量。为了是图片底部中心对准坐标点。
  71 + });
  72 +
  73 + var carMk;
  74 + $(document).on('click', '#run', function() {
  75 + map.centerAndZoom(new BMap.Point(lon,lat),16);//地图中心点坐标 */
  76 + if(typeof(carMk)!="undefined"){
  77 + map.removeOverlay(carMk);//清空上一次的轨迹
  78 + }
  79 + carMk = new BMap.Marker(coordinateArr[0],{icon:myIcon});
  80 + map.addOverlay(polyline);//增加折线
  81 + var paths = coordinateArr.length;//获得有几个点
  82 + map.addOverlay(carMk);
  83 + i=0;
  84 + setTimeout(function(){
  85 + resetMkPoint(0);
  86 + },500);
  87 + function resetMkPoint(i){
  88 + carMk.setPosition(coordinateArr[i]);
  89 + if(i < paths-1){
  90 + setTimeout(function(){
  91 + i++;
  92 + resetMkPoint(i);
  93 + },500);
  94 + }
  95 + };
  96 +
  97 + });
  98 + }, 500);
  99 + });
  100 +</script>
  101 +
  102 +
... ...
src/main/resources/static/pages/excep/pdboundList.html
... ... @@ -56,26 +56,21 @@
56 56 <th width="3%">#</th>
57 57 <th width="15%">线路</th>
58 58 <th width="13%">车辆自编号</th>
59   - <th width="100">车辆坐标</th>
60   - <th width="11%">路牌名</th>
61 59 <th width="10%">上下行</th>
62   - <th width="18%">时间</th>
  60 + <th width="10%">越界位置</th>
  61 + <th width="18%">越界开始时间</th>
  62 + <th width="100">查看轨迹</th>
63 63 <th width="18%">操作</th>
64 64 </tr>
65 65 <tr role="row" class="filter">
66 66 <td></td>
67 67 <td>
68   -<!-- <input type="text" class="form-control form-filter input-sm" name="userName_like"> -->
69 68 <select class="form-control" name="line" id="line" style="width: 150px;"></select>
70 69 </td>
71 70 <td>
72   -<!-- <input type="text" class="form-control form-filter input-sm" name="nbbm"> -->
73 71 <select class="form-control" name="nbbm" id="nbbm" style="width: 150px;"></select>
74 72 </td>
75 73 <td>
76   - </td>
77   - <td></td>
78   - <td>
79 74 <select class="form-control form-filter " name="updown">
80 75 <option value="">请选择...</option>
81 76 <option value="0">上行</option>
... ... @@ -84,8 +79,11 @@
84 79 </select>
85 80 </td>
86 81 <td>
  82 + </td>
  83 + <td>
87 84 <input class="form-control" type="date" name="date" />
88 85 </td>
  86 + <td></td>
89 87 <td>
90 88 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >
91 89 <i class="fa fa-search"></i> 搜索</button>
... ... @@ -119,15 +117,6 @@
119 117 {{obj.vehicle}}
120 118 </td>
121 119 <td>
122   - <a href="/pages/excep/outBoundMap.html?no={{obj.line}},{{obj.upDown}},{{obj.lon}},{{obj.lat}}"
123   - class="btn default blue-stripe btn-sm" data-pjax>
124   - 查看车辆位置
125   - </a>
126   - </td>
127   - <td>
128   - {{obj.lpname}}
129   - </td>
130   - <td>
131 120 {{if obj.upDown==0}}
132 121 上行
133 122 {{else if obj.upDown==1}}
... ... @@ -137,9 +126,20 @@
137 126 {{/if}}
138 127 </td>
139 128 <td>
  129 + {{obj.address}}
  130 + </td>
  131 + <td>
140 132 {{obj.timestampDate}}
141 133 </td>
142 134 <td>
  135 + <a class="btn default blue-stripe btn-sm lookTrajectory" data-vehicle ="{{obj.vehicle}}"
  136 + data-startdate="{{obj.timestampDate}}" data-enddate="{{obj.endtimestampDate}}"
  137 + data-lon="{{obj.lon}}" data-lat="{{obj.lat}}" data-endlon="{{obj.endlon}}"
  138 + data-endlat="{{obj.endlat}}" data-lineid="{{obj.line}}" data-updown="{{obj.upDown}}">
  139 + 轨迹回放
  140 + </a>
  141 + </td>
  142 + <td>
143 143  
144 144 </td>
145 145 </tr>
... ... @@ -170,7 +170,6 @@ $(function(){
170 170 jsDoQuery(parameter,true);
171 171 //重置
172 172 $('tr.filter .filter-cancel').on('click', function(){
173   - debugger;
174 173 $('tr.filter input, select').val('').change();
175 174 jsDoQuery(null, true);
176 175 });
... ... @@ -205,19 +204,55 @@ $(function(){
205 204 params['page'] = page;
206 205 var i = layer.load(2);
207 206 $get('/nowbound/pagequery' ,params, function(data){
208   -// $.each(data.content, function(i, obj) {
209   -// obj.lastLoginDate = moment(obj.lastLoginDate).format("YYYY-MM-DD HH:mm:ss");
210   -// });
211   - var bodyHtm = template('bound_list_temp', {list: data.dataList});
212   - $('#datatable_bound tbody').html(bodyHtm)
213   - .find('.icheck').iCheck(icheckOptions)
214   - .on('ifChanged', iCheckChange);
215   - if(pagination && data.dataList.length > 0){
216   - //重新分页
217   - initPagination = true;
218   - showPagination(data);
219   - }
220   - layer.close(i);
  207 + var listResult = data.dataList;
  208 + var index=0;
  209 + (function(){
  210 + var f = arguments.callee;
  211 + if(index >= listResult.length){
  212 + var bodyHtm = template('bound_list_temp', {list:listResult});
  213 + $('#datatable_bound tbody').html(bodyHtm).find('.icheck').iCheck(icheckOptions).on('ifChanged', iCheckChange);
  214 + if(pagination && data.dataList.length > 0){
  215 + //重新分页
  216 + initPagination = true;
  217 + showPagination(data);
  218 + }
  219 + layer.close(i);
  220 + $(".lookTrajectory").click(function(){
  221 + var vehicle = $(this).data('vehicle');
  222 + var startDate = $(this).data('startdate');
  223 + var endDate = $(this).data('enddate');
  224 + var lon = $(this).data('lon');
  225 + var lat = $(this).data('lat');
  226 + var endLon = $(this).data('endlon');
  227 + var endLat = $(this).data('endlat');
  228 + var lineid = $(this).data('lineid');
  229 + var upDown = $(this).data('updown');
  230 + var storage = window.localStorage;
  231 + storage.setItem("zbhAndDate",vehicle+","+startDate+","+endDate+","+lon+","+lat+","+endLon+","+endLat+","+lineid+","+upDown);
  232 + $.get('/pages/excep/outboundMap.html?',function (result) {
  233 + layer.open({
  234 + type: 1,
  235 + title:'<i class="uk-icon-play-circle"></i>轨迹回放',
  236 + shadeClose: true,
  237 + shade: true,
  238 + scrollbar: false,
  239 + maxmin: false, //开启最大化最小化按钮
  240 + area: ['100%', '100%'],
  241 + content:result,//内容
  242 + });
  243 + });
  244 + })
  245 + return;
  246 + }
  247 + var result = listResult[index];
  248 + new BMap.Geocoder().getLocation(new BMap.Point(result.lon,result.lat), function(rs){
  249 + var addComp = rs.addressComponents;
  250 + result.address = addComp.district+addComp.street+addComp.streetNumber;
  251 + f();
  252 + index++;
  253 + });
  254 + })();
  255 +
221 256 });
222 257 }
223 258  
... ... @@ -345,7 +380,6 @@ $(&#39;#nbbm&#39;).select2({
345 380  
346 381 //改变状态
347 382 function changeEnabled(id,enabled){
348   - debugger
349 383 $get('/user/changeEnabled',{id:id,enabled:enabled},function(result){
350 384 jsDoQuery(null, true);
351 385 })
... ...
src/main/resources/static/pages/excep/speedingMap.html
... ... @@ -8,23 +8,24 @@
8 8 <div id="titleMap">
9 9 <button id="run" style="margin-left:10px" class="btn btn-sm green btn-outline filter-submit margin-bottom">运行</button>
10 10 </div>
11   -<div id="speedingMap">
  11 +<div id="BasicMap">
12 12 </div>
13 13 <style type="text/css">
14 14  
15   -#speedingMap{
  15 +#BasicMap{
16 16 width: 100%;
17 17 border: 2px solid #fdfdfd;
18 18 height: calc(100% - 30px);
19 19 overflow: hidden;
20 20 }
21 21 </style>
22   -<script type="text/javascript" src="/pages/excep/js/speeding-map.js"></script>
  22 +<script type="text/javascript" src="/pages/excep/js/map.js"></script>
23 23 <script type="text/javascript" src="/pages/excep/js/line-list-function.js"></script>
24 24  
25 25 <script type="text/javascript">
26 26 $(function(){
27 27 var dataArr = window.localStorage.zbhAndDate.split(",");//获取页面传递过来的车辆自编号以及超速起始时间和超速结束时间
  28 + localStorage.clear();//清楚前端缓存
28 29 var vehicle = dataArr[0];
29 30 var startdate = dataArr[1];
30 31 var enddate = dataArr[2];
... ... @@ -55,16 +56,14 @@ $(function(){
55 56 }
56 57 });
57 58 setTimeout(function(){
58   - var map = SpeedingMap.init();//创建地图
  59 + var map = BasicMap.init();//创建地图
  60 + debugger;
59 61 $get('/sectionroute/findSection',{'line.id_eq' : lineid , 'directions_eq' :directionData},function(data) {
60 62 // 在地图上画出线路走向
61 63 PublicFunctions.linePanlThree(lineid,data,directionData);
62 64 });
63 65 var myP1 = new BMap.Point(lon,lat); //起点
64 66 var myP2 = new BMap.Point(endLon,endLat); //终点
65   -/* var centerLon = (parseFloat(lon)+parseFloat(endLon))/2;
66   - var centerLat = (parseFloat(lat)+parseFloat(endLat))/2;
67   - map.centerAndZoom(new BMap.Point(centerLon,centerLat),18);//地图中心点坐标 */
68 67 for(i in Points){
69 68 coordinateArr.push(Points[i].coordinate);
70 69 }
... ...
src/main/resources/static/pages/permission/authorize_all/user_auth.html
... ... @@ -141,7 +141,8 @@
141 141 '55_3': '上南公司(六分公司)', '55_1': '上南公司(二分公司)', '55_2': '上南公司(三分公司)', '55_4': '上南公司(一分公司)', '55_5': '上南公司(培训部)',
142 142 '22_2': '金高公司(二分公司)', '22_1': '金高公司(四分公司)', '22_3': '金高公司(三分公司)', '22_5': '金高公司(一分公司)',
143 143 '26_3': '南汇公司(三分公司)', '26_2': '南汇公司(南汇二分)', '26_1': '南汇公司(南汇一分)', '26_4': '南汇公司(南汇维修公司)', '26_6': '南汇公司(航头枢纽站)',
144   - '05_5': '杨高公司(杨高分公司)', '05_6': '杨高公司(周浦分公司)', '05_3': '杨高公司(芦潮港分公司)', '05_1': '杨高公司(川沙分公司)', '05_2': '杨高公司(金桥分公司)'
  144 + '05_5': '杨高公司(杨高分公司)', '05_6': '杨高公司(周浦分公司)', '05_3': '杨高公司(芦潮港分公司)', '05_1': '杨高公司(川沙分公司)', '05_2': '杨高公司(金桥分公司)',
  145 + '77_78': '闵行公司', '99_100': '青浦公交'
145 146 };
146 147  
147 148 var defauleConfig;
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/dftz.html
... ... @@ -146,6 +146,7 @@
146 146 var f = $('form', modal).formValidation(gb_form_validation_opts);
147 147 f.on('success.form.fv', function(e) {
148 148 e.preventDefault();
  149 + $('[type=submit]', f).attr('disabled', 'disabled');
149 150 var data = $(this).serializeJSON();
150 151 if(data.dfsj==sch.dfsj && data.remarks=='' && data.bcType == sch.bcType){
151 152 return;
... ...