Commit 8f6ab784953b618c569f799ff4c04c7f100f3163

Authored by 廖磊
2 parents 8722f91c 4e2bb969

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

into pudong
Showing 73 changed files with 2564 additions and 546 deletions

Too many changes to show.

To preserve performance only 73 of 80 files are displayed.

src/main/java/com/bsth/common/Constants.java
@@ -38,6 +38,7 @@ public class Constants { @@ -38,6 +38,7 @@ public class Constants {
38 38
39 public static final String SESSION_USERNAME = "sessionUserName"; 39 public static final String SESSION_USERNAME = "sessionUserName";
40 public static final String COMPANY_AUTHORITYS = "cmyAuths"; 40 public static final String COMPANY_AUTHORITYS = "cmyAuths";
  41 + public static final String STATION_AND_SECTION_COUNT = "/station/updateStationAndSectionCode";
41 42
42 /** 43 /**
43 * 解除调度指令和班次的外键约束 44 * 解除调度指令和班次的外键约束
src/main/java/com/bsth/controller/gps/GpsController.java
@@ -212,5 +212,15 @@ public class GpsController { @@ -212,5 +212,15 @@ public class GpsController {
212 map.put("pageData","10"); 212 map.put("pageData","10");
213 return gpsService.Pagequery(map); 213 return gpsService.Pagequery(map);
214 } 214 }
  215 +
  216 + /**
  217 + * 获取线路下所有车辆,包括实时设备 和 计划排班
  218 + * @param lineCode
  219 + * @return
  220 + */
  221 + @RequestMapping(value = "/allCarsByLine",method = RequestMethod.GET)
  222 + public Map<String, Object> allCarsByLine(String lineCode){
  223 + return gpsService.allCarsByLine(lineCode);
  224 + }
215 225
216 } 226 }
src/main/java/com/bsth/controller/realcontrol/ChildTaskPlanController.java
@@ -27,4 +27,9 @@ public class ChildTaskPlanController extends BaseController&lt;ChildTaskPlan, Long&gt; @@ -27,4 +27,9 @@ public class ChildTaskPlanController extends BaseController&lt;ChildTaskPlan, Long&gt;
27 public Map<String, Object> delHistory(@PathVariable("id") Long id){ 27 public Map<String, Object> delHistory(@PathVariable("id") Long id){
28 return childTaskPlanService.delHistory(id); 28 return childTaskPlanService.delHistory(id);
29 } 29 }
  30 +
  31 + @RequestMapping(value = "update", method = RequestMethod.POST)
  32 + public Map<String, Object> update(ChildTaskPlan childTask){
  33 + return childTaskPlanService.update(childTask);
  34 + }
