Commit 05c92ff9a3e0d5515da31c23ca590a75bcf0123f

Authored by 徐烜
2 parents 712b4761 680915c2

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

src/main/java/com/bsth/data/pilot80/PilotReport.java
@@ -78,6 +78,12 @@ public class PilotReport { @@ -78,6 +78,12 @@ public class PilotReport {
78 //d80MultiMap.put(d80.getData().getLineId().toString(), d80); 78 //d80MultiMap.put(d80.getData().getLineId().toString(), d80);
79 79
80 String nbbm = BasicData.deviceId2NbbmMap.get(d80.getDeviceId()); 80 String nbbm = BasicData.deviceId2NbbmMap.get(d80.getDeviceId());
  81 + //上报时,在执行的班次
  82 + if(StringUtils.isNotEmpty(nbbm)){
  83 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
  84 + if(null != sch)
  85 + d80.setSchId(sch.getId());
  86 + }
81 //处理 87 //处理
82 switch (d80.getData().getRequestCode()) { 88 switch (d80.getData().getRequestCode()) {
83 //出场请求 89 //出场请求
@@ -111,6 +117,11 @@ public class PilotReport { @@ -111,6 +117,11 @@ public class PilotReport {
111 117
112 //推送到页面 118 //推送到页面
113 sendUtils.send80ToPage(d80); 119 sendUtils.send80ToPage(d80);
  120 +
  121 + //反射搜索用 瞬时字段
  122 + d80.setLineId(d80.getData().getLineId());
  123 + d80.setNbbm(d80.getData().getNbbm());
  124 + d80.setRequestCode(d80.getData().getRequestCode());
114 } catch (Exception e) { 125 } catch (Exception e) {
115 logger.error("", e); 126 logger.error("", e);
116 } 127 }
src/main/java/com/bsth/data/utils/ListFilterUtils.java 0 → 100644
  1 +package com.bsth.data.utils;
  2 +
  3 +import org.apache.commons.lang3.StringUtils;
  4 +import org.slf4j.Logger;
  5 +import org.slf4j.LoggerFactory;
  6 +
  7 +import java.lang.reflect.Field;
  8 +import java.util.ArrayList;
  9 +import java.util.Collection;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +
  13 +/**
  14 + * 集合搜索过滤
  15 + * Created by panzhao on 2017/8/2.
  16 + */
  17 +public class ListFilterUtils {
  18 +
  19 + static Logger logger = LoggerFactory.getLogger(ListFilterUtils.class);
  20 +
  21 + public static List filter(Collection all, Map<String, Object> map, Class clazz) {
  22 + List rs = new ArrayList();
  23 + Field[] fields = clazz.getDeclaredFields();
  24 +
  25 + //参与过滤的字段
  26 + List<Field> fs = new ArrayList<>();
  27 + for (Field f : fields) {
  28 + f.setAccessible(true);
  29 + if (map.containsKey(f.getName()))
  30 + fs.add(f);
  31 + }
  32 +
  33 + //过滤数据
  34 + for (Object obj : all) {
  35 + if (fieldEquals(fs, obj, map))
  36 + rs.add(obj);
  37 + }
  38 + return rs;
  39 + }
  40 +
  41 + public static boolean fieldEquals(List<Field> fs, Object obj, Map<String, Object> map) {
  42 + try {
  43 + for (Field f : fs) {
  44 + if (StringUtils.isEmpty(map.get(f.getName()).toString()))
  45 + continue;
  46 +
  47 + if (f.get(obj) == null || f.get(obj).toString().indexOf(map.get(f.getName()).toString()) == -1)
  48 + return false;
  49 + }
  50 + } catch (Exception e) {
  51 + logger.error("", e);
  52 + return false;
  53 + }
  54 + return true;
  55 + }
  56 +}
src/main/java/com/bsth/data/utils/ListPageQueryUtils.java 0 → 100644
  1 +package com.bsth.data.utils;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.List;
  5 +
  6 +/**
  7 + * 集合分页工具
  8 + * Created by panzhao on 2017/8/2.
  9 + */
  10 +public class ListPageQueryUtils {
  11 +
  12 + public static List paging(List all, int page, int pageSize) {
  13 + List rs = new ArrayList(pageSize);
  14 +
  15 + int s = page * pageSize;
  16 + int e = (page + 1) * pageSize;
  17 +
  18 + int size = all.size();
  19 +
  20 + if (e > size)
  21 + e = size;
  22 +
  23 + if (s > size)
  24 + return rs;
  25 +
  26 + for (; s < e; s++) {
  27 + rs.add(all.get(s));
  28 + }
  29 + return rs;
  30 + }
  31 +}
src/main/java/com/bsth/entity/directive/D80.java
1 package com.bsth.entity.directive; 1 package com.bsth.entity.directive;
2 2
3 import com.bsth.entity.directive.DC0.DC0Data; 3 import com.bsth.entity.directive.DC0.DC0Data;
  4 +import com.fasterxml.jackson.annotation.JsonIgnore;
4 5
5 import javax.persistence.*; 6 import javax.persistence.*;
6 import java.util.Date; 7 import java.util.Date;
@@ -62,7 +63,53 @@ public class D80 { @@ -62,7 +63,53 @@ public class D80 {
62 private Date handleTime; 63 private Date handleTime;
63 64
64 private String remarks; 65 private String remarks;
65 - 66 +
  67 + private Long schId;
  68 +
  69 + @Transient
  70 + @JsonIgnore
  71 + private String lineId;
  72 +
  73 + @Transient
  74 + @JsonIgnore
  75 + private String nbbm;
  76 +
  77 + @Transient
  78 + @JsonIgnore
  79 + private Short requestCode;
  80 +
  81 + public Long getSchId() {
  82 + return schId;
  83 + }
  84 +
  85 + public void setSchId(Long schId) {
  86 + this.schId = schId;
  87 + }
  88 +
  89 + public String getLineId() {
  90 + return data.lineId;
  91 + }
  92 +
  93 + public String getNbbm() {
  94 + return data.nbbm;
  95 + }
  96 +
  97 + public void setLineId(String lineId) {
  98 + this.lineId = lineId;
  99 + }
  100 +
  101 + public void setNbbm(String nbbm) {
  102 + this.nbbm = nbbm;
  103 + }
  104 +
  105 + public Short getRequestCode() {
  106 + return requestCode;
  107 + }
  108 +
  109 + public void setRequestCode(Short requestCode) {
  110 + this.requestCode = requestCode;
  111 + }
  112 +
66 @Embeddable 113 @Embeddable
67 public static class D80Data { 114 public static class D80Data {
68 115
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -11,6 +11,8 @@ import com.bsth.data.gpsdata.GpsEntity; @@ -11,6 +11,8 @@ import com.bsth.data.gpsdata.GpsEntity;
11 import com.bsth.data.gpsdata.GpsRealData; 11 import com.bsth.data.gpsdata.GpsRealData;
12 import com.bsth.data.pilot80.PilotReport; 12 import com.bsth.data.pilot80.PilotReport;
13 import com.bsth.data.schedule.DayOfSchedule; 13 import com.bsth.data.schedule.DayOfSchedule;
  14 +import com.bsth.data.utils.ListFilterUtils;
  15 +import com.bsth.data.utils.ListPageQueryUtils;
14 import com.bsth.entity.directive.*; 16 import com.bsth.entity.directive.*;
15 import com.bsth.entity.realcontrol.ScheduleRealInfo; 17 import com.bsth.entity.realcontrol.ScheduleRealInfo;
16 import com.bsth.entity.sys.SysUser; 18 import com.bsth.entity.sys.SysUser;
@@ -110,8 +112,11 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -110,8 +112,11 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
110 logger.warn("烂班不允许发送调度指令...."); 112 logger.warn("烂班不允许发送调度指令....");
111 return -1; 113 return -1;
112 } 114 }
  115 +
  116 + //待发应到时间
  117 + String dfsj = fmtHHmm.print(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));
113 String text = "您已完成" + finish + "个班次,下一发车时间" + fmtHHmm_CN.print(sch.getDfsjT()) + ",由" 118 String text = "您已完成" + finish + "个班次,下一发车时间" + fmtHHmm_CN.print(sch.getDfsjT()) + ",由"
114 - + sch.getQdzName() + "发往" + sch.getZdzName() ; 119 + + sch.getQdzName() + "发往" + sch.getZdzName() + ";应到 " + dfsj;
115 120
116 if(sch.getBcType().equals("venting")){ 121 if(sch.getBcType().equals("venting")){
117 text += " (直放)"; 122 text += " (直放)";
@@ -445,7 +450,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -445,7 +450,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
445 450
446 @Override 451 @Override
447 public Map<String, Object> findAll80(Map<String, Object> map, int page, int size) { 452 public Map<String, Object> findAll80(Map<String, Object> map, int page, int size) {
448 - List<D80> d80s = new ArrayList<>(); 453 + /*List<D80> d80s = new ArrayList<>();
449 454
450 Object nbbm = map.get("nbbm"); 455 Object nbbm = map.get("nbbm");
451 if (null != nbbm && StringUtils.isNotEmpty(nbbm.toString())) { 456 if (null != nbbm && StringUtils.isNotEmpty(nbbm.toString())) {
@@ -489,8 +494,25 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -489,8 +494,25 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
489 Map<String, Object> rsMap = new HashMap<>(); 494 Map<String, Object> rsMap = new HashMap<>();
490 rsMap.put("list", rs); 495 rsMap.put("list", rs);
491 rsMap.put("totalPages", count % size == 0 ? count / size - 1 : count / size); 496 rsMap.put("totalPages", count % size == 0 ? count / size - 1 : count / size);
492 - rsMap.put("page", page); 497 + rsMap.put("page", page);*/
493 498
  499 + List all = ListFilterUtils.filter(pilotReport.findAll(), map, D80.class);
  500 + //排序
  501 + Collections.sort(all, new Comparator<D80>() {
  502 + @Override
  503 + public int compare(D80 o1, D80 o2) {
  504 + return (int) (o2.getTimestamp() - o1.getTimestamp());
  505 + }
  506 + });
  507 + List<D80> d80s = ListPageQueryUtils.paging(all, page, size);
  508 + //时间格式化
  509 + for (D80 d80 : d80s) {
  510 + d80.setTimeStr(fmtHHmm.print(d80.getTimestamp()));
  511 + }
  512 + Map<String, Object> rsMap = new HashMap<>();
  513 + rsMap.put("list", d80s);
  514 + rsMap.put("totalPages", all.size() % size == 0 ? all.size() / size - 1: all.size() / size);
  515 + rsMap.put("page", page);
494 return rsMap; 516 return rsMap;
495 } 517 }
496 518
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
@@ -958,6 +958,8 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -958,6 +958,8 @@ public class BusIntervalServiceImpl implements BusIntervalService {
958 if(tsSet.contains(schedule2.getId()) || schedule2.getBcType().toString().equals("in") || schedule2.getBcType().toString().equals("out")){ 958 if(tsSet.contains(schedule2.getId()) || schedule2.getBcType().toString().equals("in") || schedule2.getBcType().toString().equals("out")){
959 fcsj2 = schedule1.getZdsjT(); 959 fcsj2 = schedule1.getZdsjT();
960 } 960 }
  961 + if(fcsj2 < fcsj1)
  962 + fcsj2 += 1440l;
961 if(sfqr == 1 && time1 > fcsj1){ 963 if(sfqr == 1 && time1 > fcsj1){
962 jhyysj += fcsj2 - time1; 964 jhyysj += fcsj2 - time1;
963 }else if(sfqr == 1 && time2 < fcsj2){ 965 }else if(sfqr == 1 && time2 < fcsj2){
@@ -966,7 +968,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -966,7 +968,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
966 jhyysj += fcsj2 - fcsj1; 968 jhyysj += fcsj2 - fcsj1;
967 } 969 }
968 if(jhyysj < 0){ 970 if(jhyysj < 0){
969 - System.out.println(fcsj2 + " - " + fcsj1); 971 + System.out.println(fcsj2 + " - " + fcsj1 + " = " + (fcsj2 - fcsj1));
970 } 972 }
971 jhyysj1 += fcsj2 - fcsj1; 973 jhyysj1 += fcsj2 - fcsj1;
972 } 974 }
@@ -1010,7 +1012,8 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1010,7 +1012,8 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1010 List<ChildTaskPlan> cTasks = cMap.get(schedule.getId()); 1012 List<ChildTaskPlan> cTasks = cMap.get(schedule.getId());
1011 for(ChildTaskPlan childTaskPlan : cTasks){ 1013 for(ChildTaskPlan childTaskPlan : cTasks){
1012 Map<String, Object> temp = new HashMap<String, Object>(); 1014 Map<String, Object> temp = new HashMap<String, Object>();
1013 - if(childTaskPlan.getMileageType().equals("empty") || childTaskPlan.isDestroy()){ 1015 + if(!childTaskPlan.getMileageType().equals("service") || childTaskPlan.isDestroy()
  1016 + || !childTaskPlan.getType1().equals("正常") || childTaskPlan.getCcId() != null){
1014 temp.put("lc", null); 1017 temp.put("lc", null);
1015 temp.put("fcsj", null); 1018 temp.put("fcsj", null);
1016 temp.put("zdsj", null); 1019 temp.put("zdsj", null);
@@ -1071,6 +1074,9 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1071,6 +1074,9 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1071 } else if(i == keyList.size() - 1){ 1074 } else if(i == keyList.size() - 1){
1072 fcsj2 = Long.valueOf(m2.get("zdsj").toString()); 1075 fcsj2 = Long.valueOf(m2.get("zdsj").toString());
1073 } 1076 }
  1077 + if(fcsj2 < fcsj1){
  1078 + fcsj2 += 1440l;
  1079 + }
1074 if(sfqr == 1 && time1 > fcsj1){ 1080 if(sfqr == 1 && time1 > fcsj1){
1075 sjyysj += fcsj2 - time1; 1081 sjyysj += fcsj2 - time1;
1076 }else if(sfqr == 1 && time2 < fcsj2){ 1082 }else if(sfqr == 1 && time2 < fcsj2){
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -60,6 +60,9 @@ import com.bsth.service.schedule.SchedulePlanInfoService; @@ -60,6 +60,9 @@ import com.bsth.service.schedule.SchedulePlanInfoService;
60 import com.bsth.service.sys.DutyEmployeeService; 60 import com.bsth.service.sys.DutyEmployeeService;
61 import com.bsth.util.*; 61 import com.bsth.util.*;
62 import com.bsth.websocket.handler.SendUtils; 62 import com.bsth.websocket.handler.SendUtils;
  63 +import com.github.stuxuhai.jpinyin.PinyinException;
  64 +import com.github.stuxuhai.jpinyin.PinyinFormat;
  65 +import com.github.stuxuhai.jpinyin.PinyinHelper;
63 import com.google.common.base.Splitter; 66 import com.google.common.base.Splitter;
64 import com.google.common.collect.Lists; 67 import com.google.common.collect.Lists;
65 import org.apache.commons.lang3.StringEscapeUtils; 68 import org.apache.commons.lang3.StringEscapeUtils;
@@ -2464,6 +2467,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2464,6 +2467,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2464 Map<String, Object> map = new HashMap<String, Object>(); 2467 Map<String, Object> map = new HashMap<String, Object>();
2465 if(list.size()>0){ 2468 if(list.size()>0){
2466 map.put("xlName", list.get(0).getXlName()); 2469 map.put("xlName", list.get(0).getXlName());
  2470 + try {
  2471 + map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getXlName(), "" , PinyinFormat.WITHOUT_TONE));
  2472 + } catch (PinyinException e) {
  2473 + // TODO Auto-generated catch block
  2474 + e.printStackTrace();
  2475 + }
2467 double jhyygl=culateService.culateJhgl(list);//计划营运公里 2476 double jhyygl=culateService.culateJhgl(list);//计划营运公里
2468 double jhjcclc= culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里) 2477 double jhjcclc= culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
2469 map.put("jhlc", jhyygl); 2478 map.put("jhlc", jhyygl);
@@ -2480,8 +2489,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2480,8 +2489,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2480 map.put("sjzgl", Arith.add(zyygl, zksgl)); 2489 map.put("sjzgl", Arith.add(zyygl, zksgl));
2481 map.put("sjgl",zyygl); 2490 map.put("sjgl",zyygl);
2482 map.put("sjksgl", zksgl); 2491 map.put("sjksgl", zksgl);
2483 -  
2484 - map.put("ssgl", culateService.culateLbgl(list)); 2492 + double ssgl= culateService.culateLbgl(list);
  2493 + map.put("ssgl", ssgl);
  2494 +
  2495 + //计划+临加-少驶=实驶
  2496 + double jl=Arith.add(jhyygl, ljgl);
  2497 + if(Arith.sub(jl, ssgl)==sjyygl){
  2498 + map.put("zt", 0);
  2499 + }else{
  2500 + map.put("zt", 1);
  2501 + }
  2502 +
2485 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻")); 2503 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2486 map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢")); 2504 map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
2487 map.put("ssgl_gz", culateService.culateCJLC(list, "故障")); 2505 map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
@@ -2568,7 +2586,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2568,7 +2586,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2568 } 2586 }
2569 } 2587 }
2570 } 2588 }
2571 - 2589 +
  2590 + Collections.sort(lMap,new AccountXlbm());
2572 Map<String, Object> map = new HashMap<String, Object>(); 2591 Map<String, Object> map = new HashMap<String, Object>();
2573 map.put("xlName", "合计"); 2592 map.put("xlName", "合计");
2574 double jhyygl=culateService.culateJhgl(list);//计划营运公里 2593 double jhyygl=culateService.culateJhgl(list);//计划营运公里
@@ -2587,7 +2606,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2587,7 +2606,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2587 map.put("sjzgl", Arith.add(zyygl, zksgl)); 2606 map.put("sjzgl", Arith.add(zyygl, zksgl));
2588 map.put("sjgl",zyygl); 2607 map.put("sjgl",zyygl);
2589 map.put("sjksgl", zksgl); 2608 map.put("sjksgl", zksgl);
2590 - map.put("ssgl", culateService.culateLbgl(list)); 2609 +
  2610 + double ssgl= culateService.culateLbgl(list);
  2611 + map.put("ssgl", ssgl);
  2612 + //计划+临加-少驶=实驶
  2613 + double jl=Arith.add(jhyygl, ljgl);
  2614 + if(Arith.sub(jl, ssgl)==sjyygl){
  2615 + map.put("zt", 0);
  2616 + }else{
  2617 + map.put("zt", 1);
  2618 + }
2591 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻")); 2619 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2592 map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢")); 2620 map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
2593 map.put("ssgl_gz", culateService.culateCJLC(list, "故障")); 2621 map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
@@ -3270,7 +3298,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3270,7 +3298,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3270 ScheduleRealInfo sch = dayOfSchedule.get(id); 3298 ScheduleRealInfo sch = dayOfSchedule.get(id);
3271 if (sch != null) { 3299 if (sch != null) {
3272 sch.setBcType(bcType); 3300 sch.setBcType(bcType);
3273 - sch.addRemarks(remarks); 3301 + sch.setRemarks(remarks);
3274 rs.put("status", ResponseCode.SUCCESS); 3302 rs.put("status", ResponseCode.SUCCESS);
3275 rs.put("t", sch); 3303 rs.put("t", sch);
3276 3304
@@ -4942,3 +4970,14 @@ class AccountMap2 implements Comparator&lt;Map&lt;String, Object&gt;&gt;{ @@ -4942,3 +4970,14 @@ class AccountMap2 implements Comparator&lt;Map&lt;String, Object&gt;&gt;{
4942 return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString()); 4970 return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
4943 } 4971 }
4944 } 4972 }
  4973 +
  4974 +class AccountXlbm implements Comparator<Map<String, Object>>{
  4975 + @Override
  4976 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  4977 + // TODO Auto-generated method stub
  4978 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  4979 +// "" , PinyinFormat.WITHOUT_TONE)
  4980 + return o1.get("xlNamePy").toString().compareTo(
  4981 + o2.get("xlNamePy").toString());
  4982 + }
  4983 +}
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
@@ -593,7 +593,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -593,7 +593,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{
593 while (it.hasNext()) { 593 while (it.hasNext()) {
594 ChildTaskPlan childTaskPlan = it.next(); 594 ChildTaskPlan childTaskPlan = it.next();
595 if (childTaskPlan.getMileageType().equals("service") 595 if (childTaskPlan.getMileageType().equals("service")
596 - && "正常".equals(childTaskPlan.getType1())) { 596 + && "正常".equals(childTaskPlan.getType1())
  597 + && childTaskPlan.getCcId()==null) {
597 if (!childTaskPlan.isDestroy()) { 598 if (!childTaskPlan.isDestroy()) {
598 Float jhgl = childTaskPlan.getMileage() == null ? 0 599 Float jhgl = childTaskPlan.getMileage() == null ? 0
599 : childTaskPlan.getMileage(); 600 : childTaskPlan.getMileage();
@@ -769,7 +770,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -769,7 +770,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{
769 xxkzgf=0,xxkwgf=0,xxm=0,xxmzgf=0,xxmwgf=0; 770 xxkzgf=0,xxkwgf=0,xxm=0,xxmzgf=0,xxmwgf=0;
770 for (int i = 0; i < lists.size(); i++) { 771 for (int i = 0; i < lists.size(); i++) {
771 ScheduleRealInfo s=lists.get(i); 772 ScheduleRealInfo s=lists.get(i);
772 - if(s.getFcsjActual()!=null){ 773 + if(s.getFcsjActual()!=null && !s.isCcService()
  774 + && !isInOut(s)){
773 String xlDir=s.getXlDir(); 775 String xlDir=s.getXlDir();
774 String fcsjs=s.getFcsj(); 776 String fcsjs=s.getFcsj();
775 String[] fcsjStr = fcsjs.split(":"); 777 String[] fcsjStr = fcsjs.split(":");
@@ -779,7 +781,6 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -779,7 +781,6 @@ public class CulateMileageServiceImpl implements CulateMileageService{
779 long fcsjActual = Long.parseLong(fcsjActualsStr[0]) * 60 + Long.parseLong(fcsjActualsStr[1]); 781 long fcsjActual = Long.parseLong(fcsjActualsStr[0]) * 60 + Long.parseLong(fcsjActualsStr[1]);
780 782
781 if("0".equals(xlDir)){ 783 if("0".equals(xlDir)){
782 -  
783 if(fcsj-fcsjActual>1){ 784 if(fcsj-fcsjActual>1){
784 sxk++; 785 sxk++;
785 if(fcsj>zgf1&&fcsj<zgf2) 786 if(fcsj>zgf1&&fcsj<zgf2)
@@ -881,7 +882,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -881,7 +882,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
881 else if(isInOut(sch)) 882 else if(isInOut(sch))
882 continue; 883 continue;
883 //主任务烂班 884 //主任务烂班
884 - else if(sch.getStatus() == -1){ 885 + else if(sch.getStatus() == -1 && !sch.isCcService()){
885 if(sch.getAdjustExps().equals(item) || 886 if(sch.getAdjustExps().equals(item) ||
886 (StringUtils.isEmpty(sch.getAdjustExps()) && item.equals("其他"))){ 887 (StringUtils.isEmpty(sch.getAdjustExps()) && item.equals("其他"))){
887 sum = Arith.add(sum, sch.getJhlcOrig()); 888 sum = Arith.add(sum, sch.getJhlcOrig());
src/main/java/com/bsth/service/report/impl/SheetServiceImpl.java
@@ -80,6 +80,9 @@ public class SheetServiceImpl extends BaseServiceImpl&lt;Sheet, Integer&gt; implements @@ -80,6 +80,9 @@ public class SheetServiceImpl extends BaseServiceImpl&lt;Sheet, Integer&gt; implements
80 if(s.getBcType().equals("ldks")){ 80 if(s.getBcType().equals("ldks")){
81 fage=true; 81 fage=true;
82 } 82 }
  83 + if(s.isCcService()){
  84 + fage=true;
  85 + }
83 86
84 return fage; 87 return fage;
85 } 88 }
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -427,7 +427,7 @@ @@ -427,7 +427,7 @@
427 layer.msg("请选择时间"); 427 layer.msg("请选择时间");
428 return; 428 return;
429 } 429 }
430 - $("#xlmc").html(xlName); 430 + $("#xlmc").html(xlName+" "+date+" ");
431 // $("#ddrbBody").height($(window).height()-300); 431 // $("#ddrbBody").height($(window).height()-300);
432 $("c").html("全日"); 432 $("c").html("全日");
433 $("#export").removeAttr("disabled"); 433 $("#export").removeAttr("disabled");
src/main/resources/static/pages/forms/statement/statisticsDaily.html
@@ -316,7 +316,7 @@ @@ -316,7 +316,7 @@
316 </script> 316 </script>
317 <script type="text/html" id="statisticsDaily"> 317 <script type="text/html" id="statisticsDaily">
318 {{each list as obj i}} 318 {{each list as obj i}}
319 - <tr> 319 + <tr {{if obj.zt==1}}style='color: red'{{/if}}>
320 <td>{{obj.xlName}}</td> 320 <td>{{obj.xlName}}</td>
321 <td>{{obj.jhzlc}}</td> 321 <td>{{obj.jhzlc}}</td>
322 <td>{{obj.jhlc}}</td> 322 <td>{{obj.jhlc}}</td>
src/main/resources/static/real_control_v2/alone_page/home/home_wrap.html
@@ -44,6 +44,7 @@ @@ -44,6 +44,7 @@
44 44
45 #main-tab-content{ 45 #main-tab-content{
46 padding: 0 !important; 46 padding: 0 !important;
  47 + list-style: none;
47 } 48 }
48 49
49 .home-panel{ 50 .home-panel{
@@ -99,6 +100,8 @@ @@ -99,6 +100,8 @@
99 <script src="/assets/js/d3.min.js"></script> 100 <script src="/assets/js/d3.min.js"></script>
100 <!-- EventProxy --> 101 <!-- EventProxy -->
101 <script src="/assets/js/eventproxy.js"></script> 102 <script src="/assets/js/eventproxy.js"></script>
  103 +<!-- Geolib -->
  104 +<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>
102 105
103 <script> 106 <script>
104 107
src/main/resources/static/real_control_v2/alone_page/map/alone_wrap.html
@@ -42,13 +42,23 @@ @@ -42,13 +42,23 @@
42 <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins"/> 42 <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins"/>
43 43
44 <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/> 44 <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>
  45 +
  46 + <style>
  47 + .main-container .map-panel{
  48 + position: absolute;
  49 + top:0;
  50 + left: 0;
  51 + width: 20px;
  52 + z-index: 999;
  53 + height: 20px;
  54 + }
  55 + </style>
45 </head> 56 </head>
46 57
47 <body> 58 <body>
48 <div class="main-container" style="height: 100%;"> 59 <div class="main-container" style="height: 100%;">
49 <span style="position: absolute;left: calc(50% - 35px);top: calc(45% - 35px);">加载中...</span> 60 <span style="position: absolute;left: calc(50% - 35px);top: calc(45% - 35px);">加载中...</span>
50 </div> 61 </div>
51 -  
52 <!-- 地图相关 --> 62 <!-- 地图相关 -->
53 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script> 63 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>
54 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script> 64 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
@@ -108,6 +118,8 @@ @@ -108,6 +118,8 @@
108 //嵌入地图页面 118 //嵌入地图页面
109 $('.main-container').load('/real_control_v2/mapmonitor/real.html', function () { 119 $('.main-container').load('/real_control_v2/mapmonitor/real.html', function () {
110 $('.map-system-msg.flex-left').remove(); 120 $('.map-system-msg.flex-left').remove();
  121 +
  122 + $(this).append('<span class="map-panel"></span>');//判断里有JS判定这个容器是否显示
111 }); 123 });
112 }); 124 });
113 125
src/main/resources/static/real_control_v2/css/home.css
@@ -125,6 +125,7 @@ @@ -125,6 +125,7 @@
125 line-height: 25px; 125 line-height: 25px;
126 font-size: 13px; 126 font-size: 13px;
127 padding: 0 0 3px; 127 padding: 0 0 3px;
  128 + position: relative;
128 } 129 }
129 130
130 .data-wrap .data-title span.data-title-text { 131 .data-wrap .data-title span.data-title-text {
@@ -326,4 +327,13 @@ span.signal-state-speed-limit{ @@ -326,4 +327,13 @@ span.signal-state-speed-limit{
326 #send-phrase-multi-modal .tools>span{ 327 #send-phrase-multi-modal .tools>span{
327 cursor: pointer; 328 cursor: pointer;
328 margin-left: 12px; 329 margin-left: 12px;
  330 +}
  331 +
  332 +.device_list_filter_icon{
  333 + position: absolute;
  334 + right: 15px;
  335 +}
  336 +
  337 +.device_list_filter_icon.online{
  338 +
329 } 339 }
330 \ No newline at end of file 340 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/dftz.html
@@ -42,9 +42,9 @@ @@ -42,9 +42,9 @@
42 <div class="uk-grid"> 42 <div class="uk-grid">
43 <div class="uk-width-1-1"> 43 <div class="uk-width-1-1">
44 <div class="uk-form-row ct-stacked"> 44 <div class="uk-form-row ct-stacked">
45 - <label class="uk-form-label" for="form-s-t">备注<small class="font-danger">(不超过20个字符)</small></label> 45 + <label class="uk-form-label" for="form-s-t">备注<small class="font-danger">(不超过50个字符)</small></label>
46 <div class="uk-form-controls"> 46 <div class="uk-form-controls">
47 - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="20" >{{remarks}}</textarea> 47 + <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="50" >{{remarks}}</textarea>
48 </div> 48 </div>
49 </div> 49 </div>
50 </div> 50 </div>
@@ -164,11 +164,10 @@ @@ -164,11 +164,10 @@
164 164
165 $('[name=bcType]', modal).on('change', function(){ 165 $('[name=bcType]', modal).on('change', function(){
166 var type = $(this).val(); 166 var type = $(this).val();
167 - if(sch.bcType != 'normal') 167 + if(sch.bcType == 'in' || sch.bcType == 'out')
168 return; 168 return;
169 169
170 - //重置类型,等待调整界面触发刷新事件  
171 - $(this).val(sch.bcType); 170 +
172 var url, detailModal; 171 var url, detailModal;
173 if(type=='venting'){ 172 if(type=='venting'){
174 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html'; 173 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html';
@@ -181,6 +180,8 @@ @@ -181,6 +180,8 @@
181 else 180 else
182 return; 181 return;
183 182
  183 + //重置类型,等待调整界面触发刷新事件
  184 + $(this).val(sch.bcType);
184 $.get(url, function(htmlStr){ 185 $.get(url, function(htmlStr){
185 $(document.body).append(htmlStr); 186 $(document.body).append(htmlStr);
186 187
@@ -188,6 +189,18 @@ @@ -188,6 +189,18 @@
188 $(detailModal).trigger('init', {sch: sch, parentModal: modal, _dfsj: $('[name=dfsj]', modal).val()}); 189 $(detailModal).trigger('init', {sch: sch, parentModal: modal, _dfsj: $('[name=dfsj]', modal).val()});
189 }) 190 })
190 }); 191 });
  192 +
  193 + /**
  194 + * 相同选项 也触发 onchange
  195 + */
  196 + $('[name=bcType]', modal).mousedown(function () {
  197 + this.sindex = $(this)[0].selectedIndex;
  198 + $(this)[0].selectedIndex = -1;
  199 + }).mouseout(function () {
  200 + if ($(this)[0].selectedIndex === -1) {
  201 + $(this)[0].selectedIndex = this.sindex;
  202 + }
  203 + });
191 }); 204 });
192 })(); 205 })();
193 </script> 206 </script>
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/fcxxwt.html
@@ -267,20 +267,22 @@ @@ -267,20 +267,22 @@
267 267
268 $('select[name=bcType]', modal).on('change', function(){ 268 $('select[name=bcType]', modal).on('change', function(){
269 var type = $(this).val(); 269 var type = $(this).val();
270 - if(sch.bcType != 'normal') 270 + if(sch.bcType == 'in' || sch.bcType == 'out')
271 return; 271 return;
272 272
273 - //重置类型,等待调整界面触发刷新事件  
274 - $(this).val(sch.bcType);  
275 var url, detailModal; 273 var url, detailModal;
276 if(type=='venting'){ 274 if(type=='venting'){
277 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html'; 275 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html';
278 detailModal='#bctype-venting-modal'; 276 detailModal='#bctype-venting-modal';
279 } 277 }
280 - else{ 278 + else if(type=='major'){
281 detailModal='#bctype-major-modal'; 279 detailModal='#bctype-major-modal';
282 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_major.html'; 280 url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_major.html';
283 } 281 }
  282 + else return;
  283 +
  284 + //重置类型,等待调整界面触发刷新事件
  285 + $(this).val(sch.bcType);
284 286
285 $.get(url, function(htmlStr){ 287 $.get(url, function(htmlStr){
286 $(document.body).append(htmlStr); 288 $(document.body).append(htmlStr);
@@ -289,6 +291,18 @@ @@ -289,6 +291,18 @@
289 $(detailModal).trigger('init', {sch: sch, parentModal: modal}); 291 $(detailModal).trigger('init', {sch: sch, parentModal: modal});
290 }) 292 })
291 }); 293 });
  294 +
  295 + /**
  296 + * 相同选项 也触发 onchange
  297 + */
  298 + $('select[name=bcType]', modal).mousedown(function () {
  299 + this.sindex = $(this)[0].selectedIndex;
  300 + $(this)[0].selectedIndex = -1;
  301 + }).mouseout(function () {
  302 + if ($(this)[0].selectedIndex === -1) {
  303 + $(this)[0].selectedIndex = this.sindex;
  304 + }
  305 + });
292 }); 306 });
293 307
294 function validation_s_e_Time(data) { 308 function validation_s_e_Time(data) {
src/main/resources/static/real_control_v2/fragments/line_schedule/sys_mailbox.html
@@ -5,8 +5,9 @@ @@ -5,8 +5,9 @@
5 <h4 class="uk-panel-title">{{data.nbbm}} {{text}}</h4> 5 <h4 class="uk-panel-title">{{data.nbbm}} {{text}}</h4>
6 <code>{{dateStr}}</code> 6 <code>{{dateStr}}</code>
7 <div class="uk-button-group"> 7 <div class="uk-button-group">
8 - <a class="uk-button uk-button-mini uk-button-primary">同意</a>  
9 - <a class="uk-button uk-button-mini reject">不同意</a> 8 + <button class="uk-button uk-button-mini uk-button-primary">同意</button>
  9 + <button class="uk-button uk-button-mini reject">不同意</button>
  10 + <a class="edit_link" data-id="{{schId}}" data-line="{{data.lineId}}" >编辑</a>
10 </div> 11 </div>
11 </div> 12 </div>
12 </div> 13 </div>
src/main/resources/static/real_control_v2/fragments/north/nav/report_80.html
@@ -12,8 +12,12 @@ @@ -12,8 +12,12 @@
12 </legend> 12 </legend>
13 <span class="horizontal-field">请求代码</span> 13 <span class="horizontal-field">请求代码</span>
14 <select name="requestCode"> 14 <select name="requestCode">
15 - <option value="-1">全部</option> 15 + <option value="">全部</option>
16 </select> 16 </select>
  17 + <span class="horizontal-field">线路</span>
  18 + <div class="uk-autocomplete uk-form autocomplete-line" >
  19 + <input type="text" name="lineId" placeholder="线路">
  20 + </div>
17 <span class="horizontal-field">车辆</span> 21 <span class="horizontal-field">车辆</span>
18 <div class="uk-autocomplete uk-form autocomplete-cars" > 22 <div class="uk-autocomplete uk-form autocomplete-cars" >
19 <input type="text" name="nbbm" placeholder="车辆自编号"> 23 <input type="text" name="nbbm" placeholder="车辆自编号">
@@ -84,9 +88,9 @@ @@ -84,9 +88,9 @@
84 } 88 }
85 $('[name=requestCode]', modal).append(opt); 89 $('[name=requestCode]', modal).append(opt);
86 //车辆 autocomplete 90 //车辆 autocomplete
87 - $.get('/basic/cars', function(rs) {  
88 - gb_common.carAutocomplete($('.autocomplete-cars', modal), rs);  
89 - }); 91 + gb_common.carAutocomplete($('.autocomplete-cars', modal), gb_data_basic.carsArray());
  92 + //线路 autocomplete
  93 + gb_common.lineAutocomplete($('.autocomplete-line', modal));
90 query(); 94 query();
91 }); 95 });
92 96
@@ -102,6 +106,12 @@ @@ -102,6 +106,12 @@
102 var data = form.serializeJSON(); 106 var data = form.serializeJSON();
103 data.page = page; 107 data.page = page;
104 data.size = pageSize; 108 data.size = pageSize;
  109 + //线路转换成编码
  110 + if(data.lineId){
  111 + var lineCode = gb_data_basic.findCodeByLinename(data.lineId);
  112 + if(lineCode)
  113 + data.lineId=lineCode;
  114 + }
