Commit c81af18814a52df8790a265a6f7064bd488be213

Authored by 徐烜
2 parents dd8b08bd 0939baf2

Merge branch 'minhang' of http://222.66.0.204:8090//panzhaov5/bsth_control into minhang

Showing 27 changed files with 310 additions and 624 deletions
src/main/java/com/bsth/XDApplication.java
... ... @@ -88,14 +88,14 @@ public class XDApplication implements CommandLineRunner {
88 88 ScheduledExecutorService sexec = Application.mainServices;
89 89 //抓取GPS数据
90 90 gpsDataLoader.setFlag(-1);
91   - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);
  91 + //sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);
92 92 //实际排班更新线程
93   - sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
  93 + //sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
94 94 //实际排班延迟入库线程
95   - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS);
  95 + //sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
96 96  
97 97 //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
98   - sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);
  98 + //sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);
99 99 }
100 100  
101 101 public void prodInit(){
... ... @@ -110,7 +110,7 @@ public class XDApplication implements CommandLineRunner {
110 110 //实际排班更新线程
111 111 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
112 112 //实际排班延迟入库线程
113   - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS);
  113 + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
114 114 //检查班次误点
115 115 sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);
116 116 //调度指令延迟入库
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -48,8 +48,9 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo,
48 48 */
49 49 @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)
50 50 public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks,
51   - @RequestParam String dfsj,String bcType) {
52   - return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj, bcType);
  51 + @RequestParam String dfsj,String bcType,
  52 + @RequestParam(defaultValue = "") String opType) {
  53 + return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj, bcType, opType);
53 54 }
54 55  
55 56 /**
... ...
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
... ... @@ -38,7 +38,7 @@ public class ReverseSignalHandle extends SignalHandle {
38 38 if (isReverse(gps, prev)) {
39 39 RouteReverse reverse = reverseSearch(prevs, gps);
40 40  
41   - if (reverse.getCount() >= 3
  41 + if (reverse != null && reverse.getCount() >= 3
42 42 && reverse.isClose()
43 43 && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {
44 44 scheduleSignalState.reverseAnalyse(reverse);
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -31,6 +31,7 @@ import org.springframework.stereotype.Component;
31 31 import java.text.ParseException;
32 32 import java.text.SimpleDateFormat;
33 33 import java.util.*;
  34 +import java.util.concurrent.ConcurrentLinkedQueue;
34 35  
35 36 /**
36 37 * @author PanZhao
... ... @@ -59,7 +60,7 @@ public class DayOfSchedule {
59 60 private static Map<String, ScheduleRealInfo> carExecutePlanMap;
60 61  
61 62 // 持久化
62   - public static LinkedList<ScheduleRealInfo> pstBuffer;
  63 + public static ConcurrentLinkedQueue<ScheduleRealInfo> pstBuffer;
63 64  
64 65 // 排序器
65 66 private static ScheduleComparator.FCSJ schFCSJComparator;
... ... @@ -92,7 +93,7 @@ public class DayOfSchedule {
92 93 lpScheduleMap = ArrayListMultimap.create();
93 94  
94 95 id2SchedulMap = new HashMap<>();
95   - pstBuffer = new LinkedList<>();
  96 + pstBuffer = new ConcurrentLinkedQueue<>();
96 97 schFCSJComparator = new ScheduleComparator.FCSJ();
97 98 currSchDateMap = new HashMap<>();
98 99 carExecutePlanMap = new HashMap<>();
... ... @@ -109,7 +110,7 @@ public class DayOfSchedule {
109 110 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm");
110 111  
111 112 //数据恢复
112   - private void dataRecovery() {
  113 + public void dataRecovery() {
113 114 GpsDataRecovery.run = true;
114 115  
115 116 Collection<LineConfig> confs = lineConfigs.getAll();
... ...
src/main/java/com/bsth/data/schedule/edit_logs/SchEditLogger.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs;
  2 +
  3 +/**
  4 + * 班次修正记录
  5 + * Created by panzhao on 2017/5/16.
  6 + */
  7 +public class SchEditLogger {
  8 +
  9 + /**
  10 + * 待发调整
  11 + */
  12 + public static void dftz(Long id, String remarks, String dfsj, String bcType, String opType){
  13 +
  14 + }
  15 +}
