Commit abb9a320e9e4d895f3d688c1d70fd39ca828cf1c

Authored by 廖磊
2 parents 98365b36 478adfaf

Merge branch 'pudong' of http://222.66.0.204:8090/panzhaov5/bsth_control

into pudong
Showing 23 changed files with 332 additions and 60 deletions
src/main/java/com/bsth/controller/gps/GpsController.java
... ... @@ -84,7 +84,7 @@ public class GpsController {
84 84 @RequestMapping(value = "/gpsHistory/multiple")
85 85 public List<Map<String, Object>> gpsHistory(@RequestParam String[] nbbmArray, @RequestParam Long st,
86 86 @RequestParam Long et) {
87   - return gpsService.history(nbbmArray, st, et);
  87 + return (List<Map<String, Object>>) gpsService.history(nbbmArray, st, et).get("list");
88 88 }
89 89  
90 90 /*@RequestMapping(value = "/analyse/ram")
... ...
src/main/java/com/bsth/controller/realcontrol/calc/ReCalcDataController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol.calc;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.util.HttpClientUtils;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +import java.util.HashMap;
  13 +import java.util.Map;
  14 +
  15 +/**
  16 + * 重新统计(数据汇总)
  17 + * Created by panzhao on 2018/1/25.
  18 + */
  19 +@RestController
  20 +@RequestMapping("/sch/reCalc")
  21 +public class ReCalcDataController {
  22 +
  23 + private static String reCalcUrl = "http://10.10.150.24:30571/reCalc/scheduleDetail";
  24 +
  25 + Logger logger = LoggerFactory.getLogger(this.getClass());
  26 +
  27 + /**
  28 + * 重新统计班次明细
  29 + * @param date
  30 + * @param line
  31 + * @return
  32 + */
  33 + @RequestMapping(value = "/scheduleDetail", method = RequestMethod.POST)
  34 + public Map<String, Object> reCalcScheduleDetail(@RequestParam String date, @RequestParam String line){
  35 + Map<String, Object> rs = new HashMap();
  36 + try{
  37 + HttpClientUtils.post(reCalcUrl + "?rq=" + date + "&lineCode=" + line, "");
  38 + }catch (Exception e){
  39 + logger.error("", e);
  40 + rs.put("status", ResponseCode.ERROR);
  41 + rs.put("msg", e.getMessage());
  42 + }
  43 + return rs;
  44 + }
  45 +}
... ...
src/main/java/com/bsth/data/safe_driv/SafeDrivDataLoadThread.java
... ... @@ -21,7 +21,7 @@ import java.util.List;
21 21 @Component
22 22 public class SafeDrivDataLoadThread extends Thread{
23 23  
24   - private final static String url = "http://180.166.5.82:9005/bsth-safedriving/Crlcxb/realtimeInterface.do";
  24 + private final static String url = "http://180.166.5.82:9007/bsth-safedriving/Crlcxb/realtimeInterface.do";
25 25  
26 26 Logger logger = LoggerFactory.getLogger(this.getClass());
27 27  
... ...
src/main/java/com/bsth/entity/Line.java
... ... @@ -164,7 +164,7 @@ public class Line implements Serializable {
164 164 /**
165 165 * 逻辑删除标记 为 1:标识已删除
166 166 */
167   - private Integer remove;
  167 + private Integer remove = 0;
168 168  
169 169 public Integer getSpacGrade() {
170 170 return spacGrade;
... ...
src/main/java/com/bsth/service/gps/GpsService.java
... ... @@ -13,7 +13,7 @@ public interface GpsService {
13 13  
14 14 List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions);
15 15  
16   - List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et);
  16 + Map<String, Object> history(String[] nbbmArray, Long st, Long et);
17 17  
18 18 Map<String, Object> findBuffAeraByCode(String code, String type);
19 19  
... ...
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
... ... @@ -168,10 +168,12 @@ public class GpsServiceImpl implements GpsService {
168 168  
169 169 private static DateTimeFormatter fmtyyyy = DateTimeFormat.forPattern("yyyy");
170 170 @Override
171   - public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) {
  171 + public Map<String, Object> history(String[] nbbmArray, Long st, Long et) {
  172 + Map<String, Object> rsMap = new HashMap<>();
172 173 List<Map<String, Object>> list = new ArrayList<>();
  174 + rsMap.put("list", list);
173 175 if (et - st > GPS_RANGE)
174   - return list;
  176 + return rsMap;
175 177  
176 178 st = st * 1000;
177 179 et = et * 1000;
... ... @@ -193,6 +195,7 @@ public class GpsServiceImpl implements GpsService {
193 195 dc.setDevice(BasicData.deviceId2NbbmMap.inverse().get(nbbm));
194 196 dc.setSt(st);
195 197 dc.setEt(et);
  198 + dc.setType(1);
196 199  
197 200 dcs.add(dc);
198 201 }
... ... @@ -223,7 +226,7 @@ public class GpsServiceImpl implements GpsService {
223 226 if(i == len - 1)
224 227 sql.append(" ORDER BY device_id,ts,stop_no");
225 228 else
226   - sql.append(" UNION");
  229 + sql.append(" UNION ");
227 230 }
228 231  
229 232 logger.info("轨迹回放 nbbm: " + nbbm + " -st: " + st + " -et: " + et + " -sql: " + sql.toString());
... ... @@ -302,7 +305,10 @@ public class GpsServiceImpl implements GpsService {
302 305 return (int) (Long.parseLong(o1.get("ts").toString()) - Long.parseLong(o2.get("ts").toString()));
303 306 }
304 307 });
305   - return list;
  308 +
  309 + rsMap.put("list", list);
  310 + rsMap.put("dcs", dcs);
  311 + return rsMap;
306 312 }
307 313  
308 314 private String map_get_str(Map<String, Object> map, String key){
... ... @@ -339,7 +345,7 @@ public class GpsServiceImpl implements GpsService {
339 345 }
340 346  
341 347 for(DeviceChange dc : dcs){
342   - if(dc.getEt() > st)
  348 + if(dc.getEt() > st || dc.getEt()==0)
343 349 rs.add(dc);
344 350 }
345 351 }catch (Exception e){
... ... @@ -379,9 +385,9 @@ public class GpsServiceImpl implements GpsService {
379 385 " where weeks_year in ("+sWeekOfYear+", "+eWeekOfYear+") and device_id='"+dc.getDevice()+"' and ts > "+t1+" and ts < " + t2);
380 386  
381 387 if(i == len - 1)
382   - sql.append(" ORDER BY device_id,ts,stop_no");
  388 + sql.append(" ORDER BY device_id,ts,stop_no ");
383 389 else
384   - sql.append(" UNION");
  390 + sql.append(" UNION ");
385 391 }
386 392  
387 393 JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource());
... ... @@ -606,7 +612,7 @@ public class GpsServiceImpl implements GpsService {
606 612  
607 613 try {
608 614 //获取历史gps 数据
609   - List<HistoryGps_DTO> list = HistoryGps_DTO.craete(history(new String[]{nbbm}, st, et));
  615 + List<HistoryGps_DTO> list = HistoryGps_DTO.craete((List<Map<String, Object>>) history(new String[]{nbbm}, st, et).get("list"));
610 616 if (list != null && list.size() > 0) {
611 617 //获取路段信息
612 618 String sql = "select ID, ST_AsText(GROAD_VECTOR) as GROAD_VECTOR,ROAD_CODE,ROAD_NAME,SPEED from bsth_c_road where road_code in(select section_code from bsth_c_sectionroute where line_code=? and destroy=0)";
... ... @@ -655,7 +661,8 @@ public class GpsServiceImpl implements GpsService {
655 661  
656 662 try {
657 663 //获取历史gps 数据
658   - List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et));
  664 + Map<String, Object> gpsMap = history(new String[]{nbbm}, st, et);
  665 + List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete((List<Map<String, Object>>) gpsMap.get("list"));
659 666 if (list != null && list.size() > 0) {
660 667 //关联路段名称
661 668 Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap();
... ... @@ -696,6 +703,7 @@ public class GpsServiceImpl implements GpsService {
696 703 rs.put("speedList", speedList);
697 704 rs.put("outboundList", outboundList);
698 705 rs.put("sumMileage", new DecimalFormat(".##").format(sum / 1000));
  706 + rs.put("dcs", gpsMap.get("dcs"));
699 707 } catch (Exception e) {
700 708 logger.error("", e);
701 709 rs.put("status", ResponseCode.ERROR);
... ... @@ -707,7 +715,7 @@ public class GpsServiceImpl implements GpsService {
707 715 @Override
708 716 public void trailExcel(String nbbm, long st, long et, HttpServletResponse resp) {
709 717 //获取历史gps 数据
710   - List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et));
  718 + List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete((List<Map<String, Object>>) history(new String[]{nbbm}, st, et).get("list"));
711 719 if (list != null && list.size() > 0) {
712 720 //关联路段名称
713 721 Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap();
... ...
src/main/java/com/bsth/service/gps/entity/DeviceChange.java
... ... @@ -11,6 +11,9 @@ public class DeviceChange {
11 11 private long st;
12 12 private long et;
13 13  
  14 + //为1 表示没有设备变更记录,直接从车辆信息上关联的设备号
  15 + private int type=0;
  16 +
14 17 public String getNbbm() {
15 18 return nbbm;
16 19 }
... ... @@ -42,4 +45,12 @@ public class DeviceChange {
42 45 public void setEt(long et) {
43 46 this.et = et;
44 47 }
  48 +
  49 + public int getType() {
  50 + return type;
  51 + }
  52 +
  53 + public void setType(int type) {
  54 + this.type = type;
  55 + }
45 56 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1234,7 +1234,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1234 1234 ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
1235 1235  
1236 1236 sch.setFcsjActualAll(fcsjActual);
1237   - sch.setRemark(remarks);
  1237 + sch.setRemarks(remarks);
1238 1238 sch.calcStatus();
1239 1239 //if(sch.isLate2()){
1240 1240 //取消应发未到标记
... ...
src/main/resources/fatso/start.js
... ... @@ -16,7 +16,7 @@ var platform = process.platform;
16 16 var iswin = platform=='win32';
17 17 var sp = platform=='win32'?'\\':'/';
18 18 //不参与的目录
19   -var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission'+sp+'authorize_all', 'summary', 'history_sch' ,'report'+sp+'oil','base'+sp+'geo_data_edit']
  19 +var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission'+sp+'authorize_all', 'summary', 'history_sch' ,'report'+sp+'oil','base'+sp+'geo_data_edit', 'forms', 'report']
20 20 ,ep = new EventProxy()
21 21 ,pName = 'bsth_control'
22 22 ,path = process.cwd()
... ...
src/main/resources/static/pages/control/lineallot_v2/main.html
... ... @@ -123,6 +123,14 @@
123 123 .uk-button-default{
124 124 background: #e0e0e0 !important;
125 125 }
  126 +
  127 + .line_list_all_wrap > .item.destroy{
  128 + color: #f64242;
  129 + }
  130 +
  131 + .checked_list > .item.destroy{
  132 + background: #ff5c5c;
  133 + }
126 134 </style>
127 135 </head>
128 136  
... ... @@ -169,7 +177,7 @@
169 177  
170 178 <script id="line_list_items_temp" type="text/html">
171 179 {{each list as obj i}}
172   - <span class="item" data-id="{{obj.lineCode}}" data-gsbm="{{obj.company}}_{{obj.brancheCompany}}">{{obj.name}}</span>
  180 + <span class="item {{obj.destroy==1?'destroy':''}}" data-id="{{obj.lineCode}}" data-gsbm="{{obj.company}}_{{obj.brancheCompany}}">{{obj.name}}</span>
173 181 {{/each}}
174 182 </script>
175 183  
... ... @@ -258,7 +266,7 @@
258 266 /**
259 267 * 查询所有线路
260 268 */
261   - $.get('/line/all', {destroy_eq: 0}, function (list) {
  269 + $.get('/line/all', {remove_ne: 1}, function (list) {
262 270 ep.emit('all_lines', list);
263 271 });
264 272  
... ... @@ -283,7 +291,7 @@
283 291 }
284 292 else {
285 293 $(this).addClass('active');
286   - var span = $('<span data-id="'+lineCode+'" class="item uk-card uk-card-default uk-animation-slide-bottom">'+name+'</span>')
  294 + var span = $('<span data-id="'+lineCode+'" class="item uk-card uk-card-default uk-animation-slide-bottom '+($(this).hasClass('destroy')?"destroy":"")+'">'+name+'</span>')
287 295 .one('webkitAnimationEnd', function () {
288 296 $(this).removeClass('uk-animation-slide-bottom');
289 297 });
... ...
src/main/resources/static/pages/home.html
... ... @@ -63,31 +63,29 @@
63 63 <li><span class="label s_c_add">新增</span>1、新增站点间双路段生成功能。</li>
64 64 <li><span class="label s_c_change">修复</span>2、修复一个bug,在线路编辑页面初始化线路的系统规划功能,百度地图上缺少的线路会显示一直加载。</li>
65 65 <li><span class="label s_c_change">修复</span>3、修复一个bug,在修改站点时选择取消,不点击站点树状图,直接选择上/下行操作里的修改站点,会出现没有可修改站点的bug。</li>
66   - <li><span class="label s_c_change">修复</span>4、线路跨版本更新修复。</li>
67   - <li><span class="label s_c_change">修复</span>5、线路、线路版本、停车场查询列表显示公司。</li>
68   - <li><span class="label s_c_add">新增</span>6、新增线路删除功能,可以删除已撤销的线路,仅用于剔除录入错误的数据,如出现误操作,请联系管理员恢复数据。</li>
  66 + <li><span class="label s_c_add">新增</span>4、新增线路删除功能,可以删除已撤销的线路,仅用于剔除录入错误的数据,如出现误操作,请联系管理员恢复数据。</li>
69 67 <li class="sub_title"><h6>用油和报表</h6></li>
70   - <li><span class="label s_c_add">新增</span>7、油量,电量记录操作日志。</li>
71   - <li><span class="label s_c_change">修复</span>8、修正获取加存油信息特殊情况下获取不到前一天的进场值。</li>
72   - <li><span class="label s_c_change">修复</span>9、行车路单批量导出,由之前导出成多个压缩文件改为导出成一个文件</li>
73   - <li><span class="label s_c_add">新增</span>10、新增班次准点率统计导出。</li>
74   - <li><span class="label s_c_change">修复</span>11、修复一个bug,这个bug导致在更换设备号后,驾驶员请求台账出现车辆字段为空的情况。</li>
  68 + <li><span class="label s_c_add">新增</span>5、油量,电量记录操作日志。</li>
  69 + <li><span class="label s_c_change">修复</span>6、修正获取加存油信息特殊情况下获取不到前一天的进场值。</li>
  70 + <li><span class="label s_c_change">修复</span>7、行车路单批量导出,由之前导出成多个压缩文件改为导出成一个文件</li>
  71 + <li><span class="label s_c_add">新增</span>8、新增班次准点率统计导出。</li>
  72 + <li><span class="label s_c_change">修复</span>9、修复一个bug,这个bug导致在更换设备号后,驾驶员请求台账出现车辆字段为空的情况。</li>
75 73 <li class="sub_title"><h6>计划调度</h6></li>
76   - <li><span class="label s_c_add">新增</span>12、时刻表自动生成,根据时间间隔自动时刻表生成,导出生成的时刻表数据。</li>
77   - <li><span class="label s_c_add">新增</span>13、时刻表版本导入,导入时刻表可选版本,编辑时间表带版本。</li>
78   - <li><span class="label s_c_add">新增</span>14、添加车辆报废功能,释放报废的车辆所持有的设备编号。</li>
79   - <li><span class="label s_c_change">修复</span>15、车辆设备管理,启用日期精确到时间分钟。</li>
  74 + <li><span class="label s_c_add">新增</span>10、时刻表自动生成,根据时间间隔自动时刻表生成,导出生成的时刻表数据。</li>
  75 + <li><span class="label s_c_add">新增</span>11、时刻表版本导入,导入时刻表可选版本,编辑时间表带版本。</li>
  76 + <li><span class="label s_c_add">新增</span>12、添加车辆报废功能,释放报废的车辆所持有的设备编号。</li>
  77 + <li><span class="label s_c_change">修复</span>13、车辆设备管理,启用日期精确到时间分钟。</li>
80 78 <li class="sub_title"><h6>线调</h6></li>
81   - <li><span class="label s_c_change">修复</span>16、修复一个轨迹回放的bug,这个bug导致在车辆更换设备号之后,无法回放更换设备之前的数据。</li>
82   - <li><span class="label s_c_change">修复</span>17、修复驾驶员请求信使,无法点击不同意的问题。</li>
83   - <li><span class="label s_c_add">新增</span>18、新增异常提示,当子任务公里与计划不等时,子任务 badge 将会显示为红色,相等则为绿色。</li>
84   - <li><span class="label s_c_add">新增</span>19、新增子任务修改功能。</li>
85   - <li><span class="label s_c_add">新增</span>20、新增点击路牌单元格时,信使框下方弹出tip,显示路牌公里。</li>
86   - <li><span class="label s_c_add">新增</span>21、新增车辆状态标记,如果车辆在套跑其他线路班次,在车辆单元格右上角会出现一个 icon 显示车辆当前执行的线路。</li>
87   - <li><span class="label s_c_add">新增</span>22、新增双击车辆单元格展开全部车辆面板,显示所有的计划用车和实际的车载信号。</li>
88   - <li><span class="label s_c_add">新增</span>23、新增超速提醒,地图模块左下角。</li>
89   - <li><span class="label s_c_remove">删除</span>24、移除了表格渐变色。</li>
90   - <li><span class="label s_c_add">新增</span>25、模拟图车辆展开的tip上,显示司售信息。</li>
91   - <li><span class="label s_c_add">新增</span>26、轨迹回放窗口打开时,点击班次,会自动将班次车辆时间写入轨迹搜索表单。</li>
  79 + <li><span class="label s_c_change">修复</span>14、修复一个轨迹回放的bug,这个bug导致在车辆更换设备号之后,无法回放更换设备之前的数据。</li>
  80 + <li><span class="label s_c_change">修复</span>15、修复驾驶员请求信使,无法点击不同意的问题。</li>
  81 + <li><span class="label s_c_add">新增</span>16、新增异常提示,当子任务公里与计划不等时,子任务 badge 将会显示为红色,相等则为绿色。</li>
  82 + <li><span class="label s_c_add">新增</span>17、新增子任务修改功能。</li>
  83 + <li><span class="label s_c_add">新增</span>18、新增点击路牌单元格时,信使框下方弹出tip,显示路牌公里。</li>
  84 + <li><span class="label s_c_add">新增</span>19、新增车辆状态标记,如果车辆在套跑其他线路班次,在车辆单元格右上角会出现一个 icon 显示车辆当前执行的线路。</li>
  85 + <li><span class="label s_c_add">新增</span>20、新增双击车辆单元格展开全部车辆面板,显示所有的计划用车和实际的车载信号。</li>
  86 + <li><span class="label s_c_add">新增</span>21、新增超速提醒,地图模块左下角。</li>
  87 + <li><span class="label s_c_remove">删除</span>22、移除了表格渐变色。</li>
  88 + <li><span class="label s_c_add">新增</span>23、模拟图车辆展开的tip上,显示司售信息。</li>
  89 + <li><span class="label s_c_add">新增</span>24、轨迹回放窗口打开时,点击班次,会自动将班次车辆时间写入轨迹搜索表单。</li>
92 90 </ul>
93 91 </div>
... ...
src/main/resources/static/pages/permission/authorize_all/authorize.html
... ... @@ -181,6 +181,15 @@
181 181 font-size: 14px;
182 182 font-family: 微软雅黑;
183 183 }
  184 +
  185 + .sub_lines>span.line_btn.destroy{
  186 + background: #ff5c5c;
  187 + }
  188 +
  189 + .sub_lines>span.line_btn.destroy:hover{
  190 + background: #ff7373;
  191 + }
  192 +
184 193 .sub_lines>span.line_btn:hover{
185 194 background: #2dd7ed;
186 195 }
... ... @@ -251,6 +260,23 @@
251 260 background: #1e87f0;
252 261 color: #fff;
253 262 }
  263 +
  264 + .line_checkbox_list>.btn.destroy,
  265 + .line_checkbox_list>.btn.destroy>input{
  266 + border-color: #ff9595;
  267 + color: #ff5c5c;
  268 + }
  269 +
  270 + .line_checkbox_list>.btn.destroy.active{
  271 + background: #ff5c5c;
  272 + color: #fff;
  273 + }
  274 +
  275 + .line_checkbox_list>.btn.destroy.active>input{
  276 + background-color: #ff5c5c !important;
  277 + border-color: #ff5c5c !important;
  278 + }
  279 +
254 280 #role_authorize_wrap .ztree *{
255 281 font-size: 14px;
256 282 }
... ... @@ -267,6 +293,10 @@
267 293 .loading circle{
268 294 stroke: red;
269 295 }
  296 +
  297 + #select_line_modal .uk-checkbox:checked {
  298 + background-color: #1e87f0;
  299 + }
270 300 </style>
271 301 </head>
272 302  
... ... @@ -455,7 +485,7 @@
455 485 });
456 486  
457 487 //query all line
458   - $.get('/line/all', {'destroy_eq': 0}, function (rs) {
  488 + $.get('/line/all', {'remove_ne': 1}, function (rs) {
459 489 ep.emit('query_line', rs);
460 490 });
461 491  
... ...
src/main/resources/static/pages/permission/authorize_all/user_auth.html
... ... @@ -86,6 +86,14 @@
86 86 <h2 class="uk-modal-title">添加线路权限</h2>
87 87 <div>
88 88 <form>
  89 + <div class="ct_field" style="width: 140px;">
  90 + <label>状态</label>
  91 + <select class="uk-select" id="modal_type_select" style="width: 94px;">
  92 + <option value="-1">全部</option>
  93 + <option value="0">营运</option>
  94 + <option value="1">撤销</option>
  95 + </select>
  96 + </div>
89 97 <div class="ct_field">
90 98 <label>公司</label>
91 99 <select class="uk-select" id="modal_company_select"></select>
... ... @@ -115,7 +123,7 @@
115 123 <h5>{{t.fgsName}}</h5>
116 124 <div class="sub_lines">
117 125 {{each t.list as obj j}}
118   - <span class="line_btn">{{obj.name}}</span>
  126 + <span title="{{obj.lineCode}}" class="line_btn {{obj.destroy==1?'destroy':''}}">{{obj.name}}</span>
119 127 {{/each}}
120 128 </div>
121 129 {{/each}}
... ... @@ -128,7 +136,7 @@
128 136  
129 137 <script id="authorize-modal-lines-temp" type="text/html">
130 138 {{each list as obj i}}
131   - <label class="btn" data-gs="{{obj.company}}" data-fgs="{{obj.brancheCompany}}" title="{{obj.name}}" data-code="{{obj.lineCode}}">
  139 + <label class="btn {{obj.destroy==1?'destroy':''}}" data-gs="{{obj.company}}" data-fgs="{{obj.brancheCompany}}" title="{{obj.name}}" data-code="{{obj.lineCode}}">
132 140 <input class="uk-checkbox" type="checkbox" >{{obj.name}}
133 141 </label>
134 142 {{/each}}
... ... @@ -240,7 +248,7 @@
240 248 $('#modal_line_input', modal).focus();
241 249 });
242 250 function render_line_select_modal() {
243   - var htmlStr = template('authorize-modal-lines-temp', {list: all_lines});
  251 + var htmlStr = template('authorize-modal-lines-temp', {list: all_lines, destroy: $('.modal_type_select',modal).val()});
244 252 $('.line_checkbox_list').html(htmlStr);
245 253 //选中线路
246 254 var codeArray=[];
... ... @@ -274,6 +282,7 @@
274 282 filter_modal_lines();
275 283 });
276 284 $('#modal_sub_company_select', modal).on('change', filter_modal_lines);
  285 + $('#modal_type_select', modal).on('change', filter_modal_lines);
277 286 }
278 287  
279 288 $('#modal_line_input', modal).on('input', function () {
... ... @@ -296,22 +305,29 @@
296 305 });
297 306  
298 307 function filter_modal_lines() {
  308 + console.log('filter_modal_lines');
299 309 var company=$('#modal_company_select', modal).val(),//公司代码
300   - sub_company=$('#modal_sub_company_select', modal).val();//分公司代码
  310 + sub_company=$('#modal_sub_company_select', modal).val(),//分公司代码
  311 + type = $('#modal_type_select', modal).val();//线路状态
301 312  
302 313 var array = $('.line_checkbox_list>label.btn').css('display', 'none'),s_dom=[];
303 314  
304   - if(!company && !sub_company){
  315 + if(!company && !sub_company && type==-1){
305 316 array.css('display', 'inline-block');
306 317 return;
307 318 }
308 319  
  320 + var status;
309 321 array.each(function () {
310 322 if(company && $(this).data('gs')!=company)
311 323 return true;
312 324 if(sub_company && $(this).data('fgs')!=sub_company)
313 325 return true;
314 326  
  327 + status = $(this).hasClass('destroy')?1:0;
  328 + if(type!=-1 && type!=status)
  329 + return true;
  330 +
315 331 s_dom.push(this);
316 332 });
317 333 for(var i=0,dom;dom=s_dom[i++];)
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -1806,7 +1806,7 @@ dl.active &gt; dd.disabled {
1806 1806 padding: 7px;
1807 1807 background: #ffffff;
1808 1808 box-shadow: 5px 5px 15px rgba(90, 90, 90, 0.48);
1809   - max-height: 290px;
  1809 + max-height: 125px;
1810 1810 overflow-y: auto;
1811 1811 min-height: 40px;
1812 1812 }
... ... @@ -2035,4 +2035,23 @@ dl.active &gt; dd.disabled {
2035 2035 overflow: hidden;
2036 2036 text-overflow: ellipsis;
2037 2037 white-space: nowrap;
  2038 +}
  2039 +
  2040 +.tab-line.destroy>a{
  2041 + background: #ff5c5c;
  2042 + color: #fff !important;
  2043 + border-radius: 0;
  2044 +}
  2045 +
  2046 +.tab-line.destroy>a:hover{
  2047 + background: #ff3333 !important;
  2048 + border-color: #ff3333 !important;
  2049 +}
  2050 +
  2051 +.uk-tab>li.uk-active.destroy>a{
  2052 + color: red !important;
  2053 +}
  2054 +
  2055 +.uk-tab>li.uk-active.destroy>a:hover{
  2056 + background: #fff !important;
2038 2057 }
2039 2058 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/car_info_all.html
... ... @@ -3,7 +3,7 @@
3 3 <a href="" class="uk-modal-close uk-close"></a>
4 4  
5 5 <div class="uk-modal-header">
6   - <h2>1006路 -全部车辆</h2></div>
  6 + <h2><span class="line_name_span"></span> -全部车辆</h2></div>
7 7  
8 8 <table class="uk-table uk-table-hover" style="table-layout: fixed;">
9 9 <thead>
... ... @@ -52,6 +52,7 @@
52 52 lineCode = data.lineCode;
53 53 nbbm = data.nbbm;
54 54  
  55 + $('.line_name_span', modal).html(gb_data_basic.lineCode2NameAll()[lineCode]);
55 56 jsDoQuery(function () {
56 57 var $cell = $('tr[data-nbbm='+nbbm+']', modal);
57 58 //定位到行
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch_maintain.html
... ... @@ -431,7 +431,7 @@
431 431 $(that).prepend('<i class="uk-icon-spinner uk-icon-spin"></i>');
432 432  
433 433  
434   - var reCountEp = EventProxy.create('ylbUpdate', function () {
  434 + var reCountEp = EventProxy.create('ylbUpdate', 'calcWaybill', 'scheduleDetail', function () {
435 435 $('i.uk-icon-spin', that).remove();
436 436 $(that).removeAttr('disabled');
437 437 notify_succ('重新统计成功!');
... ... @@ -447,6 +447,11 @@
447 447 reCountEp.emitLater('ylbUpdate');
448 448 });
449 449  
  450 + //重新统计班次明细
  451 + gb_common.$post('/sch/reCalc/scheduleDetail', {date:rq, line: lineCode}, function () {
  452 + reCountEp.emitLater('scheduleDetail');
  453 + });
  454 +
450 455 }, '我确定');
451 456 });
452 457 })();
... ...
src/main/resources/static/real_control_v2/fragments/north/tabs.html
... ... @@ -4,7 +4,7 @@
4 4 <li class="uk-active" ><a>主页</a></li>
5 5 <li id="north_tabs_map_btn"><a>地图</a></li>
6 6 {{each list as line i}}
7   - <li class="tab-line" data-code="{{line.lineCode}}"><a>{{line.name}}(<span id="badge_untreated_num_{{line.lineCode}}">0</span>, <span id="badge_yfwf_num_{{line.lineCode}}">0</span>)</a></li>
  7 + <li class="tab-line {{line.destroy==1?'destroy':''}}" data-code="{{line.lineCode}}"><a>{{line.name}}(<span id="badge_untreated_num_{{line.lineCode}}">0</span>, <span id="badge_yfwf_num_{{line.lineCode}}">0</span>)</a></li>
8 8 {{/each}}
9 9 </ul>
10 10 </script>
... ...
src/main/resources/static/real_control_v2/js/data/data_basic.js
... ... @@ -208,6 +208,8 @@ var gb_data_basic = (function () {
208 208 },
209 209 //是否是环线
210 210 isLoopLine: function (lineCode) {
  211 + if(!stationRoutes[lineCode])
  212 + return false;
211 213 var data = gb_common.groupBy(stationRoutes[lineCode], 'directions');
212 214 //下行只有2个站点
213 215 var len = data[0].length;
... ...
src/main/resources/static/real_control_v2/js/utils/svg_chart.js
... ... @@ -55,6 +55,8 @@ var gb_svg_chart = (function () {
55 55 var loopLine = gb_data_basic.isLoopLine(lineCode);
56 56  
57 57 var routes = gb_data_basic.stationRoutes(lineCode);
  58 + if(!routes)
  59 + return;
58 60 var data = gb_svg_data_convert.mergeRoute(JSON.parse(JSON.stringify(routes)), enableAttr, lineCode, loopLine),
59 61 len = data.length;
60 62  
... ...
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
... ... @@ -1342,7 +1342,7 @@ span.flatpickr-weekday{
1342 1342 width: 100% !important;
1343 1343 font-size: 12px;
1344 1344 color: #747474 !important;
1345   - border-bottom: 1px dashed #ededed;
  1345 + /*border-bottom: 1px dashed #ededed;*/
1346 1346 }
1347 1347  
1348 1348 .gps-play-back-panel-v3 .play-back-tools-wrap .top-btn-list{
... ... @@ -1448,4 +1448,68 @@ ul.base_line_list&gt;li:nth-child(even)&gt;a {
1448 1448 ul.base_line_list>li>a:hover{
1449 1449 color: #fff !important;
1450 1450 background: #848686 !important;
  1451 +}
  1452 +.play-back-form>.dynamic_devices{
  1453 + position: absolute;
  1454 + top: 15px;
  1455 + z-index: 9;
  1456 + right: 83px;
  1457 + font-size: 12px;
  1458 + background: #ffd863;
  1459 + padding: 0 5px;
  1460 + border-radius: 2px;
  1461 + box-shadow: 0px 3px 11px rgba(0,0,0,.08);
  1462 + max-width: 120px;
  1463 + overflow: hidden;
  1464 + text-overflow: ellipsis;
  1465 + white-space: nowrap;
  1466 + min-width: 60px;
  1467 + text-align: center;
  1468 + cursor: default;
  1469 +}
  1470 +
  1471 +.dynamic_devices_dropdown{
  1472 + position: absolute;
  1473 + z-index: 10;
  1474 + background: #ffd863;
  1475 + top: 40px;
  1476 + left: 160px;
  1477 + box-shadow: -1px 8px 11px rgba(0,0,0,.08);
  1478 + width: 280px;
  1479 + padding: 7px;
  1480 + display: none;
  1481 + font-size: 12px;
  1482 +}
  1483 +
  1484 +
  1485 +.dynamic_devices_dropdown>ul{
  1486 + margin-bottom: 0;
  1487 +}
  1488 +
  1489 +.dynamic_devices_dropdown>ul>li:first-child{
  1490 + margin-bottom: 7px;
  1491 +}
  1492 +
  1493 +.dynamic_devices_dropdown>ul>li{
  1494 + border-bottom: 1px solid #ffeaa9;
  1495 +}
  1496 +
  1497 +.dynamic_devices_dropdown>ul>li:last-child{
  1498 + border-bottom: none;
  1499 +}
  1500 +
  1501 +.dynamic_devices_dropdown.style1{
  1502 + width: 170px;
  1503 + left: 185px;
  1504 + padding: 2px;
  1505 +}
  1506 +
  1507 +.dynamic_devices_dropdown>ul>li>div{
  1508 + display: inline-block;
  1509 + width: 90px;
  1510 + vertical-align: top;
  1511 +}
  1512 +
  1513 +.gps-play-back-panel-v3 .parks_list .uk-form-icon{
  1514 + width: 86%;
1451 1515 }
1452 1516 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/layout.html
... ... @@ -118,13 +118,50 @@
118 118 {{/if}}
119 119 </script>
120 120 <script id="pbv3_park_dropdown-temp" type="text/html">
  121 + <li style="text-align: center;">
  122 + <form class="uk-form" data-uk-margin>
  123 + <div class="uk-form-icon">
  124 + <i class="uk-icon-search"></i>
  125 + <input type="text" placeholder="搜索" >
  126 + </div>
  127 + </form>
  128 + </li>
  129 + <li class="uk-nav-divider"></li>
121 130 {{each list as p i}}
122 131 <li data-code="{{p.parkCode}}" ><a>{{p.parkName}}</a></li>
123   - {{if i == 0}}
124   - <li class="uk-nav-divider"></li>
125   - {{/if}}
126 132 {{/each}}
127 133 </script>
  134 +
  135 + <script id="pbv3_park_form_devices-temp" type="text/html">
  136 + <div class="uk-animation-slide-top dynamic_devices" >
  137 + <span>{{deviceStr}}</span>
  138 + </div>
  139 + </script>
  140 +
  141 + <script id="pbv3_park_devices_dropdown-temp" type="text/html">
  142 + {{if dcs.length==1 && dcs[0].type==1}}
  143 + <div class="dynamic_devices_dropdown style1">
  144 + <div style="text-align: center;">从车辆基础信息关联设备号</div>
  145 + </div>
  146 + {{else}}
  147 + <div class="dynamic_devices_dropdown">
  148 + <ul class="uk-list">
  149 + <li>
  150 + <div>设备号</div>
  151 + <div>启用时间</div>
  152 + <div>停用时间</div>
  153 + </li>
  154 + {{each dcs as dc i}}
  155 + <li>
  156 + <div>{{dc.device}}</div>
  157 + <div>{{dc.stStr}}</div>
  158 + <div>{{dc.etStr}}</div>
  159 + </li>
  160 + {{/each}}
  161 + </ul>
  162 + </div>
  163 + {{/if}}
  164 + </script>
128 165 <script>
129 166 (function () {
130 167 var wrap = '.gps-play-back-panel-v3';
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/left.html
... ... @@ -141,9 +141,9 @@
141 141 createScrollbar();
142 142  
143 143 //show title
144   - UIkit.notify("设备端自身标识为无效的GPS点位,将不会再进入回放通路", {
  144 + /*UIkit.notify("设备端自身标识为无效的GPS点位,将不会再进入回放通路", {
145 145 status: 'info'
146   - });
  146 + });*/
147 147 });
148 148  
149 149 /**
... ... @@ -224,6 +224,23 @@
224 224  
225 225 //更新滚动条
226 226 resetScrollbar();
  227 +
  228 + /**
  229 + * 显示设备更换信息
  230 + */
  231 + var deviceStr='', fs='YYYY-MM-DD HH:mm';
  232 + for(var i=0,dc;dc=rs.dcs[i++];){
  233 + deviceStr+=dc.device + ',';
  234 + dc.stStr = moment(dc.st).format(fs);
  235 + dc.etStr = dc.et>0?moment(dc.et).format(fs):'';
  236 + }
  237 + deviceStr=deviceStr.substr(0, deviceStr.length-1);
  238 +
  239 + $('.play-back-form>.dynamic_devices', leftWrap).remove();
  240 + $('.play-back-form>.dynamic_devices_dropdown', leftWrap).remove();
  241 + var htmlStr = template('pbv3_park_form_devices-temp', {deviceStr:deviceStr}),
  242 + htmlStr2 = template('pbv3_park_devices_dropdown-temp', {dcs:rs.dcs});
  243 + $('.play-back-form', leftWrap).append(htmlStr).append(htmlStr2);
227 244 });
228 245 }
229 246 } catch (e) {
... ... @@ -270,6 +287,9 @@
270 287  
271 288 //车辆 autocomplete
272 289 gb_common.carAutocomplete($('.autocomplete-nbbm', leftWrap), gb_data_basic.carsArray());
  290 + $('.autocomplete-nbbm', leftWrap).on('input', function () {
  291 + $('.play-back-form>.dynamic_devices', leftWrap).remove();
  292 + });
273 293  
274 294 /**
275 295 * 车辆选择抽屉显示
... ... @@ -458,6 +478,12 @@
458 478 $('.abnormal_table .ct_table_body', leftWrap).html(htmlStr);
459 479 }
460 480  
  481 + $(leftWrap).on('mouseover', '.dynamic_devices', function () {
  482 + $('.dynamic_devices_dropdown', leftWrap).show();
  483 + }).on('mouseout', function () {
  484 + $('.dynamic_devices_dropdown', leftWrap).hide();
  485 + });
  486 +
461 487 return {
462 488 fillTrailTable: fillTrailTable,
463 489 fillArivalStationTable: fillArivalStationTable,
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/right.html
... ... @@ -649,7 +649,7 @@
649 649 (function (lineCode) {
650 650 //从地图模块获取停车场数据
651 651 var parks = gb_map_spatial_data.carparkArray();
652   - //将线路标准停车场排在第一个
  652 + /* //将线路标准停车场排在第一个
653 653 var information = gb_data_basic.getLineInformation(lineCode);
654 654 if(information){
655 655 var index;
... ... @@ -660,7 +660,7 @@
660 660 }
661 661 }
662 662 parks[index] = parks.splice(0, 1 , parks[index])[0];
663   - }
  663 + }*/
664 664 //渲染
665 665 var htmlStr = template('pbv3_park_dropdown-temp', {list: parks});
666 666 $('.buffer_area_form .parks_list', rightWrap).html(htmlStr);
... ...