30 } 35 }
src/main/java/com/bsth/controller/realcontrol/ServiceDataInterface.java
@@ -63,7 +63,9 @@ public class ServiceDataInterface { @@ -63,7 +63,9 @@ public class ServiceDataInterface {
63 map = new HashMap<>(); 63 map = new HashMap<>();
64 map.put("clZbh", sch.getClZbh()); 64 map.put("clZbh", sch.getClZbh());
65 map.put("jGh", sch.getjGh()); 65 map.put("jGh", sch.getjGh());
  66 + map.put("jName", sch.getjGh());
66 map.put("sGh", sch.getsGh()); 67 map.put("sGh", sch.getsGh());
  68 + map.put("sName", sch.getsGh());
67 map.put("lpName", sch.getLpName()); 69 map.put("lpName", sch.getLpName());
68 map.put("xlBm", sch.getXlBm()); 70 map.put("xlBm", sch.getXlBm());
69 map.put("xlName", sch.getXlName()); 71 map.put("xlName", sch.getXlName());
src/main/java/com/bsth/controller/realcontrol/summary/TempSchSituationController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol.summary;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.data.summary.entity.TempSchSituation;
  5 +import com.bsth.data.summary.service.TempSchSituationService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +
  11 +import javax.servlet.http.HttpServletRequest;
  12 +import javax.servlet.http.HttpServletResponse;
  13 +import java.util.Map;
  14 +
  15 +/**
  16 + * Created by panzhao on 2017/11/1.
  17 + */
  18 +@RestController
  19 +@RequestMapping("/summary/temp_sch")
  20 +public class TempSchSituationController extends BaseController<TempSchSituation, Long> {
  21 +
  22 + @Autowired
  23 + TempSchSituationService tempSchSituationService;
  24 +
  25 + @RequestMapping("excel")
  26 + public void excel(@RequestParam Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
  27 + tempSchSituationService.excel(map, request, response);
  28 + }
  29 +}
src/main/java/com/bsth/data/gpsdata_v2/GpsRealData.java
@@ -123,7 +123,13 @@ public class GpsRealData { @@ -123,7 +123,13 @@ public class GpsRealData {
123 * @Title: get @Description: TODO(线路编码获取GPS集合) @throws 123 * @Title: get @Description: TODO(线路编码获取GPS集合) @throws
124 */ 124 */
125 public List<GpsEntity> getByLine(String lineCode) { 125 public List<GpsEntity> getByLine(String lineCode) {
126 - NavigableSet<String> set = lineCode2Devices.get(lineCode); 126 + NavigableSet<String> set = lineCode2Devices.get(lineCode);//实际车载
  127 + Set<String> nbbmSet = dayOfSchedule.findCarByLineCode(lineCode);//计划用车
  128 +
  129 + Map<String, String> nbbm2deviceMap = BasicData.deviceId2NbbmMap.inverse();
  130 + for(String nbbm : nbbmSet){
  131 + set.add(nbbm2deviceMap.get(nbbm));
  132 + }
127 133
128 List<GpsEntity> rs = new ArrayList<>(); 134 List<GpsEntity> rs = new ArrayList<>();
129 GpsEntity gps; 135 GpsEntity gps;
@@ -135,14 +141,28 @@ public class GpsRealData { @@ -135,14 +141,28 @@ public class GpsRealData {
135 continue; 141 continue;
136 142
137 sch = dayOfSchedule.execPlanMap().get(gps.getNbbm()); 143 sch = dayOfSchedule.execPlanMap().get(gps.getNbbm());
138 - if (null != sch) 144 + if (null != sch){
139 gps.setSchId(sch.getId()); 145 gps.setSchId(sch.getId());
  146 + if(!sch.getXlBm().equals(lineCode)){
  147 + //车辆在其他线路营运
  148 + gps.setRemark("执行 " + sch.getXlName() + " " + sch.getDfsj() + " 班次");
  149 + gps.setPlanCode(sch.getXlBm());
  150 + }
  151 + else
  152 + gps.setRemark(null);
  153 + }else
  154 + gps.setRemark(null);
  155 +
140 rs.add(gps); 156 rs.add(gps);
141 } 157 }
142 158
143 return rs; 159 return rs;
144 } 160 }
145 161
  162 + public static Set<String> findDevices(String lineCode){
  163 + return lineCode2Devices.get(lineCode);
  164 + }
  165 +
146 public List<GpsEntity> get(List<String> pArray) { 166 public List<GpsEntity> get(List<String> pArray) {
147 List<GpsEntity> list = new ArrayList<>(); 167 List<GpsEntity> list = new ArrayList<>();
148 168
src/main/java/com/bsth/data/gpsdata_v2/cache/GeoCacheData.java
@@ -139,7 +139,7 @@ public class GeoCacheData { @@ -139,7 +139,7 @@ public class GeoCacheData {
139 139
140 private void loadTccMapData(){ 140 private void loadTccMapData(){
141 //加载停车场数据 141 //加载停车场数据
142 - String sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null"; 142 + String sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null and destroy=0";
143 List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql); 143 List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);
144 Map<String, Polygon> tccTempMap = new HashMap<>(); 144 Map<String, Polygon> tccTempMap = new HashMap<>();
145 145
src/main/java/com/bsth/data/gpsdata_v2/entity/GpsEntity.java
@@ -100,6 +100,9 @@ public class GpsEntity implements Cloneable{ @@ -100,6 +100,9 @@ public class GpsEntity implements Cloneable{
100 */ 100 */
101 private int source = -1; 101 private int source = -1;
102 102
  103 + private String remark;
  104 + private String planCode;
  105 +
103 public Object clone() { 106 public Object clone() {
104 try { 107 try {
105 return super.clone(); 108 return super.clone();
@@ -360,4 +363,20 @@ public class GpsEntity implements Cloneable{ @@ -360,4 +363,20 @@ public class GpsEntity implements Cloneable{
360 public void setPremiseCode(String premiseCode) { 363 public void setPremiseCode(String premiseCode) {
361 this.premiseCode = premiseCode; 364 this.premiseCode = premiseCode;
362 } 365 }
  366 +
  367 + public String getRemark() {
  368 + return remark;
  369 + }
  370 +
  371 + public void setRemark(String remark) {
  372 + this.remark = remark;
  373 + }
  374 +
  375 + public String getPlanCode() {
  376 + return planCode;
  377 + }
  378 +
  379 + public void setPlanCode(String planCode) {
  380 + this.planCode = planCode;
  381 + }
363 } 382 }
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
@@ -159,7 +159,7 @@ public class InStationProcess { @@ -159,7 +159,7 @@ public class InStationProcess {
159 logger.info("车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual()); 159 logger.info("车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual());
160 160
161 //清除车辆误点调整监听 161 //清除车辆误点调整监听
162 - LateAdjustHandle.remove(nbbm); 162 + LateAdjustHandle.remove(sch);
163 163
164 //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时) 164 //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时)
165 transformUpDown(gps, next); 165 transformUpDown(gps, next);
src/main/java/com/bsth/data/gpsdata_v2/handlers/OutStationProcess.java
@@ -113,7 +113,7 @@ public class OutStationProcess { @@ -113,7 +113,7 @@ public class OutStationProcess {
113 dayOfSchedule.save(sch); 113 dayOfSchedule.save(sch);
114 114
115 //清理应发未发标记 115 //清理应发未发标记
116 - LateAdjustHandle.remove(sch.getClZbh()); 116 + LateAdjustHandle.remove(sch);
117 117
118 //发车的时候,同步一下状态 118 //发车的时候,同步一下状态
119 if (!gps.isService() && !dayOfSchedule.emptyService(sch)) 119 if (!gps.isService() && !dayOfSchedule.emptyService(sch))
src/main/java/com/bsth/data/line_version/EnableRouteVersionHandler.java
@@ -59,6 +59,25 @@ public class EnableRouteVersionHandler { @@ -59,6 +59,25 @@ public class EnableRouteVersionHandler {
59 } 59 }
60 } 60 }
61 61
  62 + public void sync(String lineCode, int version){
  63 + //编程式事务
  64 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
  65 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  66 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  67 + TransactionStatus status = tran.getTransaction(def);
  68 +
  69 +
  70 + try{
  71 + enableStation(lineCode, version);
  72 + enableRoad(lineCode, version);
  73 +
  74 + tran.commit(status);
  75 + }catch (Exception e){
  76 + tran.rollback(status);
  77 + logger.error("", e);
  78 + }
  79 + }
  80 +
62 /** 81 /**
63 * 启用新版本站点 82 * 启用新版本站点
64 * @param lineCode 83 * @param lineCode
src/main/java/com/bsth/data/line_version/thread/FixedEnableVerionsThread.java
@@ -14,7 +14,7 @@ import java.util.Map; @@ -14,7 +14,7 @@ import java.util.Map;
14 * Created by panzhao on 2017/12/28. 14 * Created by panzhao on 2017/12/28.
15 */ 15 */
16 @Component 16 @Component
17 -public class FixedEnableVerionsThread extends Thread{ 17 +public class FixedEnableVerionsThread extends Thread {
18 18
19 @Autowired 19 @Autowired
20 JdbcTemplate jdbcTemplate; 20 JdbcTemplate jdbcTemplate;
@@ -26,24 +26,39 @@ public class FixedEnableVerionsThread extends Thread{ @@ -26,24 +26,39 @@ public class FixedEnableVerionsThread extends Thread{
26 26
27 @Override 27 @Override
28 public void run() { 28 public void run() {
29 - try{ 29 + try {
30 30
31 String sql = "select * from bsth_c_line_versions where status=2 and start_date<=SYSDATE()"; 31 String sql = "select * from bsth_c_line_versions where status=2 and start_date<=SYSDATE()";
32 32
33 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); 33 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
34 - if(list.size() == 0)  
35 - return; 34 + if (list.size() > 0) {
  35 + String lineCode;
  36 + int version;
36 37
37 - String lineCode;  
38 - int version; 38 + for (Map<String, Object> map : list) {
  39 + lineCode = map.get("line_code").toString();
  40 + version = Integer.parseInt(map.get("versions").toString());
39 41
40 - for(Map<String, Object> map : list){  
41 - lineCode = map.get("line_code").toString();  
42 - version = Integer.parseInt(map.get("versions").toString()); 42 + enableRouteVersionHandler.enable(lineCode, version);
  43 + }
  44 + }
  45 +
  46 +
  47 + //自动同步当前启用版本
  48 + long t = System.currentTimeMillis();
  49 + List<String> syncs = jdbcTemplate.queryForList("SELECT CONCAT(line_code,'_',versions) FROM bsth_c_line_versions WHERE STATUS = 1 AND CONCAT(line_code, '_', versions) IN (SELECT CONCAT(line_code, '_', version) FROM logger_route_synchro where t < " + t + ")", String.class);
43 50
44 - enableRouteVersionHandler.enable(lineCode, version); 51 + String[] ks;
  52 + for (String keys : syncs) {
  53 + ks = keys.split("_");
  54 +
  55 + enableRouteVersionHandler.sync(ks[0], Integer.parseInt(ks[1]));
  56 +
  57 + logger.info("同步线路 " + ks[0] + " 版本:" + ks[1]);
45 } 58 }
46 - }catch (Exception e){ 59 +
  60 + jdbcTemplate.update("delete from logger_route_synchro where t < " + t);
  61 + } catch (Exception e) {
47 logger.error("", e); 62 logger.error("", e);
48 } 63 }
49 } 64 }
src/main/java/com/bsth/data/pilot80/PilotReport.java
@@ -20,9 +20,7 @@ import org.slf4j.LoggerFactory; @@ -20,9 +20,7 @@ import org.slf4j.LoggerFactory;
20 import org.springframework.beans.factory.annotation.Autowired; 20 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.stereotype.Component; 21 import org.springframework.stereotype.Component;
22 22
23 -import java.util.ArrayList;  
24 -import java.util.Collection;  
25 -import java.util.List; 23 +import java.util.*;
26 import java.util.concurrent.ConcurrentHashMap; 24 import java.util.concurrent.ConcurrentHashMap;
27 25
28 /** 26 /**
@@ -55,10 +53,16 @@ public class PilotReport { @@ -55,10 +53,16 @@ public class PilotReport {
55 53
56 private static ConcurrentHashMap<Integer, D80> d80Maps; 54 private static ConcurrentHashMap<Integer, D80> d80Maps;
57 55
  56 + /**
  57 + * 设备 ——> 最后一条请求出场记录
  58 + */
  59 + public static ConcurrentHashMap<String, D80> qqccMap;
  60 +
58 Logger logger = LoggerFactory.getLogger(PilotReport.class); 61 Logger logger = LoggerFactory.getLogger(PilotReport.class);
59 62
60 static { 63 static {
61 d80Maps = new ConcurrentHashMap<>(); 64 d80Maps = new ConcurrentHashMap<>();
  65 + qqccMap = new ConcurrentHashMap<>();
62 } 66 }
63 67
64 public void report(D80 d80) { 68 public void report(D80 d80) {
@@ -81,6 +85,7 @@ public class PilotReport { @@ -81,6 +85,7 @@ public class PilotReport {
81 switch (d80.getData().getRequestCode()) { 85 switch (d80.getData().getRequestCode()) {
82 //出场请求 86 //出场请求
83 case 0xA3: 87 case 0xA3:
  88 + qqccMap.put(d80.getDeviceId(), d80);
84 ScheduleRealInfo outSch = dayOfSchedule.searchNearByBcType(nbbm, "out"); 89 ScheduleRealInfo outSch = dayOfSchedule.searchNearByBcType(nbbm, "out");
85 //如果有对应出场班次 90 //如果有对应出场班次
86 if (outSch != null && StringUtils.isEmpty(outSch.getFcsjActual())) { 91 if (outSch != null && StringUtils.isEmpty(outSch.getFcsjActual())) {
@@ -241,6 +246,7 @@ public class PilotReport { @@ -241,6 +246,7 @@ public class PilotReport {
241 List<D80> rems = findByLine(lineCode); 246 List<D80> rems = findByLine(lineCode);
242 for (D80 d80 : rems) { 247 for (D80 d80 : rems) {
243 d80Maps.remove(d80.getId()); 248 d80Maps.remove(d80.getId());
  249 + qqccMap.remove(d80.getDeviceId());
244 } 250 }
245 251
246 rems.clear(); 252 rems.clear();
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -15,6 +15,7 @@ import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; @@ -15,6 +15,7 @@ import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
15 import com.bsth.service.schedule.SchedulePlanInfoService; 15 import com.bsth.service.schedule.SchedulePlanInfoService;
16 import com.bsth.websocket.handler.SendUtils; 16 import com.bsth.websocket.handler.SendUtils;
17 import com.google.common.collect.ArrayListMultimap; 17 import com.google.common.collect.ArrayListMultimap;
  18 +import com.google.common.collect.HashMultimap;
18 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
19 import org.joda.time.format.DateTimeFormat; 20 import org.joda.time.format.DateTimeFormat;
20 import org.joda.time.format.DateTimeFormatter; 21 import org.joda.time.format.DateTimeFormatter;
@@ -55,6 +56,9 @@ public class DayOfSchedule { @@ -55,6 +56,9 @@ public class DayOfSchedule {
55 // 按车辆分组的班次数据 56 // 按车辆分组的班次数据
56 private static ArrayListMultimap<String, ScheduleRealInfo> nbbmScheduleMap; 57 private static ArrayListMultimap<String, ScheduleRealInfo> nbbmScheduleMap;
57 58
  59 + //按线路分组计划用车
  60 + private static HashMultimap<String, String> lineNbbmsMap;
  61 +
58 //按路牌分组的班次数据 线路编码_路牌名称 ——> 班次list 62 //按路牌分组的班次数据 线路编码_路牌名称 ——> 班次list
59 private static ArrayListMultimap<String, ScheduleRealInfo> lpScheduleMap; 63 private static ArrayListMultimap<String, ScheduleRealInfo> lpScheduleMap;
60 64
@@ -199,6 +203,8 @@ public class DayOfSchedule { @@ -199,6 +203,8 @@ public class DayOfSchedule {
199 reCalcExecPlan(nbbm); 203 reCalcExecPlan(nbbm);
200 } 204 }
201 205
  206 + //分组计划用车
  207 + reCalcLineNbbms();
202 // 页面 翻班通知 208 // 页面 翻班通知
203 //sendUtils.shiftSchedule(lineCode); 209 //sendUtils.shiftSchedule(lineCode);
204 } catch (Exception e) { 210 } catch (Exception e) {
@@ -543,15 +549,15 @@ public class DayOfSchedule { @@ -543,15 +549,15 @@ public class DayOfSchedule {
543 * @Description: TODO(线路下运营的车辆) 549 * @Description: TODO(线路下运营的车辆)
544 */ 550 */
545 public Set<String> findCarByLineCode(String lineCode) { 551 public Set<String> findCarByLineCode(String lineCode) {
546 - Set<String> rs = new HashSet<>(); 552 + /*Set<String> rs = new HashSet<>();
547 553
548 Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values(); 554 Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();
549 for (ScheduleRealInfo sch : schs) { 555 for (ScheduleRealInfo sch : schs) {
550 if (sch.getXlBm().equals(lineCode)) 556 if (sch.getXlBm().equals(lineCode))
551 rs.add(sch.getClZbh()); 557 rs.add(sch.getClZbh());
552 } 558 }
553 -  
554 - return rs; 559 +*/
  560 + return lineNbbmsMap.get(lineCode);
555 } 561 }
556 562
557 public List<ScheduleRealInfo> findByNbbm(String nbbm) { 563 public List<ScheduleRealInfo> findByNbbm(String nbbm) {
@@ -908,6 +914,8 @@ public class DayOfSchedule { @@ -908,6 +914,8 @@ public class DayOfSchedule {
908 //重新计算车辆当前执行班次 914 //重新计算车辆当前执行班次
909 reCalcExecPlan(newClZbh); 915 reCalcExecPlan(newClZbh);
910 reCalcExecPlan(sch.getClZbh()); 916 reCalcExecPlan(sch.getClZbh());
  917 + //重新分组计划用车
  918 + reCalcLineNbbms();
911 return ups; 919 return ups;
912 } 920 }
913 921
@@ -970,7 +978,6 @@ public class DayOfSchedule { @@ -970,7 +978,6 @@ public class DayOfSchedule {
970 978
971 //删除班次数据 979 //删除班次数据
972 removeRealSch(lineCode, rq); 980 removeRealSch(lineCode, rq);
973 - //删除相关班次修正记录  
974 981
975 } 982 }
976 rs.put("status", ResponseCode.SUCCESS); 983 rs.put("status", ResponseCode.SUCCESS);
@@ -1083,6 +1090,20 @@ public class DayOfSchedule { @@ -1083,6 +1090,20 @@ public class DayOfSchedule {
1083 return id2SchedulMap.size(); 1090 return id2SchedulMap.size();
1084 } 1091 }
1085 1092
  1093 + /**
  1094 + * 重新计算线路计划用车
  1095 + */
  1096 + public void reCalcLineNbbms(){
  1097 + HashMultimap<String, String> multimap = HashMultimap.create();
  1098 +
  1099 + Collection<ScheduleRealInfo> schs = nbbmScheduleMap.values();
  1100 + for (ScheduleRealInfo sch : schs) {
  1101 + multimap.put(sch.getXlBm(), sch.getClZbh());
  1102 + }
  1103 +
  1104 + lineNbbmsMap = multimap;
  1105 + }
  1106 +
1086 public String sizeString(){ 1107 public String sizeString(){
1087 return id2SchedulMap.size() + "/" + nbbmScheduleMap.size(); 1108 return id2SchedulMap.size() + "/" + nbbmScheduleMap.size();
1088 } 1109 }
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
@@ -117,7 +117,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ @@ -117,7 +117,7 @@ public class LateAdjustHandle implements ApplicationContextAware{
117 } 117 }
118 } 118 }
119 119
120 - public static void remove(String nbbm){ 120 +/* public static void remove(String nbbm){
121 if(lateSchMap.containsKey(nbbm)){ 121 if(lateSchMap.containsKey(nbbm)){
122 ScheduleRealInfo sch = lateSchMap.get(nbbm); 122 ScheduleRealInfo sch = lateSchMap.get(nbbm);
123 sch.setLate2(false); 123 sch.setLate2(false);
@@ -127,7 +127,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ @@ -127,7 +127,7 @@ public class LateAdjustHandle implements ApplicationContextAware{
127 lateSchMap.remove(nbbm); 127 lateSchMap.remove(nbbm);
128 logger.info("移除误点调整 nbbm -" + nbbm); 128 logger.info("移除误点调整 nbbm -" + nbbm);
129 } 129 }
130 - } 130 + }*/
131 131
132 /** 132 /**
133 * 车辆到站 133 * 车辆到站
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
@@ -74,14 +74,6 @@ public class ScheduleRefreshThread extends Thread{ @@ -74,14 +74,6 @@ public class ScheduleRefreshThread extends Thread{
74 //重载排班数据 74 //重载排班数据
75 dayOfSchedule.reloadSch(lineCode, currSchDate, false); 75 dayOfSchedule.reloadSch(lineCode, currSchDate, false);
76 logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size()); 76 logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size());
77 -  
78 -  
79 - //校验一下数据库和缓存的数据  
80 - /*int dbCount = dayOfSchedule.dbCount(lineCode, currSchDate);  
81 - logger.info(lineCode + " 数据库数量:" + dbCount);  
82 - if(dbCount != dayOfSchedule.findByLineCode(lineCode).size()){  
83 - logger.error("异常异常异常,,数据库和缓存数量不一致," + lineCode);  
84 - }*/  
85 } 77 }
86 }catch (Exception e){ 78 }catch (Exception e){
87 logger.error("班次更新失败!! -" + lineCode, e); 79 logger.error("班次更新失败!! -" + lineCode, e);
src/main/java/com/bsth/data/summary/entity/TempSchSituation.java 0 → 100644
  1 +package com.bsth.data.summary.entity;
  2 +
  3 +import javax.persistence.Entity;
  4 +import javax.persistence.Id;
  5 +import javax.persistence.Table;
  6 +
  7 +/**
  8 + * 临加情况
  9 + * Created by panzhao on 2017/10/31.
  10 + */
  11 +@Entity
  12 +@Table(name = "z_calc_temp_detail")
  13 +public class TempSchSituation {
  14 +
  15 + @Id
  16 + private Long id;
  17 +
  18 + private String rq;
  19 +
  20 + private String gsBm;
  21 +
  22 + private String fgsBm;
  23 +
  24 + private String lineCode;
  25 +
  26 + private String lineName;
  27 +
  28 + private String nbbm;
  29 +
  30 + private String jGh;
  31 +
  32 + private String sGh;
  33 +
  34 + private String reason;
  35 +
  36 + private int size;
  37 +
  38 + private Double mileage;
  39 +
  40 + private Long t;
  41 +
  42 + private String remark;
  43 +
  44 + private String idsStr;
  45 +
  46 + public Long getId() {
  47 + return id;
  48 + }
  49 +
  50 + public void setId(Long id) {
  51 + this.id = id;
  52 + }
  53 +
  54 + public String getRq() {
  55 + return rq;
  56 + }
  57 +
  58 + public void setRq(String rq) {
  59 + this.rq = rq;
  60 + }
  61 +
  62 + public String getLineCode() {
  63 + return lineCode;
  64 + }
  65 +
  66 + public void setLineCode(String lineCode) {
  67 + this.lineCode = lineCode;
  68 + }
  69 +
  70 + public String getLineName() {
  71 + return lineName;
  72 + }
  73 +
  74 + public void setLineName(String lineName) {
  75 + this.lineName = lineName;
  76 + }
  77 +
  78 + public String getNbbm() {
  79 + return nbbm;
  80 + }
  81 +
  82 + public void setNbbm(String nbbm) {
  83 + this.nbbm = nbbm;
  84 + }
  85 +
  86 + public String getjGh() {
  87 + return jGh;
  88 + }
  89 +
  90 + public void setjGh(String jGh) {
  91 + this.jGh = jGh;
  92 + }
  93 +
  94 + public String getsGh() {
  95 + return sGh;
  96 + }
  97 +
  98 + public void setsGh(String sGh) {
  99 + this.sGh = sGh;
  100 + }
  101 +
  102 + public String getReason() {
  103 + return reason;
  104 + }
  105 +
  106 + public void setReason(String reason) {
  107 + this.reason = reason;
  108 + }
  109 +
  110 + public int getSize() {
  111 + return size;
  112 + }
  113 +
  114 + public void setSize(int size) {
  115 + this.size = size;
  116 + }
  117 +
  118 + public Double getMileage() {
  119 + return mileage;
  120 + }
  121 +
  122 + public void setMileage(Double mileage) {
  123 + this.mileage = mileage;
  124 + }
  125 +
  126 + public Long getT() {
  127 + return t;
  128 + }
  129 +
  130 + public void setT(Long t) {
  131 + this.t = t;
  132 + }
  133 +
  134 + public String getRemark() {
  135 + return remark;
  136 + }
  137 +
  138 + public void setRemark(String remark) {
  139 + this.remark = remark;
  140 + }
  141 +
  142 + public String getIdsStr() {
  143 + return idsStr;
  144 + }
  145 +
  146 + public void setIdsStr(String idsStr) {
  147 + this.idsStr = idsStr;
  148 + }
  149 +
  150 + public String getGsBm() {
  151 + return gsBm;
  152 + }
  153 +
  154 + public void setGsBm(String gsBm) {
  155 + this.gsBm = gsBm;
  156 + }
  157 +
  158 + public String getFgsBm() {
  159 + return fgsBm;
  160 + }
  161 +
  162 + public void setFgsBm(String fgsBm) {
  163 + this.fgsBm = fgsBm;
  164 + }
  165 +}
src/main/java/com/bsth/data/summary/repository/TempSchSituationRepository.java 0 → 100644
  1 +package com.bsth.data.summary.repository;
  2 +
  3 +import com.bsth.data.summary.entity.TempSchSituation;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/11/1.
  9 + */
  10 +@Repository
  11 +public interface TempSchSituationRepository extends BaseRepository<TempSchSituation, Long> {
  12 +}
src/main/java/com/bsth/data/summary/service/TempSchSituationService.java 0 → 100644
  1 +package com.bsth.data.summary.service;
  2 +
  3 +import com.bsth.data.summary.entity.TempSchSituation;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +import javax.servlet.http.HttpServletRequest;
  7 +import javax.servlet.http.HttpServletResponse;
  8 +import java.util.Map;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/11/1.
  12 + */
  13 +public interface TempSchSituationService extends BaseService<TempSchSituation, Long> {
  14 + void excel(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response);
  15 +}
0 \ No newline at end of file 16 \ No newline at end of file
src/main/java/com/bsth/data/summary/service/impl/DestroySituationServiceImpl.java
@@ -118,7 +118,7 @@ public class DestroySituationServiceImpl extends BaseServiceImpl&lt;DestroySituatio @@ -118,7 +118,7 @@ public class DestroySituationServiceImpl extends BaseServiceImpl&lt;DestroySituatio
118 row.createCell(9).setCellValue(dys.getRemark()); 118 row.createCell(9).setCellValue(dys.getRemark());
119 } 119 }
120 120
121 - String name = list.get(0).getLineName(); 121 + String name = "";//list.get(0).getLineName();
122 wb.setSheetName(0, name + "烂班明细"); 122 wb.setSheetName(0, name + "烂班明细");
123 //response 输出 123 //response 输出
124 String filename = name + map.get("rq_ge") + "至" + map.get("rq_le") + "烂班明细情况.xls"; 124 String filename = name + map.get("rq_ge") + "至" + map.get("rq_le") + "烂班明细情况.xls";
src/main/java/com/bsth/data/summary/service/impl/TempSchSituationServiceImpl.java 0 → 100644
  1 +package com.bsth.data.summary.service.impl;
  2 +
  3 +import com.bsth.data.summary.entity.TempSchSituation;
  4 +import com.bsth.data.summary.service.TempSchSituationService;
  5 +import com.bsth.data.utils.CustomStringUtils;
  6 +import com.bsth.service.impl.BaseServiceImpl;
  7 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  8 +import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  9 +import org.apache.poi.ss.usermodel.Row;
  10 +import org.apache.poi.ss.usermodel.Sheet;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +import org.springframework.stereotype.Service;
  14 +
  15 +import javax.servlet.http.HttpServletRequest;
  16 +import javax.servlet.http.HttpServletResponse;
  17 +import java.io.FileInputStream;
  18 +import java.io.OutputStream;
  19 +import java.net.URLEncoder;
  20 +import java.text.SimpleDateFormat;
  21 +import java.util.*;
  22 +
  23 +/**
  24 + * Created by panzhao on 2017/11/1.
  25 + */
  26 +@Service
  27 +public class TempSchSituationServiceImpl extends BaseServiceImpl<TempSchSituation, Long> implements TempSchSituationService {
  28 +
  29 + Logger logger = LoggerFactory.getLogger(this.getClass());
  30 +
  31 + @Override
  32 + public Iterable<TempSchSituation> list(Map<String, Object> map) {
  33 + List<TempSchSituation> list = (List<TempSchSituation>) super.list(map);
  34 +
  35 + //排序
  36 + Collections.sort(list, new Comparator<TempSchSituation>() {
  37 + @Override
  38 + public int compare(TempSchSituation o1, TempSchSituation o2) {
  39 + int i = o1.getRq().compareTo(o2.getRq());
  40 + if(i != 0)
  41 + return i;
  42 +
  43 + i = o1.getLineName().compareTo(o2.getLineName());
  44 + if(i != 0)
  45 + return i;
  46 +
  47 + i = (int) (o1.getT() - o2.getT());
  48 + if(i != 0)
  49 + return i;
  50 +
  51 + i = o1.getReason().compareTo(o2.getReason());
  52 +
  53 + return i;
  54 + }
  55 + });
  56 + return list;
  57 + }
  58 +
  59 + @Override
  60 + public void excel(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
  61 + try {
  62 + map.put("rq_le", CustomStringUtils.maxEndTime(map.get("rq_ge").toString()
  63 + , map.get("rq_le").toString(), 62));
  64 +
  65 + List<TempSchSituation> list = (List<TempSchSituation>) super.list(map);
  66 +
  67 + if(list.size() == 0){
  68 + response.setHeader("Content-type", "text/html;charset=UTF-8");
  69 + response.getWriter().print("<span style='color:red;font-size:24px;'>根据查询条件没有搜索到数据,别导了!</span>");
  70 + return ;
  71 + }
  72 +
  73 + //排序
  74 + Collections.sort(list, new Comparator<TempSchSituation>() {
  75 + @Override
  76 + public int compare(TempSchSituation o1, TempSchSituation o2) {
  77 + int i = o1.getRq().compareTo(o2.getRq());
  78 + if(i != 0)
  79 + return i;
  80 +
  81 + i = o1.getLineName().compareTo(o2.getLineName());
  82 + if(i != 0)
  83 + return i;
  84 +
  85 + i = (int) (o1.getT() - o2.getT());
  86 + if(i != 0)
  87 + return i;
  88 +
  89 + i = o1.getReason().compareTo(o2.getReason());
  90 +
  91 + return i;
  92 + }
  93 + });
  94 +
  95 + //输出excel
  96 + String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
  97 + String filePath = basePath + "/static/pages/summary/excel/临加明细情况.xls";
  98 + POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
  99 + HSSFWorkbook wb = new HSSFWorkbook(fs);
  100 +
  101 + //写入数据
  102 + Sheet sheet = wb.getSheetAt(0);
  103 + Row row;
  104 + TempSchSituation tss;
  105 + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
  106 + for(int i = 0; i < list.size(); i++){
  107 + tss = list.get(i);
  108 + row = sheet.createRow(i + 1);
  109 + row.createCell(0).setCellValue(tss.getRq());
  110 + row.createCell(1).setCellValue(tss.getLineName());
  111 + row.createCell(2).setCellValue(tss.getNbbm());
  112 + row.createCell(3).setCellValue(tss.getjGh());
  113 + row.createCell(4).setCellValue(tss.getsGh());
  114 + row.createCell(5).setCellValue(tss.getSize());
  115 + row.createCell(6).setCellValue(tss.getMileage());
  116 + row.createCell(7).setCellValue(sdf.format(new Date(tss.getT())));
  117 + row.createCell(8).setCellValue(tss.getRemark());
  118 + }
  119 +
  120 + String name = "";//list.get(0).getLineName();
  121 + wb.setSheetName(0, name + "临加明细");
  122 + //response 输出
  123 + String filename = name + map.get("rq_ge") + "至" + map.get("rq_le") + "临加明细情况.xls";
  124 + response.setContentType("application/x-msdownload");
  125 + response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
  126 +
  127 + OutputStream os = response.getOutputStream();
  128 + wb.write(os);
  129 + os.flush();
  130 + os.close();
  131 + } catch (Exception e) {
  132 + logger.error("", e);
  133 + }
  134 + }
  135 +
  136 +}
0 \ No newline at end of file 137 \ No newline at end of file
src/main/java/com/bsth/filter/BaseFilter.java
@@ -17,7 +17,7 @@ public abstract class BaseFilter implements Filter { @@ -17,7 +17,7 @@ public abstract class BaseFilter implements Filter {
17 * 白名单 17 * 白名单
18 */ 18 */
19 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE, 19 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE,
20 - Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL }; 20 + Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL, Constants.STATION_AND_SECTION_COUNT };
21 21
22 @Override 22 @Override
23 public void destroy() { 23 public void destroy() {
src/main/java/com/bsth/security/WebSecurityConfig.java
@@ -36,7 +36,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @@ -36,7 +36,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
36 public void configure(WebSecurity web) throws Exception { 36 public void configure(WebSecurity web) throws Exception {
37 // 白名单 37 // 白名单
38 web.ignoring().antMatchers(Constants.LOGIN_PAGE, Constants.LOGIN, Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.CAPTCHA, 38 web.ignoring().antMatchers(Constants.LOGIN_PAGE, Constants.LOGIN, Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.CAPTCHA,
39 - Constants.SERVICE_INTERFACE, Constants.METRONIC_URL, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL); 39 + Constants.SERVICE_INTERFACE, Constants.METRONIC_URL, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL,Constants.STATION_AND_SECTION_COUNT);
40 } 40 }
41 41
42 @Override 42 @Override
src/main/java/com/bsth/security/filter/LoginInterceptor.java
@@ -33,7 +33,7 @@ public class LoginInterceptor implements Filter { @@ -33,7 +33,7 @@ public class LoginInterceptor implements Filter {
33 * 相比于 BaseFilter,此处对线调GPS请求进行了拦截验证 33 * 相比于 BaseFilter,此处对线调GPS请求进行了拦截验证
34 */ 34 */
35 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE, 35 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE,
36 - Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL }; 36 + Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL,Constants.STATION_AND_SECTION_COUNT };
37 37
38 38
39 @Override 39 @Override
src/main/java/com/bsth/service/geo_data/impl/GeoDataServiceImpl.java
@@ -174,14 +174,17 @@ public class GeoDataServiceImpl implements GeoDataService { @@ -174,14 +174,17 @@ public class GeoDataServiceImpl implements GeoDataService {
174 int id = Integer.parseInt(map.get("id").toString()); 174 int id = Integer.parseInt(map.get("id").toString());
175 String name = map.get("stationName").toString(); 175 String name = map.get("stationName").toString();
176 String code = map.get("stationCode").toString(); 176 String code = map.get("stationCode").toString();
177 - //String lineCode = map.get("lineCode").toString();  
178 - //String stationMark = map.get("stationMark").toString(); 177 + String lineCode = map.get("lineCode").toString();
  178 + String versions = map.get("versions").toString();
179 179
180 //更新历史站点路由 180 //更新历史站点路由
181 jdbcTemplate.update("update bsth_c_ls_stationroute set station_name=? where id=?", name, id); 181 jdbcTemplate.update("update bsth_c_ls_stationroute set station_name=? where id=?", name, id);
182 //更新站点 182 //更新站点
183 jdbcTemplate.update("update bsth_c_station set station_name=? where station_cod=?", name, code); 183 jdbcTemplate.update("update bsth_c_station set station_name=? where station_cod=?", name, code);
184 184
  185 + //写一条走向变更记录
  186 + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), lineCode, versions);
  187 +
185 tran.commit(status); 188 tran.commit(status);
186 189
187 rs.put("station", findOne(id)); 190 rs.put("station", findOne(id));
@@ -279,6 +282,10 @@ public class GeoDataServiceImpl implements GeoDataService { @@ -279,6 +282,10 @@ public class GeoDataServiceImpl implements GeoDataService {
279 } 282 }
280 }); 283 });
281 284
  285 +
  286 + //写一条走向变更记录
  287 + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), lineCode, versions);
  288 +
282 tran.commit(status); 289 tran.commit(status);
283 290
284 //返回更新之后的数据 291 //返回更新之后的数据
@@ -765,6 +772,9 @@ public class GeoDataServiceImpl implements GeoDataService { @@ -765,6 +772,9 @@ public class GeoDataServiceImpl implements GeoDataService {
765 } 772 }
766 }); 773 });
767 774
  775 + //写一条走向变更记录
  776 + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), lineCode, versions);
  777 +
768 tran.commit(status); 778 tran.commit(status);
769 779
770 //返回更新之后的数据 780 //返回更新之后的数据
@@ -874,6 +884,9 @@ public class GeoDataServiceImpl implements GeoDataService { @@ -874,6 +884,9 @@ public class GeoDataServiceImpl implements GeoDataService {
874 } 884 }
875 }); 885 });
876 886
  887 + //写一条走向变更记录
  888 + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), station.getLineCode(), station.getVersions());
  889 +
877 tran.commit(status); 890 tran.commit(status);
878 891
879 //返回更新之后的数据 892 //返回更新之后的数据
@@ -897,6 +910,9 @@ public class GeoDataServiceImpl implements GeoDataService { @@ -897,6 +910,9 @@ public class GeoDataServiceImpl implements GeoDataService {
897 String sql = "update bsth_c_ls_sectionroute set destroy=1 where id=?"; 910 String sql = "update bsth_c_ls_sectionroute set destroy=1 where id=?";
898 jdbcTemplate.update(sql, road.getId()); 911 jdbcTemplate.update(sql, road.getId());
899 912
  913 + //写一条走向变更记录
  914 + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), road.getLineCode(), road.getVersions());
  915 +
900 //返回更新之后的数据 916 //返回更新之后的数据
901 List<GeoRoad> list = findRoadByUpdown(road.getLineCode(), road.getDirections(), road.getVersions()); 917 List<GeoRoad> list = findRoadByUpdown(road.getLineCode(), road.getDirections(), road.getVersions());
902 rs.put("list", list); 918 rs.put("list", list);
src/main/java/com/bsth/service/gps/GpsService.java
@@ -45,4 +45,6 @@ public interface GpsService { @@ -45,4 +45,6 @@ public interface GpsService {
45 String enddate) throws ParseException; 45 String enddate) throws ParseException;
46 46
47 Map<String, Object> Pagequery(Map<String, Object> map); 47 Map<String, Object> Pagequery(Map<String, Object> map);
  48 +
  49 + Map<String,Object> allCarsByLine(String lineCode);
48 } 50 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -7,15 +7,16 @@ import com.bsth.data.gpsdata_v2.GpsRealData; @@ -7,15 +7,16 @@ 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.entity.GpsEntity; 8 import com.bsth.data.gpsdata_v2.entity.GpsEntity;
9 import com.bsth.data.gpsdata_v2.utils.GeoUtils; 9 import com.bsth.data.gpsdata_v2.utils.GeoUtils;
  10 +import com.bsth.data.pilot80.PilotReport;
10 import com.bsth.data.safe_driv.SafeDriv; 11 import com.bsth.data.safe_driv.SafeDriv;
11 import com.bsth.data.safe_driv.SafeDrivCenter; 12 import com.bsth.data.safe_driv.SafeDrivCenter;
12 import com.bsth.data.schedule.DayOfSchedule; 13 import com.bsth.data.schedule.DayOfSchedule;
  14 +import com.bsth.entity.directive.D80;
13 import com.bsth.entity.realcontrol.ScheduleRealInfo; 15 import com.bsth.entity.realcontrol.ScheduleRealInfo;
14 import com.bsth.repository.CarParkRepository; 16 import com.bsth.repository.CarParkRepository;
15 import com.bsth.repository.StationRepository; 17 import com.bsth.repository.StationRepository;
16 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 18 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
17 import com.bsth.service.gps.entity.*; 19 import com.bsth.service.gps.entity.*;
18 -import com.bsth.util.DateUtils;  
19 import com.bsth.util.TransGPS; 20 import com.bsth.util.TransGPS;
20 import com.bsth.util.TransGPS.Location; 21 import com.bsth.util.TransGPS.Location;
21 import com.bsth.util.db.DBUtils_MS; 22 import com.bsth.util.db.DBUtils_MS;
@@ -32,6 +33,7 @@ import org.slf4j.Logger; @@ -32,6 +33,7 @@ import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory; 33 import org.slf4j.LoggerFactory;
33 import org.springframework.beans.factory.annotation.Autowired; 34 import org.springframework.beans.factory.annotation.Autowired;
34 import org.springframework.dao.DataAccessException; 35 import org.springframework.dao.DataAccessException;
  36 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
35 import org.springframework.jdbc.core.JdbcTemplate; 37 import org.springframework.jdbc.core.JdbcTemplate;
36 import org.springframework.stereotype.Service; 38 import org.springframework.stereotype.Service;
37 39
@@ -164,56 +166,134 @@ public class GpsServiceImpl implements GpsService { @@ -164,56 +166,134 @@ public class GpsServiceImpl implements GpsService {
164 return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0); 166 return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0);
165 } 167 }
166 168
  169 + private static DateTimeFormatter fmtyyyy = DateTimeFormat.forPattern("yyyy");
167 @Override 170 @Override
168 public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) { 171 public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) {
169 List<Map<String, Object>> list = new ArrayList<>(); 172 List<Map<String, Object>> list = new ArrayList<>();
170 - // 超过最大查询范围,直接忽略  
171 if (et - st > GPS_RANGE) 173 if (et - st > GPS_RANGE)
172 return list; 174 return list;
173 175
174 - // 车辆编码转换成设备号  
175 - String[] devices = new String[nbbmArray.length];  
176 - for (int i = 0; i < nbbmArray.length; i++) {  
177 - devices[i] = BasicData.deviceId2NbbmMap.inverse().get(nbbmArray[i]);  
178 - }  
179 - // day_of_year 176 + st = st * 1000;
  177 + et = et * 1000;
  178 + // day_of_year 分区字段
180 Calendar sCal = Calendar.getInstance(); 179 Calendar sCal = Calendar.getInstance();
181 - sCal.setTime(new Date(st * 1000));  
182 - int sDayOfYear = sCal.get(Calendar.DAY_OF_YEAR)/* 200 */;  
183 - 180 + sCal.setTime(new Date(st));
  181 + int sDayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
184 Calendar eCal = Calendar.getInstance(); 182 Calendar eCal = Calendar.getInstance();
185 - eCal.setTime(new Date(et * 1000));  
186 - int eDayOfYear = eCal.get(Calendar.DAY_OF_YEAR)/* 200 */; 183 + eCal.setTime(new Date(et));
  184 + int eDayOfYear = eCal.get(Calendar.DAY_OF_YEAR);
187 185
188 - Calendar weekCal = Calendar.getInstance(); 186 + String nbbm = nbbmArray[0];
189 187
190 - // 如果是同一天  
191 - if (sDayOfYear == eDayOfYear) {  
192 - weekCal.setTimeInMillis(st * 1000);  
193 - list = findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), sDayOfYear, st, et, devices);  
194 - } else {  
195 - // 跨天  
196 - Long tempSt = 0L, tempEt = 0L;  
197 - for (int i = sDayOfYear; i <= eDayOfYear; i++) {  
198 -  
199 - if (i == sDayOfYear) {  
200 - tempSt = st;  
201 - tempEt = DateUtils.getTimesnight(sCal);  
202 - } else if (i == eDayOfYear) {  
203 - tempSt = DateUtils.getTimesmorning(sCal);  
204 - tempEt = et;  
205 - } else {  
206 - tempSt = DateUtils.getTimesmorning(sCal);  
207 - tempEt = DateUtils.getTimesnight(sCal);  
208 - } 188 + List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st);
  189 + //没有设备变更记录,则参考车辆信息上的设备号
  190 + if(null == dcs || dcs.size() == 0){
  191 + DeviceChange dc = new DeviceChange();
  192 + dc.setNbbm(nbbm);
  193 + dc.setDevice(BasicData.deviceId2NbbmMap.inverse().get(nbbm));
  194 + dc.setSt(st);
  195 + dc.setEt(et);
209 196
210 - weekCal.setTimeInMillis(tempSt * 1000);  
211 - list.addAll(findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), i, tempSt, tempEt, devices));  
212 - // 加一天  
213 - sCal.add(Calendar.DATE, 1);  
214 - } 197 + dcs.add(dc);
215 } 198 }
216 199
  200 + //bsth_c_gps_info
  201 + String tableName = "bsth_c_gps_info";
  202 + String sYear = fmtyyyy.print(st),
  203 + currYear = fmtyyyy.print(System.currentTimeMillis());
  204 +
  205 + if(!sYear.equals(currYear))
  206 + tableName += "_" + sYear;
  207 +
  208 + StringBuilder sql = new StringBuilder("");
  209 + long t1,t2;
  210 + DeviceChange dc;
  211 + for(int i = 0,len=dcs.size(); i < len; i++){
  212 + t1 = st;
  213 + t2 = et;
  214 + dc = dcs.get(i);
  215 + if(dc.getSt() > st)
  216 + t1 = dc.getSt();
  217 + if(dc.getEt() < et)
  218 + t2 = dc.getEt();
  219 +
  220 + sql.append("select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS,SECTION_CODE from "+tableName+" where days_year in ("+sDayOfYear+","+eDayOfYear+") " +
  221 + " and device_id='"+dc.getDevice()+"' and ts > "+t1+" and ts < "+t2+" ");
  222 +
  223 + if(i == len - 1)
  224 + sql.append(" ORDER BY device_id,ts,stop_no");
  225 + else
  226 + sql.append(" UNION");
  227 + }
  228 +
  229 + logger.info("轨迹回放 nbbm: " + nbbm + " -st: " + st + " -et: " + et + " -sql: " + sql.toString());
  230 +
  231 + // 查询到离站数据
  232 + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(st, et, dcs);
  233 +
  234 + //查询GPS数据
  235 + JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource());
  236 + List<Map<String, Object>> dataList = jdbcTemplate_ms.queryForList(sql.toString());
  237 +
  238 + Float lon, lat;
  239 + Location bdLoc, gdLoc;
  240 + int inOutStop;
  241 + long serviceState;
  242 + ArrivalEntity arrival;
  243 +
  244 + Map<String, Object> map = null;
  245 + for(Map<String, Object> rs : dataList){
  246 + serviceState = map_get_long(rs, "SERVICE_STATE");
  247 +
  248 + if(getGpsValid(serviceState) == 1)
  249 + continue;
  250 +
  251 + map = new HashMap<>();
  252 + if(getGpsValid(serviceState) == 1)
  253 + continue;
  254 +
  255 + map = new HashMap<>();
  256 +
  257 + lon = map_get_float(rs, "LON");
  258 + lat = map_get_float(rs, "LAT");
  259 + // 高德坐标
  260 + gdLoc = TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(lon, lat));
  261 + map.put("gcj_lon", gdLoc.getLng());
  262 + map.put("gcj_lat", gdLoc.getLat());
  263 + // 百度坐标
  264 + bdLoc = TransGPS.bd_encrypt(gdLoc);
  265 + map.put("bd_lon", bdLoc.getLng());
  266 + map.put("bd_lat", bdLoc.getLat());
  267 + //原始坐标
  268 + map.put("lon", lon);
  269 + map.put("lat", lat);
  270 +
  271 + map.put("deviceId", map_get_str(rs, "DEVICE_ID"));
  272 + map.put("ts", map_get_long(rs, "TS"));
  273 + map.put("timestamp", map_get_long(rs, "TS"));
  274 + map.put("stopNo", map_get_str(rs, "STOP_NO"));
  275 + map.put("direction", map_get_float(rs,"DIRECTION"));
  276 +
  277 + map.put("lineId", map_get_str(rs, "LINE_ID"));
  278 + map.put("speed", map_get_float(rs,"SPEED_GPS"));
  279 +
  280 + inOutStop = Integer.parseInt(rs.get("INOUT_STOP").toString());
  281 + map.put("inout_stop", inOutStop);
  282 +
  283 + arrival = arrivalMap.get(map_get_str(rs, "DEVICE_ID") + "_" + map_get_long(rs, "TS"));
  284 + if (arrival != null) {
  285 + map.put("inout_stop_info", arrival);
  286 + map.put("inout_stop", arrival.getInOut());
  287 + }
  288 +
  289 + map.put("nbbm", BasicData.deviceId2NbbmMap.get(map_get_str(rs,"DEVICE_ID")));
  290 + map.put("state", getService(serviceState));
  291 + // 上下行
  292 + map.put("upDown", getUpOrDown(serviceState));
  293 + //路段编码
  294 + map.put("section_code", map_get_str(rs,"SECTION_CODE"));
  295 + list.add(map);
  296 + }
217 // 按时间排序 297 // 按时间排序
218 Collections.sort(list, new Comparator<Map<String, Object>>() { 298 Collections.sort(list, new Comparator<Map<String, Object>>() {
219 299
@@ -225,132 +305,97 @@ public class GpsServiceImpl implements GpsService { @@ -225,132 +305,97 @@ public class GpsServiceImpl implements GpsService {
225 return list; 305 return list;
226 } 306 }
227 307
228 - public List<Map<String, Object>> findByTs(int weekOfYear, int dayOfYear, Long st, Long et, String[] devices) {  
229 - List<Map<String, Object>> list = new ArrayList<>();  
230 - Map<String, Object> map = null;  
231 -  
232 - // 直接拼 in 语句  
233 - String inv = "";  
234 - for (String device : devices)  
235 - inv += ("'" + device + "',");  
236 - inv = inv.substring(0, inv.length() - 1);  
237 -  
238 - // 查询到离站数据  
239 - Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear, st, et, inv);  
240 -  
241 - String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS,SECTION_CODE from bsth_c_gps_info where days_year=? and device_id in ("  
242 - + inv + ") and ts > ? and ts < ? ORDER BY device_id,ts,stop_no";  
243 - try {  
244 - conn = DBUtils_MS.getConnection();  
245 - ps = conn.prepareStatement(sql);  
246 - ps.setInt(1, dayOfYear);  
247 - /* ps.setArray(2, conn.createArrayOf("VARCHAR", devices)); */  
248 - ps.setLong(2, st * 1000);  
249 - ps.setLong(3, et * 1000); 308 + private String map_get_str(Map<String, Object> map, String key){
  309 + return map.containsKey(key)?map.get(key).toString():"";
  310 + }
250 311
251 - rs = ps.executeQuery();  
252 - Float lon, lat;  
253 - Location bdLoc, gdLoc;  
254 - int inOutStop;  
255 - long serviceState;  
256 - ArrivalEntity arrival;  
257 - while (rs.next()) {  
258 - serviceState = rs.getLong("SERVICE_STATE");  
259 - if(getGpsValid(serviceState) == 1)  
260 - continue; 312 + private Long map_get_long(Map<String, Object> map, String key){
  313 + return map.containsKey(key)?Long.parseLong(map.get(key).toString()):-1;
  314 + }
261 315
262 - map = new HashMap<>(); 316 + private Float map_get_float(Map<String, Object> map, String key){
  317 + return map.containsKey(key)?Float.parseFloat(map.get(key).toString()):-1;
  318 + }
263 319
264 - lon = rs.getFloat("LON");  
265 - lat = rs.getFloat("LAT");  
266 - // 高德坐标  
267 - gdLoc = TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(lon, lat));  
268 - map.put("gcj_lon", gdLoc.getLng());  
269 - map.put("gcj_lat", gdLoc.getLat());  
270 - // 百度坐标  
271 - bdLoc = TransGPS.bd_encrypt(gdLoc);  
272 - map.put("bd_lon", bdLoc.getLng());  
273 - map.put("bd_lat", bdLoc.getLat());  
274 - //原始坐标  
275 - map.put("lon", lon);  
276 - map.put("lat", lat);  
277 -  
278 - map.put("deviceId", rs.getString("DEVICE_ID"));  
279 - map.put("ts", rs.getLong("TS"));  
280 - map.put("timestamp", rs.getLong("TS"));  
281 - map.put("stopNo", rs.getString("STOP_NO"));  
282 - map.put("direction", rs.getFloat("DIRECTION")); 320 + private List<DeviceChange> findDeviceChangeLogs(String nbbm, long t, long st){
  321 + List<DeviceChange> dcs = null;
  322 + List<DeviceChange> rs = new ArrayList<>();
  323 + try{
283 324
284 - map.put("lineId", rs.getString("LINE_ID"));  
285 - map.put("speed", rs.getFloat("SPEED_GPS")); 325 + //JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource());
  326 + dcs = jdbcTemplate.query("select cl_zbh as nbbm,new_device_no as device,UNIX_TIMESTAMP(qyrq) * 1000 as st from bsth_c_car_device where cl_zbh='"+nbbm+"' and UNIX_TIMESTAMP(qyrq)<" + (t / 1000)
  327 + , BeanPropertyRowMapper.newInstance(DeviceChange.class));
286 328
287 - inOutStop = rs.getInt("INOUT_STOP");  
288 - map.put("inout_stop", inOutStop);  
289 329
290 - arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));  
291 - if (arrival != null) {  
292 - map.put("inout_stop_info", arrival);  
293 - map.put("inout_stop", arrival.getInOut()); 330 + Collections.sort(dcs, new Comparator<DeviceChange>() {
  331 + @Override
  332 + public int compare(DeviceChange d1, DeviceChange d2) {
  333 + return (int) (d1.getSt() - d2.getSt());
294 } 334 }
  335 + });
295 336
296 - map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID")));  
297 - map.put("state", getService(serviceState));  
298 - // 上下行  
299 - map.put("upDown", getUpOrDown(serviceState));  
300 - //路段编码  
301 - map.put("section_code", rs.getString("SECTION_CODE"));  
302 - list.add(map); 337 + for(int i = 0,len=dcs.size(); i < len - 1; i++){
  338 + dcs.get(i).setEt(dcs.get(i + 1).getSt());
303 } 339 }
304 - } catch (Exception e) { 340 +
  341 + for(DeviceChange dc : dcs){
  342 + if(dc.getEt() > st)
  343 + rs.add(dc);
  344 + }
  345 + }catch (Exception e){
305 logger.error("", e); 346 logger.error("", e);
306 - } finally {  
307 - DBUtils_MS.close(rs, ps, conn);  
308 } 347 }
309 - return list; 348 + return rs;
310 } 349 }
311 350
312 public static byte getGpsValid(long serviceState) { 351 public static byte getGpsValid(long serviceState) {
313 return (byte)(((serviceState & 0x80000000) == 0x80000000) ? 1 : 0); 352 return (byte)(((serviceState & 0x80000000) == 0x80000000) ? 1 : 0);
314 } 353 }
315 354
316 - public Map<String, ArrivalEntity> findArrivalByTs(int weekOfYear, Long st, Long et, String devicesInSql) { 355 + public Map<String, ArrivalEntity> findArrivalByTs(Long st, Long et, List<DeviceChange> dcs) {
317 Map<String, ArrivalEntity> map = new HashMap<>(); 356 Map<String, ArrivalEntity> map = new HashMap<>();
318 357
319 - String sql = "SELECT DEVICE_ID,LINE_ID,STOP_NO,TS,UP_DOWN,IN_OUT,WEEKS_YEAR,CREATE_DATE FROM bsth_c_arrival_info where weeks_year=? and device_id in ("  
320 - + devicesInSql + ") and ts > ? and ts < ?";  
321 - try {  
322 - conn = DBUtils_MS.getConnection();  
323 - ps = conn.prepareStatement(sql);  
324 - ps.setInt(1, weekOfYear);  
325 - ps.setLong(2, st * 1000);  
326 - ps.setLong(3, et * 1000); 358 + // weeks_year 分区字段
  359 + Calendar sCal = Calendar.getInstance();
  360 + sCal.setTime(new Date(st * 1000));
  361 + int sWeekOfYear = sCal.get(Calendar.WEEK_OF_YEAR);
  362 + Calendar eCal = Calendar.getInstance();
  363 + eCal.setTime(new Date(et * 1000));
  364 + int eWeekOfYear = eCal.get(Calendar.DAY_OF_YEAR);
  365 +
  366 + StringBuilder sql = new StringBuilder("");
  367 + long t1,t2;
  368 + DeviceChange dc;
  369 + for(int i = 0,len=dcs.size(); i < len; i++){
  370 + t1 = st;
  371 + t2 = et;
  372 + dc = dcs.get(i);
  373 + if(dc.getSt() > st)
  374 + t1 = dc.getSt();
  375 + if(dc.getEt() < et)
  376 + t2 = dc.getEt();
  377 +
  378 + sql.append("SELECT DEVICE_ID,LINE_ID as LINE_CODE,STOP_NO,TS,UP_DOWN,IN_OUT,WEEKS_YEAR,CREATE_DATE FROM bsth_c_arrival_info " +
  379 + " where weeks_year in ("+sWeekOfYear+", "+eWeekOfYear+") and device_id='"+dc.getDevice()+"' and ts > "+t1+" and ts < " + t2);
  380 +
  381 + if(i == len - 1)
  382 + sql.append(" ORDER BY device_id,ts,stop_no");
  383 + else
  384 + sql.append(" UNION");
  385 + }
327 386
328 - rs = ps.executeQuery();  
329 - ArrivalEntity arr;  
330 - int inOut, updown;  
331 - String prefix, stationName, lineId;  
332 - while (rs.next()) {  
333 - lineId = rs.getString("LINE_ID");  
334 - updown = rs.getInt("UP_DOWN");  
335 - prefix = lineId + "_" + updown + "_";  
336 - stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix); 387 + JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource());
  388 + List<ArrivalEntity> list = jdbcTemplate_ms.query(sql.toString(), BeanPropertyRowMapper.newInstance(ArrivalEntity.class));
337 389
338 - if (StringUtils.isEmpty(stationName))  
339 - continue; 390 + String stationName, prefix;
  391 + for(ArrivalEntity arr : list){
  392 + prefix = arr.getLineCode() + "_" + arr.getUpDown() + "_";
  393 + stationName = BasicData.getStationNameByCode(arr.getStopNo(), prefix);
340 394
341 - arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId,  
342 - updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),  
343 - rs.getInt("WEEKS_YEAR"), stationName); 395 + arr.setStopName(stationName);
344 396
345 - // 设备号_时间戳_进出状态 为key  
346 - // 反转进出状态  
347 - inOut = arr.getInOut() == 0 ? 1 : 0;  
348 - map.put(arr.getDeviceId() + "_" + arr.getTs(), arr);  
349 - }  
350 - } catch (Exception e) {  
351 - logger.error("", e);  
352 - } finally {  
353 - DBUtils_MS.close(rs, ps, conn); 397 + // 反转进出状态
  398 + map.put(arr.getDeviceId() + "_" + arr.getTs(), arr);
354 } 399 }
355 return map; 400 return map;
356 } 401 }
@@ -612,14 +657,6 @@ public class GpsServiceImpl implements GpsService { @@ -612,14 +657,6 @@ public class GpsServiceImpl implements GpsService {
612 //获取历史gps 数据 657 //获取历史gps 数据
613 List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et)); 658 List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et));
614 if (list != null && list.size() > 0) { 659 if (list != null && list.size() > 0) {
615 - //获取路段信息  
616 - /*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)";  
617 - List<Road_DTO> roads = Road_DTO.craete(jdbcTemplate.queryForList(sql, list.get(0).getLineId()));  
618 -  
619 - //为GPS数据关联路段信息  
620 - for (HistoryGps_DTOV3 gps : list) {  
621 - matchRoadToGps(gps, roads);  
622 - }*/  
623 //关联路段名称 660 //关联路段名称
624 Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap(); 661 Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap();
625 for(HistoryGps_DTOV3 gps : list){ 662 for(HistoryGps_DTOV3 gps : list){
@@ -1139,6 +1176,89 @@ public class GpsServiceImpl implements GpsService { @@ -1139,6 +1176,89 @@ public class GpsServiceImpl implements GpsService {
1139 return paramMap; 1176 return paramMap;
1140 } 1177 }
1141 1178
  1179 + @Override
  1180 + public Map<String, Object> allCarsByLine(String lineCode) {
  1181 + Map<String, Object> map = new HashMap();
  1182 + try{
  1183 + List<Map<String, Object>> list = new ArrayList<>();
  1184 + Map<String, Object> item;
  1185 + GpsEntity gps;
  1186 + //当天线路下营运的车辆
  1187 + Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode);
  1188 + ScheduleRealInfo sch;
  1189 + String device;
  1190 +
  1191 + Map<String, Integer> allDevices = new HashMap<>();
  1192 + String execStr = "";
  1193 + D80 d80;
  1194 + for(String nbbm : cars){
  1195 + item = new HashMap<>();
  1196 + device = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  1197 + allDevices.put(device, 1);
  1198 + item.put("nbbm", nbbm);
  1199 + item.put("device", device);
  1200 +
  1201 + sch = dayOfSchedule.executeCurr(nbbm);
  1202 + if(null != sch){
  1203 + execStr = (sch.getXlDir().equals("0")?"上行":"下行") + "("+sch.getDfsj()+")";
  1204 + if(!sch.getXlBm().equals(lineCode))
  1205 + execStr = sch.getXlName()+execStr;
  1206 + else
  1207 + item.put("schId", sch.getId());
  1208 + item.put("exec", execStr);
  1209 + }
  1210 +
  1211 + gps = gpsRealData.get(device);
  1212 + if(null != gps){
  1213 + item.put("loc", gps.getStationName());
  1214 + item.put("lineCodeReal", gps.getLineId());
  1215 + item.put("status", gps.isOffline()?"离线":"在线");
  1216 + item.put("gpsTs", gps.getTimestamp());
  1217 + }
  1218 + //请求出场时间
  1219 + d80 = PilotReport.qqccMap.get(device);
  1220 + if(null != d80)
  1221 + item.put("qqcc", d80.getTimestamp());
  1222 +
  1223 + list.add(item);
  1224 + }
  1225 +
  1226 + //车载编码落在该线路的设备
  1227 + Set<String> devices = gpsRealData.findDevices(lineCode);
  1228 + for(String d : devices){
  1229 + if(allDevices.containsKey(d))
  1230 + continue;
  1231 +
  1232 + gps = gpsRealData.get(d);
  1233 + if(null == gps)
  1234 + continue;
  1235 +
  1236 + item = new HashMap<>();
  1237 + item.put("nbbm", gps.getNbbm());
  1238 + item.put("device", d);
  1239 + item.put("loc", gps.getStationName());
  1240 + item.put("lineCodeReal", gps.getLineId());
  1241 + item.put("status", gps.isOffline()?"离线":"在线");
  1242 + item.put("gpsTs", gps.getTimestamp());
  1243 +
  1244 + //请求出场时间
  1245 + d80 = PilotReport.qqccMap.get(d);
  1246 + if(null != d80)
  1247 + item.put("qqcc", d80.getTimestamp());
  1248 +
  1249 + list.add(item);
  1250 + }
  1251 +
  1252 + map.put("list", list);
  1253 + map.put("status", ResponseCode.SUCCESS);
  1254 + }catch (Exception e){
  1255 + logger.error("", e);
  1256 + map.put("status", ResponseCode.ERROR);
  1257 + map.put("msg", e.getMessage());
  1258 + }
  1259 + return map;
  1260 + }
  1261 +
1142 static List<GpsSpeed> findAll(Map<String, Object> map) { 1262 static List<GpsSpeed> findAll(Map<String, Object> map) {
1143 Connection conn = null; 1263 Connection conn = null;
1144 PreparedStatement ps = null; 1264 PreparedStatement ps = null;
src/main/java/com/bsth/service/gps/entity/DeviceChange.java 0 → 100644
  1 +package com.bsth.service.gps.entity;
  2 +
  3 +/**
  4 + * 车辆设备变更记录
  5 + * Created by panzhao on 2018/1/16.
  6 + */
  7 +public class DeviceChange {
  8 +
  9 + private String nbbm;
  10 + private String device;
  11 + private long st;
  12 + private long et;
  13 +
  14 + public String getNbbm() {
  15 + return nbbm;
  16 + }
  17 +
  18 + public void setNbbm(String nbbm) {
  19 + this.nbbm = nbbm;
  20 + }
  21 +
  22 + public String getDevice() {
  23 + return device;
  24 + }
  25 +
  26 + public void setDevice(String device) {
  27 + this.device = device;
  28 + }
  29 +
  30 + public long getSt() {
  31 + return st;
  32 + }
  33 +
  34 + public void setSt(long st) {
  35 + this.st = st;
  36 + }
  37 +
  38 + public long getEt() {
  39 + return et;
  40 + }
  41 +
  42 + public void setEt(long et) {
  43 + this.et = et;
  44 + }
  45 +}
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
@@ -1843,7 +1843,16 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1843,7 +1843,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1843 } 1843 }
1844 } 1844 }
1845 1845
1846 - sjlc = new BigDecimal(culateService.culateSjgl(keyMap.get(key)) + culateService.culateLjgl(keyMap.get(key))); 1846 + List<ScheduleRealInfo> tempList = new ArrayList<ScheduleRealInfo>();
  1847 + for(ScheduleRealInfo s : keyMap.get(key)){
  1848 + if(s.getcTasks() != null && s.getcTasks().size() > 0){
  1849 + tempList.add(s);
  1850 + } else if(s.getZdsjActual() != null && s.getFcsjActual() != null){
  1851 + tempList.add(s);
  1852 + }
  1853 + }
  1854 +
  1855 + sjlc = new BigDecimal(culateService.culateSjgl(tempList) + culateService.culateLjgl(tempList));
1847 lzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "路阻")); 1856 lzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "路阻"));
1848 dmlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "吊慢")); 1857 dmlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "吊慢"));
1849 gzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "故障")); 1858 gzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "故障"));
@@ -2421,13 +2430,13 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -2421,13 +2430,13 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2421 } 2430 }
2422 2431
2423 for(Ylb ylb : queryYlbByRqXlbm){ 2432 for(Ylb ylb : queryYlbByRqXlbm){
2424 - String key = sdfMonth.format(ylb.getRq()) + ylb.getXlbm(); 2433 + String key = ylb.getJsy() + ylb.getNbbm();
2425 if(!ylbMap.containsKey(key)) 2434 if(!ylbMap.containsKey(key))
2426 ylbMap.put(key, new ArrayList<Ylb>()); 2435 ylbMap.put(key, new ArrayList<Ylb>());
2427 ylbMap.get(key).add(ylb); 2436 ylbMap.get(key).add(ylb);
2428 } 2437 }
2429 for(Dlb dlb : queryDlbByRqXlbm){ 2438 for(Dlb dlb : queryDlbByRqXlbm){
2430 - String key = sdfMonth.format(dlb.getRq()) + dlb.getXlbm(); 2439 + String key = dlb.getJsy() + dlb.getNbbm();
2431 if(!dlbMap.containsKey(key)) 2440 if(!dlbMap.containsKey(key))
2432 dlbMap.put(key, new ArrayList<Dlb>()); 2441 dlbMap.put(key, new ArrayList<Dlb>());
2433 dlbMap.get(key).add(dlb); 2442 dlbMap.get(key).add(dlb);
@@ -2480,8 +2489,9 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -2480,8 +2489,9 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2480 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 2489 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2481 // ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(scheduleRealInfos.get(0).getId()); 2490 // ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(scheduleRealInfos.get(0).getId());
2482 ScheduleRealInfo s = scheduleRealInfos.get(0); 2491 ScheduleRealInfo s = scheduleRealInfos.get(0);
2483 - String xlbm = s.getXlBm();  
2484 String fcrq = s.getScheduleDateStr(); 2492 String fcrq = s.getScheduleDateStr();
  2493 + String jsy = s.getjGh();
  2494 + String nbbm = s.getClZbh();
2485 2495
2486 int type = 0; 2496 int type = 0;
2487 Double ccyl = 0.0; 2497 Double ccyl = 0.0;
@@ -2491,8 +2501,8 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -2491,8 +2501,8 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2491 Double zlc = 0.0; 2501 Double zlc = 0.0;
2492 // List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm); 2502 // List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
2493 // List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm); 2503 // List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
2494 - List<Ylb> listYlb = ylbMap.get(fcrq + xlbm);  
2495 - List<Dlb> listDlb = dlbMap.get(fcrq + xlbm); 2504 + List<Ylb> listYlb = ylbMap.get(jsy + nbbm);
  2505 + List<Dlb> listDlb = dlbMap.get(jsy + nbbm);
2496 2506
2497 // List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh()); 2507 // List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
2498 List<Cars> listCars = carMap.get(s.getClZbh()); 2508 List<Cars> listCars = carMap.get(s.getClZbh());
src/main/java/com/bsth/service/realcontrol/ChildTaskPlanService.java
@@ -10,4 +10,6 @@ public interface ChildTaskPlanService extends BaseService&lt;ChildTaskPlan, Long&gt;{ @@ -10,4 +10,6 @@ public interface ChildTaskPlanService extends BaseService&lt;ChildTaskPlan, Long&gt;{
10 Map<String,Object> saveHistory(ChildTaskPlan childTask); 10 Map<String,Object> saveHistory(ChildTaskPlan childTask);
11 11
12 Map<String,Object> delHistory(Long id); 12 Map<String,Object> delHistory(Long id);
  13 +
  14 +Map<String,Object> update(ChildTaskPlan childTask);
13 } 15 }
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
@@ -21,6 +21,7 @@ import javax.transaction.Transactional; @@ -21,6 +21,7 @@ import javax.transaction.Transactional;
21 import java.util.Date; 21 import java.util.Date;
22 import java.util.HashMap; 22 import java.util.HashMap;
23 import java.util.Map; 23 import java.util.Map;
  24 +import java.util.Set;
24 25
25 @Service 26 @Service
26 public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { 27 public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService {
@@ -131,6 +132,66 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon @@ -131,6 +132,66 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon
131 return rs; 132 return rs;
132 } 133 }
133 134
  135 + @Override
  136 + public Map<String, Object> update(ChildTaskPlan t) {
  137 + Map<String, Object> rs = new HashMap();
  138 + try {
  139 + ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());
  140 + //保存起终点名称
  141 + if(StringUtils.isEmpty(t.getStartStationName()))
  142 + t.setStartStationName(getStationName(sch.getXlBm(), t.getStartStation()));
  143 +
  144 + if(StringUtils.isEmpty(t.getEndStationName()))
  145 + t.setEndStationName(getStationName(sch.getXlBm(), t.getEndStation()));
  146 + if(t.getDestroyReason() == null)
  147 + t.setDestroyReason("");
  148 +
  149 +
  150 + //根据id 获取原对象
  151 + ChildTaskPlan task = null;
  152 + Set<ChildTaskPlan> set = sch.getcTasks();
  153 + for(ChildTaskPlan obj : set){
  154 + if(obj.getId() == t.getId()){
  155 + task = obj;
  156 + break;
  157 + }
  158 + }
  159 +
  160 + if(null == task){
  161 + rs.put("status", ResponseCode.ERROR);
  162 + rs.put("msg", "失败,服务端无法定位到数据!");
  163 + return rs;
  164 + }
  165 + //更新字段
  166 + task.setStartStation(t.getStartStation());
  167 + task.setStartStationName(t.getStartStationName());
  168 + task.setEndStation(t.getEndStation());
  169 + task.setEndStationName(t.getEndStationName());
  170 + task.setStartDate(t.getStartDate());
  171 + task.setEndDate(t.getEndDate());
  172 + task.setMileageType(t.getMileageType());
  173 + task.setMileage(t.getMileage());
  174 + task.setDestroy(t.isDestroy());
  175 + task.setDestroyReason(t.getReason());
  176 + task.setReason(t.getReason());
  177 + task.setType1(t.getType1());
  178 + task.setType2(t.getType2());
  179 + task.setNoClerk(t.isNoClerk());
  180 + task.setRemarks(t.getRemarks());
  181 +
  182 + //更新数据库
  183 + super.save(task);
  184 +
  185 + rs.put("status", ResponseCode.SUCCESS);
  186 + rs.put("t", sch);
  187 + }catch (Exception e){
  188 + logger.error("", e);
  189 + rs.put("status", ResponseCode.ERROR);
  190 + rs.put("msg", e.getMessage());
  191 + }
  192 + return rs;
  193 + }
  194 +
134 private String getStationName(String lineCode, String stationCode){ 195 private String getStationName(String lineCode, String stationCode){
135 String name; 196 String name;
136 String prefix1 = lineCode + "_" + 0 + "_", 197 String prefix1 = lineCode + "_" + 0 + "_",
src/main/resources/static/index.html
@@ -61,9 +61,9 @@ @@ -61,9 +61,9 @@
61 href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css" 61 href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css"
62 rel="stylesheet" type="text/css" /> 62 rel="stylesheet" type="text/css" />
63 <!-- table 表格控件 --> 63 <!-- table 表格控件 -->
64 - <link rel="stylesheet"  
65 - href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"  
66 - type="text/css" /> 64 + <!--<link rel="stylesheet"-->
  65 + <!--href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"-->
  66 + <!--type="text/css" />-->
67 <link href="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.css" rel="stylesheet" type="text/css"/> 67 <link href="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.css" rel="stylesheet" type="text/css"/>
68 <!-- handsontable样式 --> 68 <!-- handsontable样式 -->
69 <link rel="stylesheet" 69 <link rel="stylesheet"
src/main/resources/static/pages/base/geo_data_edit/js/submit.js
@@ -52,6 +52,8 @@ var gb_data_submit = function () { @@ -52,6 +52,8 @@ var gb_data_submit = function () {
52 $(document).on('click', '.up_down_route_list .station_route .ul_li_input .save_icon_btn', function (e) { 52 $(document).on('click', '.up_down_route_list .station_route .ul_li_input .save_icon_btn', function (e) {
53 var f = $(this).parents('form'); 53 var f = $(this).parents('form');
54 var data = f.serializeJSON(); 54 var data = f.serializeJSON();
  55 + data.lineCode = g_line_code;
  56 + data.versions = g_version;
55 57
56 UIkit.modal.confirm('确定将站点名称修改为【'+data.stationName+'】?').then(function() { 58 UIkit.modal.confirm('确定将站点名称修改为【'+data.stationName+'】?').then(function() {
57 show_run_text('正在保存...'); 59 show_run_text('正在保存...');
src/main/resources/static/pages/base/geo_data_edit/js/version_manage.js
@@ -152,6 +152,7 @@ var gb_version_manage = function () { @@ -152,6 +152,7 @@ var gb_version_manage = function () {
152 var version = $(this).data('version'); 152 var version = $(this).data('version');
153 153
154 storage.setItem("geo_data_edit_line_version" , version); 154 storage.setItem("geo_data_edit_line_version" , version);
  155 + g_version = version;
155 $loadPanel.show(); 156 $loadPanel.show();
156 clearAll(); 157 clearAll();
157 startup(); 158 startup();
src/main/resources/static/pages/base/line/list.html
@@ -350,7 +350,7 @@ @@ -350,7 +350,7 @@
350 </td> 350 </td>
351 <td> 351 <td>
352 <a href="/pages/base/stationroute/list.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 查看</a> 352 <a href="/pages/base/stationroute/list.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 查看</a>
353 - <a href="javascript:window.localStorage.setItem('geo_data_edit_line_code' , '{{obj.lineCode}}');window.localStorage.removeItem('geo_data_edit_line_version');window.location.href='/pages/base/geo_data_edit/uk3_wrap.html';" class="btn default blue-stripe btn-sm" data-pjax> 查看 </a> 353 + <!--<a href="javascript:window.localStorage.setItem('geo_data_edit_line_code' , '{{obj.lineCode}}');window.localStorage.removeItem('geo_data_edit_line_version');window.location.href='/pages/base/geo_data_edit/uk3_wrap.html';" class="btn default blue-stripe btn-sm" data-pjax> 查看 </a>-->
354 </td> 354 </td>
355 <td> 355 <td>
356 <a href="details.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 详细 </a> 356 <a href="details.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 详细 </a>
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划) 22 * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划)
23 */ 23 */
24 24
25 -var WorldsBMap = function () { 25 +window.WorldsBMap = function () {
26 26
27 /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 */ 27 /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 */
28 var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false; 28 var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false;
src/main/resources/static/pages/forms/mould/waybill_minhang.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/waybill_minhang_dl.xls
No preview for this file type
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/detail.html
@@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
98 <label class="col-md-2 control-label">启用日期*:</label> 98 <label class="col-md-2 control-label">启用日期*:</label>
99 <div class="col-md-3"> 99 <div class="col-md-3">
100 <input type="text" class="form-control" 100 <input type="text" class="form-control"
101 - name="qyrq" uib-datepicker-popup="yyyy年MM月dd日" 101 + name="qyrq" uib-datepicker-popup="yyyy年MM月dd日 HH:mm"
102 ng-model="ctrl.deviceInfoForDetail.qyrq" readonly/> 102 ng-model="ctrl.deviceInfoForDetail.qyrq" readonly/>
103 </div> 103 </div>
104 </div> 104 </div>
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/edit.html
@@ -82,13 +82,8 @@ @@ -82,13 +82,8 @@
82 <div class="form-group has-success has-feedback"> 82 <div class="form-group has-success has-feedback">
83 <label class="col-md-2 control-label">旧终端号*:</label> 83 <label class="col-md-2 control-label">旧终端号*:</label>
84 <div class="col-md-3"> 84 <div class="col-md-3">
85 - <input type="text" class="form-control"  
86 - name="oldDeviceNo" ng-model="ctrl.deviceInfoForSave.oldDeviceNo"  
87 - required placeholder="请输入旧终端号"/>  
88 - </div>  
89 - <!-- 隐藏块,显示验证信息 -->  
90 - <div class="alert alert-danger well-sm" ng-show="myForm.oldDeviceNo.$error.required">  
91 - 旧终端号必须填写 85 + <input type="text" class="form-control" name="oldDeviceNo"
  86 + ng-model="ctrl.deviceInfoForSave.oldDeviceNo" readonly/>
92 </div> 87 </div>
93 </div> 88 </div>
94 89
@@ -143,31 +138,40 @@ @@ -143,31 +138,40 @@
143 </div> 138 </div>
144 </div> 139 </div>
145 140
  141 + <!--<div class="form-group has-success has-feedback">-->
  142 + <!--<label class="col-md-2 control-label">启用日期*:</label>-->
  143 + <!--<div class="col-md-3">-->
  144 + <!--<div class="input-group">-->
  145 + <!--<input type="text" class="form-control"-->
  146 + <!--name="qyrq" placeholder="请选择启用日期..."-->
  147 + <!--uib-datepicker-popup="yyyy年MM月dd日"-->
  148 + <!--is-open="ctrl.qyrqOpen" required-->
  149 + <!--ng-model="ctrl.deviceInfoForSave.qyrq" readonly-->
  150 + <!--remote-Validation-->
  151 + <!--remotevtype="cde1"-->
  152 + <!--remotevparam="{{ {'id_eq': ctrl.deviceInfoForSave.id, 'qyrq_eq': ctrl.deviceInfoForSave.qyrq, 'xl_eq': ctrl.deviceInfoForSave.xl, 'cl_eq': ctrl.deviceInfoForSave.cl} | json}}"/>-->
  153 + <!--<span class="input-group-btn">-->
  154 + <!--<button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()">-->
  155 + <!--<i class="glyphicon glyphicon-calendar"></i>-->
  156 + <!--</button>-->
  157 + <!--</span>-->
  158 + <!--</div>-->
  159 + <!--</div>-->
  160 + <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->
  161 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.required">-->
  162 + <!--启用日期必须选择-->
  163 + <!--</div>-->
  164 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.remote">-->
  165 + <!--{{$remote_msg}}-->
  166 + <!--</div>-->
  167 + <!--</div>-->
  168 +
146 <div class="form-group has-success has-feedback"> 169 <div class="form-group has-success has-feedback">
147 <label class="col-md-2 control-label">启用日期*:</label> 170 <label class="col-md-2 control-label">启用日期*:</label>
148 <div class="col-md-3"> 171 <div class="col-md-3">
149 - <div class="input-group">  
150 - <input type="text" class="form-control"  
151 - name="qyrq" placeholder="请选择启用日期..."  
152 - uib-datepicker-popup="yyyy年MM月dd日"  
153 - is-open="ctrl.qyrqOpen" required  
154 - ng-model="ctrl.deviceInfoForSave.qyrq" readonly  
155 - remote-Validation  
156 - remotevtype="cde1"  
157 - remotevparam="{{ {'id_eq': ctrl.deviceInfoForSave.id, 'qyrq_eq': ctrl.deviceInfoForSave.qyrq, 'xl_eq': ctrl.deviceInfoForSave.xl, 'cl_eq': ctrl.deviceInfoForSave.cl} | json}}"/>  
158 - <span class="input-group-btn">  
159 - <button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()">  
160 - <i class="glyphicon glyphicon-calendar"></i>  
161 - </button>  
162 - </span>  
163 - </div>  
164 - </div>  
165 - <!-- 隐藏块,显示验证信息 -->  
166 - <div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.required">  
167 - 启用日期必须选择  
168 - </div>  
169 - <div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.remote">  
170 - {{$remote_msg}} 172 + <input type="text" class="form-control"
  173 + name="qyrq" uib-datepicker-popup="yyyy年MM月dd日 HH:mm"
  174 + ng-model="ctrl.deviceInfoForSave.qyrq" readonly/>
171 </div> 175 </div>
172 </div> 176 </div>
173 177
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/form.html
@@ -82,13 +82,8 @@ @@ -82,13 +82,8 @@
82 <div class="form-group has-success has-feedback"> 82 <div class="form-group has-success has-feedback">
83 <label class="col-md-2 control-label">旧终端号*:</label> 83 <label class="col-md-2 control-label">旧终端号*:</label>
84 <div class="col-md-3"> 84 <div class="col-md-3">
85 - <input type="text" class="form-control"  
86 - name="oldDeviceNo" ng-model="ctrl.deviceInfoForSave.oldDeviceNo"  
87 - required placeholder="请输入旧终端号"/>  
88 - </div>  
89 - <!-- 隐藏块,显示验证信息 -->  
90 - <div class="alert alert-danger well-sm" ng-show="myForm.oldDeviceNo.$error.required">  
91 - 旧终端号必须填写 85 + <input type="text" class="form-control" name="oldDeviceNo"
  86 + ng-model="ctrl.deviceInfoForSave.oldDeviceNo" readonly/>
92 </div> 87 </div>
93 </div> 88 </div>
94 89
@@ -143,23 +138,44 @@ @@ -143,23 +138,44 @@
143 </div> 138 </div>
144 </div> 139 </div>
145 140
  141 + <!--<div class="form-group has-success has-feedback">-->
  142 + <!--<label class="col-md-2 control-label">启用日期*:</label>-->
  143 + <!--<div class="col-md-3">-->
  144 + <!--<div class="input-group">-->
  145 + <!--<input type="text" class="form-control"-->
  146 + <!--name="qyrq" placeholder="请选择启用日期..."-->
  147 + <!--uib-datepicker-popup="yyyy年MM月dd日 hh:mm:ss"-->
  148 + <!--is-open="ctrl.qyrqOpen" required-->
  149 + <!--ng-model="ctrl.deviceInfoForSave.qyrq" readonly-->
  150 + <!--remote-Validation-->
  151 + <!--remotevtype="cde1"-->
  152 + <!--remotevparam="{{ {'qyrq_eq': ctrl.deviceInfoForSave.qyrq, 'xl_eq': ctrl.deviceInfoForSave.xl, 'cl_eq': ctrl.deviceInfoForSave.cl} | json}}"/>-->
  153 + <!--<span class="input-group-btn">-->
  154 + <!--<button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()">-->
  155 + <!--<i class="glyphicon glyphicon-calendar"></i>-->
  156 + <!--</button>-->
  157 + <!--</span>-->
  158 + <!--</div>-->
  159 + <!--</div>-->
  160 + <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->
  161 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.required">-->
  162 + <!--启用日期必须选择-->
  163 + <!--</div>-->
  164 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.remote">-->
  165 + <!--{{$remote_msg}}-->
  166 + <!--</div>-->
  167 + <!--</div>-->
  168 +
146 <div class="form-group has-success has-feedback"> 169 <div class="form-group has-success has-feedback">
147 - <label class="col-md-2 control-label">启用日期*:</label> 170 + <label class="col-md-2 control-label">启用日期:</label>
148 <div class="col-md-3"> 171 <div class="col-md-3">
149 <div class="input-group"> 172 <div class="input-group">
150 - <input type="text" class="form-control"  
151 - name="qyrq" placeholder="请选择启用日期..."  
152 - uib-datepicker-popup="yyyy年MM月dd日"  
153 - is-open="ctrl.qyrqOpen" required  
154 - ng-model="ctrl.deviceInfoForSave.qyrq" readonly 173 + <input type="datetime-local" class="form-control" name="qyrq"
  174 + ng-model="ctrl.deviceInfoForSave.qyrq"
155 remote-Validation 175 remote-Validation
156 remotevtype="cde1" 176 remotevtype="cde1"
157 - remotevparam="{{ {'qyrq_eq': ctrl.deviceInfoForSave.qyrq, 'xl_eq': ctrl.deviceInfoForSave.xl, 'cl_eq': ctrl.deviceInfoForSave.cl} | json}}"/>  
158 - <span class="input-group-btn">  
159 - <button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()">  
160 - <i class="glyphicon glyphicon-calendar"></i>  
161 - </button>  
162 - </span> 177 + remotevparam="{{ {'qyrq_eq': ctrl.deviceInfoForSave.qyrq, 'xl_eq': ctrl.deviceInfoForSave.xl, 'cl_eq': ctrl.deviceInfoForSave.cl} | json}}" />
  178 +
163 </div> 179 </div>
164 </div> 180 </div>
165 <!-- 隐藏块,显示验证信息 --> 181 <!-- 隐藏块,显示验证信息 -->
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/list.html
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <th style="width: 70px;">序号</th> 7 <th style="width: 70px;">序号</th>
8 <th style="width: 15%;">线路名称</th> 8 <th style="width: 15%;">线路名称</th>
9 <th style="width: 10%;">内部编号</th> 9 <th style="width: 10%;">内部编号</th>
10 - <th style="width: 100px;">启用日期</th> 10 + <th style="width: 160px;">启用日期</th>
11 <th>旧设备编号</th> 11 <th>旧设备编号</th>
12 <th>新设备编号</th> 12 <th>新设备编号</th>
13 <th style="width: 180px;">操作人/操作时间</th> 13 <th style="width: 180px;">操作人/操作时间</th>
@@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
71 <span ng-bind="info.clZbh"></span> 71 <span ng-bind="info.clZbh"></span>
72 </td> 72 </td>
73 <td> 73 <td>
74 - <span ng-bind="info.qyrq | date:'yyyy-MM-dd'"></span> 74 + <span ng-bind="info.qyrq | date:'yyyy-MM-dd HH:mm'"></span>
75 </td> 75 </td>
76 <td> 76 <td>
77 <span ng-bind="info.oldDeviceNo"></span> 77 <span ng-bind="info.oldDeviceNo"></span>
src/main/resources/static/pages/scheduleApp/module/common/main.js
@@ -283,7 +283,8 @@ ScheduleApp.factory( @@ -283,7 +283,8 @@ ScheduleApp.factory(
283 alert("我擦,后台返回连个状态码都没返回,见鬼了,服务器可能重启了"); 283 alert("我擦,后台返回连个状态码都没返回,见鬼了,服务器可能重启了");
284 } else if (rejection.status == -1) { 284 } else if (rejection.status == -1) {
285 // 服务器断开了 285 // 服务器断开了
286 - alert("貌似服务端连接不上"); 286 + // alert("貌似服务端连接不上");
  287 + console.log("貌似服务端连接不上");
287 } else { 288 } else {
288 output.push("状态编码:" + rejection.status); 289 output.push("状态编码:" + rejection.status);
289 output.push("错误内容:" + angular.toJson(rejection.data)); 290 output.push("错误内容:" + angular.toJson(rejection.data));
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/list.html
@@ -176,8 +176,8 @@ @@ -176,8 +176,8 @@
176 <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑2 </a>--> 176 <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑2 </a>-->
177 <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true, lineversion : info.lineVersion})" 177 <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true, lineversion : info.lineVersion})"
178 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a> 178 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a>
179 - <a ng-click="ctrl.toTtInfoDetailAuto(info.id)"  
180 - class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a> 179 + <!--<a ng-click="ctrl.toTtInfoDetailAuto(info.id)"-->
  180 + <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a>-->
181 <a ui-sref="ttInfoDetailManage_form({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})" 181 <a ui-sref="ttInfoDetailManage_form({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"
182 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 导入 </a> 182 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 导入 </a>
183 <a href="javascript:" class="btn btn-info btn-sm" ng-click="ctrl.exportData(info.id)"> 导出 </a> 183 <a href="javascript:" class="btn btn-info btn-sm" ng-click="ctrl.exportData(info.id)"> 导出 </a>
src/main/resources/static/pages/summary/destory_sch_detail/list.html
@@ -127,7 +127,7 @@ @@ -127,7 +127,7 @@
127 <div uk-spinner></div> 127 <div uk-spinner></div>
128 </div> 128 </div>
129 <div class="ct_page" style="display: none;"> 129 <div class="ct_page" style="display: none;">
130 - <h3 class="uk-heading-line uk-heading-bullet"><span>烂班明细统计</span></h3> 130 + <h3 class="uk-heading-line uk-heading-bullet"><span style="color: #ff5353;">烂班明细统计</span></h3>
131 <div class="ct_cont" > 131 <div class="ct_cont" >
132 <div class="ct_search_form_wrap"> 132 <div class="ct_search_form_wrap">
133 <form> 133 <form>
@@ -161,7 +161,7 @@ @@ -161,7 +161,7 @@
161 <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button> 161 <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button>
162 </div> 162 </div>
163 <div class="ct_field ct_field_bottom"> 163 <div class="ct_field ct_field_bottom">
164 - <span uk-icon="icon: question" title="不统计进出场和子任务" uk-tooltip="pos: bottom"></span> 164 + <span uk-icon="icon: question" title="不统计进出场和2点间空驶" uk-tooltip="pos: bottom"></span>
165 </div> 165 </div>
166 </form> 166 </form>
167 </div> 167 </div>
src/main/resources/static/pages/summary/excel/临加明细情况.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/summary/temp_sch_detail/d_s_d_wrap.html 0 → 100644
  1 +<!-- 临加明细统计 -->
  2 +<iframe src="/pages/summary/temp_sch_detail/list.html?origin=real_control_iframe" frameborder="0" style="height: 100%;width: 100%;"></iframe>
0 \ No newline at end of file 3 \ No newline at end of file
src/main/resources/static/pages/summary/temp_sch_detail/list.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="zh-cn">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <link rel="stylesheet" href="/assets/plugins/uk3.0/uikit.min.css"/>
  7 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" />
  8 + <!-- flatpickr -->
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css">
  10 + <style>
  11 + html,body{
  12 + height: 100%;
  13 + }
  14 + .ct_page{
  15 + padding: 25px 15px;
  16 + height: 100%;
  17 + height: calc(100% - 50px);
  18 + }
  19 +
  20 + .ct_cont{
  21 + height: calc(100% - 35px);
  22 + }
  23 +
  24 + .ct_cont>div>div.uk-card{
  25 + height: 99%;
  26 + }
  27 +
  28 + .loading{
  29 + height: 100%;
  30 + text-align: center;
  31 + }
  32 + .loading .uk-spinner{
  33 + margin-top: 200px;
  34 + }
  35 + .loading circle{
  36 + stroke: red;
  37 + }
  38 +
  39 + .ps-container > .ps-scrollbar-x-rail, .ps-container > .ps-scrollbar-y-rail{
  40 + opacity: 0.6 !important;
  41 + padding: 0 !important;
  42 + }
  43 +
  44 + .ct_destroy_sch_table_width th:nth-of-type(1),.ct_destroy_sch_table_width td:nth-of-type(1){
  45 + width: 9%;
  46 + }
  47 + .ct_destroy_sch_table_width th:nth-of-type(2),.ct_destroy_sch_table_width td:nth-of-type(2){
  48 + width: 10%;
  49 + }
  50 + .ct_destroy_sch_table_width th:nth-of-type(3),.ct_destroy_sch_table_width td:nth-of-type(3){
  51 + width: 9%;
  52 + }
  53 + .ct_destroy_sch_table_width th:nth-of-type(4),.ct_destroy_sch_table_width td:nth-of-type(4){
  54 + width: 9%;
  55 + }
  56 + .ct_destroy_sch_table_width th:nth-of-type(5),.ct_destroy_sch_table_width td:nth-of-type(5){
  57 + width: 9%;
  58 + }
  59 + .ct_destroy_sch_table_width th:nth-of-type(6),.ct_destroy_sch_table_width td:nth-of-type(6){
  60 + width: 8%;
  61 + }
  62 + .ct_destroy_sch_table_width th:nth-of-type(7),.ct_destroy_sch_table_width td:nth-of-type(7){
  63 + width: 8%;
  64 + }
  65 + .ct_destroy_sch_table_width th:nth-of-type(8),.ct_destroy_sch_table_width td:nth-of-type(8){
  66 + width: 8%;
  67 + }
  68 + .ct_destroy_sch_table_width th:nth-of-type(9),.ct_destroy_sch_table_width td:nth-of-type(9){
  69 + }
  70 +
  71 + .ct_search_form_wrap{
  72 + border-bottom: 1px solid #e5e5e5;
  73 + padding: 10px 0 25px 10px;
  74 + }
  75 + .ct_search_form_wrap .ct_field{
  76 + display: inline-block;
  77 + margin: 0 5px;
  78 + }
  79 +
  80 + .ct_search_form_wrap .ct_field label{
  81 + font-size: 14px;
  82 + }
  83 +
  84 + .ct_search_form_wrap .ct_field input{
  85 + width: 110px;
  86 + }
  87 +
  88 + .ct_search_form_wrap .ct_field select{
  89 + width: auto;
  90 + min-width: 100px;
  91 + }
  92 +
  93 + .ct_search_form_wrap .uk-button{
  94 + padding: 0 14px;
  95 + }
  96 +
  97 + .ct_search_form_wrap .uk-button i{
  98 + vertical-align: middle;
  99 + margin-top: -2px;
  100 + margin-right: 7px;
  101 + }
  102 +
  103 + .ct_table_wrap{
  104 + font-size: 14px;
  105 + height: calc(100% - 77px);
  106 + }
  107 +
  108 + .t_body_wrap{
  109 + height: calc(100% - 41px);
  110 + overflow: auto;
  111 + position: relative;
  112 + }
  113 +
  114 + .ct_field.ct_field_bottom{
  115 + vertical-align: bottom;
  116 + font-size: 12px;
  117 + margin-left: 0;
  118 + }
  119 + </style>
  120 +</head>
  121 +
  122 +<body>
  123 +<div class="loading">
  124 + <div uk-spinner></div>
  125 +</div>
  126 +<div class="ct_page" style="display: none;">
  127 + <h3 class="uk-heading-line uk-heading-bullet"><span>临加明细统计</span></h3>
  128 + <div class="ct_cont" >
  129 + <div class="ct_search_form_wrap">
  130 + <form>
  131 + <div class="ct_field">
  132 + <label>公司:
  133 + <select class="uk-select" name="gsBm_eq">
  134 + </select>
  135 + </label>
  136 + </div>
  137 + <div class="ct_field">
  138 + <label>分公司:
  139 + <select class="uk-select" name="fgsBm_eq">
  140 + </select>
  141 + </label>
  142 + </div>
  143 + <div class="ct_field">
  144 + <label>线路:
  145 + <select class="uk-select" name="lineCode_eq">
  146 + </select>
  147 + </label>
  148 + </div>
  149 + <div class="ct_field">
  150 + <label>日期:
  151 + <input class="uk-input" name="rq" style="width: 220px;">
  152 + </label>
  153 + </div>
  154 + <div class="ct_field">
  155 + <button class="uk-button uk-button-primary search"><i uk-icon="icon: search"></i>搜索</button>
  156 + </div>
  157 + <div class="ct_field ct_field_bottom">
  158 + <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button>
  159 + </div>
  160 + <div class="ct_field ct_field_bottom">
  161 + <span uk-icon="icon: question" title="不统计进出场和2点间空驶" uk-tooltip="pos: bottom"></span>
  162 + </div>
  163 + </form>
  164 + </div>
  165 + <div class="ct_table_wrap day">
  166 + <table class="uk-table uk-table-small ct_destroy_sch_table_width" style="margin-bottom: 0;">
  167 + <thead>
  168 + <tr>
  169 + <th>日期</th>
  170 + <th>线路</th>
  171 + <th>车号</th>
  172 + <th>司机</th>
  173 + <th>售票员</th>
  174 + <th>班次</th>
  175 + <th>烂班公里</th>
  176 + <th>烂班时间</th>
  177 + <th>备注</th>
  178 + </tr>
  179 + </thead>
  180 + </table>
  181 + <div class="t_body_wrap">
  182 + <table class="uk-table uk-table-divider uk-table-hover uk-table-small ct_destroy_sch_table ct_destroy_sch_table_width">
  183 + <tbody>
  184 + </tbody>
  185 + </table>
  186 + </div>
  187 + </div>
  188 + </div>
  189 +</div>
  190 +
  191 +<script id="destroy_sch_list_temp" type="text/html">
  192 + {{each list as obj i}}
  193 + <tr>
  194 + <td>{{obj.rq}}</td>
  195 + <td>{{obj.lineName}}</td>
  196 + <td>{{obj.nbbm}}</td>
  197 + <td>{{obj.jGh}}</td>
  198 + <td>{{obj.sGh}}</td>
  199 + <td><a style="text-decoration: underline;">{{obj.size}}</a></td>
  200 + <td>{{obj.mileage}}</td>
  201 + <td>{{obj.timeStr}}</td>
  202 + <td>{{obj.remark}}</td>
  203 + </tr>
  204 + {{/each}}
  205 +</script>
  206 +
  207 +<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  208 +<script src="/assets/plugins/uk3.0/uikit.min.js"></script>
  209 +<script src="/assets/plugins/uk3.0/uikit-icons.min.js"></script>
  210 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" ></script>
  211 +<!-- EventProxy -->
  212 +<script src="/assets/js/eventproxy.js"></script>
  213 +<!-- art-template 模版引擎 -->
  214 +<script src="/assets/plugins/template.js"></script>
  215 +<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  216 +<!-- jquery.serializejson JSON序列化插件 -->
  217 +<script src="/assets/plugins/jquery.serializejson.js" merge="plugins"></script>
  218 +<!-- flatpickr -->
  219 +<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" ></script>
  220 +<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" ></script>
  221 +<script>
  222 +
  223 + var f = $('form', '');
  224 + //var page=0, pageSize=120;
  225 +
  226 + var ep = EventProxy.create('query_comps', 'query_lines', function () {
  227 + $('[name=gsBm_eq]', f).trigger('change');//公司change
  228 + query();
  229 +
  230 + $('.loading').remove();
  231 + $('.ct_page').show();
  232 + });
  233 +
  234 + //点击搜索
  235 + $('button.search', f).on('click', query);
  236 +
  237 + function query() {
  238 + $('button.search', f).attr('disabled', 'disabled');
  239 + var data = f.serializeJSON();
  240 + $('.ct_destroy_sch_table tbody').html('');
  241 + //开始结束时间
  242 + data.rq_ge = data.rq.substr(0, 10);
  243 + data.rq_le = data.rq.substr(13);
  244 + //data.order='t';
  245 + delete data.rq;
  246 +
  247 + $.get('/summary/temp_sch/all', data, function (rs) {
  248 + $('button.search', f).removeAttr('disabled');
  249 + if(!rs || rs.length==0)
  250 + return UIkit.notification('没有搜索到相关数据!!', 'danger');
  251 + $.each(rs, function () {
  252 + this.timeStr=moment(this.t).format('HH:mm')
  253 + });
  254 +
  255 + var htmlStr = template('destroy_sch_list_temp', {list: rs});
  256 + $('.ct_destroy_sch_table tbody').html(htmlStr);
  257 + $('.t_body_wrap').perfectScrollbar('update');
  258 + });
  259 + }
  260 +
  261 +
  262 + //日期选择框
  263 + var fs='YYYY-MM-DD'
  264 + , ets=moment().subtract(1, 'days').format(fs)
  265 + , sts=moment().subtract(3, 'days').format(fs);
  266 + flatpickr('.ct_search_form_wrap [name=rq]', {
  267 + mode: "range", dateFormat: "Y-m-d","locale": "zh", defaultDate: [sts, ets]
  268 + });
  269 + var comps;
  270 + //构建公司级联下拉框
  271 + $.get('/user/companyData', function (rs) {
  272 + comps = rs;
  273 + var opts = '';
  274 + for(var i=0,obj;obj=comps[i++];){
  275 + opts += '<option value="'+obj.companyCode+'">'+obj.companyName+'</option>';
  276 + }
  277 + $('[name=gsBm_eq]', f).html(opts);
  278 + ep.emit('query_comps');
  279 + });
  280 +
  281 + var lineMapps;
  282 + //加载线路信息
  283 + $.get('/line/all', {'destroy_eq': 0}, function (rs) {
  284 + rs.sort(function (a, b) {
  285 + return a.name.localeCompare(b.name);
  286 + });
  287 + lineMapps={};
  288 + var k;
  289 + $.each(rs, function () {
  290 + k = this.company+'_'+this.brancheCompany;
  291 + if(!lineMapps[k])
  292 + lineMapps[k]=[];
  293 + lineMapps[k].push(this);
  294 + });
  295 +
  296 + ep.emit('query_lines');
  297 + });
  298 +
  299 + $('[name=gsBm_eq]', f).on('change', function () {
  300 + var code = $(this).val(), subs=[];
  301 + $.each(comps, function () {
  302 + if(this.companyCode==code)
  303 + subs=this.children;
  304 + });
  305 +
  306 + var opts='';
  307 + $.each(subs, function () {
  308 + opts += '<option value="'+this.code+'">'+this.name+'</option>';
  309 + });
  310 + $('[name=fgsBm_eq]', f).html(opts).trigger('change');
  311 + });
  312 +
  313 + $('[name=fgsBm_eq]', f).on('change', function () {
  314 + var k = $('[name=gsBm_eq]', f).val() + '_' + $(this).val();
  315 + var array = lineMapps[k];
  316 + var opts = '<option value="">全部</option>';
  317 + if(array){
  318 + $.each(array, function () {
  319 + opts += '<option value="'+this.lineCode+'">'+this.name+'</option>';
  320 + });
  321 + }
  322 + $('[name=lineCode_eq]', f).html(opts);
  323 + });
  324 +
  325 + //
  326 + //滚动条
  327 + $('.t_body_wrap').perfectScrollbar({suppressScrollX: true});
  328 +
  329 + $(document).on('submit', 'form', function () {
  330 + return false;
  331 + });
  332 +
  333 + /**
  334 + * 导出
  335 + */
  336 + $('.export_excel').on('click', function () {
  337 + var data = f.serializeJSON();
  338 + data.rq_ge = data.rq.substr(0, 10);
  339 + data.rq_le = data.rq.substr(13);
  340 + data.order='t';
  341 + delete data.rq;
  342 +
  343 + window.open('/summary/temp_sch/excel?' + $.param(data));
  344 + });
  345 +
  346 +</script>
  347 +</body>
  348 +</html>
0 \ No newline at end of file 349 \ No newline at end of file
src/main/resources/static/real_control_v2/css/handicapped_style.css
@@ -22,6 +22,6 @@ @@ -22,6 +22,6 @@
22 background: rgb(15, 220, 220) !important; 22 background: rgb(15, 220, 220) !important;
23 } 23 }
24 24
25 -.ct_table>.ct_table_body{ 25 +.schedule-body .ct_table>.ct_table_body{
26 border-bottom: 1px solid #000000 !important; 26 border-bottom: 1px solid #000000 !important;
27 } 27 }
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -98,6 +98,14 @@ @@ -98,6 +98,14 @@
98 98
99 .line-schedule-table dl dt:nth-of-type(3), .line-schedule-table dl dd:nth-of-type(3) { 99 .line-schedule-table dl dt:nth-of-type(3), .line-schedule-table dl dd:nth-of-type(3) {
100 width: calc(2% + 66px); 100 width: calc(2% + 66px);
  101 + position: relative;
  102 +}
  103 +.line-schedule-table dl dd:nth-of-type(3)>i{
  104 + position: absolute;
  105 + color: #313030;
  106 + top: 1px;
  107 + right: 3px;
  108 + text-shadow: 0 -1px 0 rgba(0,0,0,.2);
101 } 109 }
102 110
103 .line-schedule-table dl dt:nth-of-type(4), .line-schedule-table dl dd:nth-of-type(4) { 111 .line-schedule-table dl dt:nth-of-type(4), .line-schedule-table dl dd:nth-of-type(4) {
@@ -545,7 +553,7 @@ dl.relevance-active.intimity dd:nth-child(n+2) { @@ -545,7 +553,7 @@ dl.relevance-active.intimity dd:nth-child(n+2) {
545 dl.relevance-active.intimity dd:nth-child(n+2) a { 553 dl.relevance-active.intimity dd:nth-child(n+2) a {
546 color: white !important; 554 color: white !important;
547 } 555 }
548 - 556 +/*
549 dl.relevance-active dd.tl-qrlb, 557 dl.relevance-active dd.tl-qrlb,
550 dl.relevance-active.intimity dd.tl-qrlb{ 558 dl.relevance-active.intimity dd.tl-qrlb{
551 background: linear-gradient(to right, #a9a911, #808000, #8baabf) !important; 559 background: linear-gradient(to right, #a9a911, #808000, #8baabf) !important;
@@ -587,7 +595,7 @@ dl.relevance-active.intimity dd.tl-xxrd { @@ -587,7 +595,7 @@ dl.relevance-active.intimity dd.tl-xxrd {
587 dl.relevance-active dd.tl-xxfc, 595 dl.relevance-active dd.tl-xxfc,
588 dl.relevance-active.intimity dd.tl-xxfc { 596 dl.relevance-active.intimity dd.tl-xxfc {
589 background: linear-gradient(to right, #8baabf, rgb(43, 185, 185), rgb(0,255,255)) !important; 597 background: linear-gradient(to right, #8baabf, rgb(43, 185, 185), rgb(0,255,255)) !important;
590 -} 598 +}*/
591 599
592 dl.relevance-active.intimity dd span.fcsj-diff { 600 dl.relevance-active.intimity dd span.fcsj-diff {
593 color: #616060; 601 color: #616060;
src/main/resources/static/real_control_v2/css/main.css
1 input::-webkit-outer-spin-button, 1 input::-webkit-outer-spin-button,
2 -input::-webkit-inner-spin-button{ 2 +input::-webkit-inner-spin-button {
3 display: none; 3 display: none;
4 } 4 }
5 5
@@ -7,9 +7,11 @@ input::-webkit-calendar-picker-indicator { @@ -7,9 +7,11 @@ input::-webkit-calendar-picker-indicator {
7 display: none; 7 display: none;
8 } 8 }
9 9
10 -input::-webkit-datetime-edit { padding: 1px; } 10 +input::-webkit-datetime-edit {
  11 + padding: 1px;
  12 +}
11 13
12 -.ps-container > .ps-scrollbar-y-rail{ 14 +.ps-container > .ps-scrollbar-y-rail {
13 z-index: 1 !important; 15 z-index: 1 !important;
14 } 16 }
15 17
@@ -18,6 +20,7 @@ input::-webkit-datetime-edit { padding: 1px; } @@ -18,6 +20,7 @@ input::-webkit-datetime-edit { padding: 1px; }
18 opacity: 0.6 !important; 20 opacity: 0.6 !important;
19 padding: 0 !important; 21 padding: 0 !important;
20 } 22 }
  23 +
21 /* ^_^ baidu map hide logo */ 24 /* ^_^ baidu map hide logo */
22 .anchorBL, .anchorBL, .amap-logo, .amap-copyright { 25 .anchorBL, .anchorBL, .amap-logo, .amap-copyright {
23 display: none; 26 display: none;
@@ -298,7 +301,7 @@ svg.line-chart g.merge-item text { @@ -298,7 +301,7 @@ svg.line-chart g.merge-item text {
298 .tooltip.multi-tooltip { 301 .tooltip.multi-tooltip {
299 width: 160px; 302 width: 160px;
300 display: inline-block; 303 display: inline-block;
301 - padding: 10px 0 10px 15px; 304 + padding: 10px 0 10px 12px;
302 border-right: 1px solid #eeeeee; 305 border-right: 1px solid #eeeeee;
303 border-bottom: 1px solid #eeeeee; 306 border-bottom: 1px solid #eeeeee;
304 } 307 }
@@ -749,8 +752,8 @@ li.map-panel { @@ -749,8 +752,8 @@ li.map-panel {
749 } 752 }
750 753
751 #schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) { 754 #schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) {
752 - width: 10%;  
753 - } 755 + width: 10%;
  756 +}
754 757
755 #schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) { 758 #schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) {
756 width: 21%; 759 width: 21%;
@@ -764,9 +767,6 @@ li.map-panel { @@ -764,9 +767,6 @@ li.map-panel {
764 width: 14%; 767 width: 14%;
765 } 768 }
766 769
767 -  
768 -  
769 -  
770 #schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) { 770 #schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) {
771 width: 5%; 771 width: 5%;
772 border-left: 1px solid #dedede; 772 border-left: 1px solid #dedede;
@@ -816,59 +816,57 @@ li.map-panel { @@ -816,59 +816,57 @@ li.map-panel {
816 border-top: 1px solid #ffe2b9; 816 border-top: 1px solid #ffe2b9;
817 } 817 }
818 818
819 -#cache_data_manage-modal .uk-table td{ 819 +#cache_data_manage-modal .uk-table td {
820 vertical-align: bottom; 820 vertical-align: bottom;
821 } 821 }
822 822
823 #cache_data_manage-modal .uk-table td, 823 #cache_data_manage-modal .uk-table td,
824 -#cache_data_manage-modal .uk-table th{ 824 +#cache_data_manage-modal .uk-table th {
825 padding: 8px 8px 6px; 825 padding: 8px 8px 6px;
826 } 826 }
827 827
828 -  
829 -.ps-help-panel{ 828 +.ps-help-panel {
830 color: grey; 829 color: grey;
831 padding: 5px 2px; 830 padding: 5px 2px;
832 } 831 }
833 832
834 -.ps-help-panel small{ 833 +.ps-help-panel small {
835 display: block; 834 display: block;
836 } 835 }
837 836
838 -  
839 -svg text.offline{ 837 +svg text.offline {
840 fill: #6f6a6a !important; 838 fill: #6f6a6a !important;
841 } 839 }
842 840
843 -svg rect.offline{ 841 +svg rect.offline {
844 stroke: #dbdada !important; 842 stroke: #dbdada !important;
845 fill: #dbdada !important; 843 fill: #dbdada !important;
846 } 844 }
847 845
848 -.tooltip .tooltip-container .title a>.abnormal-text{ 846 +.tooltip .tooltip-container .title a > .abnormal-text {
849 font-size: 14px; 847 font-size: 14px;
850 color: #ff5e5e; 848 color: #ff5e5e;
851 font-weight: 600; 849 font-weight: 600;
852 } 850 }
853 851
854 -#addChildTaskBtn{ 852 +#addChildTaskBtn {
855 margin-left: 5px; 853 margin-left: 5px;
856 color: #36729b; 854 color: #36729b;
857 padding: 1px 5px 1px 6px; 855 padding: 1px 5px 1px 6px;
858 } 856 }
859 857
860 -#addChildTaskBtn:hover{ 858 +#addChildTaskBtn:hover {
861 box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19); 859 box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19);
862 } 860 }
863 861
864 -.edit-icon{ 862 +.edit-icon {
865 color: #aba9a9; 863 color: #aba9a9;
866 font-size: 12px; 864 font-size: 12px;
867 margin-left: 5px; 865 margin-left: 5px;
868 display: none; 866 display: none;
869 } 867 }
870 868
871 -.operation-real-text{ 869 +.operation-real-text {
872 position: absolute; 870 position: absolute;
873 top: 9px; 871 top: 9px;
874 width: 100%; 872 width: 100%;
@@ -877,7 +875,7 @@ svg rect.offline{ @@ -877,7 +875,7 @@ svg rect.offline{
877 pointer-events: none; 875 pointer-events: none;
878 } 876 }
879 877
880 -.operation-real-text span{ 878 +.operation-real-text span {
881 padding: 15px; 879 padding: 15px;
882 background: #ff4f4f; 880 background: #ff4f4f;
883 color: white; 881 color: white;
@@ -885,75 +883,76 @@ svg rect.offline{ @@ -885,75 +883,76 @@ svg rect.offline{
885 border-radius: 1px 1px 4px 4px; 883 border-radius: 1px 1px 4px 4px;
886 } 884 }
887 885
888 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label{ 886 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label {
889 width: 120px; 887 width: 120px;
890 } 888 }
891 889
892 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls{ 890 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls {
893 margin-left: 125px; 891 margin-left: 125px;
894 } 892 }
895 893
896 -#oil_station-modal .uk-form-icon>[class*=uk-icon-]{ 894 +#oil_station-modal .uk-form-icon > [class*=uk-icon-] {
897 right: 23px; 895 right: 23px;
898 } 896 }
899 897
900 -#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip)>input{ 898 +#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip) > input {
901 padding-left: 10px !important; 899 padding-left: 10px !important;
902 } 900 }
903 901
904 -#oil_station-modal .uk-form-icon{ 902 +#oil_station-modal .uk-form-icon {
905 width: calc(100% - 145px); 903 width: calc(100% - 145px);
906 } 904 }
907 905
908 -#oil_station-modal .uk-icon-mile:before{ 906 +#oil_station-modal .uk-icon-mile:before {
909 content: '公里'; 907 content: '公里';
910 } 908 }
911 909
912 -#oil_station-modal .uk-icon-minute:before{ 910 +#oil_station-modal .uk-icon-minute:before {
913 content: '分钟'; 911 content: '分钟';
914 } 912 }
915 913
916 -option.oil_station_opt{ 914 +option.oil_station_opt {
917 color: red; 915 color: red;
918 } 916 }
919 917
920 -#oil_station-modal .uk-modal .uk-form.fv-form{ 918 +#oil_station-modal .uk-modal .uk-form.fv-form {
921 margin-bottom: 0 !important; 919 margin-bottom: 0 !important;
922 } 920 }
923 921
924 -#gb_wait_modal .uk-modal-spinner{ 922 +#gb_wait_modal .uk-modal-spinner {
925 top: 25px; 923 top: 25px;
926 - -webkit-transform: translate(-50%,0);  
927 - transform: translate(-50%,0); 924 + -webkit-transform: translate(-50%, 0);
  925 + transform: translate(-50%, 0);
928 } 926 }
929 927
930 -#gb_wait_modal .wait-modal-text{ 928 +#gb_wait_modal .wait-modal-text {
931 text-align: center; 929 text-align: center;
932 margin-top: 35px; 930 margin-top: 35px;
933 font-size: 15px; 931 font-size: 15px;
934 color: #635e5e; 932 color: #635e5e;
935 } 933 }
936 934
937 -.park-and-station-wrap{ 935 +.park-and-station-wrap {
938 margin-top: 9px; 936 margin-top: 9px;
939 border: 1px solid #3dce69; 937 border: 1px solid #3dce69;
940 width: 580px; 938 width: 580px;
941 padding: 12px; 939 padding: 12px;
942 border-radius: 5px; 940 border-radius: 5px;
943 } 941 }
944 -.park-and-station-wrap select{ 942 +
  943 +.park-and-station-wrap select {
945 width: auto !important; 944 width: auto !important;
946 } 945 }
947 946
948 /** 安全驾驶相关css */ 947 /** 安全驾驶相关css */
949 -.safe_driv_pop_wrap{ 948 +.safe_driv_pop_wrap {
950 position: absolute; 949 position: absolute;
951 right: 12px; 950 right: 12px;
952 bottom: 12px; 951 bottom: 12px;
953 z-index: 99; 952 z-index: 99;
954 } 953 }
955 954
956 -.safe_driv_pop{ 955 +.safe_driv_pop {
957 background: #d44b4b; 956 background: #d44b4b;
958 font-size: 15px; 957 font-size: 15px;
959 padding: 9px 10px 0; 958 padding: 9px 10px 0;
@@ -965,14 +964,14 @@ option.oil_station_opt{ @@ -965,14 +964,14 @@ option.oil_station_opt{
965 color: #f2f2f2; 964 color: #f2f2f2;
966 } 965 }
967 966
968 -.safe_driv_pop:hover{ 967 +.safe_driv_pop:hover {
969 background: #bc2a2a; 968 background: #bc2a2a;
970 } 969 }
971 970
972 -.safe_driv_pop .title{ 971 +.safe_driv_pop .title {
973 } 972 }
974 973
975 -.safe_driv_pop .desc{ 974 +.safe_driv_pop .desc {
976 display: block; 975 display: block;
977 font-size: 12px; 976 font-size: 12px;
978 color: #ff9d9d; 977 color: #ff9d9d;
@@ -985,24 +984,26 @@ option.oil_station_opt{ @@ -985,24 +984,26 @@ option.oil_station_opt{
985 width: 10px; 984 width: 10px;
986 background-color: #F5F5F5; 985 background-color: #F5F5F5;
987 } 986 }
  987 +
988 #formFragmentModal::-webkit-scrollbar-thumb { 988 #formFragmentModal::-webkit-scrollbar-thumb {
989 background-color: #000000; 989 background-color: #000000;
990 } 990 }
  991 +
991 #formFragmentModal::-webkit-scrollbar-track { 992 #formFragmentModal::-webkit-scrollbar-track {
992 border: 0; 993 border: 0;
993 background-color: #F5F5F5; 994 background-color: #F5F5F5;
994 border-radius: 0; 995 border-radius: 0;
995 } 996 }
996 997
997 -#formFragmentModal::-webkit-scrollbar-thumb{ 998 +#formFragmentModal::-webkit-scrollbar-thumb {
998 border: 5px solid rgb(226, 122, 122); 999 border: 5px solid rgb(226, 122, 122);
999 } 1000 }
1000 1001
1001 -#schedule-addsch_oil-modal select{ 1002 +#schedule-addsch_oil-modal select {
1002 height: 30px !important; 1003 height: 30px !important;
1003 } 1004 }
1004 1005
1005 -#oil_station-modal .input_clear_icon{ 1006 +#oil_station-modal .input_clear_icon {
1006 position: absolute; 1007 position: absolute;
1007 top: 6px; 1008 top: 6px;
1008 right: 108px; 1009 right: 108px;
@@ -1015,26 +1016,25 @@ option.oil_station_opt{ @@ -1015,26 +1016,25 @@ option.oil_station_opt{
1015 cursor: pointer; 1016 cursor: pointer;
1016 } 1017 }
1017 1018
1018 -#oil_station-modal .input_clear_icon:hover{ 1019 +#oil_station-modal .input_clear_icon:hover {
1019 color: #de2020; 1020 color: #de2020;
1020 } 1021 }
1021 1022
1022 -#oil_station-modal .input_clear_icon:before{ 1023 +#oil_station-modal .input_clear_icon:before {
1023 display: block; 1024 display: block;
1024 font-family: FontAwesome; 1025 font-family: FontAwesome;
1025 content: "\f057"; 1026 content: "\f057";
1026 } 1027 }
1027 1028
1028 -#oil_station-modal input.readonly{ 1029 +#oil_station-modal input.readonly {
1029 background: #dddddd; 1030 background: #dddddd;
1030 } 1031 }
1031 1032
1032 -  
1033 -.ct_tags{ 1033 +.ct_tags {
1034 margin-bottom: 12px; 1034 margin-bottom: 12px;
1035 } 1035 }
1036 1036
1037 -.ct_tags>span{ 1037 +.ct_tags > span {
1038 padding: 3px 7px; 1038 padding: 3px 7px;
1039 background: #e8e8e8; 1039 background: #e8e8e8;
1040 color: #3a3939; 1040 color: #3a3939;
@@ -1042,21 +1042,21 @@ option.oil_station_opt{ @@ -1042,21 +1042,21 @@ option.oil_station_opt{
1042 margin-right: 5px; 1042 margin-right: 5px;
1043 } 1043 }
1044 1044
1045 -.ct_tags>span.active{ 1045 +.ct_tags > span.active {
1046 background: #62a9e1; 1046 background: #62a9e1;
1047 color: white; 1047 color: white;
1048 box-shadow: 0 0 4px rgba(0, 0, 0, 0.35); 1048 box-shadow: 0 0 4px rgba(0, 0, 0, 0.35);
1049 } 1049 }
1050 1050
1051 -.ct_tags>span.active:before{ 1051 +.ct_tags > span.active:before {
1052 content: "\f00c"; 1052 content: "\f00c";
1053 font-family: FontAwesome; 1053 font-family: FontAwesome;
1054 margin-right: 2px; 1054 margin-right: 2px;
1055 font-size: 13px; 1055 font-size: 13px;
1056 } 1056 }
1057 1057
1058 -.ct_tags>span:hover{  
1059 - box-shadow: 0 0 4px rgba(0,0,0,.3); 1058 +.ct_tags > span:hover {
  1059 + box-shadow: 0 0 4px rgba(0, 0, 0, .3);
1060 } 1060 }
1061 1061
1062 span.late-badge { 1062 span.late-badge {
@@ -1067,48 +1067,51 @@ span.late-badge { @@ -1067,48 +1067,51 @@ span.late-badge {
1067 margin-left: 2px; 1067 margin-left: 2px;
1068 } 1068 }
1069 1069
1070 -dl.intimity span.late-badge{ 1070 +dl.intimity span.late-badge {
1071 color: #fbfbfb; 1071 color: #fbfbfb;
1072 } 1072 }
1073 1073
1074 /** badge tooltip */ 1074 /** badge tooltip */
1075 .uk-badge.c_task:hover, 1075 .uk-badge.c_task:hover,
1076 -.uk-badge.sch_region:hover{ 1076 +.uk-badge.sch_region:hover {
1077 background-image: none; 1077 background-image: none;
1078 background: #38b3e1; 1078 background: #38b3e1;
1079 border: 1px solid #7ebad1; 1079 border: 1px solid #7ebad1;
1080 } 1080 }
1081 1081
1082 -.uk-badge.out:hover{ 1082 +.uk-badge.out:hover {
1083 background-image: none; 1083 background-image: none;
1084 background: #8fc650; 1084 background: #8fc650;
1085 border: 1px solid #949f86; 1085 border: 1px solid #949f86;
1086 } 1086 }
1087 1087
1088 -.uk-badge.in:hover{ 1088 +.uk-badge.in:hover {
1089 background-image: none; 1089 background-image: none;
1090 background: #fabc64; 1090 background: #fabc64;
1091 border: 1px solid #a68c67; 1091 border: 1px solid #a68c67;
1092 } 1092 }
1093 1093
1094 -.qtip.sch-badge-tip{  
1095 - max-width: 500px; 1094 +.qtip.sch-badge-tip {
  1095 + max-width: 700px;
1096 } 1096 }
1097 1097
1098 .tip_task_list { 1098 .tip_task_list {
1099 - width: 460px; 1099 + width: 530px;
1100 margin-bottom: -10px; 1100 margin-bottom: -10px;
1101 } 1101 }
1102 -.tip_task_list dl{ 1102 +
  1103 +.tip_task_list dl {
1103 font-size: 0; 1104 font-size: 0;
1104 border-bottom: 1px solid #e6e6e6; 1105 border-bottom: 1px solid #e6e6e6;
1105 margin: 0; 1106 margin: 0;
1106 } 1107 }
1107 -.tip_task_list dl:last-child{ 1108 +
  1109 +.tip_task_list dl:last-child {
1108 border-bottom: none; 1110 border-bottom: none;
1109 } 1111 }
  1112 +
1110 .tip_task_list dl dt, 1113 .tip_task_list dl dt,
1111 -.tip_task_list dl dd{ 1114 +.tip_task_list dl dd {
1112 display: inline-block; 1115 display: inline-block;
1113 font-size: 13px; 1116 font-size: 13px;
1114 white-space: nowrap; 1117 white-space: nowrap;
@@ -1118,55 +1121,72 @@ dl.intimity span.late-badge{ @@ -1118,55 +1121,72 @@ dl.intimity span.late-badge{
1118 line-height: 24px; 1121 line-height: 24px;
1119 } 1122 }
1120 1123
1121 -.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1){  
1122 - width: 19%; 1124 +.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1) {
  1125 + width: 38px;
  1126 + border-right: 1px solid #c8c8c8;
1123 } 1127 }
1124 -.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2){  
1125 - width: 12%; 1128 +
  1129 +.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2) {
  1130 + width: 18%;
  1131 + text-indent: 5px;
1126 } 1132 }
1127 -.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3){  
1128 - width: 28%; 1133 +
  1134 +.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3) {
  1135 + width: 11%;
1129 } 1136 }
1130 -.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4){  
1131 - width: 28%; 1137 +
  1138 +.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4) {
  1139 + width: 25%;
1132 } 1140 }
1133 -.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5){  
1134 - width: 13%; 1141 +
  1142 +.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5) {
  1143 + width: 25%;
  1144 +}
  1145 +
  1146 +.tip_task_list dl dt:nth-of-type(6), .tip_task_list dl dd:nth-of-type(6) {
  1147 +
1135 } 1148 }
1136 1149
1137 -.tip_task_list dl.service{ 1150 +.tip_task_list dl dd:nth-of-type(1) a {
  1151 + color: #3c3c3c;
  1152 + text-decoration: underline;
  1153 + font-size: 12px;
  1154 +}
  1155 +
  1156 +.tip_task_list dl.service {
1138 color: blue; 1157 color: blue;
1139 } 1158 }
1140 -.tip_task_list dl.service.destroy{ 1159 +
  1160 +.tip_task_list dl.service.destroy {
1141 color: red; 1161 color: red;
1142 } 1162 }
1143 1163
1144 -.tip_task_list dl.service.temp_add{ 1164 +.tip_task_list dl.service.temp_add {
1145 color: #9C27B0; 1165 color: #9C27B0;
1146 } 1166 }
1147 1167
1148 -.tip_task_list dl span{ 1168 +.tip_task_list dl span {
1149 margin: 0; 1169 margin: 0;
1150 width: auto; 1170 width: auto;
1151 } 1171 }
1152 1172
1153 -ul.left_tabs_lg{ 1173 +ul.left_tabs_lg {
1154 border: 1px solid #efeded; 1174 border: 1px solid #efeded;
1155 height: 100%; 1175 height: 100%;
1156 background: #fafafa; 1176 background: #fafafa;
1157 } 1177 }
1158 1178
1159 -ul.left_tabs_lg li{ 1179 +ul.left_tabs_lg li {
1160 line-height: 40px; 1180 line-height: 40px;
1161 font-size: 15px; 1181 font-size: 15px;
1162 } 1182 }
1163 1183
1164 -#schedule-addsch-modal .uk-modal-footer{ 1184 +#schedule-addsch-modal .uk-modal-footer {
1165 border-top: none; 1185 border-top: none;
1166 background: none; 1186 background: none;
1167 } 1187 }
1168 1188
1169 -.ct_line_lp_badge{ 1189 +.ct_line_lp_badge {
1170 float: left; 1190 float: left;
1171 margin-top: 6px; 1191 margin-top: 6px;
1172 background: #e0e0e0; 1192 background: #e0e0e0;
@@ -1174,94 +1194,111 @@ ul.left_tabs_lg li{ @@ -1174,94 +1194,111 @@ ul.left_tabs_lg li{
1174 border-radius: 3px; 1194 border-radius: 3px;
1175 } 1195 }
1176 1196
1177 -.uk-badge.sch_ldks{ 1197 +.uk-badge.sch_ldks {
1178 background: #8c8c8c; 1198 background: #8c8c8c;
1179 - background-image: linear-gradient(to bottom,#a7a7a7,#8c8c8c); 1199 + background-image: linear-gradient(to bottom, #a7a7a7, #8c8c8c);
1180 } 1200 }
1181 1201
1182 -.ct_layer_modal{ 1202 +.ct_layer_modal {
1183 background: #e5e5e5; 1203 background: #e5e5e5;
1184 height: 100%; 1204 height: 100%;
1185 width: 100%; 1205 width: 100%;
1186 overflow: auto; 1206 overflow: auto;
1187 } 1207 }
1188 1208
1189 -.layui-layer-setwin{ 1209 +.layui-layer-setwin {
1190 1210
1191 } 1211 }
1192 1212
1193 -.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1){ 1213 +.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1) {
1194 width: 7%; 1214 width: 7%;
1195 text-indent: 10px; 1215 text-indent: 10px;
1196 } 1216 }
1197 -.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2){ 1217 +
  1218 +.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2) {
1198 width: 7%; 1219 width: 7%;
1199 } 1220 }
1200 -.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3){ 1221 +
  1222 +.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3) {
1201 width: 8%; 1223 width: 8%;
1202 } 1224 }
1203 -.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4){ 1225 +
  1226 +.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4) {
1204 width: 5%; 1227 width: 5%;
1205 } 1228 }
1206 -.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5){ 1229 +
  1230 +.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5) {
1207 width: 4%; 1231 width: 4%;
1208 } 1232 }
1209 -.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6){ 1233 +
  1234 +.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6) {
1210 width: 4%; 1235 width: 4%;
1211 } 1236 }
1212 -.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7){ 1237 +
  1238 +.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7) {
1213 width: 4%; 1239 width: 4%;
1214 } 1240 }
1215 -.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8){ 1241 +
  1242 +.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8) {
1216 width: 5%; 1243 width: 5%;
1217 } 1244 }
1218 -.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9){ 1245 +
  1246 +.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9) {
1219 width: 5%; 1247 width: 5%;
1220 } 1248 }
1221 -.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10){ 1249 +
  1250 +.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10) {
1222 width: 8%; 1251 width: 8%;
1223 } 1252 }
1224 -.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11){ 1253 +
  1254 +.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11) {
1225 width: 5%; 1255 width: 5%;
1226 } 1256 }
1227 -.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12){ 1257 +
  1258 +.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12) {
1228 width: 5%; 1259 width: 5%;
1229 } 1260 }
1230 -.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13){ 1261 +
  1262 +.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13) {
1231 width: 4%; 1263 width: 4%;
1232 } 1264 }
1233 -.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14){ 1265 +
  1266 +.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14) {
1234 width: 4%; 1267 width: 4%;
1235 } 1268 }
1236 -.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15){ 1269 +
  1270 +.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15) {
1237 width: 4%; 1271 width: 4%;
1238 } 1272 }
1239 -.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16){ 1273 +
  1274 +.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16) {
1240 width: 3%; 1275 width: 3%;
1241 } 1276 }
1242 -.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17){ 1277 +
  1278 +.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17) {
1243 width: 4%; 1279 width: 4%;
1244 } 1280 }
1245 -.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18){ 1281 +
  1282 +.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18) {
1246 width: 13%; 1283 width: 13%;
1247 } 1284 }
1248 1285
1249 -.uk-tooltip{ 1286 +.uk-tooltip {
1250 z-index: 29999999 !important; 1287 z-index: 29999999 !important;
1251 } 1288 }
1252 1289
1253 .device_config_table.ct_table dl dd, 1290 .device_config_table.ct_table dl dd,
1254 -.device_config_table.ct_table dl dt{ 1291 +.device_config_table.ct_table dl dt {
1255 border-right: 1px solid #dedede !important; 1292 border-right: 1px solid #dedede !important;
1256 } 1293 }
1257 1294
1258 -.device_configs_manager .search_form{ 1295 +.device_configs_manager .search_form {
1259 text-indent: 12px; 1296 text-indent: 12px;
1260 margin-bottom: 0; 1297 margin-bottom: 0;
1261 padding: 18px 5px; 1298 padding: 18px 5px;
1262 } 1299 }
1263 1300
1264 -.sub_task_form_v2{ 1301 +.sub_task_form_v2 {
1265 background: #f9f9f9; 1302 background: #f9f9f9;
1266 padding: 12px 15px; 1303 padding: 12px 15px;
1267 border-radius: 5px 0 5px 5px; 1304 border-radius: 5px 0 5px 5px;
@@ -1270,7 +1307,7 @@ ul.left_tabs_lg li{ @@ -1270,7 +1307,7 @@ ul.left_tabs_lg li{
1270 margin-bottom: 20px; 1307 margin-bottom: 20px;
1271 } 1308 }
1272 1309
1273 -.task_form_close_icon{ 1310 +.task_form_close_icon {
1274 background: #f9f9f9; 1311 background: #f9f9f9;
1275 padding: 0px 4px; 1312 padding: 0px 4px;
1276 position: absolute; 1313 position: absolute;
@@ -1285,41 +1322,41 @@ ul.left_tabs_lg li{ @@ -1285,41 +1322,41 @@ ul.left_tabs_lg li{
1285 transition: all .03s; 1322 transition: all .03s;
1286 } 1323 }
1287 1324
1288 -.task_form_close_icon:hover{ 1325 +.task_form_close_icon:hover {
1289 border: 1px solid #ff1515; 1326 border: 1px solid #ff1515;
1290 border-left: none; 1327 border-left: none;
1291 border-bottom: none; 1328 border-bottom: none;
1292 color: #e03e3e; 1329 color: #e03e3e;
1293 } 1330 }
1294 1331
1295 -.sub_task_form_v2:hover::after{ 1332 +.sub_task_form_v2:hover::after {
1296 color: #5f5b5b; 1333 color: #5f5b5b;
1297 } 1334 }
1298 1335
1299 -.sub_task_form_v2.uk-form-horizontal .uk-form-label{ 1336 +.sub_task_form_v2.uk-form-horizontal .uk-form-label {
1300 width: 80px; 1337 width: 80px;
1301 } 1338 }
1302 1339
1303 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls{ 1340 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls {
1304 margin-left: 85px; 1341 margin-left: 85px;
1305 } 1342 }
1306 1343
1307 .sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text], 1344 .sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],
1308 .sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time], 1345 .sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],
1309 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls select{ 1346 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls select {
1310 width: 100%; 1347 width: 100%;
1311 } 1348 }
1312 1349
1313 -#add-sub-task-main-modal .uk-modal-footer{ 1350 +#add-sub-task-main-modal .uk-modal-footer {
1314 background: none; 1351 background: none;
1315 border-top: none; 1352 border-top: none;
1316 } 1353 }
1317 1354
1318 -#add-sub-task-main-modal .uk-grid+.uk-grid{ 1355 +#add-sub-task-main-modal .uk-grid + .uk-grid {
1319 margin-top: 12px; 1356 margin-top: 12px;
1320 } 1357 }
1321 1358
1322 -#add-sub-task-main-modal .plus_icon_span{ 1359 +#add-sub-task-main-modal .plus_icon_span {
1323 font-size: 26px; 1360 font-size: 26px;
1324 color: #b2b2b2; 1361 color: #b2b2b2;
1325 padding: 10px 64px; 1362 padding: 10px 64px;
@@ -1330,26 +1367,26 @@ ul.left_tabs_lg li{ @@ -1330,26 +1367,26 @@ ul.left_tabs_lg li{
1330 cursor: pointer; 1367 cursor: pointer;
1331 } 1368 }
1332 1369
1333 -#add-sub-task-main-modal .uk-animation-fade{ 1370 +#add-sub-task-main-modal .uk-animation-fade {
1334 animation-duration: .3s; 1371 animation-duration: .3s;
1335 } 1372 }
1336 1373
1337 -#add-sub-task-main-modal .forms{  
1338 - max-height: 488px; 1374 +#add-sub-task-main-modal .forms {
  1375 + max-height: 642px;