... ...
src/main/java/com/bsth/data/schedule/thread/SchedulePstThread.java
... ... @@ -10,7 +10,6 @@ import org.springframework.orm.jpa.JpaObjectRetrievalFailureException;
10 10 import org.springframework.stereotype.Component;
11 11  
12 12 import javax.persistence.EntityNotFoundException;
13   -import java.util.LinkedList;
14 13  
15 14 /**
16 15 * @author PanZhao
... ... @@ -29,11 +28,11 @@ public class SchedulePstThread extends Thread {
29 28 @Override
30 29 public void run() {
31 30  
32   - LinkedList<ScheduleRealInfo> list = DayOfSchedule.pstBuffer;
  31 + //LinkedList<ScheduleRealInfo> list = DayOfSchedule.pstBuffer;
33 32  
34 33 ScheduleRealInfo schedule;
35 34 for (int i = 0; i < 1000; i++) {
36   - schedule = list.poll();
  35 + schedule = DayOfSchedule.pstBuffer.poll();
37 36 if (null == schedule)
38 37 break;
39 38  
... ... @@ -47,7 +46,7 @@ public class SchedulePstThread extends Thread {
47 46 logger.error("EntityNotFoundException error.... 可忽略");
48 47 }
49 48 catch (Exception e) {
50   - logger.error("", e);
  49 + logger.error("班次入库的时候出现未知异常!!", e);
51 50 }
52 51 }
53 52 }
... ...
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
... ... @@ -924,4 +924,8 @@ public class ScheduleRealInfo {
924 924 public void setFcpSn(int fcpSn) {
925 925 this.fcpSn = fcpSn;
926 926 }
  927 +
  928 + public boolean _isInout(){
  929 + return this.getBcType().equals("out") || this.getBcType().equals("in");
  930 + }
927 931 }
... ...
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
... ... @@ -71,7 +71,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
71 71 sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
72 72 }
73 73 if(normal){
74   - sql += " and bc_type != 'in' and bc_type != 'out'";
  74 + sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
75 75 }
76 76  
77 77 list = jdbcTemplate.query(sql,
... ... @@ -158,7 +158,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
158 158  
159 159 if(model.length() != 0){
160 160 // sql = "select * from bsth_c_s_ttinfo_detail where ttinfo = '"+model+"' and bc_type != 'in' and bc_type != 'out'";
161   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out'";
  161 + 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'";
162 162  
163 163 ttList = jdbcTemplate.query(sql,
164 164 new RowMapper<Long>(){
... ... @@ -452,8 +452,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
452 452 if(statu.equals("1")){
453 453 for(Long time : timeList){
454 454 Map<String, Object> tempMap = new HashMap<String, Object>();
455   - List<Long> fcsjs = timeMap0.get(time);
456   - List<Long> fcsjAs = timeMap1.get(time);
  455 + List<Long> fcsjs = new ArrayList<Long>();
  456 + List<Long> fcsjAs = new ArrayList<Long>();
  457 + for(Long l : timeMap0.get(time)){
  458 + if(l < 90)
  459 + fcsjs.add(l);
  460 + }
  461 + for(Long l : timeMap1.get(time)){
  462 + if(l < 90)
  463 + fcsjAs.add(l);
  464 + }
457 465 Collections.sort(fcsjs);
458 466 Collections.sort(fcsjAs);
459 467 String[] split = key.split("/");
... ... @@ -514,8 +522,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
514 522 String[] split = key.split("/");
515 523 if((long)Long.valueOf(split[0]) == xlBm){
516 524 Map<String, Object> tempMap = new HashMap<String, Object>();
517   - List<Long> fcsjs = temp0.get(key);
518   - List<Long> fcsjAs = temp1.get(key);
  525 + List<Long> fcsjs = new ArrayList<Long>();
  526 + List<Long> fcsjAs = new ArrayList<Long>();
  527 + for(Long l : temp0.get(key)){
  528 + if(l < 90)
  529 + fcsjs.add(l);
  530 + }
  531 + for(Long l : temp1.get(key)){
  532 + if(l < 90)
  533 + fcsjAs.add(l);
  534 + }
519 535 Collections.sort(fcsjs);
520 536 Collections.sort(fcsjAs);
521 537 long fcsj = 0l;
... ... @@ -613,7 +629,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
613 629 if(sfqr == 1){
614 630 sql += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
615 631 }
616   - sql += " and bc_type != 'in' and bc_type != 'out' order by fcsj";
  632 + sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' order by fcsj";
617 633  
618 634 list = jdbcTemplate.query(sql,
619 635 new RowMapper<ScheduleRealInfo>(){
... ... @@ -707,7 +723,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
707 723 });
708 724  
709 725 if(model.length() != 0){
710   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out'";
  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'";
711 727  
712 728 ttList = jdbcTemplate.query(sql,
713 729 new RowMapper<Long>(){
... ... @@ -896,9 +912,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
896 912 }
897 913 }
898 914 Collections.sort(keyList2);
899   - for(long l : keyList2){
900   - System.out.println(l);
901   - }
  915 +
902 916 for(int i = 1; i < keyList2.size(); i++){
903 917 long fcsj1 = keyList2.get(i - 1);
904 918 long fcsj2 = keyList2.get(i);
... ... @@ -911,7 +925,6 @@ public class BusIntervalServiceImpl implements BusIntervalService {
911 925 sjyysj += fcsj2 - fcsj1;
912 926 }
913 927 sjyysj1 += fcsj2 - fcsj1;
914   - System.out.println("---"+(fcsj2-fcsj1)+"---"+sjyysj+"---"+sjyysj1);
915 928 }
916 929 }
917 930  
... ... @@ -1722,7 +1735,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1722 1735 if(company.length() != 0){
1723 1736 sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
1724 1737 }
1725   - sql += " and bc_type != 'in' and bc_type != 'out'";
  1738 + sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
1726 1739  
1727 1740 list = jdbcTemplate.query(sql,
1728 1741 new RowMapper<ScheduleRealInfo>(){
... ...
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
... ... @@ -16,6 +16,7 @@ import com.bsth.util.TimeUtils;
16 16 import com.bsth.util.db.DBUtils_MS;
17 17 import com.bsth.webService.trafficManage.geotool.services.InternalPortType;
18 18 import com.bsth.webService.trafficManage.geotool.services.Internal;
  19 +import com.bsth.webService.trafficManage.org.tempuri.Results;
19 20 import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator;
20 21 import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap;
21 22 import org.apache.commons.lang.time.DateUtils;
... ... @@ -300,7 +301,9 @@ public class TrafficManageServiceImpl implements TrafficManageService{
300 301 String date = sdfnyr.format(DateUtils.addDays(new Date(), -1));
301 302 StringBuffer sf = new StringBuffer();
302 303 try {
303   - sf.append("<DLDS>");
  304 + int counter = 0; // 计数器
  305 + int per = 10; // 每几条线路上传一次路单
  306 +
304 307 List<ScheduleRealInfo> list = scheduleRealInfoRepository.setLD(date);
305 308 List<Map<String,Object>> listGroup = scheduleRealInfoRepository.setLDGroup(date);
306 309 Map<String,Object> map = new HashMap<String,Object>();
... ... @@ -314,6 +317,11 @@ public class TrafficManageServiceImpl implements TrafficManageService{
314 317 if(line == null || line.getInUse() == null || line.getInUse() == 0){
315 318 continue;
316 319 }
  320 + if(counter % per == 0){
  321 + sf = new StringBuffer();
  322 + sf.append("<DLDS>");
  323 + }
  324 + counter ++;
317 325 sf.append("<DLD>");
318 326 sf.append("<RQ>"+date+"</RQ>");
319 327 sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm")+"")+"</XLBM>");
... ... @@ -322,7 +330,6 @@ public class TrafficManageServiceImpl implements TrafficManageService{
322 330 sf.append("<UPDT>"+sdfnyrsfm.format(new Date())+"</UPDT>");
323 331 sf.append("<LDList>");
324 332  
325   - int seqNumber = 0;
326 333 for(ScheduleRealInfo scheduleRealInfo:list){
327 334 if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"")
328 335 .equals(scheduleRealInfo.getLpName())
... ... @@ -369,17 +376,33 @@ public class TrafficManageServiceImpl implements TrafficManageService{
369 376 sf.append("</LDList>");
370 377 sf.append("</DLD>");
371 378 }
  379 + if(counter % per == per - 1){
  380 + counter = 0;
  381 + sf.append("</DLDS>");
  382 + Results results = ssop.setLD(userNameOther, passwordOther, sf.toString());
  383 + if(results.isSuccess()){
  384 + result = "success";
  385 + }
  386 + logger.info("setLD:"+sf.toString());
  387 + logger.info("setLD:"+result);
  388 + }
372 389 }
373   - sf.append("</DLDS>");
374   - if(ssop.setLD(userNameOther, passwordOther, sf.toString()).isSuccess()){
375   - result = "success";
  390 + // 每per条线路上传后剩下的数据再上传
  391 + if(counter > 0){
  392 + sf.append("</DLDS>");
  393 + Results results = ssop.setLD(userNameOther, passwordOther, sf.toString());
  394 + if(results.isSuccess()){
  395 + result = "success";
  396 + }
  397 + logger.info("setLD:"+sf.toString());
  398 + logger.info("setLD:"+result);
376 399 }
  400 +
377 401 } catch (Exception e) {
378 402 logger.error("setLD:",e);
379 403 e.printStackTrace();
380 404 }finally{
381   - logger.info("setLD:"+sf.toString());
382   - logger.info("setLD:"+result);
  405 +
383 406 }
384 407 return result;
385 408 }
... ...
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
... ... @@ -16,7 +16,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
16 16  
17 17 Map<String, Collection<ScheduleRealInfo>> findByLines(String lines);
18 18  
19   - Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType);
  19 + Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType);
20 20  
21 21 Map<String, Object> destroy(String idsStr/*, int spaceAdjust*/, String remarks, String reason/*, int spaceNum*/);
22 22  
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -207,7 +207,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
207 207 private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
208 208  
209 209 @Override
210   - public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType) {
  210 + public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType) {
211 211 Map<String, Object> map = new HashMap<>();
212 212 try {
213 213  
... ... @@ -1155,7 +1155,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1155 1155 sch = list.get(i);
1156 1156  
1157 1157 //调整待发
1158   - outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null);
  1158 + outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "间隔调整");