105 $.get('/directive/findAll80', data, function(rs) { 115 $.get('/directive/findAll80', data, function(rs) {
106 $.each(rs.list, function(){ 116 $.each(rs.list, function(){
107 //命令字转中文 117 //命令字转中文
@@ -122,7 +132,7 @@ @@ -122,7 +132,7 @@
122 if (resetPagination) 132 if (resetPagination)
123 pagination(rs.totalPages + 1, rs.page); 133 pagination(rs.totalPages + 1, rs.page);
124 }) 134 })
125 - } 135 + };
126 136
127 var resetPagination = true; 137 var resetPagination = true;
128 var pagination = function(pages, currentPage) { 138 var pagination = function(pages, currentPage) {
src/main/resources/static/real_control_v2/js/main.js
@@ -168,8 +168,8 @@ var disabled_submit_btn = function (form) { @@ -168,8 +168,8 @@ var disabled_submit_btn = function (form) {
168 function showUpdateDescription() { 168 function showUpdateDescription() {
169 //更新说明 169 //更新说明
170 var updateDescription = { 170 var updateDescription = {
171 - date: '2017-11-01',  
172 - text: '<h5>1、修正了XP系统下主页滚动条的显示问题(Windows XP sp3 + chrome 49.0.2623.112)。</h5>' 171 + date: '2017-11-02',
  172 + text: '<h5>1、修正二次放站时,需要先将班次切回正常班次的问题。</h5><h5>2、驾驶员请求信使上,添加“编辑”链接,可弹出对应班次的发车信息微调框。</h5>'
173 }; 173 };
174 174
175 var storage = window.localStorage 175 var storage = window.localStorage
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -235,8 +235,10 @@ var gb_sch_websocket = (function () { @@ -235,8 +235,10 @@ var gb_sch_websocket = (function () {
235 dl.addClass('relevance-active intimity').find('dd:eq(5)').trigger('click'); 235 dl.addClass('relevance-active intimity').find('dd:eq(5)').trigger('click');
236 }); 236 });
237 237
  238 +
238 //80同意 239 //80同意
239 $(document).on('click', '.sys-mailbox .sys-note-80 .uk-button-primary', function () { 240 $(document).on('click', '.sys-mailbox .sys-note-80 .uk-button-primary', function () {
  241 + $(this).attr('disabled', 'disabled');
240 var panel = $(this).parents('.sys-note-80') 242 var panel = $(this).parents('.sys-note-80')
241 , id = panel.data('id'); 243 , id = panel.data('id');
242 244
@@ -245,6 +247,7 @@ var gb_sch_websocket = (function () { @@ -245,6 +247,7 @@ var gb_sch_websocket = (function () {
245 247
246 //80不同意 248 //80不同意
247 $(document).on('click', '.sys-mailbox .sys-note-80 .uk-button.reject', function () { 249 $(document).on('click', '.sys-mailbox .sys-note-80 .uk-button.reject', function () {
  250 + $(this).attr('disabled', 'disabled');
248 var panel = $(this).parents('.sys-note-80') 251 var panel = $(this).parents('.sys-note-80')
249 , id = panel.data('id'); 252 , id = panel.data('id');
250 253
@@ -329,6 +332,24 @@ var gb_sch_websocket = (function () { @@ -329,6 +332,24 @@ var gb_sch_websocket = (function () {
329 gb_schedule_context_menu.dftz(nextSch); 332 gb_schedule_context_menu.dftz(nextSch);
330 }); 333 });
331 334
  335 + /**
  336 + * 信使 sys-note-80 编辑
  337 + */
  338 + $(document).on('click', '.sys-note-80 .edit_link', function () {
  339 + var id = $(this).data('id'),
  340 + lineCode = $(this).data('line');
  341 +
  342 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  343 + if(!sch)
  344 + return;
  345 +
  346 + gb_schedule_context_menu.fcxxwt(sch);
  347 + var dl = gb_schedule_table.scroToDl(sch);
  348 + //高亮
  349 + gb_schedule_table.reset_drag_active_all(dl);
  350 + dl.addClass('relevance-active intimity').find('dd:eq(5)').trigger('click');
  351 + });
  352 +
332 return { 353 return {
333 sock: function () { 354 sock: function () {
334 return schSock; 355 return schSock;