1339 overflow-y: auto; 1376 overflow-y: auto;
1340 overflow-x: hidden; 1377 overflow-x: hidden;
1341 padding: 8px 8px 0 0; 1378 padding: 8px 8px 0 0;
1342 } 1379 }
1343 1380
1344 -.add_custom_wrap .forms .sub_task_form_v2:last-child{ 1381 +.add_custom_wrap .forms .sub_task_form_v2:last-child {
1345 margin-bottom: 0; 1382 margin-bottom: 0;
1346 } 1383 }
1347 1384
1348 -.sub_task_form_v2.destroy_form{ 1385 +.sub_task_form_v2.destroy_form {
1349 background-color: #fff5f4 !important; 1386 background-color: #fff5f4 !important;
1350 } 1387 }
1351 1388
1352 -.uk-form>.half_change_car_box{ 1389 +.uk-form > .half_change_car_box {
1353 margin: -10px 0 15px; 1390 margin: -10px 0 15px;
1354 padding: 3px 5px; 1391 padding: 3px 5px;
1355 display: inline-block; 1392 display: inline-block;
@@ -1357,29 +1394,29 @@ ul.left_tabs_lg li{ @@ -1357,29 +1394,29 @@ ul.left_tabs_lg li{
1357 color: #918f8f; 1394 color: #918f8f;
1358 } 1395 }
1359 1396
1360 -.half_change_car_box input[type=checkbox]{ 1397 +.half_change_car_box input[type=checkbox] {
1361 vertical-align: top; 1398 vertical-align: top;
1362 } 1399 }
1363 1400
1364 -.uk-form>.half_change_car_box.active{ 1401 +.uk-form > .half_change_car_box.active {
1365 background: #4CAF50; 1402 background: #4CAF50;
1366 color: #fff; 1403 color: #fff;
1367 } 1404 }
1368 1405
1369 -.uk-form>.half_change_car_box.active input[type=checkbox]{ 1406 +.uk-form > .half_change_car_box.active input[type=checkbox] {
1370 background: #4caf50; 1407 background: #4caf50;
1371 border-color: #4caf50; 1408 border-color: #4caf50;
1372 } 1409 }
1373 1410
1374 -.uk-form>.half_change_car_box.active input[type=checkbox]:before{ 1411 +.uk-form > .half_change_car_box.active input[type=checkbox]:before {
1375 color: #ffffff; 1412 color: #ffffff;
1376 } 1413 }
1377 1414
1378 -.sub_task_form_v2.change_car{ 1415 +.sub_task_form_v2.change_car {
1379 z-index: 99; 1416 z-index: 99;
1380 } 1417 }
1381 1418
1382 -.st_range_top_form{ 1419 +.st_range_top_form {
1383 padding: 0 0 15px 5px; 1420 padding: 0 0 15px 5px;
1384 border: 1px solid #c4bb76; 1421 border: 1px solid #c4bb76;
1385 background: #e5e1c1; 1422 background: #e5e1c1;
@@ -1387,46 +1424,46 @@ ul.left_tabs_lg li{ @@ -1387,46 +1424,46 @@ ul.left_tabs_lg li{
1387 box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19); 1424 box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);
1388 } 1425 }
1389 1426
1390 -.st_range_top_form .uk-form-row{ 1427 +.st_range_top_form .uk-form-row {
1391 margin-top: 20px; 1428 margin-top: 20px;
1392 } 1429 }
1393 1430
1394 -.uk-form-horizontal.st_range_top_form .uk-form-label{ 1431 +.uk-form-horizontal.st_range_top_form .uk-form-label {
1395 width: 80px; 1432 width: 80px;
1396 } 1433 }
1397 1434
1398 -.uk-form-horizontal.st_range_top_form .uk-form-controls{ 1435 +.uk-form-horizontal.st_range_top_form .uk-form-controls {
1399 margin-left: 84px; 1436 margin-left: 84px;
1400 } 1437 }
1401 1438
1402 -.uk-form-horizontal.st_range_top_form .uk-form-controls select{ 1439 +.uk-form-horizontal.st_range_top_form .uk-form-controls select {
1403 width: calc(100% - 2px); 1440 width: calc(100% - 2px);
1404 } 1441 }
1405 1442
1406 -.sub_task_form_v2.service_st_form{ 1443 +.sub_task_form_v2.service_st_form {
1407 background: #f4faff; 1444 background: #f4faff;
1408 } 1445 }
1409 1446
1410 -.uk-modal .uk-form.fv-form.sub_task_form_v2{ 1447 +.uk-modal .uk-form.fv-form.sub_task_form_v2 {
1411 margin-bottom: 20px !important; 1448 margin-bottom: 20px !important;
1412 } 1449 }
1413 1450
1414 -.sub_task_table_wrap .ct_table>.ct_table_body{ 1451 +.sub_task_table_wrap .ct_table > .ct_table_body {
1415 border-bottom: none; 1452 border-bottom: none;
1416 } 1453 }
1417 1454
1418 -.err_panel{ 1455 +.err_panel {
1419 font-size: 12px; 1456 font-size: 12px;
1420 color: #7e7d7d; 1457 color: #7e7d7d;
1421 font-family: 微软雅黑; 1458 font-family: 微软雅黑;
1422 margin-top: 5px; 1459 margin-top: 5px;
1423 } 1460 }
1424 1461
1425 -#schedule-lp_change-modal .ct_table dl{ 1462 +#schedule-lp_change-modal .ct_table dl {
1426 height: 35px; 1463 height: 35px;
1427 } 1464 }
1428 1465
1429 -#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt{ 1466 +#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt {
1430 line-height: 35px; 1467 line-height: 35px;
1431 } 1468 }
1432 1469
@@ -1442,7 +1479,7 @@ ul.left_tabs_lg li{ @@ -1442,7 +1479,7 @@ ul.left_tabs_lg li{
1442 font-weight: 600; 1479 font-weight: 600;
1443 }*/ 1480 }*/
1444 1481
1445 -.sub_task_form_v2:before{ 1482 +.sub_task_form_v2:before {
1446 position: absolute; 1483 position: absolute;
1447 top: -7px; 1484 top: -7px;
1448 font-size: 12px; 1485 font-size: 12px;
@@ -1451,19 +1488,19 @@ ul.left_tabs_lg li{ @@ -1451,19 +1488,19 @@ ul.left_tabs_lg li{
1451 line-height: 14px; 1488 line-height: 14px;
1452 } 1489 }
1453 1490
1454 -.sub_task_form_v2.destroy_form:before{ 1491 +.sub_task_form_v2.destroy_form:before {
1455 content: '烂班' !important; 1492 content: '烂班' !important;
1456 color: #f14235 !important; 1493 color: #f14235 !important;
1457 background: #ffffff !important; 1494 background: #ffffff !important;
1458 } 1495 }
1459 1496
1460 -.sub_task_form_v2.service_form:before{ 1497 +.sub_task_form_v2.service_form:before {
1461 content: '营运'; 1498 content: '营运';
1462 color: #2196F3; 1499 color: #2196F3;
1463 background: #ffffff; 1500 background: #ffffff;
1464 } 1501 }
1465 1502
1466 -.sub_task_form_v2.service_form.temp_service:before{ 1503 +.sub_task_form_v2.service_form.temp_service:before {
1467 content: '营运 (临加)'; 1504 content: '营运 (临加)';
1468 color: #9C27B0; 1505 color: #9C27B0;
1469 background: #ffffff; 1506 background: #ffffff;
@@ -1473,13 +1510,13 @@ ul.left_tabs_lg li{ @@ -1473,13 +1510,13 @@ ul.left_tabs_lg li{
1473 background: #faf0fd; 1510 background: #faf0fd;
1474 } 1511 }
1475 1512
1476 -.sub_task_form_v2.empty_form:before{ 1513 +.sub_task_form_v2.empty_form:before {
1477 content: '空驶'; 1514 content: '空驶';
1478 color: #928f92; 1515 color: #928f92;
1479 background: #ffffff; 1516 background: #ffffff;
1480 } 1517 }
1481 1518
1482 -.sub_task_form_v2.service_form{ 1519 +.sub_task_form_v2.service_form {
1483 background: #f4faff; 1520 background: #f4faff;
1484 } 1521 }
1485 1522
@@ -1490,52 +1527,52 @@ ul.left_tabs_lg li{ @@ -1490,52 +1527,52 @@ ul.left_tabs_lg li{
1490 .sub_task_form_v2.repeat_main{ 1527 .sub_task_form_v2.repeat_main{
1491 background: #f4faff; 1528 background: #f4faff;
1492 }*/ 1529 }*/
1493 -.footer_tools{ 1530 +.footer_tools {
1494 position: absolute; 1531 position: absolute;
1495 left: 235px; 1532 left: 235px;
1496 bottom: 19px; 1533 bottom: 19px;
1497 } 1534 }
1498 1535
1499 -.footer_mileage_count{ 1536 +.footer_mileage_count {
1500 border: 1px solid #f2f2f2; 1537 border: 1px solid #f2f2f2;
1501 padding: 5px; 1538 padding: 5px;
1502 box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19); 1539 box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19);
1503 display: inline-block; 1540 display: inline-block;
1504 } 1541 }
1505 1542
1506 -.footer_mileage_count>span{ 1543 +.footer_mileage_count > span {
1507 padding: 2px 5px; 1544 padding: 2px 5px;
1508 } 1545 }
1509 1546
1510 -.footer_mileage_count>span.service_sum{ 1547 +.footer_mileage_count > span.service_sum {
1511 color: #2196F3; 1548 color: #2196F3;
1512 } 1549 }
1513 1550
1514 -.footer_mileage_count>span.empty_sum{ 1551 +.footer_mileage_count > span.empty_sum {
1515 color: #636363; 1552 color: #636363;
1516 } 1553 }
1517 1554
1518 -.footer_mileage_count>span.destroy_sum{ 1555 +.footer_mileage_count > span.destroy_sum {
1519 color: #f5574b; 1556 color: #f5574b;
1520 } 1557 }
1521 1558
1522 -.station_to_park_link{ 1559 +.station_to_park_link {
1523 display: inline-block; 1560 display: inline-block;
1524 margin-left: 15px; 1561 margin-left: 15px;
1525 vertical-align: bottom; 1562 vertical-align: bottom;
1526 font-size: 12px; 1563 font-size: 12px;
1527 } 1564 }
1528 1565
1529 -.station_to_park_link>a{ 1566 +.station_to_park_link > a {
1530 color: #607D8B; 1567 color: #607D8B;
1531 } 1568 }
1532 1569
1533 #station_to_park-modal.ct-form-modal form input[type=text], 1570 #station_to_park-modal.ct-form-modal form input[type=text],
1534 -#station_to_park-modal.ct-form-modal form select{ 1571 +#station_to_park-modal.ct-form-modal form select {
1535 width: auto; 1572 width: auto;
1536 } 1573 }
1537 1574
1538 -.s_2_park_form_wrap{ 1575 +.s_2_park_form_wrap {
1539 background: #fafafa; 1576 background: #fafafa;
1540 border: 1px solid #e5e5e5; 1577 border: 1px solid #e5e5e5;
1541 padding: 7px 16px; 1578 padding: 7px 16px;
@@ -1543,7 +1580,7 @@ ul.left_tabs_lg li{ @@ -1543,7 +1580,7 @@ ul.left_tabs_lg li{
1543 position: relative; 1580 position: relative;
1544 } 1581 }
1545 1582
1546 -.s_2_park_form_wrap .ct_close{ 1583 +.s_2_park_form_wrap .ct_close {
1547 position: absolute; 1584 position: absolute;
1548 top: -12px; 1585 top: -12px;
1549 padding: 0 4px; 1586 padding: 0 4px;
@@ -1554,42 +1591,42 @@ ul.left_tabs_lg li{ @@ -1554,42 +1591,42 @@ ul.left_tabs_lg li{
1554 cursor: pointer; 1591 cursor: pointer;
1555 } 1592 }
1556 1593
1557 -.s_2_park_form_wrap .ct_close:hover{ 1594 +.s_2_park_form_wrap .ct_close:hover {
1558 background: #e5e5e5; 1595 background: #e5e5e5;
1559 color: #fd6e6e; 1596 color: #fd6e6e;
1560 } 1597 }
1561 1598
1562 -.s_2_park_form_wrap label{ 1599 +.s_2_park_form_wrap label {
1563 color: #666; 1600 color: #666;
1564 font-size: 13px; 1601 font-size: 13px;
1565 } 1602 }
1566 1603
1567 -#station_to_park-modal.ct-form-modal form input[readonly]{ 1604 +#station_to_park-modal.ct-form-modal form input[readonly] {
1568 background: #fafafa; 1605 background: #fafafa;
1569 } 1606 }
1570 1607
1571 -.s_2_park_form_wrap .bottom_label{ 1608 +.s_2_park_form_wrap .bottom_label {
1572 margin-top: 25px; 1609 margin-top: 25px;
1573 display: block; 1610 display: block;
1574 } 1611 }
1575 1612
1576 -.s_2_park_form_wrap .bottom_label_2{ 1613 +.s_2_park_form_wrap .bottom_label_2 {
1577 margin-top: 4px; 1614 margin-top: 4px;
1578 display: block; 1615 display: block;
1579 } 1616 }
1580 1617
1581 -.ct_describe{ 1618 +.ct_describe {
1582 font-size: 12px; 1619 font-size: 12px;
1583 color: #909090; 1620 color: #909090;
1584 font-family: FontAwesome; 1621 font-family: FontAwesome;
1585 } 1622 }
1586 1623
1587 -.ct_describe:before{ 1624 +.ct_describe:before {
1588 content: "\f059"; 1625 content: "\f059";
1589 margin-right: 3px; 1626 margin-right: 3px;
1590 } 1627 }
1591 1628
1592 -#add-sub-task-main-modal abbr{ 1629 +#add-sub-task-main-modal abbr {
1593 display: inline-block; 1630 display: inline-block;
1594 font-size: 12px; 1631 font-size: 12px;
1595 margin-left: 25px; 1632 margin-left: 25px;
@@ -1597,15 +1634,17 @@ ul.left_tabs_lg li{ @@ -1597,15 +1634,17 @@ ul.left_tabs_lg li{
1597 color: #929292; 1634 color: #929292;
1598 } 1635 }
1599 1636
1600 -#all-devices-modal .search-form input[type=text]{ 1637 +#all-devices-modal .search-form input[type=text] {
1601 width: 100px; 1638 width: 100px;
1602 } 1639 }
1603 1640
1604 -#all-devices-modal .auto-refresh{  
1605 - vertical-align: middle;margin-left: 5px;color: grey; 1641 +#all-devices-modal .auto-refresh {
  1642 + vertical-align: middle;
  1643 + margin-left: 5px;
  1644 + color: grey;
1606 } 1645 }
1607 1646
1608 -#all-devices-modal .auto-refresh.active{ 1647 +#all-devices-modal .auto-refresh.active {
1609 color: #405dff; 1648 color: #405dff;
1610 } 1649 }
1611 1650
@@ -1613,7 +1652,7 @@ ul.left_tabs_lg li{ @@ -1613,7 +1652,7 @@ ul.left_tabs_lg li{
1613 margin-top: 0 !important; 1652 margin-top: 0 !important;
1614 } 1653 }
1615 1654
1616 -#history-sch-maintain-modal .add_lp_link{ 1655 +#history-sch-maintain-modal .add_lp_link {
1617 display: inline-block; 1656 display: inline-block;
1618 vertical-align: bottom; 1657 vertical-align: bottom;
1619 margin-left: 15px; 1658 margin-left: 15px;
@@ -1621,107 +1660,107 @@ ul.left_tabs_lg li{ @@ -1621,107 +1660,107 @@ ul.left_tabs_lg li{
1621 font-size: 13px; 1660 font-size: 13px;
1622 } 1661 }
1623 1662
1624 -#schedule-tzrc-modal input[type=checkbox]{ 1663 +#schedule-tzrc-modal input[type=checkbox] {
1625 margin-right: 9px; 1664 margin-right: 9px;
1626 } 1665 }
1627 1666
1628 -#schedule-tzrc-modal span.ct_zt_yzx{ 1667 +#schedule-tzrc-modal span.ct_zt_yzx {
1629 color: #2196F3; 1668 color: #2196F3;
1630 font-size: 12px; 1669 font-size: 12px;
1631 } 1670 }
1632 1671
1633 -#schedule-tzrc-modal span.ct_zt_lb{ 1672 +#schedule-tzrc-modal span.ct_zt_lb {
1634 color: red; 1673 color: red;
1635 font-size: 12px; 1674 font-size: 12px;
1636 } 1675 }
1637 1676
1638 -#schedule-tzrc-modal span.ct_zt_zzzx{ 1677 +#schedule-tzrc-modal span.ct_zt_zzzx {
1639 font-size: 12px; 1678 font-size: 12px;
1640 color: #38ad3c; 1679 color: #38ad3c;
1641 } 1680 }
1642 1681
1643 -#schedule-tzrc-modal .tzrc_form{ 1682 +#schedule-tzrc-modal .tzrc_form {
1644 padding: 20px; 1683 padding: 20px;
1645 border: 1px solid #f0eded; 1684 border: 1px solid #f0eded;
1646 - box-shadow: 0px -3px 15px rgba(0,0,0,0.08); 1685 + box-shadow: 0px -3px 15px rgba(0, 0, 0, 0.08);
1647 background: #f9f9f9; 1686 background: #f9f9f9;
1648 } 1687 }
1649 1688
1650 -.uk-panel.ct_search_panel{ 1689 +.uk-panel.ct_search_panel {
1651 padding: 15px; 1690 padding: 15px;
1652 border: 1px solid #f0eded; 1691 border: 1px solid #f0eded;
1653 - box-shadow: 0px 3px 15px rgba(0,0,0,0.08); 1692 + box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.08);
1654 background: #f9f9f9; 1693 background: #f9f9f9;
1655 } 1694 }
1656 1695
1657 .sch-tzrc-table.ct_table dl.active, 1696 .sch-tzrc-table.ct_table dl.active,
1658 -.sch-tzrc-table.ct_table>.ct_table_body dl.active:hover{ 1697 +.sch-tzrc-table.ct_table > .ct_table_body dl.active:hover {
1659 background: #5bd460; 1698 background: #5bd460;
1660 color: white; 1699 color: white;
1661 } 1700 }
1662 1701
1663 -#schedule-tzrc-modal dl.active span.ct_zt_yzx{ 1702 +#schedule-tzrc-modal dl.active span.ct_zt_yzx {
1664 color: #545252; 1703 color: #545252;
1665 } 1704 }
1666 1705
1667 -#schedule-tzrc-modal dl.active span.ct_zt_lb{ 1706 +#schedule-tzrc-modal dl.active span.ct_zt_lb {
1668 color: #d64949; 1707 color: #d64949;
1669 } 1708 }
1670 1709
1671 -#schedule-tzrc-modal dl.active span.ct_zt_zzzx{ 1710 +#schedule-tzrc-modal dl.active span.ct_zt_zzzx {
1672 color: white; 1711 color: white;
1673 } 1712 }
1674 1713
1675 -#schedule-tzrc-modal dl.active input[type=checkbox]{ 1714 +#schedule-tzrc-modal dl.active input[type=checkbox] {
1676 border: 0; 1715 border: 0;
1677 } 1716 }
1678 1717
1679 -#schedule-tzrc-modal dl.active input[type=checkbox]:before{ 1718 +#schedule-tzrc-modal dl.active input[type=checkbox]:before {
1680 color: #ffffff; 1719 color: #ffffff;
1681 } 1720 }
1682 1721
1683 -.sch-search-autocom input{ 1722 +.sch-search-autocom input {
1684 padding: 0 !important; 1723 padding: 0 !important;
1685 height: 100% !important; 1724 height: 100% !important;
1686 } 1725 }
1687 1726
1688 -label.blue_checkbox{ 1727 +label.blue_checkbox {
1689 margin-left: 12px; 1728 margin-left: 12px;
1690 } 1729 }
1691 1730
1692 -label.blue_checkbox>input{ 1731 +label.blue_checkbox > input {
1693 width: 17px !important; 1732 width: 17px !important;
1694 height: 17px !important; 1733 height: 17px !important;
1695 } 1734 }
1696 1735
1697 -label.blue_checkbox>input:checked:before,  
1698 -label.blue_checkbox>input:indeterminate:before{ 1736 +label.blue_checkbox > input:checked:before,
  1737 +label.blue_checkbox > input:indeterminate:before {
1699 line-height: 15px !important; 1738 line-height: 15px !important;
1700 } 1739 }
1701 1740
1702 -dd.disabled{ 1741 +dd.disabled {
1703 color: #b5b3b3; 1742 color: #b5b3b3;
1704 } 1743 }
1705 1744
1706 -dl.active>dd.disabled{ 1745 +dl.active > dd.disabled {
1707 color: #ececec; 1746 color: #ececec;
1708 } 1747 }
1709 1748
1710 -#change_user_options-modal .user_info{ 1749 +#change_user_options-modal .user_info {
1711 width: 360px; 1750 width: 360px;
1712 margin: auto; 1751 margin: auto;
1713 } 1752 }
1714 1753
1715 -.display_hide{ 1754 +.display_hide {
1716 display: none; 1755 display: none;
1717 } 1756 }
1718 1757
1719 -.ct_eye_icon{ 1758 +.ct_eye_icon {
1720 font-size: 16px; 1759 font-size: 16px;
1721 cursor: pointer; 1760 cursor: pointer;
1722 } 1761 }
1723 1762
1724 -.ct_eye_icon.active{ 1763 +.ct_eye_icon.active {
1725 color: #444; 1764 color: #444;
1726 } 1765 }
1727 1766
@@ -1730,7 +1769,7 @@ dl.active&gt;dd.disabled{ @@ -1730,7 +1769,7 @@ dl.active&gt;dd.disabled{
1730 height: 16px; 1769 height: 16px;
1731 } 1770 }
1732 1771
1733 -.range_2_normal_tt{ 1772 +.range_2_normal_tt {
1734 margin-bottom: 15px; 1773 margin-bottom: 15px;
1735 border-top: 1px dashed #c7c7c7; 1774 border-top: 1px dashed #c7c7c7;
1736 color: #a6a6a6; 1775 color: #a6a6a6;
@@ -1738,7 +1777,7 @@ dl.active&gt;dd.disabled{ @@ -1738,7 +1777,7 @@ dl.active&gt;dd.disabled{
1738 padding-bottom: 5px; 1777 padding-bottom: 5px;
1739 } 1778 }
1740 1779
1741 -.cancel_link{ 1780 +.cancel_link {
1742 font-size: 12px; 1781 font-size: 12px;
1743 margin-left: 15px; 1782 margin-left: 15px;
1744 vertical-align: bottom; 1783 vertical-align: bottom;
@@ -1748,7 +1787,7 @@ dl.active&gt;dd.disabled{ @@ -1748,7 +1787,7 @@ dl.active&gt;dd.disabled{
1748 right: 0; 1787 right: 0;
1749 } 1788 }
1750 1789
1751 -.edit_link{ 1790 +.edit_link {
1752 font-size: 12px; 1791 font-size: 12px;
1753 margin-left: 15px; 1792 margin-left: 15px;
1754 vertical-align: bottom; 1793 vertical-align: bottom;
@@ -1769,7 +1808,7 @@ dl.active&gt;dd.disabled{ @@ -1769,7 +1808,7 @@ dl.active&gt;dd.disabled{
1769 min-height: 40px; 1808 min-height: 40px;
1770 } 1809 }
1771 1810
1772 -.c_b_abnorm_notice:before{ 1811 +.c_b_abnorm_notice:before {
1773 content: "-超速报警-"; 1812 content: "-超速报警-";
1774 color: #000000; 1813 color: #000000;
1775 font-size: 12px; 1814 font-size: 12px;
@@ -1790,14 +1829,201 @@ dl.active&gt;dd.disabled{ @@ -1790,14 +1829,201 @@ dl.active&gt;dd.disabled{
1790 cursor: pointer; 1829 cursor: pointer;
1791 } 1830 }
1792 1831
1793 -.c_b_abnorm_notice>.c_b_item:first-child{ 1832 +.c_b_abnorm_notice > .c_b_item:first-child {
1794 margin-top: 20px; 1833 margin-top: 20px;
1795 } 1834 }
1796 1835
1797 -.c_b_item.over{ 1836 +.c_b_item.over {
1798 color: grey; 1837 color: grey;
1799 } 1838 }
1800 1839
1801 -.c_b_item>span.c_b_over{ 1840 +.c_b_item > span.c_b_over {
1802 float: right; 1841 float: right;
  1842 +}
  1843 +
  1844 +.mileage_elec_panel {
  1845 + position: absolute;
  1846 + width: 100%;
  1847 + /*height: 90px;*/
  1848 + z-index: 1;
  1849 + background: white;
  1850 + bottom: 0px;
  1851 + box-shadow: 1px 0px 15px rgba(90, 90, 90, 0.48);
  1852 + padding: 9px 15px;
  1853 + border-radius: 0 5px;
  1854 + color: #000;
  1855 +
  1856 + display: none;
  1857 +}
  1858 +
  1859 +.mileage_elec_panel ._title {
  1860 + margin: 5px 3px;
  1861 + font-size: 15px;
  1862 +}
  1863 +
  1864 +.mileage_elec_panel .LD_item {
  1865 + margin: 5px 0;
  1866 + font-family: 微软雅黑;
  1867 +}
  1868 +
  1869 +.mileage_elec_panel .LD_item > span {
  1870 + padding: 3px;
  1871 + display: inline-block;
  1872 + width: 85px;
  1873 +}
  1874 +
  1875 +.mileage_elec_panel .lp_name {
  1876 + padding: 0 5px;
  1877 + background: #f2f2f2;
  1878 + border-radius: 15px
  1879 +}
  1880 +
  1881 +.mileage_elec_panel .LD_item > span > a {
  1882 + color: #000;
  1883 +}
  1884 +
  1885 +.mileage_elec_panel .LD_item > span:nth-of-type(1) > a {
  1886 + color: blue;
  1887 +}
  1888 +
  1889 +/*.mileage_elec_panel .LD_item>span:nth-of-type(2)>a{
  1890 + color: #fa3a2c;
  1891 +}
  1892 +
  1893 +.mileage_elec_panel .LD_item>span:nth-of-type(3)>a{
  1894 + color: #515151;
  1895 +}*/
  1896 +
  1897 +.mileage_elec_panel hr {
  1898 + height: 1px;
  1899 + border: none;
  1900 + border-top: 1px dashed #b5b5b5;
  1901 +}
  1902 +
  1903 +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-label {
  1904 + width: 70px;
  1905 +}
  1906 +
  1907 +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-controls {
  1908 + margin-left: 75px;
  1909 +}
  1910 +
  1911 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid + .uk-grid,
  1912 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid-margin,
  1913 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid > * > .uk-panel + .uk-panel {
  1914 + margin-top: 22px;
  1915 +}
  1916 +
  1917 +.c_task_mileage_abnormal,
  1918 +.c_task_mileage_abnormal .ct_table > .ct_table_head dl,
  1919 +.c_task_mileage_abnormal .ct_table dl {
  1920 + background: #ffe7e7 !important;
  1921 +}
  1922 +
  1923 +.tip_task_count_dl {
  1924 + width: calc(100% + 22px) !important;
  1925 + margin-left: -11px !important;
  1926 + border-top: 1px solid #e6e6e6 !important;
  1927 +}
  1928 +
  1929 +.tip_task_count_dl > dd:last-child {
  1930 + width: calc(100% - 50px) !important;
  1931 + border-right: 0 !important;
  1932 + height: 35px !important;
  1933 + background: #f3f3f3;
  1934 + margin-bottom: -3px;
  1935 +}
  1936 +
  1937 +.tip_task_count_dl > dd:nth-of-type(1) {
  1938 + text-align: center;
  1939 + border-right: 0 !important;
  1940 + width: 48px !important;
  1941 +}
  1942 +
  1943 +.tip_task_count_dl > dd:nth-of-type(1) > i {
  1944 + padding: 6px;
  1945 + cursor: pointer;
  1946 +}
  1947 +
  1948 +.tip_task_count_dl > dd:nth-of-type(1) > i:hover {
  1949 + background: #ebebeb;
  1950 +}
  1951 +
  1952 +.tip_task_count_dl.c_task_error > dd:last-child {
  1953 + background: #ff8a81;
  1954 +}
  1955 +
  1956 +.tip_task_count_dl > dd > span {
  1957 + font-size: 13px;
  1958 + color: #000;
  1959 + height: 55px;
  1960 + display: inline-block;
  1961 + padding: 7px 0;
  1962 + border-radius: 0;
  1963 + text-indent: 12px;
  1964 +}
  1965 +
  1966 +.tip_task_list > dl:nth-last-child(2) {
  1967 + border-bottom: 0 !important;
  1968 +}
  1969 +
  1970 +.c_task_mileage_error {
  1971 + border: 1px solid rgba(218, 13, 13, 0.2);
  1972 + border-bottom-color: rgba(213, 37, 37, 0.3);
  1973 + background-image: -webkit-linear-gradient(top, #ff6155, #F44336);
  1974 +}
  1975 +
  1976 +.uk-badge.c_task.c_task_mileage_error:hover:hover {
  1977 + background-image: none;
  1978 + background: #ff6155;
  1979 + border: 1px solid rgba(213, 37, 37, 0.3);
  1980 +}
  1981 +
  1982 +.grey_link {
  1983 + color: #adabab;
  1984 +}
  1985 +
  1986 +#sch_car_info_all-modal tr.ct_active {
  1987 + -moz-animation: twinkle_bg .9s ease-in-out;
  1988 + -webkit-animation: twinkle_bg .9s ease-in-out;
  1989 +}
  1990 +
  1991 +#sch_car_info_all-modal .uk-table-hover tr:hover{
  1992 + background: #dddddd;
  1993 +}
  1994 +
  1995 +@-moz-keyframes twinkle_bg {
  1996 + 0% {
  1997 + background: rgba(254, 235, 69, 0.38);
  1998 + }
  1999 + 25% {
  2000 + background: rgba(254, 235, 69, 0.7);
  2001 + }
  2002 + 50% {
  2003 + background: rgba(254, 235, 69, 0.3);
  2004 + }
  2005 + 75% {
  2006 + background: rgba(254, 235, 69, 0.7);
  2007 + }
  2008 + 100% {
  2009 + background: rgba(254, 235, 69, 0.38);
  2010 + }
  2011 +}
  2012 +
  2013 +@-webkit-keyframes twinkle_bg {
  2014 + 0% {
  2015 + background: rgba(254, 235, 69, 0.38);
  2016 + }
  2017 + 25% {
  2018 + background: rgba(254, 235, 69, 0.7);
  2019 + }
  2020 + 50% {
  2021 + background: rgba(254, 235, 69, 0.3);
  2022 + }
  2023 + 75% {
  2024 + background: rgba(254, 235, 69, 0.7);
  2025 + }
  2026 + 100% {
  2027 + background: rgba(254, 235, 69, 0.38);
  2028 + }
1803 } 2029 }
1804 \ No newline at end of file 2030 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/badge_tooltip.html
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 <div class="tl-tip-panel"> 3 <div class="tl-tip-panel">
4 <div class="tip_task_list"> 4 <div class="tip_task_list">
5 <dl> 5 <dl>
  6 + <dt>操作</dt>
6 <dt>类型</dt> 7 <dt>类型</dt>
7 <dt>里程</dt> 8 <dt>里程</dt>
8 <dt>起点</dt> 9 <dt>起点</dt>
@@ -11,6 +12,7 @@ @@ -11,6 +12,7 @@
11 </dl> 12 </dl>
12 {{each tasks as t i}} 13 {{each tasks as t i}}
13 <dl class="{{t.mileageType}} {{if t.destroy}}destroy{{/if}} {{if t.type1=='临加'}}temp_add{{/if}}"> 14 <dl class="{{t.mileageType}} {{if t.destroy}}destroy{{/if}} {{if t.type1=='临加'}}temp_add{{/if}}">
  15 + <dd><a data-line="{{sch.xlBm}}" data-id="{{t.id}}" data-schid="{{sch.id}}" class="tip_task_edit_link">编辑</a></dd>
14 <dd> 16 <dd>
15 {{if t.mileageType=="service"}} 17 {{if t.mileageType=="service"}}
16 营运 18 营运
@@ -35,6 +37,14 @@ @@ -35,6 +37,14 @@
35 <dd title="{{t.remarks}}">{{t.remarks}}</dd> 37 <dd title="{{t.remarks}}">{{t.remarks}}</dd>
36 </dl> 38 </dl>
37 {{/each}} 39 {{/each}}
  40 + <dl class="tip_task_count_dl {{if sch.c_t_mileage_status==-1}}c_task_error{{/if}}" >
  41 + <dd><i class="uk-icon-plus badge_tip_add_icon" data-line="{{sch.xlBm}}" data-schid="{{sch.id}}"></i></dd>
  42 + <dd>
  43 + <span>计划:{{sch.jhlcOrig}}</span>
  44 + <span>营运+烂班:{{serviceCount}}</span>
  45 + <span>空驶:{{emptyCount}}</span>
  46 + </dd>
  47 + </dl>
38 </div> 48 </div>
39 </div> 49 </div>
40 </script> 50 </script>
src/main/resources/static/real_control_v2/fragments/line_schedule/car_info_all.html 0 → 100644
  1 +<div class="uk-modal ct_move_modal" id="sch_car_info_all-modal">
  2 + <div class="uk-modal-dialog" style="width: 1080px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 +
  5 + <div class="uk-modal-header">
  6 + <h2>1006路 -全部车辆</h2></div>
  7 +
  8 + <table class="uk-table uk-table-hover" style="table-layout: fixed;">
  9 + <thead>
  10 + <tr>
  11 + <th style="width: 10%;">车辆</th>
  12 + <th style="width: 10%;">设备号</th>
  13 + <th style="width: 16%;">位置</th>
  14 + <th style="width: 14%;">车载线路编码</th>
  15 + <th style="width: 13%;">当前执行任务</th>
  16 + <th style="width: 7%;">状态</th>
  17 + <th style="width: 19%">最后gps时间</th>
  18 + <th>请求出场</th>
  19 + </tr>
  20 + </thead>
  21 + <tbody>
  22 + </tbody>
  23 + </table>
  24 + </div>
  25 +
  26 + <script id="sch_car_info_all-temp" type="text/html">
  27 + {{each list as obj i}}
  28 + <tr data-nbbm="{{obj.nbbm}}">
  29 + <td>{{obj.nbbm}}</td>
  30 + <td>{{obj.device}}</td>
  31 + <td>{{obj.loc}}</td>
  32 + <td>{{obj.lineCodeRealStr}}</td>
  33 + <td><a class="exec_sch_link" data-id="{{obj.schId}}">{{obj.exec}}</a></td>
  34 + <td><a class="{{if obj.status!='在线'}}grey_link{{/if}}">{{obj.status}}</a></td>
  35 + <td class="{{if obj.status!='在线'}}grey_link{{/if}}">
  36 + {{obj.timeStr}}
  37 +
  38 + {{if obj.formNow!=null}}
  39 + <small>({{obj.formNow}})</small>
  40 + {{/if}}
  41 + </td>
  42 + <td>{{obj.qqccTimeStr}}</td>
  43 + </tr>
  44 + {{/each}}
  45 + </script>
  46 + <script>
  47 + (function () {
  48 + var modal = '#sch_car_info_all-modal', lineCode, nbbm;
  49 +
  50 + $(modal).on('init', function(e, data) {
  51 + e.stopPropagation();
  52 + lineCode = data.lineCode;
  53 + nbbm = data.nbbm;
  54 +
  55 + jsDoQuery(function () {
  56 + var $cell = $('tr[data-nbbm='+nbbm+']', modal);
  57 + //定位到行
  58 + $(modal).animate({
  59 + scrollTop: $cell.offset().top - $(modal).offset().top + $(modal).scrollTop()
  60 + }, 500, function () {
  61 + $cell.addClass('ct_active');
  62 + });
  63 + timer = setTimeout(fixedRefreshData, t + 500);
  64 + });
  65 + });
  66 +
  67 + var timer, t = 12*1000;
  68 + var fixedRefreshData = function () {
  69 + (function () {
  70 + var f = arguments.callee;
  71 + jsDoQuery(function () {
  72 + timer = setTimeout(f, t);
  73 + });
  74 + })();
  75 + };
  76 +
  77 + $(modal).on('hide.uk.modal', function () {
  78 + clearTimeout(timer);
  79 + timer = null;
  80 + });
  81 +
  82 + var jsDoQuery = function (cb) {
  83 + gb_common.$get('/gps/allCarsByLine', {lineCode: lineCode}, function (rs) {
  84 + $.each(rs.list, function () {
  85 + if(this['lineCodeReal'])
  86 + this['lineCodeRealStr'] = this['lineCodeReal'] + '/' + gb_data_basic.lineCode2NameAll()[this['lineCodeReal']];
  87 + else
  88 + this['lineCodeRealStr'] = '';
  89 + if(this['gpsTs']){
  90 + this['timeStr'] = moment(this['gpsTs']).format('MM/DD HH:mm:ss');
  91 + this['formNow'] = moment(this['gpsTs']).fromNow();
  92 + }
  93 + if(this['qqcc'])
  94 + this['qqccTimeStr'] = moment(this['qqcc']).format('HH:mm');
  95 + });
  96 +
  97 + rs.list.sort(function (a, b) {
  98 + if(!a.nbbm)
  99 + return -1;
  100 + if(!b.nbbm)
  101 + return 1;
  102 + return a.nbbm.localeCompare(b.nbbm);
  103 + });
  104 + var htmlStr = template('sch_car_info_all-temp', {list: rs.list});
  105 +
  106 + $('table>tbody', modal).html(htmlStr);
  107 +
  108 + cb && cb();
  109 + });
  110 + };
  111 +
  112 + $(modal).on('click', 'a.exec_sch_link', function () {
  113 + var id = $(this).data('id');
  114 + if(!id)
  115 + return;
  116 + gb_schedule_table.scroToDl({id: id, xlBm:lineCode});
  117 + });
  118 + })();
  119 + </script>
  120 +</div>
0 \ No newline at end of file 121 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/fcxxwt.html
@@ -205,29 +205,6 @@ @@ -205,29 +205,6 @@
205 notify_err("当前操作需要选择调整原因!"); 205 notify_err("当前操作需要选择调整原因!");
206 return; 206 return;
207 } 207 }
208 -  
209 - //里程有修改  
210 - //if(data.jhlc != sch.jhlc && data.jhlc != 0){  
211 -  
212 - /*var confHtml = '<h4 style="color: #c04c4c;margin-bottom: 9px;">确认要将班次里程由'+sch.jhlc+' 修改为'+data.jhlc+' </h4><small>备注:</small>';  
213 - UIkit.modal.prompt(confHtml, data.remarks, function(remarks){  
214 - if(remarks){  
215 - //在这里写操作日志  
216 -  
217 - //提交  
218 - postData(data);  
219 - }  
220 - else{  
221 - notify_err('失败,你必须填写备注!');  
222 - }  
223 - }, {  
224 - labels: {  
225 - Ok: '确定修改公里并保存',  
226 - Cancel: '取消'  
227 - }  
228 - });*/  
229 - //}  
230 - //else  
231 postData(data); 208 postData(data);
232 }); 209 });
233 210
@@ -238,6 +215,8 @@ @@ -238,6 +215,8 @@
238 notify_succ('操作成功!'); 215 notify_succ('操作成功!');
239 //计算应发未发 216 //计算应发未发
240 gb_schedule_table.calc_yfwf_num(sch.xlBm); 217 gb_schedule_table.calc_yfwf_num(sch.xlBm);
  218 + //更新路牌公里统计面板
  219 + gb_schedule_table.showLpMileageTipBySch(sch);
241 }); 220 });
242 }; 221 };
243 222
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
@@ -110,7 +110,7 @@ @@ -110,7 +110,7 @@
110 {{/if}} 110 {{/if}}
111 111
112 {{if sch.cTasks.length > 0}} 112 {{if sch.cTasks.length > 0}}
113 - <span class="uk-badge uk-badge-notification">{{sch.cTasks.length}}</span> 113 + <span class="uk-badge uk-badge-notification {{if sch.c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{sch.cTasks.length}}</span>
114 {{/if}} 114 {{/if}}
115 </dd> 115 </dd>
116 <dd>{{sch.zdsj}}</dd> 116 <dd>{{sch.zdsj}}</dd>
@@ -153,13 +153,13 @@ @@ -153,13 +153,13 @@
153 </script> 153 </script>
154 154
155 <script id="sub_task-fail-status-temp" type="text/html"> 155 <script id="sub_task-fail-status-temp" type="text/html">
156 - <div class="child-task-status fail"><i class="uk-icon-times-circle"></i> 营运里程 与主任务不符,请检查子任务 156 + <div class="child-task-status fail"><i class="uk-icon-times-circle"></i> 子任务营运公里与计划不平
157 <span class="calc-detail">{{calcs}}</span></div> 157 <span class="calc-detail">{{calcs}}</span></div>
158 </script> 158 </script>
159 159
160 <script> 160 <script>
161 (function () { 161 (function () {
162 - var modal_opts = {center: false, bgclose: false, modal: false} 162 + var modal_opts = {center: false, bgclose: false, modal: false};
163 var modal = '#schedule-lj_zrw-modal', 163 var modal = '#schedule-lj_zrw-modal',
164 f, 164 f,
165 m_t_body = '.main-schedule-table .ct_table_body', 165 m_t_body = '.main-schedule-table .ct_table_body',
@@ -274,26 +274,29 @@ @@ -274,26 +274,29 @@
274 274
275 //检查子任务营运里程 275 //检查子任务营运里程
276 $('#childTaskTitle .child-task-status', modal).remove(); 276 $('#childTaskTitle .child-task-status', modal).remove();
277 - var i = 0; 277 + //var i = 0;
278 if (sch.cTasks.length == 0) 278 if (sch.cTasks.length == 0)
279 return; 279 return;
280 - var sum = 0, calcs = ''; 280 + var sum = 0, calcs = ' ';
281 $.each(sch.cTasks, function () { 281 $.each(sch.cTasks, function () {
282 if (this.mileageType == 'service') { 282 if (this.mileageType == 'service') {
283 sum = gb_common.accAdd(sum, this.mileage); 283 sum = gb_common.accAdd(sum, this.mileage);
284 calcs += (' + ' + this.mileage); 284 calcs += (' + ' + this.mileage);
285 - i++; 285 + //i++;
286 } 286 }
287 }); 287 });
288 //公里与主任务不符合 288 //公里与主任务不符合
289 if (sum != sch.jhlcOrig) { 289 if (sum != sch.jhlcOrig) {
290 - if (i > 1)  
291 - calcs += ('=' + sum); 290 + $('.uk-panel-box-secondary', modal).addClass('c_task_mileage_abnormal');
  291 + /*if (i > 1)
  292 + calcs += ('=' + sum);*/
292 calcs += (' ≠ ' + sch.jhlcOrig); 293 calcs += (' ≠ ' + sch.jhlcOrig);
293 calcs = calcs.substr(3); 294 calcs = calcs.substr(3);
294 var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs}); 295 var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs});
295 $('#childTaskTitle', modal).append(htmlStr); 296 $('#childTaskTitle', modal).append(htmlStr);
296 } 297 }
  298 + else
  299 + $('.uk-panel-box-secondary', modal).removeClass('c_task_mileage_abnormal');
