Commit c42739f4ca950a0c9273591b1a74f66f0e6758c6

Authored by 廖磊
2 parents 29ece7a2 8e6e4f0e

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
src/main/java/com/bsth/XDApplication.java
... ... @@ -97,7 +97,7 @@ public class XDApplication implements CommandLineRunner {
97 97 //实际排班延迟入库线程
98 98 //sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
99 99 //班次修正日志延迟入库
100   - //sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);
  100 + //sexec.scheduleWithFixedDelay(seiPstThread, 60, 30, TimeUnit.SECONDS);
101 101  
102 102 //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
103 103 //sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);
... ... @@ -115,7 +115,7 @@ public class XDApplication implements CommandLineRunner {
115 115 //班次更新线程
116 116 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
117 117 //班次延迟入库线程
118   - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
  118 + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);
119 119 //班次修正日志延迟入库
120 120 sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);
121 121 //检查班次误点
... ...
src/main/java/com/bsth/controller/realcontrol/SchEditInfoController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  5 +import com.bsth.data.schedule.edit_logs.service.SchEditInfoService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +import java.util.Map;
  13 +
  14 +/**
  15 + * 班次修正记录
  16 + * Created by panzhao on 2017/5/22.
  17 + */
  18 +@RestController
  19 +@RequestMapping("schEditInfo")
  20 +public class SchEditInfoController extends BaseController<SchEditInfo, Long>{
  21 +
  22 + @Autowired
  23 + SchEditInfoService editInfoService;
  24 +
  25 + @RequestMapping(value = "/_list", method = RequestMethod.GET)
  26 + public Map<String, Object> _list(@RequestParam String rq, @RequestParam String lineCode,@RequestParam Map<String, String> map) {
  27 + return editInfoService._list(rq, lineCode, map);
  28 + }
  29 +}
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -433,10 +433,12 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
433 433 * @return
434 434 */
435 435 @RequestMapping("dateArray")
436   - public List<String> dateArray(){
  436 + public List<String> dateArray(@RequestParam(defaultValue = "0") int c){
437 437 List<String> rs = new ArrayList<>();
438 438  
439   - long t = new Date().getTime() - ONE_DAY - (1000 * 60 * 60 * 2);
  439 + long t = new Date().getTime();
  440 + if(c != 1)
  441 + t -= ONE_DAY - (1000 * 60 * 60 * 2);
440 442 for(int i = 0; i < 10; i ++){
441 443 rs.add(fmtyyyyMMdd.print(t));
442 444 t -= ONE_DAY;
... ...
src/main/java/com/bsth/data/schedule/edit_logs/ScheduleModifyLogger.java
... ... @@ -2,9 +2,11 @@ package com.bsth.data.schedule.edit_logs;
2 2  
3 3 import com.alibaba.fastjson.JSONArray;
4 4 import com.alibaba.fastjson.JSONObject;
  5 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
5 6 import com.bsth.data.schedule.edit_logs.entity.EditType;
6 7 import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
7 8 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  9 +import org.apache.commons.lang3.StringUtils;
8 10 import org.slf4j.Logger;
9 11 import org.slf4j.LoggerFactory;
10 12  
... ... @@ -28,15 +30,15 @@ public class ScheduleModifyLogger {
28 30 * 待发调整
29 31 * opType 0: 双击调整、 1:待发调整、2:批量待发调整、3:间隔调整
30 32 */
31   - public static void dftz(ScheduleRealInfo sch, String opType, String oldDfsj, String nowDfsj, String remarks){
  33 + public static void dftz(ScheduleRealInfo sch, String opType, String oldDfsj, String nowDfsj, String remarks) {
32 34 try {
33   - if(oldDfsj.equals(nowDfsj))
  35 + if (oldDfsj.equals(nowDfsj))
34 36 return;
35 37  
36 38 SchEditInfo sei = SchEditInfo.getInstance(sch);
37 39 sei.setType(EditType.DFTZ);
38 40 sei.setType2(opType);
39   - sei.setRemarks(remarks==null?"":remarks);
  41 + sei.setRemarks(remarks == null ? "" : remarks);
40 42  
41 43 //detail
42 44 JSONObject jobj = new JSONObject();
... ... @@ -46,7 +48,7 @@ public class ScheduleModifyLogger {
46 48 sei.setJsonArray(jobj.toJSONString());
47 49  
48 50 put(sei);
49   - }catch (Exception e){
  51 + } catch (Exception e) {
50 52 log.error("", e);
51 53 }
52 54 }
... ... @@ -54,10 +56,10 @@ public class ScheduleModifyLogger {
54 56 /**
55 57 * 发车信息微调记录器
56 58 */
57   - public static void fcxxwt(ScheduleRealInfo sch, String remarks, JSONArray jsonArray){
  59 + public static void fcxxwt(ScheduleRealInfo sch, String remarks, JSONArray jsonArray) {
58 60  
59 61 try {
60   - if(jsonArray == null || jsonArray.size() == 0)
  62 + if (jsonArray == null || jsonArray.size() == 0)
61 63 return;
62 64  
63 65 SchEditInfo sei = SchEditInfo.getInstance(sch);
... ... @@ -66,28 +68,164 @@ public class ScheduleModifyLogger {
66 68 sei.setType(EditType.FCXXWT);
67 69  
68 70 put(sei);
69   - }catch (Exception e){
  71 + } catch (Exception e) {
70 72 log.error("", e);
71 73 }
72 74 }
73 75  
74 76 /**
75 77 * 计划烂班
  78 + *
76 79 * @param remarks
77 80 */
78   - public static void jhlb(ScheduleRealInfo sch, String remarks){
  81 + public static void jhlb(ScheduleRealInfo sch, String remarks) {
79 82 try {
80 83 SchEditInfo sei = SchEditInfo.getInstance(sch);
81 84 sei.setRemarks(remarks);
82 85 sei.setType(EditType.JHLB);
83 86  
84 87 put(sei);
85   - }catch (Exception e){
  88 + } catch (Exception e) {
86 89 log.error("", e);
87 90 }
88 91 }
89 92  
90   - public static void put(SchEditInfo sei){
  93 + /**
  94 + * 实发调整
  95 + *
  96 + * @param sch
  97 + * @param nowSfsj
  98 + * @param remarks
  99 + */
  100 + public static void sftz(ScheduleRealInfo sch, String nowSfsj, String remarks) {
  101 + try {
  102 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  103 + sei.setRemarks(remarks);
  104 + sei.setType(EditType.SFTZ);
  105 + //detail
  106 + JSONObject jobj = new JSONObject();
  107 + jobj.put("old", sch.getFcsjActual());
  108 + jobj.put("now", nowSfsj);
  109 +
  110 + sei.setJsonArray(jobj.toJSONString());
  111 + put(sei);
  112 + } catch (Exception e) {
  113 + log.error("", e);
  114 + }
  115 + }
  116 +
  117 + /**
  118 + * 撤销烂班
  119 + *
  120 + * @param sch
  121 + */
  122 + public static void cxlb(ScheduleRealInfo sch) {
  123 + try {
  124 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  125 + sei.setType(EditType.CXLB);
  126 +
  127 + put(sei);
  128 + } catch (Exception e) {
  129 + log.error("", e);
  130 + }
  131 + }
  132 +
  133 + /**
  134 + * 撤销执行
  135 + *
  136 + * @param sch
  137 + */
  138 + public static void cxzx(ScheduleRealInfo sch) {
  139 + try {
  140 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  141 + sei.setType(EditType.CXZX);
  142 +
  143 + //detail
  144 + JSONObject obj = new JSONObject();
  145 + if (StringUtils.isNotEmpty(sch.getFcsjActual()))
  146 + obj.put("old_sfsj", sch.getFcsjActual());
  147 +
  148 + if (StringUtils.isNotEmpty(sch.getZdsjActual()))
  149 + obj.put("old_sdsj", sch.getZdsjActual());
  150 +
  151 + sei.setJsonArray(obj.toJSONString());
  152 + put(sei);
  153 + } catch (Exception e) {
  154 + log.error("", e);
  155 + }
  156 + }
  157 +
  158 + /**
  159 + * 撤销实发
  160 + *
  161 + * @param sch
  162 + */
  163 + public static void cxsf(ScheduleRealInfo sch) {
  164 + try {
  165 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  166 + sei.setType(EditType.CXSF);
  167 +
  168 + //detail
  169 + JSONObject obj = new JSONObject();
  170 + obj.put("old_sfsj", sch.getFcsjActual());
  171 +
  172 + sei.setJsonArray(obj.toJSONString());
  173 + put(sei);
  174 + } catch (Exception e) {
  175 + log.error("", e);
  176 + }
  177 + }
  178 +
  179 + /**
  180 + * 调整人车
  181 + *
  182 + * @param sch
  183 + * @param cpc
  184 + */
  185 + public static void tzrc(ScheduleRealInfo sch, ChangePersonCar cpc) {
  186 + try {
  187 + String newNbbm = cpc.getClZbh();
  188 + String newJsy = cpc.getJsy();
  189 + String newSpy = cpc.getSpy();
  190 + //String oldJsy = sch.getjGh() + "/" + sch.getjName();
  191 +
  192 + if (newNbbm == null && newJsy == null && newSpy==null)
  193 + return;
  194 + /*if (newNbbm != null && newJsy != null
  195 + && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
  196 + return;*/
  197 +
  198 +
  199 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  200 + sei.setType(EditType.TZRC);
  201 +
  202 + //detail
  203 + JSONObject jobj = new JSONObject();
  204 + if (StringUtils.isNotEmpty(newNbbm) && !newNbbm.equals(sch.getClZbh())) {
  205 + jobj.put("old_nbbm", sch.getClZbh());
  206 + jobj.put("now_nbbm", newNbbm);
  207 + }
  208 +
  209 + String oldJsy = sch.getjGh() + "/" + sch.getjName();
  210 + if (StringUtils.isNotEmpty(newJsy) && !newJsy.equals(oldJsy)) {
  211 + jobj.put("old_jsy", oldJsy);
  212 + jobj.put("now_jsy", newJsy);
  213 + }
  214 +
  215 + String oldSpy = sch.getsGh() + "/" + sch.getsName();
  216 + if (StringUtils.isNotEmpty(newSpy) && !newSpy.equals(oldSpy)) {
  217 + jobj.put("old_spy", oldSpy);
  218 + jobj.put("now_spy", cpc.getSpy());
  219 + }
  220 +
  221 + sei.setJsonArray(jobj.toJSONString());
  222 + put(sei);
  223 + } catch (Exception e) {
  224 + log.error("", e);
  225 + }
  226 + }
  227 +
  228 + public static void put(SchEditInfo sei) {
91 229 list.add(sei);
92 230 }
93   -}
94 231 \ No newline at end of file
  232 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/SeiPstThread.java
... ... @@ -7,7 +7,9 @@ import org.slf4j.LoggerFactory;
7 7 import org.springframework.beans.factory.annotation.Autowired;
8 8 import org.springframework.stereotype.Component;
9 9  
  10 +import java.util.ArrayList;
10 11 import java.util.LinkedList;
  12 +import java.util.List;
11 13  
12 14 /**
13 15 * 班次修正日志入库
... ... @@ -24,6 +26,7 @@ public class SeiPstThread extends Thread{
24 26 @Override
25 27 public void run() {
26 28 try{
  29 + List<SchEditInfo> pstList = new ArrayList<>();
27 30 LinkedList<SchEditInfo> list = ScheduleModifyLogger.list;
28 31 SchEditInfo sei;
29 32 for(int i = 0; i < 1000; i ++){
... ... @@ -31,11 +34,14 @@ public class SeiPstThread extends Thread{
31 34 if(sei == null)
32 35 break;
33 36 else{
34   - repository.save(sei);
  37 + //repository.save(sei);
  38 + pstList.add(sei);
35 39 }
36 40 }
  41 +
  42 + repository.save(pstList);
37 43 }catch (Exception e){
38 44 log.error("", e);
39 45 }
40 46 }
41   -}
  47 +}
42 48 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/entity/EditType.java
... ... @@ -5,5 +5,5 @@ package com.bsth.data.schedule.edit_logs.entity;
5 5 */
6 6 public enum EditType {
7 7  
8   - DFTZ,SFTZ,FCXXWT,TZRC,LPDD,ZRW,JHLB
9   -}
  8 + DFTZ,SFTZ,FCXXWT,TZRC,LPDD,ZRW,JHLB,CXLB, CXSF, CXZX
  9 +}
10 10 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/entity/SchEditInfo.java
... ... @@ -28,6 +28,9 @@ public class SchEditInfo {
28 28 */
29 29 private String timeStr;
30 30  
  31 + /** 时间戳 */
  32 + private long ts;
  33 +
31 34 private String lineCode;
32 35  
33 36 private String gsbm;
... ... @@ -134,13 +137,13 @@ public class SchEditInfo {
134 137  
135 138 @Transient
136 139 private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
137   - @Transient
138   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  140 + /* @Transient
  141 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");*/
139 142 public static SchEditInfo getInstance(ScheduleRealInfo sch){
140 143 SchEditInfo sei = new SchEditInfo();
141 144 long t = System.currentTimeMillis();
142 145  
143   - sei.setRq(fmtyyyyMMdd.print(t));
  146 + sei.setTs(t);
144 147 sei.setTimeStr(fmtHHmm.print(t));
145 148  
146 149 SysUser user = SecurityUtils.getCurrentUser();
... ... @@ -148,6 +151,7 @@ public class SchEditInfo {
148 151 sei.setUser(user.getUserName());
149 152  
150 153 if(sch != null){
  154 + sei.setRq(sch.getScheduleDateStr());
151 155 sei.setSchId(sch.getId());
152 156 sei.setLineCode(sch.getXlBm());
153 157 sei.setGsbm(sch.getGsBm());
... ... @@ -179,4 +183,12 @@ public class SchEditInfo {
179 183 public void setFgsbm(String fgsbm) {
180 184 this.fgsbm = fgsbm;
181 185 }
182   -}
  186 +
  187 + public long getTs() {
  188 + return ts;
  189 + }
  190 +
  191 + public void setTs(long ts) {
  192 + this.ts = ts;
  193 + }
  194 +}
183 195 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/SchEditInfoService.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service;
  2 +
  3 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +import java.util.Map;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/5/22.
  10 + */
  11 +public interface SchEditInfoService extends BaseService<SchEditInfo, Long> {
  12 +
  13 + Map<String, Object> _list(String rq, String lineCode, Map<String, String> map);
  14 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/SchEditInfoServiceImpl.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  5 +import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  6 +import com.bsth.service.impl.BaseServiceImpl;
  7 +import com.bsth.util.BatchSaveUtils;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  13 +import org.springframework.jdbc.core.JdbcTemplate;
  14 +import org.springframework.stereotype.Service;
  15 +
  16 +import java.util.HashMap;
  17 +import java.util.List;
  18 +import java.util.Map;
  19 +import java.util.Set;
  20 +
  21 +/**
  22 + * Created by panzhao on 2017/5/22.
  23 + */
  24 +@Service
  25 +public class SchEditInfoServiceImpl extends BaseServiceImpl<SchEditInfo, Long> implements SchEditInfoService{
  26 +
  27 + Logger log = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @Autowired
  30 + JdbcTemplate jdbcTemplate;
  31 +
  32 + public Map<String, Object> _list(String rq, String lineCode, Map<String, String> map) {
  33 +
  34 + Map<String, Object> rs = new HashMap();
  35 + try {
  36 + //拼接除rq、lineCode 外的其他where 条件
  37 + map.remove("rq");
  38 + map.remove("lineCode");
  39 + String cont = "", v;
  40 + Set<String> ks = map.keySet();
  41 + for(String k : ks){
  42 + v =map.get(k);
  43 + if(StringUtils.isNotEmpty(v))
  44 + cont += " and t2." + BatchSaveUtils.propertyToField(k) + "='" + v + "'";
  45 + }
  46 + String sql = "select t1.*, t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,t2.xl_dir,t2.real_exec_date from (select * from logger_sch_modify where rq=? and line_code=? ) t1 INNER JOIN bsth_c_s_sp_info_real t2 on t1.sch_id=t2.id where 1=1 " + cont;
  47 +
  48 + List<SchEditInfoDto> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(SchEditInfoDto.class), rq, lineCode);
  49 +
  50 + rs.put("status", ResponseCode.SUCCESS);
  51 + rs.put("list", list);
  52 + }catch (Exception e){
  53 + log.error("", e);
  54 + rs.put("status", ResponseCode.ERROR);
  55 + rs.put("msg", e.getMessage());
  56 + }
  57 + return rs;
  58 + }
  59 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/dto/SchEditInfoDto.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service.dto;
  2 +
  3 +/**
  4 + * Created by panzhao on 2017/5/22.
  5 + */
  6 +public class SchEditInfoDto {
  7 +
  8 + private long id;
  9 + /*** 日期 yyyy-MM-dd*/
  10 + private String rq;
  11 +
  12 + /*** 时间 HH:mm*/
  13 + private String timeStr;
  14 +
  15 + private String lineCode;
  16 +
  17 + private String gsbm;
  18 +
  19 + private String fgsbm;
  20 +
  21 + /*** 班次ID*/
  22 + private long schId;
  23 +
  24 + /*** 类型*/
  25 + private String type;
  26 +
  27 + private String type2;
  28 + /*** 操作人 @system 系统/用户名*/
  29 + private String user;
  30 +
  31 + /*** 操作明细*/
  32 + private String jsonArray;
  33 +
  34 + private String remarks;
  35 +
  36 + /** 路牌 */
  37 + private String lpName;
  38 +
  39 + /** 驾驶员工号 */
  40 + private String jGh;
  41 +
  42 + /** 驾驶员姓名 */
  43 + private String jName;
  44 +
  45 + /** 车辆自编号 */
  46 + private String clZbh;
  47 +
  48 + /** 计发时间 */
  49 + private String fcsj;
  50 +
  51 + /** 上下行 */
  52 + private int xlDir;
  53 +
  54 + /** 实际执行日期 */
  55 + private String realExecDate;
  56 +
  57 + public long getId() {
  58 + return id;
  59 + }
  60 +
  61 + public void setId(long id) {
  62 + this.id = id;
  63 + }
  64 +
  65 + public String getRq() {
  66 + return rq;
  67 + }
  68 +
  69 + public void setRq(String rq) {
  70 + this.rq = rq;
  71 + }
  72 +
  73 + public String getTimeStr() {
  74 + return timeStr;
  75 + }
  76 +
  77 + public void setTimeStr(String timeStr) {
  78 + this.timeStr = timeStr;
  79 + }
  80 +
  81 + public String getLineCode() {
  82 + return lineCode;
  83 + }
  84 +
  85 + public void setLineCode(String lineCode) {
  86 + this.lineCode = lineCode;
  87 + }
  88 +
  89 + public String getGsbm() {
  90 + return gsbm;
  91 + }
  92 +
  93 + public void setGsbm(String gsbm) {
  94 + this.gsbm = gsbm;
  95 + }
  96 +
  97 + public String getFgsbm() {
  98 + return fgsbm;
  99 + }
  100 +
  101 + public void setFgsbm(String fgsbm) {
  102 + this.fgsbm = fgsbm;
  103 + }
  104 +
  105 + public long getSchId() {
  106 + return schId;
  107 + }
  108 +
  109 + public void setSchId(long schId) {
  110 + this.schId = schId;
  111 + }
  112 +
  113 + public String getType2() {
  114 + return type2;
  115 + }
  116 +
  117 + public void setType2(String type2) {
  118 + this.type2 = type2;
  119 + }
  120 +
  121 + public String getUser() {
  122 + return user;
  123 + }
  124 +
  125 + public void setUser(String user) {
  126 + this.user = user;
  127 + }
  128 +
  129 + public String getJsonArray() {
  130 + return jsonArray;
  131 + }
  132 +
  133 + public void setJsonArray(String jsonArray) {
  134 + this.jsonArray = jsonArray;
  135 + }
  136 +
  137 + public String getRemarks() {
  138 + return remarks;
  139 + }
  140 +
  141 + public void setRemarks(String remarks) {
  142 + this.remarks = remarks;
  143 + }
  144 +
  145 + public String getLpName() {
  146 + return lpName;
  147 + }
  148 +
  149 + public void setLpName(String lpName) {
  150 + this.lpName = lpName;
  151 + }
  152 +
  153 + public String getjGh() {
  154 + return jGh;
  155 + }
  156 +
  157 + public void setjGh(String jGh) {
  158 + this.jGh = jGh;
  159 + }
  160 +
  161 + public String getjName() {
  162 + return jName;
  163 + }
  164 +
  165 + public void setjName(String jName) {
  166 + this.jName = jName;
  167 + }
  168 +
  169 +
  170 + public String getRealExecDate() {
  171 + return realExecDate;
  172 + }
  173 +
  174 + public void setRealExecDate(String realExecDate) {
  175 + this.realExecDate = realExecDate;
  176 + }
  177 +
  178 + public String getType() {
  179 + return type;
  180 + }
  181 +
  182 + public void setType(String type) {
  183 + this.type = type;
  184 + }
  185 +
  186 + public String getClZbh() {
  187 + return clZbh;
  188 + }
  189 +
  190 + public void setClZbh(String clZbh) {
  191 + this.clZbh = clZbh;
  192 + }
  193 +
  194 + public String getFcsj() {
  195 + return fcsj;
  196 + }
  197 +
  198 + public void setFcsj(String fcsj) {
  199 + this.fcsj = fcsj;
  200 + }
  201 +
  202 + public int getXlDir() {
  203 + return xlDir;
  204 + }
  205 +
  206 + public void setXlDir(int xlDir) {
  207 + this.xlDir = xlDir;
  208 + }
  209 +}
... ...
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
... ... @@ -11,6 +11,7 @@ import java.util.Collections;
11 11 import java.util.Comparator;
12 12 import java.util.Date;
13 13 import java.util.HashMap;
  14 +import java.util.HashSet;
14 15 import java.util.Iterator;
15 16 import java.util.List;
16 17 import java.util.Map;
... ... @@ -585,7 +586,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
585 586  
586 587 @Override
587 588 public Map<String, Object> timeAndSpeed(Map<String, Object> map) {
588   - List<Long> ttList = new ArrayList<Long>();
  589 + List<Map<String, Object>> ttList = new ArrayList<Map<String, Object>>();
589 590 List<ChildTaskPlan> cList = new ArrayList<ChildTaskPlan>();
590 591 List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
591 592 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
... ... @@ -593,6 +594,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
593 594 Map<String, List<ScheduleRealInfo>> keyMap = new HashMap<String, List<ScheduleRealInfo>>();
594 595 Map<String, List<ChildTaskPlan>> cMap = new HashMap<String, List<ChildTaskPlan>>();
595 596 Map<String, Object> modelMap = new HashMap<String, Object>();
  597 + Set<Long> tsSet = new HashSet<Long>();
596 598  
597 599 String company = map.get("company").toString();
598 600 String subCompany = map.get("subCompany").toString();
... ... @@ -616,20 +618,23 @@ public class BusIntervalServiceImpl implements BusIntervalService {
616 618  
617 619 try {
618 620  
619   - String sql = "select * from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"' and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'";
  621 + String where = "";
620 622 if(line.length() != 0 && statu.equals("1")){
621   - sql += " and xl_bm = '"+line+"'";
  623 + where += " and xl_bm = '"+line+"'";
622 624 }
623 625 if(lp.length() != 0 && statu.equals("1")){
624   - sql += " and lp_name = '"+lp+"'";
  626 + where += " and lp_name = '"+lp+"'";
625 627 }
626 628 if(company.length() != 0){
627   - sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
  629 + where += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
628 630 }
629 631 if(sfqr == 1){
630   - sql += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
  632 + where += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
631 633 }
632   - sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' order by fcsj";
  634 + where += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  635 +
  636 + String sql = "select * from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"'"
  637 + + " and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'"+where+"";
633 638  
634 639 list = jdbcTemplate.query(sql,
635 640 new RowMapper<ScheduleRealInfo>(){
... ... @@ -704,6 +709,65 @@ public class BusIntervalServiceImpl implements BusIntervalService {
704 709 return schedule;
705 710 }
706 711 });
  712 +
  713 + {
  714 + List<Map<String, String>> temp1 = new ArrayList<Map<String, String>>();
  715 + List<Map<String, String>> temp2 = new ArrayList<Map<String, String>>();
  716 + sql = "select * from bsth_c_s_sp_info where bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  717 +
  718 + if(startDate.equals(endDate)){
  719 + sql += " and schedule_date = '"+startDate+"'";
  720 + } else {
  721 + sql += " and schedule_date >= '"+startDate+"' and schedule_date <= '"+endDate+"'";
  722 + }
  723 + if(line.length() != 0 && statu.equals("1")){
  724 + sql += " and xl_bm = '"+line+"'";
  725 + }
  726 + if(company.length() != 0){
  727 + sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
  728 + }
  729 + temp1 = jdbcTemplate.query(sql,
  730 + new RowMapper<Map<String, String>>(){
  731 + @Override
  732 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  733 + Map<String, String> m = new HashMap<String, String>();
  734 + m.put("id", rs.getString("id"));
  735 + m.put("lp", rs.getString("lp"));
  736 + m.put("fcsj", rs.getString("fcsj"));
  737 + m.put("xl_bm", rs.getString("xl_bm"));
  738 + m.put("tt_info", rs.getString("tt_info"));
  739 + return m;
  740 + }
  741 + });
  742 + sql = "select * from bsth_c_s_ttinfo_detail where ists = 1"
  743 + + " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  744 +
  745 + if(line.length() != 0 && statu.equals("1")){
  746 + sql += " and xl = '"+line+"'";
  747 + }
  748 + temp2 = jdbcTemplate.query(sql,
  749 + new RowMapper<Map<String, String>>(){
  750 + @Override
  751 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  752 + Map<String, String> m = new HashMap<String, String>();
  753 + m.put("id", rs.getString("id"));
  754 + m.put("lp", rs.getString("lp"));
  755 + m.put("xl", rs.getString("xl"));
  756 + m.put("fcsj", rs.getString("fcsj"));
  757 + m.put("ttinfo", rs.getString("ttinfo"));
  758 + return m;
  759 + }
  760 + });
  761 +
  762 + for(Map<String, String> m2 : temp2){
  763 + for(Map<String, String> m1 : temp1){
  764 + if(m2.get("ttinfo").equals(m1.get("tt_info")) && m2.get("xl").equals(m1.get("xl_bm"))
  765 + && m2.get("lp").equals(m1.get("lp")) && m2.get("fcsj").equals(m1.get("fcsj"))){
  766 + tsSet.add(Long.valueOf(m1.get("id")));
  767 + }
  768 + }
  769 + }
  770 + }
707 771  
708 772 sql = "select * from bsth_c_s_child_task order by start_date";
709 773  
... ... @@ -723,13 +787,17 @@ public class BusIntervalServiceImpl implements BusIntervalService {
723 787 });
724 788  
725 789 if(model.length() != 0){
726   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  790 + sql = "select sp.id from bsth_c_s_sp_info sp left join bsth_c_s_ttinfo_detail tt on sp.tt_info = tt.ttinfo and sp.xl_bm = tt.xl and sp.lp = tt.lp and sp.fcsj = tt.fcsj "
  791 + + "where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
727 792  
728 793 ttList = jdbcTemplate.query(sql,
729   - new RowMapper<Long>(){
  794 + new RowMapper<Map<String, Object>>(){
730 795 @Override
731   - public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
732   - return rs.getLong("id");
  796 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  797 + Map<String, Object> m = new HashMap<String, Object>();
  798 + m.put("id", rs.getString("id"));
  799 + m.put("ists", rs.getString("ists")!=null?rs.getString("ists"):"0");
  800 + return m;
733 801 }
734 802 });
735 803 }
... ... @@ -771,13 +839,15 @@ public class BusIntervalServiceImpl implements BusIntervalService {
771 839 if(schedule.getXlName()==null || schedule.getXlName().trim().length()==0)
772 840 continue;
773 841 if(model.length() != 0){
774   - for(Long tt : ttList)
775   - if((long) tt == (long)schedule.getSpId()){
  842 + for(Map<String, Object> tt : ttList){
  843 + long id = Long.valueOf(tt.get("id").toString());
  844 + if(id == (long)schedule.getSpId()){
776 845 String key = schedule.getScheduleDateStr() + "/" + schedule.getXlName() + "/" + schedule.getLpName();
777 846 if(!keyMap.containsKey(key))
778 847 keyMap.put(key, new ArrayList<ScheduleRealInfo>());
779 848 keyMap.get(key).add(schedule);
780 849 }
  850 + }
781 851 }else{
782 852 String key = schedule.getScheduleDateStr() + "/" + schedule.getXlName() + "/" + schedule.getLpName();
783 853 if(!keyMap.containsKey(key))
... ... @@ -821,14 +891,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
821 891 for(int i = 1; i < keyList.size(); i++){
822 892 ScheduleRealInfo schedule1 = sortMap.get(keyList.get(i - 1));
823 893 ScheduleRealInfo schedule2 = sortMap.get(keyList.get(i));
824   - if(sfqr == 1 && time1 > schedule1.getFcsjT()){
825   - jhyysj += schedule2.getFcsjT() - time1;
826   - }else if(sfqr == 1 && time2 < schedule2.getFcsjT()){
827   - jhyysj += time2 - schedule1.getFcsjT();
828   - }else{
829   - jhyysj += schedule2.getFcsjT() - schedule1.getFcsjT();
  894 + if(!tsSet.contains(schedule1.getId())){
  895 + if(sfqr == 1 && time1 > schedule1.getFcsjT()){
  896 + jhyysj += schedule2.getFcsjT() - time1;
  897 + }else if(sfqr == 1 && time2 < schedule2.getFcsjT()){
  898 + jhyysj += time2 - schedule1.getFcsjT();
  899 + }else{
  900 + jhyysj += schedule2.getFcsjT() - schedule1.getFcsjT();
  901 + }
  902 + jhyysj1 += schedule2.getFcsjT() - schedule1.getFcsjT();
830 903 }
831   - jhyysj1 += schedule2.getFcsjT() - schedule1.getFcsjT();
832 904 long zdsj2 = schedule2.getZdsjT();
833 905 long fcsj2 = schedule2.getFcsjT();
834 906 if(fcsj2 > zdsj2)
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -10,11 +10,10 @@ import com.bsth.controller.realcontrol.dto.DfsjChange;
10 10 import com.bsth.controller.realcontrol.dto.LpData;
11 11 import com.bsth.data.BasicData;
12 12 import com.bsth.data.LineConfigData;
13   -import com.bsth.data.msg_queue.DirectivePushQueue;
14 13 import com.bsth.data.schedule.DayOfSchedule;
15 14 import com.bsth.data.schedule.SchAttrCalculator;
16   -import com.bsth.data.schedule.edit_logs.FormLogger;
17 15 import com.bsth.data.schedule.ScheduleComparator;
  16 +import com.bsth.data.schedule.edit_logs.FormLogger;
18 17 import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
19 18 import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
20 19 import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
... ... @@ -1050,6 +1049,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1050 1049 sch.setRealExecDate(sch.getScheduleDateStr());
1051 1050 }
1052 1051  
  1052 + //日志记录
  1053 + ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
  1054 +
1053 1055 sch.setFcsjActualAll(fcsjActual);
1054 1056 sch.addRemarks(remarks);
1055 1057 sch.calcStatus();
... ... @@ -1085,6 +1087,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1085 1087 rs.put("status", ResponseCode.ERROR);
1086 1088 rs.put("msg", "未烂班,无法撤销!");
1087 1089 } else {
  1090 + //日志记录
  1091 + ScheduleModifyLogger.cxlb(sch);
  1092 +
1088 1093 sch.setStatus(0);
1089 1094 sch.setRemarks("");//清空备注
1090 1095 sch.setJhlc(sch.getJhlcOrig());
... ... @@ -1124,6 +1129,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1124 1129 break;
1125 1130 }
1126 1131 }*/
  1132 + //日志记录
  1133 + ScheduleModifyLogger.cxsf(sch);
1127 1134  
1128 1135 sch.clearFcsjActual();
1129 1136 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -1312,14 +1319,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1312 1319 ts.add(next);
1313 1320 }
1314 1321  
1315   - try{
  1322 +/* try{
1316 1323 //车辆下一个要执行的班次
1317 1324 ScheduleRealInfo carNext = dayOfSchedule.next(sch);
1318 1325 if(carNext != null && !carNext.getXlBm().equals(sch.getXlBm())){
1319 1326 DirectivePushQueue.put64(carNext.getClZbh(), carNext.getXlBm(), "套跑@系统");
1320 1327 fLog.log("下发线路切换指令", sch.getXlName(), carNext.getXlName());
1321 1328 }
1322   - }catch (Exception e){logger.error("", e);}
  1329 + }catch (Exception e){logger.error("", e);}*/
1323 1330  
1324 1331 //重新计算车辆执行班次
1325 1332 dayOfSchedule.reCalcExecPlan(sch.getClZbh());
... ... @@ -3210,6 +3217,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3210 3217  
3211 3218 //为换人换车情况表写入数据
3212 3219 schModifyLog.saveChangetochange(sch, cpc);
  3220 + //日志记录
  3221 + ScheduleModifyLogger.tzrc(sch, cpc);
3213 3222  
3214 3223 if (StringUtils.isNotEmpty(cpc.getJsy())) {
3215 3224 //换驾驶员
... ... @@ -4573,6 +4582,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4573 4582 rs.put("status", ResponseCode.ERROR);
4574 4583 rs.put("msg", "班次未执行,无法撤销!");
4575 4584 } else {
  4585 + //日志记录
  4586 + ScheduleModifyLogger.cxzx(sch);
4576 4587  
4577 4588 sch.clearFcsjActual();
4578 4589 sch.clearZdsjActual();
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -375,11 +375,11 @@ public class ReportServiceImpl implements ReportService{
375 375 String[] minSjs = minfcsj.split(":");
376 376 int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
377 377 //查询时间里程
378   - String sqlPc=" (SELECT jhlc,fcsj,bc_type,lp,2 as xh FROM bsth_c_s_ttinfo_detail "
  378 + String sqlPc=" (SELECT jhlc,fcsj,bc_type,lp,2 as xh, ists FROM bsth_c_s_ttinfo_detail "
379 379 + " where ttinfo ='"+ttinfo+"' and fcsj <='"+minfcsj+"' ) "
380 380 + " union "
381   - + " (SELECT jhlc,fcsj,bc_type,lp,1 as xh FROM bsth_c_s_ttinfo_detail "
382   - + " where ttinfo ='"+ttinfo+"' and fcsj > '"+minfcsj+"') order by lp,xh,fcsj";
  381 + + " (SELECT jhlc,fcsj,bc_type,lp,1 as xh, ists FROM bsth_c_s_ttinfo_detail "
  382 + + " where ttinfo ='"+ttinfo+"' and fcsj > '"+minfcsj+"') order by lp,xh,fcsj";
383 383  
384 384 Map<String, Object> map=new HashMap<String,Object>();
385 385 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
... ... @@ -391,6 +391,7 @@ public class ReportServiceImpl implements ReportService{
391 391 m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
392 392 m.put("bcType", rs.getString("bc_type"));
393 393 m.put("lp", rs.getString("lp"));
  394 + m.put("ists", rs.getObject("ists")==null?"0":rs.getString("ists"));
394 395 return m;
395 396 }
396 397 });
... ... @@ -451,6 +452,9 @@ public class ReportServiceImpl implements ReportService{
451 452 lp=m.get("lp").toString();
452 453  
453 454 }
  455 + if(m.containsKey("ists") && m.get("ists").equals("1")){
  456 + sj = 0;
  457 + }
454 458 }
455 459 if(yysj>0){
456 460 yycs =yygl/(yysj*1.0/60);
... ... @@ -662,22 +666,28 @@ public class ReportServiceImpl implements ReportService{
662 666 + " (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,ists,1 as xh FROM "
663 667 + " bsth_c_s_ttinfo_detail where ttinfo ='"+ttinfo+"' and "
664 668 + " fcsj > '"+minfcsj+"' and bc_type!='in' and bc_type!='out' and bc_type!='ldks') "
665   - + " order by xl_dir, xh,fcsj";
  669 + + " order by xl_dir, xh, fcsj";
666 670 Map<String, Object> map=new HashMap<String,Object>();
667 671 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
668   - new RowMapper<Map<String, Object>>(){
669   - @Override
670   - public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
671   - Map<String, Object> m=new HashMap<String,Object>();
672   - m.put("fcsj", rs.getString("fcsj"));
673   - m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
674   - m.put("bcsj", rs.getString("bcsj"));
675   - m.put("bcType", rs.getString("bc_type"));
676   - m.put("lp", rs.getString("lp"));
677   - m.put("dir", rs.getString("xl_dir"));
678   - m.put("ists", rs.getString("ists")!=null?rs.getString("ists"):"");
679   - return m;
680   - }
  672 + new RowMapper<Map<String, Object>>(){
  673 + @Override
  674 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  675 + Map<String, Object> m=new HashMap<String,Object>();
  676 + m.put("fcsj", rs.getString("fcsj"));
  677 + m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
  678 + m.put("bcsj", rs.getString("bcsj"));
  679 + m.put("bcType", rs.getString("bc_type"));
  680 + m.put("lp", rs.getString("lp"));
  681 + m.put("dir", rs.getString("xl_dir"));
  682 + m.put("ists", rs.getString("ists")!=null?rs.getString("ists"):"");
  683 +
  684 + if(rs.getString("xh").equals("2")){
  685 + String[] split = m.get("fcsj").toString().split(":");
  686 + m.put("fcsj", Integer.valueOf(split[0]) + 24 + ":"+split[1]);
  687 + }
  688 +
  689 + return m;
  690 + }
681 691 });
682 692  
683 693 List<Map<String, Object>> newList=new ArrayList<Map<String,Object>>();
... ... @@ -711,6 +721,7 @@ public class ReportServiceImpl implements ReportService{
711 721 List<Map<String, Object>> list2 = keyMap.get(key);
712 722 List<Integer> cjs = new ArrayList<Integer>();
713 723 int sxsj = 0, xxsj = 0, zcj = 0, tssj = 0;
  724 + int sxbc = 0, xxbc = 0;
714 725 int temp = 24*60+1;
715 726 boolean ists = false;
716 727 for(Map<String, Object> m : list2){
... ... @@ -720,8 +731,10 @@ public class ReportServiceImpl implements ReportService{
720 731 int bcsj = Integer.valueOf(m.get("bcsj").toString());
721 732 if(xlDir == 0){
722 733 sxsj += bcsj;
  734 + sxbc ++;
723 735 } else {
724 736 xxsj += bcsj;
  737 + xxbc ++;
725 738 }
726 739 if(temp >= fcsj){
727 740 temp = fcsj;
... ... @@ -744,9 +757,9 @@ public class ReportServiceImpl implements ReportService{
744 757 zcj += i;
745 758 }
746 759 tempMap.put("sjd", key);
747   - tempMap.put("sxsj", sxsj);
748   - tempMap.put("xxsj", xxsj);
749   - tempMap.put("fqsj", sxsj + xxsj);
  760 + tempMap.put("sxsj", sxsj / sxbc);
  761 + tempMap.put("xxsj", xxsj / xxbc);
  762 + tempMap.put("fqsj", (sxsj + xxsj) / list2.size());
750 763 tempMap.put("cjqj", cjs.size()>0?cjs.get(0)+"——"+cjs.get(cjs.size()-1):"——");
751 764 tempMap.put("pjcj", cjs.size()>0?zcj/cjs.size():"/");
752 765 tempMap.put("tssj", tssj);
... ...
src/main/resources/static/pages/report/timetable/timetable.html
... ... @@ -261,6 +261,9 @@
261 261 }
262 262 initPinYinSelect2('#line',data,'');
263 263 fage=true;
  264 +
  265 + line = data[0].id;
  266 + updateTtinfo();
264 267 }
265 268  
266 269  
... ... @@ -271,7 +274,7 @@
271 274 flag = 1;
272 275 var treeData = [];
273 276 var params = {};
274   - params['line'] = $("#line").val();
  277 + params['line'] = line;
275 278 $get('/report/getTtinfo', params, function(result){
276 279 treeData = createTreeData(result);
277 280 var options = '<option value="">请选择...</option>';
... ... @@ -284,12 +287,15 @@
284 287 }
285 288  
286 289 $("#line").on("change", function(){
  290 + line = $("#line").val();
287 291 updateTtinfo();
288 292 })
289 293  
  294 + var line = $("#line").val();
  295 +
290 296 //查询
291 297 $("#query").on('click',function(){
292   - var line = $("#line").val();
  298 + line = $("#line").val();
293 299 var xlName = $("#select2-line-container").html();
294 300 var ttinfo = $("#ttinfo").val();
295 301 if(line==null || line ==""){
... ...
src/main/resources/static/real_control_v2/css/north.css
... ... @@ -365,4 +365,120 @@
365 365 font-size: 18px !important;
366 366 font-family: Microsoft Yahei !important;
367 367 color: blue !important;
  368 +}
  369 +
  370 +
  371 +
  372 +.sch-edit-info-table dl dt:nth-of-type(1), .sch-edit-info-table dl dd:nth-of-type(1) {
  373 + width: 4%;
  374 +}
  375 +.sch-edit-info-table dl dd:nth-of-type(1){
  376 + background: #eae8e8;
  377 + border-right: 1px solid #b3b3b3;
  378 + text-align: center;
  379 + text-indent: -3px;
  380 + color: #000;
  381 +}
  382 +.sch-edit-info-table dl dt:nth-of-type(2), .sch-edit-info-table dl dd:nth-of-type(2) {
  383 + width: 4%;
  384 +}
  385 +
  386 +.sch-edit-info-table dl dt:nth-of-type(3), .sch-edit-info-table dl dd:nth-of-type(3) {
  387 + width: 8%;
  388 +}
  389 +
  390 +.sch-edit-info-table dl dt:nth-of-type(4), .sch-edit-info-table dl dd:nth-of-type(4) {
  391 + width: 12%;
  392 +}
  393 +.sch-edit-info-table dl dt:nth-of-type(5), .sch-edit-info-table dl dd:nth-of-type(5) {
  394 + width: 8%;
  395 +}
  396 +.sch-edit-info-table dl dt:nth-of-type(6), .sch-edit-info-table dl dd:nth-of-type(6) {
  397 + width: 64%;
  398 +}
  399 +
  400 +.sch-edit-info-table dl:nth-of-type(odd){
  401 +
  402 +}
  403 +
  404 +.ct-badge {
  405 + display: inline-block;
  406 + font-size: 12px;
  407 + text-indent: 0;
  408 + padding: 2px 3px 2px;
  409 + height: 15px;
  410 + line-height: 17px;
  411 + border-bottom: 1px dotted;
  412 +}
  413 +
  414 +.ct-badge.ct-badge-DFTZ{
  415 + color: #3bb540;
  416 +}
  417 +
  418 +.ct-badge.ct-badge-DFTZ:hover{
  419 + background: #3bb540;
  420 + color: #fff;
  421 +}
  422 +
  423 +.ct-badge.ct-badge-SFTZ{
  424 + color: #3bb540;
  425 +}
  426 +
  427 +.ct-badge.ct-badge-SFTZ:hover{
  428 + background: #3bb540;
  429 + color: #fff;
  430 +}
  431 +
  432 +.ct-badge.ct-badge-FCXXWT {
  433 + color: #2844e0;
  434 +}
  435 +
  436 +.ct-badge.ct-badge-FCXXWT:hover{
  437 + background: #2844e0;
  438 + color: #fff;
  439 +}
  440 +
  441 +.ct-badge.ct-badge-JHLB {
  442 + color: #f92970;
  443 +}
  444 +
  445 +.edit-info-tip p {
  446 + margin: 0 0 5px 0;
  447 + font-size: 14px;
  448 +}
  449 +
  450 +.edit-info-tip p.text {
  451 + padding: 0px 0px 7px 0;
  452 + border-bottom: 1px solid #dddddc;
  453 +}
  454 +
  455 +.edit-info-tip p.sub_text{
  456 + color: #807f7f;
  457 +}
  458 +
  459 +.ct-badge.ct-badge-CXLB{
  460 + color: grey;
  461 +}
  462 +
  463 +.ct-badge.ct-badge-CXSF:hover{
  464 + background: #cccccc;
  465 +}
  466 +
  467 +.ct-badge.ct-badge-CXZX:hover{
  468 + background: #cccccc;
  469 +}
  470 +
  471 +.ct-badge.ct-badge-JHLB:hover{
  472 + background: #f92970;
  473 + color: #fff;
  474 +}
  475 +
  476 +
  477 +.ct-badge.ct-badge-TZRC {
  478 + color: #97a50f;
  479 +}
  480 +
  481 +.ct-badge.ct-badge-TZRC:hover{
  482 + background: #97a50f;
  483 + color: #fff;
368 484 }
369 485 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch_maintain.html
1 1 <div class="uk-modal ct_move_modal" id="history-sch-maintain-modal">
2 2 <div class="uk-modal-dialog" style="width: 1180px;">
3 3 <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
4 5 <h2>历史路单维护</h2>
  6 + </div>
5 7  
6 8 <div style="padding-left: 12px;margin: 20px 0">
7 9 <ul class="uk-subnav uk-subnav-pill h-s-time">
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/sch_edit_info/list.html 0 → 100644
  1 +<div class="uk-modal ct_move_modal" id="history-sch-edit-info-modal">
  2 + <div class="uk-modal-dialog" style="width: 1280px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>班次修正日志</h2>
  6 + </div>
  7 +
  8 + <div style="padding-left: 12px;margin: 20px 0">
  9 + <ul class="uk-subnav uk-subnav-pill h-s-time">
  10 + </ul>
  11 + </div>
  12 +
  13 + <div style="padding-left: 12px;">
  14 + <ul class="uk-subnav uk-subnav-pill h-s-line">
  15 + </ul>
  16 + </div>
  17 +
  18 + <div class="uk-panel uk-panel-box uk-panel-box-primary">
  19 + <form class="uk-form search-form">
  20 + <fieldset data-uk-margin>
  21 + <span class="horizontal-field">路牌</span>
  22 + <select name="lpName" style="width: 80px;"></select>
  23 + <span class="horizontal-field">上下行</span>
  24 + <select name="xlDir">
  25 + <option value="">全部</option>
  26 + <option value="0">上行</option>
  27 + <option value="1">下行</option>
  28 + </select>
  29 + &nbsp;
  30 + <span class="horizontal-field">车辆</span>
  31 + <div class="uk-autocomplete uk-form autocomplete-cars">
  32 + <input type="text" name="clZbh" placeholder="车辆自编号">
  33 + </div>
  34 + <span class="horizontal-field">驾驶员</span>
  35 + <div class="uk-autocomplete uk-form autocomplete-jsy">
  36 + <input type="text" name="jGh" placeholder="驾驶员">
  37 + </div>
  38 + <button class="uk-button">检索</button>
  39 +
  40 + <label style="float: right;font-size: 12px;color: #989797;">
  41 + <input type="checkbox" disabled> 显示系统修正日志
  42 + </label>
  43 + </fieldset>
  44 + </form>
  45 + </div>
  46 +
  47 + <div class="ct_table_wrap ct_table_no_border edit-info-table-wrap" style="height: 510px;">
  48 + <div class="ct_table sch-edit-info-table">
  49 + <div class="ct_table_head">
  50 + <dl>
  51 + <dt>序号</dt>
  52 + <dt>路牌</dt>
  53 + <dt>车辆</dt>
  54 + <dt>驾驶员</dt>
  55 + <dt>计发</dt>
  56 + <dt>修正记录</dt>
  57 + </dl>
  58 + </div>
  59 + <div class="ct_table_body">
  60 + </div>
  61 + </div>
  62 + </div>
  63 +
  64 + <div class="load-panel">
  65 + <i class="uk-icon-spinner uk-icon-spin"></i>
  66 + 正在加载数据
  67 + </div>
  68 + </div>
  69 +
  70 + <script id="history-sch-edit-info-temp" type="text/html">
  71 + {{each list as obj i}}
  72 + <dl>
  73 + <dd>{{i + 1}}</dd>
  74 + <dd>{{obj.lpName}}</dd>
  75 + <dd>{{obj.clZbh}}</dd>
  76 + <dd>{{obj.jGh}}/{{obj.jName}}</dd>
  77 + <dd>{{obj.fcsj}}</dd>
  78 + <dd>
  79 + {{each obj.editArray as e j}}
  80 + <div class="ct-badge ct-badge-{{e.type}}" data-id="{{e.id}}">
  81 + {{e.timeStr}}{{e.typeStr}}
  82 + </div>
  83 + {{/each}}
  84 + </dd>
  85 + </dl>
  86 + {{/each}}
  87 + </script>
  88 +
  89 + <!-- 待发调整 tip -->
  90 + <script id="edit-info-tip-dftz-temp" type="text/html">
  91 + <div class="edit-info-tip">
  92 + <p class="text">待发时间从 {{jsonArray.old}} 调整为 {{jsonArray.now}}</p>
  93 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  94 + {{if remarks!=null && remarks != ''}}
  95 + <p class="sub_text">备注:{{remarks}}</p>
  96 + {{/if}}
  97 + </div>
  98 + </script>
  99 +
  100 + <!-- 实发调整 -->
  101 + <script id="edit-info-tip-sftz-temp" type="text/html">
  102 + <div class="edit-info-tip">
  103 + <p class="text">实发时间由 {{jsonArray.old==null?'无':jsonArray.old}} 调整为 {{jsonArray.now}}</p>
  104 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  105 + {{if remarks!=null && remarks != ''}}
  106 + <p class="sub_text">备注:{{remarks}}</p>
  107 + {{/if}}
  108 + </div>
  109 + </script>
  110 +
  111 +
  112 + <!-- 发车信息微调 tip -->
  113 + <script id="edit-info-tip-fcxxwt-temp" type="text/html">
  114 + <div class="edit-info-tip">
  115 + {{each jsonArray as obj i}}
  116 + <p class="text">{{obj.title}} 由 {{obj.old==null?'无':obj.old}} 调整为 {{obj.now}}</p>
  117 + {{/each}}
  118 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  119 + {{if remarks!=null && remarks != ''}}
  120 + <p class="sub_text">备注:{{remarks}}</p>
  121 + {{/if}}
  122 + </div>
  123 + </script>
  124 +
  125 + <!-- 撤销实发tip -->
  126 + <script id="edit-info-tip-cxsf-temp" type="text/html">
  127 + <div class="edit-info-tip">
  128 + <p class="text">将实发时间 {{jsonArray.old_sfsj}} 撤销</p>
  129 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  130 + {{if remarks!=null && remarks != ''}}
  131 + <p class="sub_text">备注:{{remarks}}</p>
  132 + {{/if}}
  133 + </div>
  134 + </script>
  135 +
  136 + <!-- 撤销执行 -->
  137 + <script id="edit-info-tip-cxzx-temp" type="text/html">
  138 + <div class="edit-info-tip">
  139 + {{if jsonArray.old_sfsj != null}}
  140 + <p class="text">将实发时间 {{jsonArray.old_sfsj}} 撤销</p>
  141 + {{/if}}
  142 + {{if jsonArray.old_sdsj != null}}
  143 + <p class="text">将实达时间 {{jsonArray.old_sdsj}} 撤销</p>
  144 + {{/if}}
  145 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  146 + {{if remarks!=null && remarks != ''}}
  147 + <p class="sub_text">备注:{{remarks}}</p>
  148 + {{/if}}
  149 + </div>
  150 + </script>
  151 +
  152 + <!-- 调整人车 -->
  153 + <script id="edit-info-tip-tzrc-temp" type="text/html">
  154 + <div class="edit-info-tip">
  155 + {{if jsonArray.now_jsy != null}}
  156 + <p class="text">驾驶员从 {{jsonArray.old_jsy}} 调整为 {{jsonArray.now_jsy}}</p>
  157 + {{/if}}
  158 + {{if jsonArray.now_nbbm != null}}
  159 + <p class="text">车辆从 {{jsonArray.old_nbbm}} 调整为 {{jsonArray.now_nbbm}}</p>
  160 + {{/if}}
  161 + {{if jsonArray.now_spy != null}}
  162 + <p class="text">售票员从 {{jsonArray.old_spy}} 调整为 {{jsonArray.now_spy}}</p>
  163 + {{/if}}
  164 +
  165 + <p class="sub_text">调整人:{{user}} 调整时间:{{timeStr}}</p>
  166 + {{if remarks!=null && remarks != ''}}
  167 + <p class="sub_text">备注:{{remarks}}</p>
  168 + {{/if}}
  169 + </div>
  170 + </script>
  171 +
  172 + <script>
  173 + (function () {
  174 + var modal = '#history-sch-edit-info-modal';
  175 + var etInfos={};//id映射
  176 +
  177 + //滚动条
  178 + $('.edit-info-table-wrap', modal).perfectScrollbar({suppressScrollX: true});
  179 +
  180 + $(modal).on('init', function (e, data) {
  181 + e.stopPropagation();
  182 + $.get('/realSchedule/dateArray?c=1', function (rs) {
  183 + //日期tab
  184 + var tsStr = '';
  185 + $.each(rs, function (i) {
  186 + tsStr += '<li ' + (i == 0 ? 'class="uk-active"' : '') + '><a>' + this + '</a></li>';
  187 + });
  188 + $('.h-s-time', modal).html(tsStr);
  189 +
  190 + //线路tab
  191 + var xlStr = '';
  192 + $.each(gb_data_basic.activeLines, function (i) {
  193 + xlStr += '<li ' + (i == 0 ? 'class="uk-active"' : '') + ' data-id="' + this.lineCode + '"><a>' + this.name + '</a></li>';
  194 + });
  195 + $('.h-s-line', modal).html(xlStr);
  196 +
  197 + clearLpSelect();
  198 + //reLoadLp=true;
  199 + jsQuery();
  200 + });
  201 + });
  202 +
  203 + $(modal).on('refresh', jsQuery);
  204 +
  205 + $(modal).on('click', '.h-s-time li,.h-s-line li', function () {
  206 + if(loading)
  207 + return;
  208 + $(this).parent().find('li.uk-active').removeClass('uk-active');
  209 + $(this).addClass('uk-active');
  210 + clearLpSelect();
  211 + //检索之前将滚动条置顶
  212 + $('.edit-info-table-wrap', modal)[0].scrollTop = 0;
  213 + jsQuery();
  214 + });
  215 +
  216 + $('.search-form', modal).on('submit', function (e) {
  217 + try {
  218 + //检索之前将滚动条置顶
  219 + $('.edit-info-table-wrap', modal)[0].scrollTop = 0;
  220 + jsQuery();
  221 + }catch(e){
  222 + console.log(e);
  223 + }
  224 + return false;
  225 + });
  226 +
  227 + var reLoadLp;
  228 + var nbbmArray,jsyArray,lpArray,loading;
  229 + function jsQuery() {
  230 + var data = $('.search-form', modal).serializeJSON();
  231 + var rq = $('.h-s-time li.uk-active', modal).text(),
  232 + lineCode = $('.h-s-line li.uk-active', modal).data('id');
  233 + data.rq = rq;
  234 + data.lineCode = lineCode;
  235 + if(data.jGh.indexOf('/')!=-1){
  236 + var jsy=data.jGh.split('/');
  237 + data.jGh=jsy[0];
  238 + data.jName=jsy[1];
  239 + }
  240 +
  241 + $('.load-panel', modal).show();
  242 + loading=true;
  243 + gb_common.$get('/schEditInfo/_list', data, function (rs) {
  244 + etInfos = {};
  245 + nbbmArray=[];
  246 + jsyArray=[];
  247 + lpArray = [];
  248 + $.each(rs.list, function () {
  249 + this.jsonArray = JSON.parse(this.jsonArray);
  250 + etInfos[this.id] = this;
  251 +
  252 + nbbmArray.push({value: this.clZbh});
  253 + jsyArray.push({value: this.jGh+'/'+this.jName,
  254 + fullChars: pinyin.getFullChars(this.jName).toUpperCase(),
  255 + camelChars: pinyin.getCamelChars(this.jName)});
  256 + lpArray.push({value: this.lpName});
  257 + });
  258 + //根据班次ID合并修正操作
  259 + var list = mergeData(rs.list).sort(sortFun);
  260 + var htmlStr = template('history-sch-edit-info-temp', {list: list});
  261 + $('.sch-edit-info-table .ct_table_body', modal).html(htmlStr);
  262 + $('.load-panel', modal).hide();
  263 + loading=false;
  264 +
  265 + //value
  266 + nbbmArray=distinctByField(nbbmArray);
  267 + jsyArray=distinctByField(jsyArray);
  268 + lpArray=distinctByField(lpArray);
  269 + if(reLoadLp){
  270 + //路牌下拉框
  271 + var ops = '<option value="">全部</option>';
  272 + $.each(lpArray, function () {
  273 + ops += '<option value="'+this.value+'">'+this.value+'</option>';
  274 + });
  275 + $('[name=lpName]', modal).html(ops);
  276 + reLoadLp = false;
  277 + }
  278 +
  279 + //更新滚动条高度
  280 + $('.edit-info-table-wrap', modal).perfectScrollbar('update');
  281 + });
  282 + }
  283 +
  284 + function clearLpSelect() {
  285 + $('[name=lpName_eq]', modal).val('').html('');
  286 + reLoadLp = true;
  287 + }
  288 +
  289 + //nbbm autocomplete
  290 + var carAutoCom=$('.autocomplete-cars', modal);
  291 + UIkit.autocomplete(carAutoCom, {
  292 + minLength: 1,
  293 + delay: 50,
  294 + source: function(release) {
  295 + var q = $('input', carAutoCom).val().toUpperCase()
  296 + ,rs = [],
  297 + count = 0;
  298 + $.each(nbbmArray, function () {
  299 + if(this.value.indexOf(q) != -1){
  300 + rs.push(this);
  301 + count++;
  302 + }
  303 + if (count >= 15)
  304 + return false;
  305 + });
  306 + release && release(rs);
  307 + }
  308 + });
  309 +
  310 + //jsy autocomplete
  311 + var jsyAutoCom=$('.autocomplete-jsy', modal);
  312 + UIkit.autocomplete(jsyAutoCom, {
  313 + minLength: 1,
  314 + delay: 50,
  315 + source: function(release) {
  316 + var q = $('input', jsyAutoCom).val().toUpperCase()
  317 + ,rs = [],
  318 + count = 0;
  319 +
  320 + $.each(jsyArray, function() {
  321 + if (this.value.indexOf(q) != -1 || this.fullChars.indexOf(q) != -1 || this.camelChars.indexOf(q) != -1){
  322 + rs.push(this);
  323 + count++;
  324 + }
  325 +
  326 + if (count >= 10)
  327 + return false;
  328 + });
  329 + release && release(rs);
  330 + }
  331 + });
  332 +
  333 + function distinctByField(arr, f){
  334 + if(!f)
  335 + f = 'value';
  336 + var rs = {};
  337 + $.each(arr, function () {
  338 + rs[this[f]]=this;
  339 + });
  340 + return gb_common.get_vals(rs);
  341 + }
  342 +
  343 + function mergeData(list) {
  344 + var rs = {};
  345 + $.each(list, function () {
  346 + if(rs[this.schId]){
  347 + rs[this.schId]['editArray'].push(subData(this));
  348 + }
  349 + else{
  350 + rs[this.schId] = {
  351 + schId: this.schId,
  352 + clZbh: this.clZbh,
  353 + fcsj: this.fcsj,
  354 + gsbm: this.gsbm,
  355 + fgsbm: this.fgsbm,
  356 + lineCode: this.lineCode,
  357 + lpName: this.lpName,
  358 + jGh: this.jGh,
  359 + jName: this.jName,
  360 + realExecDate: this.realExecDate,
  361 + editArray: [subData(this)]
  362 + }
  363 + }
  364 + });
  365 + return gb_common.get_vals(rs);
  366 + }
  367 +
  368 + var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班', 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
  369 + function subData(data){
  370 + return {
  371 + id: data.id,
  372 + type: data.type,
  373 + typeStr: types[data.type]?types[data.type]:data.type,
  374 + type2: data.type2,
  375 + user: data.user,
  376 + jsonArray: data.jsonArray,
  377 + remarks: data.remarks,
  378 + timeStr: data.timeStr
  379 + }
  380 + }
  381 + gb_ct_table.fixedHead($('.ct_table_wrap', modal));
  382 +
  383 +
  384 + /**
  385 + * 鼠标悬停、显示详细
  386 + */
  387 + var _opts = {
  388 + show:{ready: true, delay: 300},
  389 + position: {viewport: $(window), my: 'top center', at: 'bottom center'},
  390 + hide: {fixed: true, delay: 300},
  391 + events: {
  392 + hidden: function(event, api) {
  393 + $(this).qtip('destroy', true);
  394 + }
  395 + }
  396 + };
  397 + //待发调整tip
  398 + $(modal).on('mouseenter', '.ct-badge.ct-badge-DFTZ', function() {
  399 + $(this).qtip({
  400 + show: _opts.show,
  401 + content: {
  402 + title: '待发调整',
  403 + text: function() {
  404 + var obj = etInfos[$(this).data('id')];
  405 + return template('edit-info-tip-dftz-temp', obj);
  406 + }
  407 + },
  408 + position: _opts.position,
  409 + style: {
  410 + classes: 'qtip-green qtip-rounded qtip-shadow sch-badge-tip'
  411 + },
  412 + hide: _opts.hide,
  413 + events: _opts.events
  414 + });
  415 + });
  416 +
  417 + //实发调整tip
  418 + $(modal).on('mouseenter', '.ct-badge.ct-badge-SFTZ', function() {
  419 + $(this).qtip({
  420 + show: _opts.show,
  421 + content: {
  422 + title: '实发调整',
  423 + text: function() {
  424 + var obj = etInfos[$(this).data('id')];
  425 + return template('edit-info-tip-sftz-temp', obj);
  426 + }
  427 + },
  428 + position: _opts.position,
  429 + style: {
  430 + classes: 'qtip-green qtip-rounded qtip-shadow sch-badge-tip'
  431 + },
  432 + hide: _opts.hide,
  433 + events: _opts.events
  434 + });
  435 + });
  436 +
  437 + //发车信息微调tip
  438 + $(modal).on('mouseenter', '.ct-badge.ct-badge-FCXXWT', function() {
  439 + $(this).qtip({
  440 + show: _opts.show,
  441 + content: {
  442 + title: '发车信息微调',
  443 + text: function() {
  444 + var obj = etInfos[$(this).data('id')];
  445 + return template('edit-info-tip-fcxxwt-temp', obj);
  446 + }
  447 + },
  448 + position: _opts.position,
  449 + style: {
  450 + classes: 'qtip-blue qtip-rounded qtip-shadow sch-badge-tip'
  451 + },
  452 + hide: _opts.hide,
  453 + events: _opts.events
  454 + });
  455 + });
  456 +
  457 + //撤销实发tip
  458 + $(modal).on('mouseenter', '.ct-badge.ct-badge-CXSF', function() {
  459 + $(this).qtip({
  460 + show: _opts.show,
  461 + content: {
  462 + title: '撤销实发',
  463 + text: function() {
  464 + var obj = etInfos[$(this).data('id')];
  465 + return template('edit-info-tip-cxsf-temp', obj);
  466 + }
  467 + },
  468 + position: _opts.position,
  469 + style: {
  470 + classes: 'qtip-light qtip-rounded qtip-shadow sch-badge-tip'
  471 + },
  472 + hide: _opts.hide,
  473 + events: _opts.events
  474 + });
  475 + });
  476 +
  477 + //撤销执行tip
  478 + $(modal).on('mouseenter', '.ct-badge.ct-badge-CXZX', function() {
  479 + $(this).qtip({
  480 + show: _opts.show,
  481 + content: {
  482 + title: '撤销执行',
  483 + text: function() {
  484 + var obj = etInfos[$(this).data('id')];
  485 + return template('edit-info-tip-cxzx-temp', obj);
  486 + }
  487 + },
  488 + position: _opts.position,
  489 + style: {
  490 + classes: 'qtip-light qtip-rounded qtip-shadow sch-badge-tip'
  491 + },
  492 + hide: _opts.hide,
  493 + events: _opts.events
  494 + });
  495 + });
  496 +
  497 + //计划烂班tip
  498 + $(modal).on('mouseenter', '.ct-badge.ct-badge-JHLB', function() {
  499 + $(this).qtip({
  500 + show: _opts.show,
  501 + content: {
  502 + text: function() {
  503 + var obj = etInfos[$(this).data('id')];
  504 + return obj.remarks;
  505 + }
  506 + },
  507 + position: _opts.position,
  508 + style: {
  509 + classes: 'qtip-red qtip-rounded qtip-shadow sch-badge-tip'
  510 + },
  511 + hide: _opts.hide,
  512 + events: _opts.events
  513 + });
  514 + });
  515 +
  516 + //调整人车tip
  517 + $(modal).on('mouseenter', '.ct-badge.ct-badge-TZRC', function() {
  518 + $(this).qtip({
  519 + show: _opts.show,
  520 + content: {
  521 + title: '调整人车',
  522 + text: function() {
  523 + var obj = etInfos[$(this).data('id')];
  524 + console.log('obj', obj);
  525 + return template('edit-info-tip-tzrc-temp', obj);
  526 + }
  527 + },
  528 + position: _opts.position,
  529 + style: {
  530 + classes: 'qtip-rounded qtip-shadow sch-badge-tip'
  531 + },
  532 + hide: _opts.hide,
  533 + events: _opts.events
  534 + });
  535 + });
  536 +
  537 +
  538 + function sortFun(a, b) {
  539 + return (a.realExecDate + a.fcsj).localeCompare(b.realExecDate + b.fcsj);
  540 + }
  541 + })();
  542 + </script>
  543 +</div>
0 544 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
... ... @@ -28,6 +28,11 @@
28 28 "event": "history_sch_maintain"
29 29 },
30 30 {
  31 + "id": 1.41,
  32 + "text": "班次修正日志",
  33 + "event": "sch_edit_info"
  34 + },
  35 + {
31 36 "id": 1.5,
32 37 "divider": true
33 38 },
... ...
src/main/resources/static/real_control_v2/js/main.js
... ... @@ -169,9 +169,8 @@ var disabled_submit_btn = function (form) {
169 169 function showUpdateDescription() {
170 170 //更新说明
171 171 var updateDescription = {
172   - date: '2017-05-18',
173   - text: '<h5>现在自定义子任务,勾选是否烂班后,烂班原因必填。</h5><h5>修复了在驾驶员请求出场时,误下发分班出场指令的问题</h5>' +
174   - '<h5>调整了报表的弹出窗口<br>1、取消了窗口遮罩,可同时打开多个报表窗口,窗口堆叠时,点击窗口title切换堆叠顺序<br>2、鼠标按住窗口右下角,可随意改变窗口大小。<br>3、拖动窗口时,允许拖出页面之外<br><br>注意:将窗口和窗口title拖出页面外时,会面临窗口丢失的风险,过多丢失的窗口会影响到页面性能,你可以刷新页面以重置!</h5>'
  172 + date: '2017-05-23',
  173 + text: '<h5>现在可以在 数据&统计 里面看到部分班次修正日志。05-23之后的数据开始展现</h5>'
175 174 };
176 175  
177 176 var storage = window.localStorage
... ...
src/main/resources/static/real_control_v2/js/north/toolbar.js
... ... @@ -228,6 +228,9 @@ var gb_northToolbar = (function () {
228 228 },
229 229 data_move_and_verification: function () {
230 230 open_modal('/real_control_v2/fragments/north/nav/dataManager/dataMoveAndVerification.html', {}, modal_opts);
  231 + },
  232 + sch_edit_info: function () {
  233 + open_modal('/real_control_v2/fragments/north/nav/sch_edit_info/list.html', {}, modal_opts);
231 234 }
232 235 };
233 236  
... ...