1159 1159 }
1160 1160  
1161 1161 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -1325,7 +1325,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1325 1325 if (StringUtils.isNotEmpty(jhlc)) {
1326 1326 double jhlcNum = Double.parseDouble(jhlc);
1327 1327 //烂班
1328   - if(jhlcNum == 0 && sch.getJhlcOrig() != 0)
  1328 + if(jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout())
1329 1329 destroy(sch.getId() + "", "", map.get("adjustExps").toString());
1330 1330 else if(jhlcNum != sch.getJhlc()){
1331 1331 sch.setJhlc(jhlcNum);
... ... @@ -1375,7 +1375,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1375 1375 schedule = dayOfSchedule.get(id);
1376 1376  
1377 1377 if(schedule != null)
1378   - outgoAdjust(id, null, dfsj, null);
  1378 + outgoAdjust(id, null, dfsj, null, "批量调整");
1379 1379 }
1380 1380  
1381 1381 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -3229,7 +3229,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3229 3229 if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
3230 3230 continue;
3231 3231  
3232   - tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null);
  3232 + tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "批量调整");
3233 3233  
3234 3234 if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
3235 3235 list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -793,260 +793,74 @@ public class ReportServiceImpl implements ReportService{
793 793 return m;
794 794 }
795 795 });
796   -
797   - //班次
798   - int sj_0 = 6*60+31,sj_1 = 8*60+30,sj_2 = 16*60+1,sj_3 = 18*60;
799   -
800   - //顺序 出场--早高峰---中午---晚高峰---进场
801   - //实驶时间时间(分),0为上行,1为下行
802   - int ccsj0=0,ccsj1=0,zgf0=0,zgf1=0,zw0=0,zw1=0,wgf0=0,wgf1=0,jcsj0=0,jcsj1=0;
803   -
804   - //记录上一个发车时间(方便记录间距)
805   - int cfc0=0,cfc1=0,zfc0=0,zfc1=0,zwfc0=0,zwfc1=0,wfc0=0,wfc1=0,jcfc0Z=0,jcfc1Z=0,jcfc0W=0,jcfc1W=0;
806   - //车距 (发车时间的间距) i--MIN a--MAX
807   - int iC=999,aC=-1,iZg=999,aZg=-1,iZw=999,aZw=-1,iWg=999,aWg=-1,iJcZ=999,aJcZ=-1,iJcW=999,aJcW=-1;
808   - int iC1=999,aC1=-1,iZg1=999,aZg1=-1,iZw1=999,aZw1=-1,iWg1=999,aWg1=-1,iJc1Z=999,aJc1Z=-1,iJc1W=999,aJc1W=-1;
  796 +
  797 + List<Map<String, Object>> newList=new ArrayList<Map<String,Object>>();
  798 + Map<String, List<Map<String, Object>>> keyMap = new HashMap<String, List<Map<String, Object>>>();
  799 + Map<String, Map<String, Object>> maps = new HashMap<String, Map<String, Object>>();
  800 + keyMap.put("(首)——6:30", new ArrayList<Map<String, Object>>());
  801 + keyMap.put("6:31——8:30", new ArrayList<Map<String, Object>>());
  802 + keyMap.put("8:31——16:00", new ArrayList<Map<String, Object>>());
  803 + keyMap.put("16:01——18:00", new ArrayList<Map<String, Object>>());
  804 + keyMap.put("18:01——(末)", new ArrayList<Map<String, Object>>());
  805 + for(int i = 0; i < list.size(); i++){
  806 + Map<String, Object> ttMap = list.get(i);
  807 + String fcsj = ttMap.get("fcsj").toString();
  808 + String[] split = fcsj.split(":");
  809 + int fcsjT = Integer.valueOf(split[0])*60+Integer.valueOf(split[1]);
  810 + if(fcsjT >= minSj && fcsjT <= 6*60+30){
  811 + keyMap.get("(首)——6:30").add(ttMap);
  812 + } else if(fcsjT > 6*60+30 && fcsjT <= 8*60+30){
  813 + keyMap.get("6:31——8:30").add(ttMap);
  814 + } else if(fcsjT > 8*60+30 && fcsjT <= 16*60){
  815 + keyMap.get("8:31——16:00").add(ttMap);
  816 + } else if(fcsjT > 16*60 && fcsjT <= 18*60){
  817 + keyMap.get("16:01——18:00").add(ttMap);
  818 + } else {
  819 + keyMap.get("18:01——(末)").add(ttMap);
  820 + }
  821 + }