297 }; 300 };
298 301
299 //新增临加 302 //新增临加
@@ -323,10 +326,12 @@ @@ -323,10 +326,12 @@
323 gb_schedule_table.updateSchedule(rs.ts); 326 gb_schedule_table.updateSchedule(rs.ts);
324 gb_schedule_table.deheteSchedule(rs.delete); 327 gb_schedule_table.deheteSchedule(rs.delete);
325 $('.main-schedule-table', modal).trigger('refresh'); 328 $('.main-schedule-table', modal).trigger('refresh');
  329 + //更新路牌公里统计面板
  330 + gb_schedule_table.showLpMileageTipBySch(sch);
326 }); 331 });
327 }, '确定删除'); 332 }, '确定删除');
328 }; 333 };
329 - //添加自定义子任务 334 + /* //添加自定义子任务
330 var add_sub_task_other = function () { 335 var add_sub_task_other = function () {
331 var sch = getActiveSch(); 336 var sch = getActiveSch();
332 if (!sch) 337 if (!sch)
@@ -376,8 +381,32 @@ @@ -376,8 +381,32 @@
376 open_modal(folder + '/sub_task/add_sub_task_range_turn.html', { 381 open_modal(folder + '/sub_task/add_sub_task_range_turn.html', {
377 sch: sch 382 sch: sch
378 }, modal_opts); 383 }, modal_opts);
379 - }; 384 + };*/
  385 +
  386 + //修改子任务
  387 + var edit_sub_task = function () {
  388 + var sch = getActiveSch();
  389 + if (!sch)
  390 + return notify_err('无法获取到主任务信息!');
  391 + var activeDl = $(s_t_body, modal).find('dl.context-menu-active');
  392 + if (activeDl.length == 0)
  393 + return;
  394 + var id = activeDl.data('id');
380 395
  396 + var cTask;
  397 + for(var i=0,obj;obj=sch.cTasks[i++];){
  398 + if(obj.id==id){
  399 + cTask = obj;
  400 + break;
  401 + }
  402 + }
  403 + //打开子任务修改modal
  404 + open_modal(folder + '/sub_task_v2/edit.html', {
  405 + sch: sch,
  406 + cTask: cTask
  407 + }, modal_opts);
  408 + };
  409 +
381 //删除子任务 410 //删除子任务
382 var remove_sub_task = function () { 411 var remove_sub_task = function () {
383 var activeDl = $(s_t_body, modal).find('dl.context-menu-active'); 412 var activeDl = $(s_t_body, modal).find('dl.context-menu-active');
@@ -396,10 +425,12 @@ @@ -396,10 +425,12 @@
396 //选中班次 425 //选中班次
397 selectedDl(rs.t); 426 selectedDl(rs.t);
398 }, 300); 427 }, 300);
  428 + //更新路牌公里统计面板
  429 + gb_schedule_table.showLpMileageTipBySch(rs.t);
399 }); 430 });
400 }, '确定删除'); 431 }, '确定删除');
401 }; 432 };
402 - //加油 433 + /*//加油
403 var add_oil = function () { 434 var add_oil = function () {
404 var sch = getActiveSch(); 435 var sch = getActiveSch();
405 if (!sch) 436 if (!sch)
@@ -412,7 +443,7 @@ @@ -412,7 +443,7 @@
412 open_modal(folder + '/sub_task/add_sub_task_oil.html', { 443 open_modal(folder + '/sub_task/add_sub_task_oil.html', {
413 sch: sch 444 sch: sch
414 }, modal_opts); 445 }, modal_opts);
415 - }; 446 + };*/
416 447
417 var add_sub_task = function () { 448 var add_sub_task = function () {
418 var sch = getActiveSch(); 449 var sch = getActiveSch();
@@ -429,14 +460,15 @@ @@ -429,14 +460,15 @@
429 var callbackHandler = { 460 var callbackHandler = {
430 add_temp_sch: add_temp_sch, 461 add_temp_sch: add_temp_sch,
431 remove_sch: remove_sch, 462 remove_sch: remove_sch,
432 - add_sub_task_other: add_sub_task_other,  
433 - add_sub_task_in: add_sub_task_in, 463 + //add_sub_task_other: add_sub_task_other,
  464 + //add_sub_task_in: add_sub_task_in,
434 remove_sub_task: remove_sub_task, 465 remove_sub_task: remove_sub_task,
435 - add_sub_task_out: add_sub_task_out,  
436 - add_sub_task_range_turn: add_sub_task_range_turn,  
437 - add_oil: add_oil, 466 + //add_sub_task_out: add_sub_task_out,
  467 + //add_sub_task_range_turn: add_sub_task_range_turn,
  468 + //add_oil: add_oil,
438 469
439 - add_sub_task: add_sub_task 470 + add_sub_task: add_sub_task,
  471 + edit_sub_task: edit_sub_task
440 }; 472 };
441 473
442 //右键菜单 474 //右键菜单
@@ -451,24 +483,7 @@ @@ -451,24 +483,7 @@
451 name: "临加班次" 483 name: "临加班次"
452 }, 484 },
453 "add_sub_task": { 485 "add_sub_task": {
454 - name: "添加子任务"/*,  
455 - items: {  
456 - 'add_oil':{  
457 - name: '空驶进出场'  
458 - },  
459 - 'add_sub_task_in': {  
460 - name: '进场'  
461 - },  
462 - 'add_sub_task_out': {  
463 - name: '出场'  
464 - },  
465 - 'add_sub_task_range_turn': {  
466 - name: '区间调头'  
467 - },  
468 - 'add_sub_task_other': {  
469 - name: '自定义'  
470 - }  
471 - }*/ 486 + name: "添加子任务"
472 }, 487 },
473 'remove_sch': { 488 'remove_sch': {
474 name: '删除' 489 name: '删除'
@@ -484,6 +499,10 @@ @@ -484,6 +499,10 @@
484 callbackHandler[key] && callbackHandler[key](); 499 callbackHandler[key] && callbackHandler[key]();
485 }, 500 },
486 items: { 501 items: {
  502 + "edit_sub_task":{
  503 + name: '修改子任务',
  504 + icon: 'edit'
  505 + },
487 "remove_sub_task": { 506 "remove_sub_task": {
488 name: "删除子任务" 507 name: "删除子任务"
489 , icon: "delete" 508 , icon: "delete"
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_custom.html
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 44
45 //班次类型切换 45 //班次类型切换
46 if(bcTypeMap[sch.bcType]) 46 if(bcTypeMap[sch.bcType])
47 - $('[name=type2]', f).val(bcTypeMap[sch.bcType]) 47 + $('[name=type2]', f).val(bcTypeMap[sch.bcType]);
48 $('[name=type2]', f).trigger('change'); 48 $('[name=type2]', f).trigger('change');
49 49
50 //滚动条到底 50 //滚动条到底
@@ -89,6 +89,9 @@ @@ -89,6 +89,9 @@
89 UIkit.modal('#add-sub-task-main-modal').hide(); 89 UIkit.modal('#add-sub-task-main-modal').hide();
90 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); 90 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
91 gb_data_basic.reload_stat_park_data(); 91 gb_data_basic.reload_stat_park_data();
  92 +
  93 + //更新路牌公里统计面板
  94 + gb_schedule_table.showLpMileageTipBySch(sch);
92 return; 95 return;
93 } 96 }
94 var data = dataArray[i]; 97 var data = dataArray[i];
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html
@@ -289,6 +289,9 @@ @@ -289,6 +289,9 @@
289 UIkit.modal('#add-sub-task-main-modal').hide(); 289 UIkit.modal('#add-sub-task-main-modal').hide();
290 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); 290 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
291 gb_data_basic.reload_stat_park_data(); 291 gb_data_basic.reload_stat_park_data();
  292 +
  293 + //更新路牌公里统计面板
  294 + gb_schedule_table.showLpMileageTipBySch(sch);