809 822  
810   - for(int i=0;i<list.size();i++){
811   - Map<String, Object> ttMap=list.get(i);
812   - String xlDir=ttMap.get("dir").toString();
813   - int bcsj=Integer.parseInt(ttMap.get("bcsj").toString());
814   - String fcsj=ttMap.get("fcsj").toString();
815   - String[] fcsjs=fcsj.split(":");
816   - int fcsjNum=Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1]);
817   -
818   - if(xlDir.equals("0")){
819   - if(fcsjNum>=minSj && fcsjNum<sj_0){
820   - ccsj0 +=bcsj;
821   - if(aC<0){
822   - cfc0 =fcsjNum;
823   - aC=0;
824   - }else{
825   - if(fcsjNum-cfc0<iC){
826   - iC=fcsjNum-cfc0;
827   - }
828   - if(fcsjNum-cfc0>aC){
829   - aC=fcsjNum-cfc0;
830   - }
831   -
832   - cfc0=fcsjNum;
833   - }
834   -
835   - }else if(fcsjNum>=sj_0 && fcsjNum<=sj_1){
836   - zgf0 +=bcsj;
837   - if(aZg<0){
838   - zfc0 =fcsjNum;
839   - aZg=0;
840   - }else{
841   - if(fcsjNum-zfc0<iZg){
842   - iZg=fcsjNum-zfc0;
843   - }
844   -
845   - if(fcsjNum-zfc0>aZg){
846   - aZg=fcsjNum-zfc0;
847   - }
848   -
849   - zfc0=fcsjNum;
850   - }
851   - }else if(fcsjNum>sj_1 && fcsjNum<sj_2){
852   - zw0 +=bcsj;
853   - if(aZw<0){
854   - zwfc0 =fcsjNum;
855   - aZw=0;
856   - }else{
857   - if(fcsjNum-zwfc0<iZw){
858   - iZw=fcsjNum-zwfc0;
859   - }
860   - if(fcsjNum-zwfc0>aZw){
861   - aZw=fcsjNum-zwfc0;
862   - }
863   - zwfc0=fcsjNum;
864   - }
865   -
866   - }else if(fcsjNum>=sj_2 && fcsjNum<=sj_3){
867   - wgf0 +=bcsj;
868   - if(aWg<0){
869   - wfc0=fcsjNum;
870   - aWg=0;
871   - }else{
872   - if(fcsjNum-wfc0<iWg){
873   - iWg=fcsjNum-wfc0;
874   - }
875   - if(fcsjNum-wfc0>aWg){
876   - aWg=fcsjNum-wfc0;
877   - }
878   - wfc0=fcsjNum;
879   - }
880   - }else if(fcsjNum>sj_3){
881   - jcsj0 +=bcsj;
882   - if(aJcW<0){
883   - jcfc0W=fcsjNum;
884   - aJcW=0;
885   - }else{
886   - if(fcsjNum-jcfc0W<iJcW){
887   - iJcW=fcsjNum-jcfc0W;
888   - }
889   - if(fcsjNum-jcfc0W>aJcW){
890   - aJcW=fcsjNum-jcfc0W;
891   - }
892   - jcfc0W=fcsjNum;
893   - }
894   - }else if(fcsjNum<minSj){
895   - jcsj0 +=bcsj;
896   - if(aJcZ<0){
897   - jcfc0Z=fcsjNum;
898   - aJcZ=0;
899   - }else{
900   - if(fcsjNum-jcfc0Z<iJcZ){
901   - iJcZ=fcsjNum-jcfc0Z;
902   - }
903   - if(fcsjNum-jcfc0Z>aJcZ){
904   - aJcZ=fcsjNum-jcfc0Z;
905   - }
906   - jcfc0Z=fcsjNum;
907   - }
  823 + for(String key : keyMap.keySet()){
  824 + Map<String, Object> tempMap = new HashMap<String, Object>();
  825 + List<Map<String, Object>> list2 = keyMap.get(key);
  826 + List<Integer> cjs = new ArrayList<Integer>();
  827 + int sxsj = 0, xxsj = 0, zcj = 0;
  828 + int temp = 24*60+1;
  829 + for(Map<String, Object> m : list2){
  830 + String[] split = m.get("fcsj").toString().split(":");
  831 + int fcsj = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]);
  832 + int xlDir = Integer.valueOf(m.get("dir").toString());
  833 + int bcsj = Integer.valueOf(m.get("bcsj").toString());
  834 + if(xlDir == 0){
  835 + sxsj += bcsj;
  836 + } else {
  837 + xxsj += bcsj;
908 838 }
909   -
910   -
911   - }else{
912   - if(fcsjNum>=minSj && fcsjNum<sj_0){
913   - ccsj1 +=bcsj;
914   - if(aC1<0){
915   - cfc1=fcsjNum;
916   - aC1=0;
917   - }else{
918   - if(fcsjNum-cfc1<iC1){
919   - iC1=fcsjNum-cfc1;
920   - }
921   - if(fcsjNum-cfc1>aC1){
922   - aC1=fcsjNum-cfc1;
923   - }
924   - cfc1=fcsjNum;
925   - }
926   - }else if(fcsjNum>=sj_0 && fcsjNum<=sj_1){
927   - zgf1 +=bcsj;
928   - if(aZg1<0){
929   - zfc1=fcsjNum;
930   - aZg1=0;
931   - }else{
932   - if(fcsjNum-zfc1<iZg1){
933   - iZg1=fcsjNum-zfc1;
934   - }
935   - if(fcsjNum-zfc1>aZg1){
936   - aZg1=fcsjNum-zfc1;
937   - }
938   -
939   - zfc1=fcsjNum;
940   - }
941   - }else if(fcsjNum>sj_1 && fcsjNum<sj_2){
942   - zw1 +=bcsj;
943   - if(aZw1<0){
944   - zwfc1=fcsjNum;
945   - aZw1=0;
946   - }else{
947   - if(fcsjNum-zwfc1<iZw1){
948   - iZw1=fcsjNum-zwfc1;
949   - }
950   - if(fcsjNum-zwfc1>aZw1){
951   - aZw1=fcsjNum-zwfc1;
952   - }
953   - zwfc1=fcsjNum;
954   - }
955   - }else if(fcsjNum>=sj_2 && fcsjNum<=sj_3){
956   - wgf1 +=bcsj;
957   - if(aWg1<0){
958   - wfc1=fcsjNum;
959   - aWg1=0;
960   - }else{
961   - if(fcsjNum-wfc1<iWg1){
962   - iWg1=fcsjNum-wfc1;
963   - }
964   - if(fcsjNum-wfc1<aWg1){
965   - aWg1=fcsjNum-wfc1;
966   - }
967   - wfc1=fcsjNum;
968   - }
969   - }else if(fcsjNum>sj_3){
970   - jcsj1 +=bcsj;
971   - if(aJc1W<0){
972   - jcfc1W=fcsjNum;
973   - aJc1W=0;
974   - }else{
975   - if(fcsjNum-jcfc1W<iJc1W){
976   - aJc1W=fcsjNum-jcfc1W;
977   - }
978   - if(fcsjNum-jcfc1W>aJc1W){
979   - aJc1W=fcsjNum-jcfc1W;
980   - }
981   -
982   - jcfc1W=fcsjNum;
983   - }
984   - }else if(fcsjNum<minSj){
985   - jcsj1 +=bcsj;
986   - if(aJc1Z<0){
987   - jcfc1Z=fcsjNum;
988   - aJc1Z=0;
989   - }else{
990   - if(fcsjNum-jcfc1Z<iJc1Z){
991   - aJc1Z=fcsjNum-jcfc1Z;
992   - }
993   - if(fcsjNum-jcfc1Z>aJc1Z){
994   - aJc1Z=fcsjNum-jcfc1Z;
995   - }
996   -
997   - jcfc1Z=fcsjNum;
998   - }
  839 + if(temp >= fcsj){
  840 + temp = fcsj;
  841 + } else {
  842 + cjs.add(fcsj - temp);
  843 + temp = fcsj;
999 844 }
1000 845 }
1001   -
  846 + Collections.sort(cjs);
  847 + for(int i : cjs){
  848 + zcj += i;
  849 + }
  850 + tempMap.put("sjd", key);
  851 + tempMap.put("sxsj", sxsj);
  852 + tempMap.put("xxsj", xxsj);
  853 + tempMap.put("fqsj", sxsj + xxsj);
  854 + tempMap.put("cjqj", cjs.size()>0?cjs.get(0)+"——"+cjs.get(cjs.size()-1):"——");
  855 + tempMap.put("pjcj", cjs.size()>0?zcj/(cjs.size()-1):"/");
  856 + maps.put(key, tempMap);
1002 857 }
  858 + newList.add(maps.get("(首)——6:30"));
  859 + newList.add(maps.get("6:31——8:30"));
  860 + newList.add(maps.get("8:31——16:00"));
  861 + newList.add(maps.get("16:01——18:00"));
  862 + newList.add(maps.get("18:01——(末)"));
1003 863  
1004   -
1005   - List<Map<String, Object>> newList=new ArrayList<Map<String,Object>>();
1006   - Map<String, Object> newmap1=new HashMap<String,Object>();
1007   - Map<String, Object> newmap2=new HashMap<String,Object>();
1008   - Map<String, Object> newmap3=new HashMap<String,Object>();
1009   - Map<String, Object> newmap4=new HashMap<String,Object>();
1010   - Map<String, Object> newmap5=new HashMap<String,Object>();
1011   - newmap1.put("sjd", "(首)——6:30");
1012   - newmap1.put("sxsj", ccsj0);
1013   - newmap1.put("xxsj", ccsj1);
1014   - newmap1.put("fqsj", ccsj0+ccsj1);
1015   - newmap1.put("cj", (iC-iC1>0?iC1:iC)+"——"+(aC-aC1>0?aC:aC1));
1016   -
1017   - newmap2.put("sjd", "6:31——8:30");
1018   - newmap2.put("sxsj", zgf0);
1019   - newmap2.put("xxsj", zgf1);
1020   - newmap2.put("fqsj", zgf1+zgf0);
1021   - newmap2.put("cj", (iZg-iZg1>0?iZg1:iZg)+"——"+(aZg-aZg1>0?aZg:aZg1));
1022   -
1023   - newmap3.put("sjd", "8:30——16:00");
1024   - newmap3.put("sxsj", zw0);
1025   - newmap3.put("xxsj", zw1);
1026   - newmap3.put("fqsj", zw0+zw1);
1027   - newmap3.put("cj", (iZw-iZw1>0?iZw1:iZw)+"——"+(aZw-aZw1>0?aZw:aZw1));
1028   -
1029   - newmap4.put("sjd", "16:01——18:00");
1030   - newmap4.put("sxsj", wgf0);
1031   - newmap4.put("xxsj", wgf1);
1032   - newmap4.put("fqsj", wgf0+wgf1);
1033   - newmap4.put("cj", (iWg-iWg1>0?iWg1:iWg)+"——"+(aWg-aWg1>0?aWg:aWg1));
1034   -
1035   - newmap5.put("sjd", "18:00——(末)");
1036   - newmap5.put("sxsj", jcsj0);
1037   - newmap5.put("xxsj", jcsj1);
1038   - newmap5.put("fqsj", jcsj0+jcsj1);
1039   - int min0=iJcZ-iJcW>0?iJcW:iJcZ;
1040   - int max0=aJcZ-aJcW>0?aJcZ:aJcW;
1041   - int min1=iJc1Z-iJc1W>0?iJc1W:iJc1Z;
1042   - int max1=aJc1Z-aJc1W>0?aJc1Z:aJc1W;
1043   - newmap5.put("cj", (min0-min1>0?min1:min0)+"——"+(max0-max1>0?max0:max1));
1044   -
1045   - newList.add(newmap1);
1046   - newList.add(newmap2);
1047   - newList.add(newmap3);
1048   - newList.add(newmap4);
1049   - newList.add(newmap5);
1050 864 return newList;
1051 865 }
1052 866 @Override
... ...
src/main/java/com/bsth/service/schedule/impl/PeopleCarPlanServiceImpl.java
... ... @@ -404,7 +404,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
404 404 }
405 405  
406 406 if(!schedule.getBcType().equals("in") && !schedule.getBcType().equals("out")
407   - && schedule.getFcsjActual() != null){
  407 + && !schedule.getBcType().equals("ldks") && schedule.getFcsjActual() != null){
408 408 // String clZbh = schedule.getClZbh();
409 409 String xlDir = schedule.getXlDir();
410 410 if(!listMap.containsKey(xlDir))
... ... @@ -526,7 +526,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
526 526 // if(company.length() != 0){
527 527 sql += " and gs_bm like '%"+company+"%' and fgs_bm like '%"+subCompany+"%'";
528 528 // }
529   - sql += " and bc_type != 'in' and bc_type != 'out'";
  529 + sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
530 530  
531 531 list = jdbcTemplate.query(sql,
532 532 new RowMapper<ScheduleRealInfo>(){
... ... @@ -579,7 +579,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
579 579  
580 580 if(model.length() != 0){
581 581 // sql = "select * from bsth_c_s_ttinfo_detail where ttinfo = '"+model+"' and bc_type != 'in' and bc_type != 'out'";
582   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out'";
  582 + 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'";
583 583  
584 584 ttList = jdbcTemplate.query(sql,
585 585 new RowMapper<Long>(){
... ... @@ -807,7 +807,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
807 807 // if(company.length() != 0){
808 808 sql += " and gs_bm like '%"+company+"%' and fgs_bm like '%"+subCompany+"%'";
809 809 // }
810   - sql += " and bc_type != 'in' and bc_type != 'out'";
  810 + sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
811 811  
812 812 list = jdbcTemplate.query(sql,
813 813 new RowMapper<ScheduleRealInfo>(){
... ... @@ -1174,7 +1174,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1174 1174 List<ScheduleRealInfo> list = this.getSchedule(company, subCompany, line, date);
1175 1175  
1176 1176 for(ScheduleRealInfo schedule : list){
1177   - if(schedule.getBcType().equals("in") || schedule.getBcType().equals("out"))
  1177 + if(schedule.getBcType().equals("in") || schedule.getBcType().equals("out") || schedule.getBcType().equals("ldks"))
1178 1178 continue;
1179 1179 if(schedule.getStatus() == -1){
1180 1180 continue;
... ... @@ -1353,7 +1353,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1353 1353 List<ScheduleRealInfo> list = this.getSchedule(company, subCompany, line, date);
1354 1354  
1355 1355 for(ScheduleRealInfo schedule : list){
1356   - if(schedule.getBcType().equals("in") || schedule.getBcType().equals("out"))
  1356 + if(schedule.getBcType().equals("in") || schedule.getBcType().equals("out") || schedule.getBcType().equals("ldks"))
1357 1357 continue;
1358 1358 if(schedule.getStatus() == -1){
1359 1359 continue;
... ...
src/main/resources/static/pages/report/timetable/timetable.html
... ... @@ -165,13 +165,14 @@
165 165 <div class="col-md-6" >
166 166 <table class="table table-bordered table-checkable" id="formsTime5">
167 167 <tr>
168   - <td colspan="5">全日分组行驶时间(区间除外)</td>
  168 + <td colspan="6">全日分组行驶时间(区间除外)</td>
169 169 </tr>
170 170 <tr>
171   - <td width="25%" rowspan="2" style="text-align:center;vertical-align:middle;">分组 时间</td>
172   - <td width="30%" colspan="2" style="text-align:center;vertical-align:middle;">实驶(分)</td>
  171 + <td width="20%" rowspan="2" style="text-align:center;vertical-align:middle;">分组 时间</td>
  172 + <td width="25%" colspan="2" style="text-align:center;vertical-align:middle;">计划行驶(分)</td>
173 173 <td width="20%" rowspan="2" style="text-align:center;vertical-align:middle;">分圈 时间</td>
174   - <td width="25%" rowspan="2" style="text-align:center;vertical-align:middle;">车距</td>
  174 + <td width="20%" rowspan="2" style="text-align:center;vertical-align:middle;">车距区间</td>
  175 + <td width="15%" rowspan="2" style="text-align:center;vertical-align:middle;">平均车距</td>
175 176 </tr>
176 177 <tr>
177 178 <td>上行</td>
... ... @@ -398,12 +399,13 @@
398 399 <td align="center">{{result.sxsj}}</td>
399 400 <td align="center">{{result.xxsj}}</td>
400 401 <td align="center">{{result.fqsj}}</td>
401   - <td align="center">{{result.cj}}</td>
  402 + <td align="center">{{result.cjqj}}</td>
  403 + <td align="center">{{result.pjcj}}</td>
402 404 </tr>
403 405 {{/each}}
404 406 {{if list.length == 0}}
405 407 <tr>
406   - <td colspan="5"><h6 class="muted">没有找到相关数据</h6></td>
  408 + <td colspan="6"><h6 class="muted">没有找到相关数据</h6></td>
407 409 </tr>
408 410 {{/if}}
409 411 </script>
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -1158,3 +1158,8 @@ ul.left_tabs_lg li{
1158 1158 padding: 2px 7px;
1159 1159 border-radius: 3px;
1160 1160 }
  1161 +
  1162 +.uk-badge.sch_ldks{
  1163 + background: #8c8c8c;
  1164 + background-image: linear-gradient(to bottom,#a7a7a7,#8c8c8c);
  1165 +}
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/badge_tooltip.html
... ... @@ -61,4 +61,12 @@
61 61 </div>
62 62 </div>
63 63 </script>
  64 +
  65 + <script id="sch-table-ldks-tootip-temp" type="text/html">
  66 + <div class="tl-tip-panel">
  67 + <div style="font-size: 13px;">
  68 + {{qdzName}} 空驶至 {{zdzName}}
  69 + </div>
  70 + </div>
  71 + </script>
64 72 </div>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/dftz.html
... ... @@ -115,6 +115,10 @@
115 115 (function() {
116 116 var modal = '#schedule-dftz-modal'
117 117 ,sch;
  118 +
  119 + var isInout = function (code) {
  120 + return code=='out' || code=='in';
  121 + };
118 122 $(modal).on('init', function(e, data) {
119 123 e.stopPropagation();
120 124 sch=data.sch;
... ... @@ -125,12 +129,12 @@
125 129 var bctypes=dictionaryUtils.getByGroup('ScheduleType')
126 130 ,opts='';
127 131  
128   - if(sch.bcType == 'out' || sch.bcType == 'in'){
  132 + if(isInout(sch.bcType)){
129 133 $('[name=bcType]', modal).html('<option value="'+sch.bcType+'">'+bctypes[sch.bcType]+'</option>');
130 134 }
131 135 else{
132 136 for(var code in bctypes){
133   - if(code!='venting' && code!='major' && code != 'normal')
  137 + if(isInout(code))
134 138 continue;
135 139 opts+='<option value="'+code+'">'+bctypes[code]+'</option>';
136 140 }
... ... @@ -166,10 +170,12 @@
166 170 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html';
167 171 detailModal='#bctype-venting-modal';
168 172 }
169   - else{
  173 + else if(type=='major'){
170 174 detailModal='#bctype-major-modal';
171 175 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_major.html';
172 176 }
  177 + else
  178 + return;
173 179  
174 180 $.get(url, function(htmlStr){
175 181 $(document.body).append(htmlStr);
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
... ... @@ -99,6 +99,8 @@
99 99 <span class="uk-badge uk-badge-danger">放站</span>
100 100 {{else if sch.bcType == "region"}}
101 101 <span class="uk-badge">区间</span>
  102 + {{else if sch.bcType == "ldks"}}
  103 + <span class="uk-badge sch_ldks">空驶</span>
102 104 {{/if}}
103 105 {{if sch.sflj}}
104 106 <span class="uk-badge uk-badge-danger">临加</span>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
... ... @@ -74,6 +74,8 @@
74 74 <span class="uk-badge uk-badge-danger">放站</span>
75 75 {{else if sch.bcType == "region"}}
76 76 <span class="uk-badge sch_region">区间</span>
  77 + {{else if sch.bcType == "ldks"}}
  78 + <span class="uk-badge sch_ldks">空驶</span>
77 79 {{/if}}
78 80 {{if sch.sflj}}
79 81 <span class="uk-badge uk-badge-danger">临加</span>
... ... @@ -126,6 +128,8 @@
126 128 <span class="uk-badge uk-badge-danger">放站</span>
127 129 {{else if bcType == "region"}}
128 130 <span class="uk-badge sch_region">区间</span>
  131 + {{else if bcType == "ldks"}}
  132 + <span class="uk-badge sch_ldks">空驶</span>
129 133 {{/if}}
130 134 {{if sflj}}
131 135 <span class="uk-badge uk-badge-danger">临加</span>
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch/edit.html deleted 100644 → 0
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="history-sch-edit-modal">
2   - <div class="uk-modal-dialog" style="width: 900px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>历史班次编辑</h2></div>
6   - <form class="uk-form uk-form-horizontal">
7   - </form>
8   - </div>
9   -
10   - <script id="history-sch-edit-form-temp" type="text/html">
11   - <input type="hidden" name="id" value="{{id}}"/>
12   -
13   - <div class="uk-grid">
14   - <div class="uk-width-1-3">
15   - <div class="uk-form-row">
16   - <label class="uk-form-label" >班次类型</label>
17   - <div class="uk-form-controls">
18   - <select class="form-control nt-dictionary" disabled data-code="{{bcType}}" name="bcType" data-group=ScheduleType></select>
19   - </div>
20   - </div>
21   - </div>
22   - <div class="uk-width-1-3">
23   - <div class="uk-form-row">
24   - <label class="uk-form-label" >起点</label>
25   - <div class="uk-form-controls">
26   - <input type="text" value="{{qdzName}}" disabled>
27   - </div>
28   - </div>
29   - </div>
30   - <div class="uk-width-1-3">
31   - <div class="uk-form-row">
32   - <label class="uk-form-label" >终点</label>
33   - <div class="uk-form-controls">
34   - <input type="text" value="{{zdzName}}" disabled>
35   - </div>
36   - </div>
37   - </div>
38   - </div>
39   -
40   - <div class="uk-grid">
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   - <div class="uk-autocomplete uk-form car-autocom">
46   - <input type="text" value="{{clZbh}}" name="clZbh" required>
47   - </div>
48   - </div>
49   - </div>
50   - </div>
51   - <div class="uk-width-1-3">
52   - <div class="uk-form-row">
53   - <label class="uk-form-label" >驾驶员</label>
54   - <div class="uk-form-controls">
55   - <div class="uk-autocomplete uk-form jsy-autocom">
56   - <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required>
57   - </div>
58   - </div>
59   - </div>
60   - </div>
61   - </div>
62   -
63   - <div class="uk-grid">
64   - <div class="uk-width-1-3">
65   - <div class="uk-form-row">
66   - <label class="uk-form-label" >计发</label>
67   - <div class="uk-form-controls">
68   - <input type="text" value="{{fcsj}}" disabled>
69   - </div>
70   - </div>
71   - </div>
72   - <div class="uk-width-1-3">
73   - <div class="uk-form-row">
74   - <label class="uk-form-label" >待发</label>
75   - <div class="uk-form-controls">
76   - <input type="text" name="dfsj" value="{{dfsj}}" required>
77   - </div>
78   - </div>
79   - </div>
80   - <div class="uk-width-1-3">
81   - <div class="uk-form-row">
82   - <label class="uk-form-label" >实发</label>
83   - <div class="uk-form-controls">
84   - <input type="text" name="fcsjActual" value="{{fcsjActual}}" >
85   - </div>
86   - </div>
87   - </div>
88   - </div>
89   -
90   - <div class="uk-grid">
91   - <div class="uk-width-1-3">
92   - <div class="uk-form-row">
93   - <label class="uk-form-label" >计划里程</label>
94   - <div class="uk-form-controls">
95   - <input type="text" value="{{jhlc}}" disabled>
96   - </div>
97   - </div>
98   - </div>
99   - <div class="uk-width-1-3">
100   - <div class="uk-form-row">
101   - <label class="uk-form-label" >计划终点</label>
102   - <div class="uk-form-controls">
103   - <input type="text" value="{{zdsj}}" disabled>
104   - </div>
105   - </div>
106   - </div>
107   - <div class="uk-width-1-3">
108   - <div class="uk-form-row">
109   - <label class="uk-form-label" >实际终点</label>
110   - <div class="uk-form-controls">
111   - <input type="text" name="zdsjActual" value="{{zdsjActual}}" >
112   - </div>
113   - </div>
114   - </div>
115   - </div>
116   -
117   - <div class="uk-grid">
118   - <div class="uk-width-1-1">
119   - <div class="uk-form-row ct-stacked">
120   - <label class="uk-form-label" >备注</label>
121   - <div class="uk-form-controls" style="margin-top: 5px;">
122   - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="100" placeholder="备注">{{remarks}}</textarea>
123   - </div>
124   - </div>
125   - </div>
126   - </div>
127   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
128   - <button type="button" class="uk-button uk-modal-close">取消</button>
129   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
130   - </div>
131   - </script>
132   -
133   - <script>
134   - (function() {
135   - var modal = '#history-sch-edit-modal'
136   - ,sch,parentModal;
137   - $(modal).on('init', function(e, data) {
138   - var id = data.id;
139   - parentModal=data.parentModal;
140   -
141   - $.get('/realSchedule/'+id, function (sch) {
142   - var htmlStr = template('history-sch-edit-form-temp', sch);
143   - $('form', modal).html(htmlStr);
144   -
145   - //字典转换
146   - dictionaryUtils.transformDom($('.nt-dictionary', modal));
147   -
148   - //----------- Autocomplete --------------
149   - $.get('/basic/cars', function(rs) {
150   - //车辆
151   - gb_common.carAutocomplete($('.car-autocom', modal), rs);
152   - });
153   - $.get('/basic/all_personnel', function(rs) {
154   - //驾驶员
155   - gb_common.personAutocomplete($('.jsy-autocom', modal), rs);
156   - //售票员
157   - gb_common.personAutocomplete($('.spy-autocom', modal), rs);
158   - });
159   -
160   -
161   - //submit
162   - var f = $('form', modal).formValidation(gb_form_validation_opts);
163   - f.on('success.form.fv', function(e) {
164   - e.preventDefault();
165   - var data = $(this).serializeJSON();
166   -
167   - //拆分驾驶员工号和姓名
168   - data.jGh = data.jsy.split('/')[0];
169   - data.jName = data.jsy.split('/')[1];
170   - delete data.jsy;
171   - //拆分售票员工号和姓名
172   - if(data.sGh != null){
173   - data.sGh = data.spy.split('/')[0];
174   - data.sName = data.spy.split('/')[1];
175   - delete data.spy;
176   - }
177   -
178   - gb_common.$post('/realSchedule/history', data, function (rs) {
179   - //console.log(rs);
180   - UIkit.modal(modal).hide();
181   - $(parentModal).trigger('refresh');
182   - });
183   - });
184   - });
185   - });
186   - })();
187   - </script>
188   -</div>
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch_maintain.html
... ... @@ -86,6 +86,8 @@
86 86 <span class="uk-badge uk-badge-danger">放站</span>
87 87 {{else if sch.bcType == "region"}}
88 88 <span class="uk-badge sch_region">区间</span>
  89 + {{else if sch.bcType == "ldks"}}
  90 + <span class="uk-badge sch_ldks">空驶</span>
89 91 {{/if}}
90 92 {{if sch.sflj}}
91 93 <span class="uk-badge uk-badge-danger">临加</span>
... ...
src/main/resources/static/real_control_v2/fragments/north/toolbar.html
... ... @@ -55,7 +55,7 @@
55 55 </li>
56 56 {{/each}}
57 57 </ul>
58   - <a class="uk-navbar-brand op-beijingtime-time" title="每次秒数到0与服务器同步一次,睡眠状态唤醒会短暂异常,可鼠标右击横幅任意区域立刻同步!">
  58 + <a class="uk-navbar-brand op-beijingtime-time" >
59 59 <span></span>
60 60 </a>
61 61 <div class="uk-navbar-content uk-navbar-flip uk-hidden-small" style="padding-left: 0;">
... ...
src/main/resources/static/real_control_v2/js/line_schedule/badge_tooltip.js
... ... @@ -2,6 +2,36 @@
2 2 /** badge 悬停 tip 相关 */
3 3 var gb_schedule_badge_tootip = (function () {
4 4  
  5 + var _opts = {
  6 + show:{
  7 + ready: true,
  8 + delay: 300
  9 + },
  10 + position: {
  11 + viewport: $(window),
  12 + my: 'center left',
  13 + at: 'center right'
  14 + },
  15 + hide: {
  16 + fixed: true,
  17 + delay: 300
  18 + },
  19 + events: {
  20 + hidden: function(event, api) {
  21 + //destroy dom
  22 + $(this).qtip('destroy', true);
  23 + }
  24 + }
  25 + };
  26 +
  27 + var getSch = function (e) {
  28 + var id = $(e).parents('dl').data('id'),
  29 + lineCode = $(e).parents('li.line_schedule').data('id'),
  30 + sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  31 + return sch;
  32 + };
  33 +
  34 + var _badge = '.schedule-wrap .ct_table_body .uk-badge';
5 35 var temps;
6 36 //html 模板
7 37 $.get('/real_control_v2/fragments/line_schedule/badge_tooltip.html', function(dom) {
... ... @@ -9,18 +39,13 @@ var gb_schedule_badge_tootip = (function () {
9 39 });
10 40  
11 41 //子任务 tootip
12   - $(document).on('mouseenter', '.schedule-wrap .ct_table_body .uk-badge.c_task', function() {
  42 + $(document).on('mouseenter', _badge + '.c_task', function() {
13 43 $(this).qtip({
14   - show: {
15   - ready: true,
16   - delay: 300
17   - },
  44 + show: _opts.show,
18 45 content: {
19 46 text: function() {
20   - var id = $(this).parents('dl').data('id'),
21   - lineCode = $(this).parents('li.line_schedule').data('id'),
22   - sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
23   - //排序
  47 + var sch = getSch(this);
  48 + //子任务排序
24 49 var array = sch.cTasks.sort(function (a, b) {
25 50 var an = (a.mileageType=='service'?1:0)+''+(a.destroy?0:1);
26 51 var bn = (b.mileageType=='service'?1:0)+''+(b.destroy?0:1);
... ... @@ -29,134 +54,86 @@ var gb_schedule_badge_tootip = (function () {
29 54 return temps['sch-table-task-tootip-temp']({tasks: array});
30 55 }
31 56 },
32   - position: {
33   - viewport: $(window),
34   - my: 'center left',
35   - at: 'center right'
36   - },
  57 + position: _opts.position,
37 58 style: {
38 59 classes: 'qtip-light qtip-rounded qtip-shadow sch-badge-tip'
39 60 },
40   - hide: {
41   - fixed: true,
42   - delay: 300
43   - },
44   - events: {
45   - hidden: function(event, api) {
46   - //destroy dom
47   - $(this).qtip('destroy', true);
48   - }
49   - }
  61 + hide: _opts.hide,
  62 + events: _opts.events
50 63 });
51 64 });
52 65  
53 66 //区间 tootip
54   - $(document).on('mouseenter', '.schedule-wrap .ct_table_body .uk-badge.sch_region', function() {
  67 + $(document).on('mouseenter', _badge+'.sch_region', function() {
55 68 $(this).qtip({
56   - show: {
57   - ready: true,
58   - delay: 300
59   - },
  69 + show: _opts.show,
60 70 content: {
61 71 text: function() {
62   - var id = $(this).parents('dl').data('id'),
63   - lineCode = $(this).parents('li.line_schedule').data('id'),
64   - sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
65   - return temps['sch-table-region-tootip-temp'](sch);
  72 + return temps['sch-table-region-tootip-temp'](getSch(this));
66 73 }
67 74 },
68   - position: {
69   - viewport: $(window),
70   - my: 'center left',
71   - at: 'center right'
72   - },
  75 + position: _opts.position,
73 76 style: {
74 77 classes: 'qtip-youtube sch-badge-tip'
75 78 },
76   - hide: {
77   - fixed: true,
78   - delay: 300
79   - },
80   - events: {
81   - hidden: function(event, api) {
82   - //destroy dom
83   - $(this).qtip('destroy', true);
84   - }
85   - }
  79 + hide: _opts.hide,
  80 + events: _opts.events
86 81 });
87 82 });
88 83  
89 84  
90 85 //出场 tootip
91   - $(document).on('mouseenter', '.schedule-wrap .ct_table_body .uk-badge.out', function() {
  86 + $(document).on('mouseenter', _badge+'.out', function() {
92 87 $(this).qtip({
93   - show: {
94   - ready: true,
95   - delay: 300
96   - },
  88 + show: _opts.show,
97 89 content: {
98 90 text: function() {
99   - var id = $(this).parents('dl').data('id'),
100   - lineCode = $(this).parents('li.line_schedule').data('id'),
101   - sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
102   - return temps['sch-table-out-tootip-temp'](sch);
  91 + return temps['sch-table-out-tootip-temp'](getSch(this));
103 92 }
104 93 },
105   - position: {
106   - viewport: $(window),
107   - my: 'center left',
108   - at: 'center right'
109   - },
  94 + position: _opts.position,
110 95 style: {
111 96 classes: 'qtip-youtube sch-badge-tip'
112 97 },
113   - hide: {
114   - fixed: true,
115   - delay: 300
116   - },
117   - events: {
118   - hidden: function(event, api) {
119   - //destroy dom
120   - $(this).qtip('destroy', true);
121   - }
122   - }
  98 + hide: _opts.hide,
  99 + events: _opts.events
123 100 });
124 101 });
125 102  
126 103  
127 104 //进场 tootip
128   - $(document).on('mouseenter', '.schedule-wrap .ct_table_body .uk-badge.in', function() {
  105 + $(document).on('mouseenter', _badge+'.in', function() {
129 106 $(this).qtip({
130   - show: {
131   - ready: true,
132   - delay: 300
133   - },
  107 + show: _opts.show,
134 108 content: {
135 109 text: function() {
136   - var id = $(this).parents('dl').data('id'),
137   - lineCode = $(this).parents('li.line_schedule').data('id'),
138   - sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
139   - return temps['sch-table-in-tootip-temp'](sch);
  110 + return temps['sch-table-in-tootip-temp'](getSch(this));
140 111 }
141 112 },
142   - position: {
143   - viewport: $(window),
144   - my: 'center left',
145   - at: 'center right'
146   - },
  113 + position: _opts.position,
147 114 style: {
148 115 classes: 'qtip-youtube sch-badge-tip'
149 116 },
150   - hide: {
151   - fixed: true,
152   - delay: 300
153   - },
154   - events: {
155   - hidden: function(event, api) {
156   - //destroy dom
157   - $(this).qtip('destroy', true);
  117 + hide: _opts.hide,
  118 + events: _opts.events
  119 + });
  120 + });
  121 +
  122 + //2点间空放
  123 + $(document).on('mouseenter', _badge+'.sch_ldks', function() {
  124 + $(this).qtip({
  125 + show: _opts.show,
  126 + content: {
  127 + text: function() {
  128 + return temps['sch-table-ldks-tootip-temp'](getSch(this));
158 129 }
159   - }
  130 + },
  131 + position: _opts.position,
  132 + style: {
  133 + classes: 'qtip-shadow qtip-bootstrap sch-badge-tip'
  134 + },
  135 + hide: _opts.hide,
  136 + events: _opts.events
160 137 });
161 138 });
162 139 })();
163 140 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/js/main.js
... ... @@ -170,7 +170,7 @@ function showUpdateDescription() {
170 170 //更新说明
171 171 var updateDescription = {
172 172 date: '2017-05-16',
173   - text: '<h5>菜单栏加入了服务器时间</h5>'
  173 + text: '<h5>修复了进出场班次公里设置为0后自动烂班的问题</h5>'
174 174 };
175 175  
176 176 var storage = window.localStorage
... ...
src/main/resources/static/real_control_v2/js/minute_timer.js deleted 100644 → 0
1   -/** 时钟 */
2   -var gb_minute_timer = (function () {
3   -
4   -
5   - var getServerTime = function (cb) {
6   - function oncallback(jqXHR) {
7   - var time = jqXHR && jqXHR.getResponseHeader("Date");
8   - if (time)
9   - callback(new Date(time))
10   - }
11   -
12   - if ("function" == typeof callback)
13   - $.ajax({
14   - url: "/real_control_v2/assets/imgs/time.gif",
15   - type: "HEAD"
16   - }).done(function (data, textStatus, jqXHR) {
17   - oncallback(jqXHR)
18   - }).fail(function (jqXHR, textStatus, errorThrown) {
19   - oncallback(jqXHR)
20   - })
21   - };
22   -
23   -
24   - setTimeout(function () {
25   - getServerTime(function () {
26   - console.log('cb,,', cb);
27   - });
28   - }, 5000);
29   -
30   -})();
31 0 \ No newline at end of file
src/main/resources/static/real_control_v2/js/north/second_timer.js
... ... @@ -19,7 +19,7 @@ var gb_second_timer = (function () {
19 19 setTime();
20 20  
21 21 secondTimer = window.setInterval(function () {
22   - if(0 == now.getSeconds() || true == contextFlag){
  22 + if (0 == now.getSeconds() || true == contextFlag) {
23 23 minuteTimer();
24 24 contextFlag = false;
25 25 }
... ... @@ -48,7 +48,7 @@ var gb_second_timer = (function () {
48 48 })
49 49 };
50 50  
51   - var timeFormat = function(str) {
  51 + var timeFormat = function (str) {
52 52 return ("0" + str).slice(-2)
53 53 };
54 54  
... ... @@ -57,11 +57,41 @@ var gb_second_timer = (function () {
57 57 };
58 58  
59 59 var minuteTimer = function () {
60   - getServerTime(function(time) {
  60 + getServerTime(function (time) {
61 61 now = time;
62 62 setTime()
63 63 })
64 64 };
65 65  
66 66 window.setTimeout(init, 6000);
  67 +
  68 +/* $(document).on('mouseenter', '.op-beijingtime-time', function () {
  69 + $(this).qtip({
  70 + show: {ready: true, delay: 300},
  71 + content: {
  72 + text: function () {
  73 + return '<div class="tl-tip-panel">' +
  74 + '<div style="font-size: 13px;">' +
  75 + '每次秒数到0与服务器同步一次<br>服务器每10分钟与国家授时中心标准时间同步一次<br>睡眠状态唤醒会短暂异常,可鼠标右击横幅任意区域立刻同步' +
  76 + '</div>' +
  77 + '</div>';
  78 + }
  79 + },
  80 + position: {
  81 + viewport: $(window),
  82 + my: 'top center',
  83 + at: 'bottom center'
  84 + },
  85 + style: {
  86 + classes: 'qtip-shadow qtip-tipped sch-badge-tip'
  87 + },
  88 + hide: {fixed: true, delay: 300},
  89 + events: {
  90 + hidden: function(event, api) {
  91 + //destroy dom
  92 + $(this).qtip('destroy', true);
  93 + }
  94 + }
  95 + });
  96 + });*/
67 97 })();
68 98 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/main.html
... ... @@ -184,8 +184,6 @@
184 184 <script src="/real_control_v2/js/websocket/sch_websocket.js" merge="custom_js"></script>
185 185 <!-- tts -->
186 186 <script src="/real_control_v2/js/utils/tts.js" merge="custom_js"></script>
187   -<!-- minute_timer.js -->
188   -<script src="/real_control_v2/js/minute_timer.js" merge="custom_js"></script>
189 187  
190 188 <!-- echart -->
191 189 <script src="/real_control_v2/assets/echarts-3/echarts.js" merge="plugins"></script>
... ...