292 return; 295 return;
293 } 296 }
294 var data = dataArray[i]; 297 var data = dataArray[i];
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_normal.html
@@ -127,6 +127,9 @@ @@ -127,6 +127,9 @@
127 if (i >= dataArray.length) { 127 if (i >= dataArray.length) {
128 UIkit.modal('#add-sub-task-main-modal').hide(); 128 UIkit.modal('#add-sub-task-main-modal').hide();
129 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); 129 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  130 +
  131 + //更新路牌公里统计面板
  132 + gb_schedule_table.showLpMileageTipBySch(sch);
130 return; 133 return;
131 } 134 }
132 var data = dataArray[i]; 135 var data = dataArray[i];
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_turn.html
@@ -263,6 +263,9 @@ @@ -263,6 +263,9 @@
263 UIkit.modal('#add-sub-task-main-modal').hide(); 263 UIkit.modal('#add-sub-task-main-modal').hide();
264 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); 264 $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
265 gb_data_basic.reload_stat_park_data(); 265 gb_data_basic.reload_stat_park_data();
  266 +
  267 + //更新路牌公里统计面板
  268 + gb_schedule_table.showLpMileageTipBySch(sch);
266 return; 269 return;
267 } 270 }
268 var data = dataArray[i]; 271 var data = dataArray[i];
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/edit.html 0 → 100644
  1 +<div class="uk-modal ct_move_modal" id="edit-sub-task-main-modal">
  2 + <div class="uk-modal-dialog" style="width: 800px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>编辑子任务</h2></div>
  6 +
  7 + <div class="forms">
  8 +
  9 + </div>
  10 +
  11 + <div class="uk-modal-footer uk-text-right" style="margin-top: 5px;">
  12 + <a class="delete_link" style="vertical-align: bottom;display: inline-block;color: red;font-size: 13px;margin-right: 10px;">删除子任务</a>
  13 + <button type="button" class="uk-button uk-modal-close">取消</button>
  14 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  15 + </div>
  16 + </div>
  17 +
  18 + <script id="sub-task-v2-edit-form-temp" type="text/html">
  19 + <form class="uk-form uk-form-horizontal sub_task_form_v2" style="background:#fff;">
  20 + <input type="hidden" value="{{sch.id}}" name="schedule.id" sch_id_inp>
  21 + <input type="hidden" value="正常" name="type1">
  22 + <input type="hidden" value="{{cTask.id}}" name="id">
  23 + <div class="uk-grid">
  24 + <div class="uk-width-1-3">
  25 + <div class="uk-form-row">
  26 + <label class="uk-form-label">班次类型</label>
  27 + <div class="uk-form-controls">
  28 + <select class="form-control nt-dictionary" data-code="-100" name="type2"
  29 + data-group=ChildTaskType></select>
  30 + </div>
  31 + </div>
  32 + </div>
  33 + <div class="uk-width-1-3">
  34 + <div class="uk-form-row">
  35 + <label class="uk-form-label">起点 </label>
  36 + <div class="uk-form-controls">
  37 + <select name="startStation" required></select>
  38 + </div>
  39 + </div>
  40 + </div>
  41 + <div class="uk-width-1-3">
  42 + <div class="uk-form-row">
  43 + <label class="uk-form-label">终点</label>
  44 + <div class="uk-form-controls">
  45 + <select name="endStation" required></select>
  46 + </div>
  47 + </div>
  48 + </div>
  49 + </div>
  50 +
  51 + <div class="uk-grid">
  52 + <div class="uk-width-1-3">
  53 + <div class="uk-form-row">
  54 + <label class="uk-form-label">开始时间</label>
  55 + <div class="uk-form-controls">
  56 + <input name="startDate" value="{{cTask.startDate}}" type="time"
  57 + required>
  58 + </div>
  59 + </div>
  60 + </div>
  61 + <div class="uk-width-1-3">
  62 + <div class="uk-form-row">
  63 + <label class="uk-form-label">结束时间</label>
  64 + <div class="uk-form-controls">
  65 + <input name="endDate" value="{{cTask.endDate}}" type="time" required>
  66 + </div>
  67 + </div>
  68 + </div>
  69 + <div class="uk-width-1-3">
  70 + <div class="uk-form-row">
  71 + <label class="uk-form-label">公里</label>
  72 + <div class="uk-form-controls">
  73 + <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false"
  74 + required style="width: 42%;" value="{{cTask.mileage}}">
  75 + <select class="form-control nt-dictionary" required name="mileageType"
  76 + data-group="MileageType" style="width: 52%;"></select>
  77 + </div>
  78 + </div>
  79 + </div>
  80 + </div>
  81 +
  82 + <div class="uk-grid">
  83 + <div class="uk-width-2-3 domains"></div>
  84 + <div class="uk-width-1-3">
  85 + <div class="uk-form-row">
  86 + <label class="uk-form-label">备注</label>
  87 + <div class="uk-form-controls">
  88 + <!--<select class="form-control nt-dictionary" required name="remarks"></select>-->
  89 + <input class="form-control" value="{{cTask.remarks}}" name="remarks" data-fv-stringlength-max="50" data-fv-stringlength="true">
  90 + </div>
  91 + </div>
  92 + </div>
  93 + </div>
  94 + </form>
  95 + </script>
  96 +
  97 + <script id="st-edit-domains-inout-form-temp" type="text/html">
  98 + <div class="uk-grid">
  99 + <div class="uk-width-1-2">
  100 + <div class="uk-form-row" style="padding-top: 5px;">
  101 + <label class="uk-form-label"></label>
  102 + <div class="uk-form-controls">
  103 + <label data-uk-tooltip title="无人售票线路,请忽略这个选项">
  104 + <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员
  105 + </label>
  106 + </div>
  107 + </div>
  108 + </div>
  109 + <div class="uk-width-1-2 destroy_reason_wrap">
  110 + <div class="uk-form-row">
  111 + <label class="uk-form-label">进出场原因</label>
  112 + <div class="uk-form-controls">
  113 + <select class="form-control" name="reason" required>
  114 + <option value="">请选择...</option>
  115 + {{each inOutExps as exp i}}
  116 + <option value="{{exp}}">{{exp}}</option>
  117 + {{/each}}
  118 + </select>
  119 + </div>
  120 + </div>
  121 + </div>
  122 + </div>
  123 + </script>
  124 +
  125 + <script id="st-edit-domains-service-form-temp" type="text/html">
  126 + <div class="uk-grid">
  127 + <div class="uk-width-1-2">
  128 + <div class="uk-form-row" style="padding-top: 5px;">
  129 + <label class="uk-form-label"></label>
  130 + <div class="uk-form-controls">
  131 + <label>
  132 + <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
  133 + </label>
  134 + </div>
  135 + </div>
  136 + </div>
  137 + <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
  138 + <div class="uk-form-row">
  139 + <label class="uk-form-label">烂班原因</label>
  140 + <div class="uk-form-controls">
  141 + <select class="form-control" name="reason" required>
  142 + <option value="">请选择...</option>
  143 + {{each adjustExps as exp i}}
  144 + <option value="{{exp}}">{{exp}}</option>
  145 + {{/each}}
  146 + </select>
  147 + </div>
  148 + </div>
  149 + </div>
  150 + </div>
  151 + </script>
  152 + <script>
  153 + (function () {
  154 + var modal = '#edit-sub-task-main-modal', sch, cTask,
  155 + stationRoutes,
  156 + parks,
  157 + information,
  158 + st_park_data;
  159 +
  160 + $(modal).on('init', function (e, data) {
  161 + e.stopPropagation();
  162 + sch = data.sch;
  163 + cTask = data.cTask;
  164 +
  165 + //站到场数据
  166 + st_park_data = gb_data_basic.get_stat_park_data()[sch.xlBm];
  167 + //站点路由
  168 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  169 + return a.stationRouteCode - b.stationRouteCode;
  170 + }), 'directions');
  171 + //停车场
  172 + parks = gb_data_basic.simpleParksArray();
  173 + //线路标准
  174 + information = gb_data_basic.getLineInformation(sch.xlBm);
  175 + //停车场排序,常用的放前面
  176 + parks = sort_parks(parks, information, st_park_data);
  177 +
  178 + var htmlStr = template('sub-task-v2-edit-form-temp', {sch: sch, cTask: cTask});
  179 + var f = $(htmlStr);
  180 + $('.forms', modal).append(f);
  181 + //字典转换
  182 + dictionaryUtils.transformDom($('.nt-dictionary', f));
  183 +
  184 + //设置下拉框默认值
  185 + $f('type2', f).val(cTask.type2).trigger('change');//班次类型
  186 + $f('startStation', f).val(cTask.startStation);//起点站
  187 + $f('endStation', f).val(cTask.endStation);//终点站
  188 + $f('mileageType', f).val(cTask.mileageType);//里程类型
  189 + if(cTask.destroy)
  190 + $f('destroy', f).trigger('click');//烂班
  191 + if(cTask.reason)
  192 + $f('reason', f).val(cTask.reason);//原因
  193 + if(cTask.noClerk)
  194 + $f('noClerk', f).trigger('click');//无售票员
  195 +
  196 + f.formValidation({
  197 + framework: 'uikit',
  198 + locale: 'zh_CN'
  199 + });
  200 + $('button[type=submit]', modal).on('click', function () {
  201 + f.formValidation('validate');
  202 + });
  203 +
  204 + //提交
  205 + f.on('success.form.fv', function (e) {
  206 + e.preventDefault();
  207 + $('button[type=submit]', modal).attr('disabled', 'disabled');
  208 +
  209 + var data=$.extend(f.serializeJSON(), gb_common.getDisabledVal(f));
  210 +
  211 + gb_common.$post('/childTask/update', data, function (rs) {
  212 + notify_succ('修改成功!');
  213 + gb_schedule_table.updateSchedule(rs.t);
  214 +
  215 + UIkit.modal(modal).hide();
  216 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  217 +
  218 + //更新路牌公里统计面板
  219 + gb_schedule_table.showLpMileageTipBySch(rs.t);
  220 + });
  221 + });
  222 +
  223 + f.on('err.field.fv', function () {
  224 + $('button[type=submit]', modal).removeClass('disabled').removeAttr('disabled');
  225 + });
  226 + });
  227 +
  228 + //班次类型切换事件
  229 + $(modal).on('change', 'select[name=type2]', reCalcInputs_type);
  230 + //烂班选项点击事件
  231 + $(modal).on('change', 'input[name=destroy]', destroyClick);
  232 + //进出场原因切换
  233 + $(modal).on('change', 'select[name=reason]', reSynchroReason);
  234 +
  235 + /**
  236 + * 根据班次类型切换起终点下拉框
  237 + */
  238 + function reCalcInputs_type() {
  239 + var f = $(this).parents('.sub_task_form_v2');
  240 + var upDown = sch.xlDir;
  241 + if($('[name=upDown]', f).length>0)
  242 + upDown = $('[name=upDown]', f).val();
  243 + var routes = stationRoutes[upDown]
  244 + , lastCode = routes[routes.length - 1].stationCode
  245 + , opts = '', park_opts = '';
  246 + //station options
  247 + $.each(routes, function () {
  248 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  249 + });
  250 + //park options
  251 + for(var i=0,p;p=parks[i++];)
  252 + park_opts += '<option value="' + p.code + '">' + p.name + '</option>';
  253 + /*for (var code in parks)
  254 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';*/
  255 +
  256 + var qdz = $f('startStation', f), zdz = $f('endStation', f), mType = $f('mileageType', f);
  257 + var domainsTemp;
  258 + switch ($(this).val()) {
  259 + case '3'://出场
  260 + qdz.html(park_opts).val(information.carPark);
  261 + zdz.html(opts).trigger('change');
  262 + mType.val('empty').attr('disabled', 'disabled').trigger('change');
  263 + domainsTemp = 'st-edit-domains-inout-form-temp';
  264 + break;
  265 + case '2'://进场
  266 + qdz.html(opts);
  267 + zdz.html(park_opts).val(information.carPark).trigger('change');
  268 + mType.val('empty').attr('disabled', 'disabled').trigger('change');
  269 + domainsTemp = 'st-edit-domains-inout-form-temp';
  270 + break;
  271 + default:
  272 + qdz.html(opts);
  273 + zdz.html(opts).val(lastCode).trigger('change');
  274 + mType.val('service').removeAttr('disabled').trigger('change');
  275 + domainsTemp = 'st-edit-domains-service-form-temp';
  276 + }
  277 +
  278 + //可变选项区域
  279 + $('.domains', f).html(template(domainsTemp, {
  280 + adjustExps: gb_common.adjustExps,
  281 + inOutExps: gb_common.inOutExps
  282 + }));
  283 +
  284 + //校验reason
  285 + f.trigger('add_reason_field');
  286 + }
  287 +
  288 +
  289 + function $f(name, f) {
  290 + return $('[name=' + name + ']', f);
  291 + }
  292 +
  293 + /**
  294 + * 停车场排序
  295 + * @param parks 停车场 code 2 name
  296 + * @param information 线路标准
  297 + * @param st_park_data 站到场
  298 + */
  299 + function sort_parks(parks, information, st_park_data) {
  300 + var array = [], names=[];
  301 + for(var code in parks){
  302 + array.push({code: code, name: parks[code]});
  303 + }
  304 +
  305 + if(st_park_data && st_park_data.length > 0){
  306 + $.each(st_park_data, function () {
  307 + names.push(this.parkName);
  308 + });
  309 + }
  310 +
  311 + //debugger
  312 + array.sort(function (a, b) {
  313 + if(a.code==information.carPark)
  314 + return -1;
  315 + if(b.code==information.carPark)
  316 + return 1;
  317 +
  318 + var ai = names.indexOf(a.name),
  319 + bi = names.indexOf(b.name);
  320 +
  321 + if(ai!=-1 && bi==-1)
  322 + return -1;
  323 + else if(ai==-1 && bi!=-1)
  324 + return 1;
  325 + else
  326 + return a.name.localeCompare(b.name);
  327 + });
  328 + return array;
  329 + }
  330 +
  331 + function destroyClick() {
  332 + var f = $(this).parents('.sub_task_form_v2');
  333 + if (this.checked) {
  334 + $('.destroy_reason_wrap', f).show();
  335 + f.attr('destroy', true);//.addClass('destroy_form');
  336 + }
  337 + else {
  338 + $('.destroy_reason_wrap', f).hide();
  339 + f.removeAttr('destroy');//.removeClass('destroy_form');
  340 + }
  341 + //reCalcMileageCount();
  342 + }
  343 +
  344 + /**
  345 + * 切换原因
  346 + */
  347 + function reSynchroReason() {
  348 + var f = $(this).parents('.sub_task_form_v2'),
  349 + reason = $(this).val(),
  350 + remInput = $('[name=remarks]', f);
  351 +
  352 + if(remInput.val()==reason + ',')
  353 + return;
  354 + remInput.val(remInput.val() + reason + ',');
  355 + }
  356 +
  357 +
  358 + $('.delete_link', modal).on('click', function () {
  359 + var id = cTask.id;
  360 + if(!id){
  361 + notify_err('无法获取标识键!');
  362 + return;
  363 + }
  364 +
  365 + var str = '<h3>确定要删除这条子任务?</h3>';
  366 + alt_confirm(str, function () {
  367 + gb_common.$del('/childTask/' + id, function (rs) {
  368 + gb_schedule_table.updateSchedule(rs.t);
  369 +
  370 + UIkit.modal(modal).hide();
  371 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  372 +
  373 + //更新路牌公里统计面板
  374 + gb_schedule_table.showLpMileageTipBySch(rs.t);
  375 + });
  376 + }, '确定删除');
  377 + });
  378 + })();
  379 + </script>
  380 +</div>
0 \ No newline at end of file 381 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/main.html
@@ -155,7 +155,7 @@ @@ -155,7 +155,7 @@
155 <div class="uk-form-row" style="padding-top: 5px;"> 155 <div class="uk-form-row" style="padding-top: 5px;">
156 <label class="uk-form-label"></label> 156 <label class="uk-form-label"></label>
157 <div class="uk-form-controls"> 157 <div class="uk-form-controls">
158 - <label data-uk-tooltip title="如是无人售票线路,忽略这个选项"> 158 + <label data-uk-tooltip title="无人售票线路,请忽略这个选项">
159 <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员 159 <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员
160 </label> 160 </label>
161 </div> 161 </div>
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_normal.html
@@ -150,6 +150,10 @@ @@ -150,6 +150,10 @@
150 }catch (e){ 150 }catch (e){
151 console.log(e);} 151 console.log(e);}
152 UIkit.modal('#schedule-addsch-modal').hide(); 152 UIkit.modal('#schedule-addsch-modal').hide();
  153 + //更新路牌公里统计面板
  154 + gb_schedule_table.showLpMileageTipBySch(rs.t);
  155 + }, function () {
  156 + enable_submit_btn(nf);
153 }); 157 });
154 }); 158 });
155 $('.ct_line_lp_badge', nf).html(sch.xlName + ',&nbsp;'+sch.lpName); 159 $('.ct_line_lp_badge', nf).html(sch.xlName + ',&nbsp;'+sch.lpName);
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_park_to_park.html
@@ -154,6 +154,10 @@ @@ -154,6 +154,10 @@
154 }catch (e){ 154 }catch (e){
155 console.log(e);} 155 console.log(e);}
156 UIkit.modal('#schedule-addsch-modal').hide(); 156 UIkit.modal('#schedule-addsch-modal').hide();
  157 + //更新路牌公里统计面板
  158 + gb_schedule_table.showLpMileageTipBySch(rs.t);
  159 + }, function () {
  160 + enable_submit_btn(nf);
157 }); 161 });
158 }); 162 });
159 $('.ct_line_lp_badge', nf).html(sch.xlName + ',&nbsp;'+sch.lpName); 163 $('.ct_line_lp_badge', nf).html(sch.xlName + ',&nbsp;'+sch.lpName);
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_two_way.html
@@ -315,6 +315,8 @@ @@ -315,6 +315,8 @@
315 }catch (e){ 315 }catch (e){
316 console.log(e);} 316 console.log(e);}
317 UIkit.modal('#schedule-addsch-modal').hide(); 317 UIkit.modal('#schedule-addsch-modal').hide();
  318 + //更新路牌公里统计面板
  319 + gb_schedule_table.showLpMileageTipBySch(last);
318 return; 320 return;
319 } 321 }
320 submitFun(dataArray[i], function (rs) { 322 submitFun(dataArray[i], function (rs) {
@@ -323,6 +325,8 @@ @@ -323,6 +325,8 @@
323 upArr.push(rs.t); 325 upArr.push(rs.t);
324 i++; 326 i++;
325 f(); 327 f();
  328 + }, function () {
  329 + $('[type=submit]', wrap).removeClass('disabled').removeAttr('disabled');
326 }); 330 });
327 })(); 331 })();
328 } 332 }
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/main.html
@@ -310,7 +310,7 @@ @@ -310,7 +310,7 @@
310 /** 310 /**
311 * 提交表单 311 * 提交表单
312 */ 312 */
313 - function submit_temp_schedule_form(data, cb) { 313 + function submit_temp_schedule_form(data, cb, err) {
314 data.xlBm = sch.xlBm; 314 data.xlBm = sch.xlBm;
315 data.xlName = sch.xlName; 315 data.xlName = sch.xlName;
316 data.lpName = sch.lpName; 316 data.lpName = sch.lpName;
@@ -336,7 +336,7 @@ @@ -336,7 +336,7 @@
336 gb_common.$post('/realSchedule', data, function (rs) { 336 gb_common.$post('/realSchedule', data, function (rs) {
337 notify_succ('新增临加班次成功'); 337 notify_succ('新增临加班次成功');
338 cb && cb(rs); 338 cb && cb(rs);
339 - }); 339 + }, err);
340 } 340 }
341 })(); 341 })();
342 </script> 342 </script>
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
@@ -11,9 +11,11 @@ @@ -11,9 +11,11 @@
11 <div class="card-panel"></div> 11 <div class="card-panel"></div>
12 </div> 12 </div>
13 </div> 13 </div>
14 - <div class="uk-width-1-6" style="height: calc(100% - 1px);"> 14 + <div class="uk-width-1-6" style="height: calc(100% - 1px);position: relative;">
15 <div class="card-panel sys-mailbox" style="overflow: auto;"> 15 <div class="card-panel sys-mailbox" style="overflow: auto;">
16 </div> 16 </div>
  17 + <div class="mileage_elec_panel">
  18 + </div>
17 </div> 19 </div>
18 </div> 20 </div>
19 21
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -82,7 +82,7 @@ @@ -82,7 +82,7 @@
82 <span class="uk-badge uk-badge-danger">临加</span> 82 <span class="uk-badge uk-badge-danger">临加</span>
83 {{/if}} 83 {{/if}}
84 {{if sch.cTasks.length > 0}} 84 {{if sch.cTasks.length > 0}}
85 - <span class="uk-badge uk-badge-notification c_task">{{sch.cTasks.length}}</span> 85 + <span class="uk-badge uk-badge-notification c_task {{if sch.c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{sch.cTasks.length}}</span>
86 {{/if}} 86 {{/if}}
87 </dd> 87 </dd>
88 <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}"> 88 <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}">
@@ -136,7 +136,7 @@ @@ -136,7 +136,7 @@
136 <span class="uk-badge uk-badge-danger">临加</span> 136 <span class="uk-badge uk-badge-danger">临加</span>
137 {{/if}} 137 {{/if}}
138 {{if cTasks.length > 0}} 138 {{if cTasks.length > 0}}
139 - <span class="uk-badge uk-badge-notification c_task">{{cTasks.length}}</span> 139 + <span class="uk-badge uk-badge-notification c_task {{if c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{cTasks.length}}</span>
140 {{/if}} 140 {{/if}}
141 </dd> 141 </dd>
142 </script> 142 </script>
@@ -182,4 +182,17 @@ @@ -182,4 +182,17 @@
182 <span class="_badge">{{zdsj}}/{{zdsjActual}}</span> 182 <span class="_badge">{{zdsj}}/{{zdsjActual}}</span>
183 </div> 183 </div>
184 </script> 184 </script>
  185 +
  186 + <script id="sch-lp-mileage-tip-temp" type="text/html">
  187 + {{each data as obj i}}
  188 + {{if i > 0}}<hr>{{/if}}
  189 +
  190 + <h5 class="_title"> <span class="lp_name">{{lpName}}</span>&nbsp;&nbsp;<a>{{obj.key}}</a></h5>
  191 + <div class="LD_item">
  192 + <span>营运:<a>{{obj.serviceMileage}}</a></span>
  193 + <span>烂班:<a>{{obj.destroyMileage}}</a></span>
  194 + <span>空驶:<a>{{obj.emptyMileage}}</a></span>
  195 + </div>
  196 + {{/each}}
  197 + </script>
185 </div> 198 </div>
src/main/resources/static/real_control_v2/js/common.js
@@ -95,13 +95,13 @@ var gb_common = (function () { @@ -95,13 +95,13 @@ var gb_common = (function () {
95 }); 95 });
96 }; 96 };
97 97
98 - var $post = function (url, data, successFun) { 98 + var $post = function (url, data, successFun, errFun) {
99 $.ajax({ 99 $.ajax({
100 url: url, 100 url: url,
101 method: 'POST', 101 method: 'POST',
102 data: data, 102 data: data,
103 complete: function (xhr, ts) { 103 complete: function (xhr, ts) {
104 - ajaxComplete(xhr, ts, successFun); 104 + ajaxComplete(xhr, ts, successFun, errFun);
105 } 105 }
106 }); 106 });
107 }; 107 };
@@ -126,7 +126,7 @@ var gb_common = (function () { @@ -126,7 +126,7 @@ var gb_common = (function () {
126 126
127 var errorHead = '<span style="color:red;">异常:</span>'; 127 var errorHead = '<span style="color:red;">异常:</span>';
128 128
129 - function successHandle(json, handle) { 129 + function successHandle(json, handle, err) {
130 var status = json.status; 130 var status = json.status;
131 if (status == 407) { 131 if (status == 407) {
132 location.href = '/login.html'; 132 location.href = '/login.html';
@@ -142,18 +142,20 @@ var gb_common = (function () { @@ -142,18 +142,20 @@ var gb_common = (function () {
142 UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}}); 142 UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}});
143 //关闭wait窗口 143 //关闭wait窗口
144 hide_wait_modal(); 144 hide_wait_modal();
  145 + err && err();
145 } 146 }
146 else 147 else
147 handle && handle(json); 148 handle && handle(json);
148 } 149 }
149 150
150 - function ajaxComplete(xhr, ts, succ) { 151 + function ajaxComplete(xhr, ts, succ, err) {
151 if (ts == 'success') { 152 if (ts == 'success') {
152 - successHandle(JSON.parse(xhr.responseText), succ); 153 + successHandle(JSON.parse(xhr.responseText), succ, err);
153 } else if (ts == 'error') { 154 } else if (ts == 'error') {
154 UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}}); 155 UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}});
155 //关闭wait窗口 156 //关闭wait窗口
156 hide_wait_modal(); 157 hide_wait_modal();
  158 + err && err();
157 } 159 }
158 } 160 }
159 161
src/main/resources/static/real_control_v2/js/data/data_gps.js
@@ -14,9 +14,6 @@ var gb_data_gps = (function () { @@ -14,9 +14,6 @@ var gb_data_gps = (function () {
14 refreshEventCallbacks.push(cb); 14 refreshEventCallbacks.push(cb);
15 }; 15 };
16 16
17 - //超速数据回调  
18 - //var overspeedEventCallbacks = [];  
19 -  
20 var refresh = function (cb) { 17 var refresh = function (cb) {
21 $.ajax({ 18 $.ajax({
22 url: '/gps/real/line', 19 url: '/gps/real/line',
@@ -25,8 +22,6 @@ var gb_data_gps = (function () { @@ -25,8 +22,6 @@ var gb_data_gps = (function () {
25 success: function (rs) { 22 success: function (rs) {
26 //用定时的gps来检测session断开 23 //用定时的gps来检测session断开
27 if(rs.status && rs.status==407){ 24 if(rs.status && rs.status==407){
28 - //解除退出页面的提示框  
29 - window.removeEventListener("beforeunload", gb_beforeunload_fun);  
30 location.href = '/login.html'; 25 location.href = '/login.html';
31 return; 26 return;
32 } 27 }
src/main/resources/static/real_control_v2/js/line_schedule/badge_tooltip.js
@@ -18,7 +18,6 @@ var gb_schedule_badge_tootip = (function () { @@ -18,7 +18,6 @@ var gb_schedule_badge_tootip = (function () {
18 }, 18 },
19 events: { 19 events: {
20 hidden: function(event, api) { 20 hidden: function(event, api) {
21 - //destroy dom  
22 $(this).qtip('destroy', true); 21 $(this).qtip('destroy', true);
23 } 22 }
24 } 23 }
@@ -44,25 +43,32 @@ var gb_schedule_badge_tootip = (function () { @@ -44,25 +43,32 @@ var gb_schedule_badge_tootip = (function () {
44 show: _opts.show, 43 show: _opts.show,
45 content: { 44 content: {
46 text: function() { 45 text: function() {
47 - var sch = getSch(this); 46 + var sch = getSch(this),
  47 + serviceCount=0,
  48 + emptyCount=0;
48 //子任务排序 49 //子任务排序
49 $.each(sch.cTasks, function () { 50 $.each(sch.cTasks, function () {
50 if(this.mileageType=='service'){ 51 if(this.mileageType=='service'){
  52 + serviceCount = gb_common.accAdd(serviceCount, this.mileage);
51 if(this.type1=='正常') 53 if(this.type1=='正常')
52 this.order_no=0; 54 this.order_no=0;
53 else 55 else
54 this.order_no=1; 56 this.order_no=1;
55 57
56 - if(this.destroy) 58 + if(this.destroy){
57 this.order_no=2; 59 this.order_no=2;
  60 + }
58 } 61 }
59 - else 62 + else{
60 this.order_no=this.type2 + 1; 63 this.order_no=this.type2 + 1;
  64 + emptyCount = gb_common.accAdd(emptyCount, this.mileage);
  65 + }
61 }); 66 });
62 var array = sch.cTasks.sort(function (a, b) { 67 var array = sch.cTasks.sort(function (a, b) {
63 return a.order_no - b.order_no; 68 return a.order_no - b.order_no;
64 }); 69 });
65 - return temps['sch-table-task-tootip-temp']({tasks: array}); 70 + return temps['sch-table-task-tootip-temp'](
  71 + {tasks: array, sch: sch, serviceCount: serviceCount, emptyCount: emptyCount});
66 } 72 }
67 }, 73 },
68 position: _opts.position, 74 position: _opts.position,
@@ -74,6 +80,45 @@ var gb_schedule_badge_tootip = (function () { @@ -74,6 +80,45 @@ var gb_schedule_badge_tootip = (function () {
74 }); 80 });
75 }); 81 });
76 82
  83 + /**
  84 + * 子任务编辑
  85 + */
  86 + $(document).on('click', 'a.tip_task_edit_link', function () {
  87 + var schId = $(this).data('schid'),
  88 + taskId = $(this).data('id'),
  89 + lineCode = $(this).data('line');
  90 +
  91 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId];
  92 +
  93 + var cTask;
  94 + for(var i=0,obj;obj=sch.cTasks[i++];){
  95 + if(obj.id==taskId){
  96 + cTask = obj;
  97 + break;
  98 + }
  99 + }
  100 +
  101 + $('#edit-sub-task-main-modal').remove();
  102 + //打开子任务修改modal
  103 + open_modal('/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/edit.html', {
  104 + sch: sch,
  105 + cTask: cTask
  106 + }, {center: false, bgclose: false});
  107 + });
  108 +
  109 + /**
  110 + * 新增子任务
  111 + */
  112 + $(document).on('click', 'i.badge_tip_add_icon', function () {
  113 + var schId = $(this).data('schid'),
  114 + lineCode = $(this).data('line');
  115 +
  116 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId];
  117 + open_modal('/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/main.html', {
  118 + sch: sch
  119 + }, {center: false, bgclose: false});
  120 + });
  121 +
77 //区间 tootip 122 //区间 tootip
78 $(document).on('mouseenter', _badge+'.sch_region', function() { 123 $(document).on('mouseenter', _badge+'.sch_region', function() {
79 $(this).qtip({ 124 $(this).qtip({
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
@@ -319,15 +319,15 @@ var gb_schedule_context_menu = (function () { @@ -319,15 +319,15 @@ var gb_schedule_context_menu = (function () {
319 'fcxxwt': { 319 'fcxxwt': {
320 name: '发车信息微调' 320 name: '发车信息微调'
321 }, 321 },
  322 + 'sep3': '---------',
322 'lj_zrw': { 323 'lj_zrw': {
323 name: '临加/子任务' 324 name: '临加/子任务'
324 }, 325 },
325 - 'sep3': '---------',  
326 'add_temp_sch': { 326 'add_temp_sch': {
327 - name: '添加临加班次' 327 + name: '新增临加班次'
328 }, 328 },
329 'add_sub_task': { 329 'add_sub_task': {
330 - name: '添加子任务' 330 + name: '新增子任务'
331 }, 331 },
332 'sep4': '---------', 332 'sep4': '---------',
333 'tzrc': { 333 'tzrc': {
src/main/resources/static/real_control_v2/js/line_schedule/dbclick.js
@@ -93,8 +93,18 @@ var gb_schedule_table_dbclick = (function() { @@ -93,8 +93,18 @@ var gb_schedule_table_dbclick = (function() {
93 }); 93 });
94 }; 94 };
95 95
  96 + var carCellClick = function (elem) {
  97 + elem.dblclick(function () {
  98 + var nbbm = $(this).data('nbbm');
  99 + var lineCode = $('.north-tabs>ul>li.tab-line.uk-active').data('code');
  100 +
  101 + open_modal('/real_control_v2/fragments/line_schedule/car_info_all.html', {nbbm:nbbm,lineCode:lineCode});
  102 + });
  103 + };
  104 +
96 return { 105 return {
97 init: init, 106 init: init,
98 - sfsjCellClick:sfsjCellClick 107 + sfsjCellClick:sfsjCellClick,
  108 + carCellClick: carCellClick
99 }; 109 };
100 })(); 110 })();
src/main/resources/static/real_control_v2/js/line_schedule/mileage_count.js 0 → 100644
  1 +
  2 +/**
  3 + * 统计班次公里
  4 + * @type {{}}
  5 + */
  6 +var gb_sch_mileage_count = (function () {
  7 +
  8 +
  9 + var isInOut = function (sch) {
  10 + return sch.bcType=='out' || sch.bcType=='in';
  11 + };
  12 +
  13 + return {
  14 + serviceMileage: function (array) {
  15 + var sum = 0;
  16 + var cts;
  17 +
  18 + for(var i=0,sch;sch=array[i++];){
  19 + if (sch.status == -1)
  20 + continue;
  21 +
  22 + if (isInOut(sch) || sch.bcType=='ldks')
  23 + continue;
  24 +
  25 + cts = sch['cTasks'];
  26 +
  27 + //有子任务
  28 + if (cts && cts.length > 0) {
  29 + for(var j=0,ct;ct=cts[j++];){
  30 + if (ct.mileageType=="service" && !ct.destroy)
  31 + sum = gb_common.accAdd(sum, ct.mileage);
  32 + }
  33 + }
  34 + else if(!sch.fcsjActual || !sch.zdsjActual)
  35 + continue;
  36 + else
  37 + sum = gb_common.accAdd(sum, sch.jhlc);
  38 + }
  39 +
  40 + return sum;
  41 + },
  42 + destroyMileage: function (array) {
  43 + var sum = 0;
  44 + var cts;
  45 +
  46 + for(var i=0,sch;sch=array[i++];){
  47 + if (isInOut(sch) || sch.bcType=='ldks' || sch.sflj)
  48 + continue;
  49 +
  50 + cts = sch['cTasks'];
  51 +
  52 + //有子任务
  53 + if (cts && cts.length > 0) {
  54 + for(var j=0,ct;ct=cts[j++];){
  55 + if (ct.destroy && ct.mileageType=="service")
  56 + sum = gb_common.accAdd(sum, ct.mileage);
  57 + }
  58 + }else if (sch.status == -1)
  59 + sum = gb_common.accAdd(sum, sch.jhlcOrig);
  60 + }
  61 +
  62 + return sum;
  63 + },
  64 + emptyMileage: function (array) {
  65 + var sum = 0;
  66 + var cts;
  67 +
  68 + for(var i=0,sch;sch=array[i++];){
  69 +
  70 + cts = sch['cTasks'];
  71 +
  72 + //有子任务
  73 + if (cts && cts.length > 0) {
  74 + for(var j=0,ct;ct=cts[j++];){
  75 + if (!ct.destroy && ct.mileageType=="empty")
  76 + sum = gb_common.accAdd(sum, ct.mileage);
  77 + }
  78 + }
  79 + else if(!sch.fcsjActual || !sch.zdsjActual)
  80 + continue;
  81 + else if ((isInOut(sch) || sch.bcType=="ldks") && sch.status != -1)
  82 + sum = gb_common.accAdd(sum, sch.jhlc);
  83 + }
  84 +
  85 + return sum;
  86 + }
  87 + }
  88 +})();
0 \ No newline at end of file 89 \ No newline at end of file