Commit b11a3aff95bad8e2297c1c91bd8872839100a299

Authored by 潘钊
2 parents 2cc77183 8f4a8505

Merge branch 'minhang' into pudong

src/main/java/com/bsth/controller/realcontrol/anomalyCheckController.java
... ... @@ -105,4 +105,15 @@ public class anomalyCheckController {
105 105 public List<ScheduleRealInfo> findSchByLpName(@RequestParam String lpName){
106 106 return dayOfSchedule.getLpScheduleMap().get(lpName);
107 107 }
  108 +
  109 + @RequestMapping(value = "/findSchByNbbm")
  110 + public List<ScheduleRealInfo> findSchByNbbm(@RequestParam String nbbm){
  111 + return dayOfSchedule.findByNbbm(nbbm);
  112 + }
  113 +
  114 + @RequestMapping(value = "/removeExecPlan")
  115 + public int removeExecPlan(@RequestParam String nbbm){
  116 + dayOfSchedule.removeExecPlan(nbbm);
  117 + return 1;
  118 + }
108 119 }
... ...
src/main/java/com/bsth/data/schedule/late_adjust/ScheduleLateThread.java
... ... @@ -6,6 +6,8 @@ import com.bsth.data.schedule.ScheduleComparator;
6 6 import com.bsth.entity.realcontrol.ScheduleRealInfo;
7 7 import com.bsth.websocket.handler.SendUtils;
8 8 import org.apache.commons.lang3.StringUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
9 11 import org.springframework.beans.factory.annotation.Autowired;
10 12 import org.springframework.stereotype.Component;
11 13  
... ... @@ -31,43 +33,49 @@ public class ScheduleLateThread extends Thread{
31 33 @Autowired
32 34 SendUtils sendUtils;
33 35  
  36 + Logger logger = LoggerFactory.getLogger(this.getClass());
  37 +
34 38 private static Comparator<ScheduleRealInfo> cpm = new ScheduleComparator.DFSJ();
35 39  
36 40 @Override
37 41 public void run() {
38   - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
39   - Collections.sort(all, cpm);
  42 + try{
  43 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
  44 + Collections.sort(all, cpm);
40 45  
41   - long t = System.currentTimeMillis();
42   - int size = all.size();
  46 + long t = System.currentTimeMillis();
  47 + int size = all.size();
43 48  
44   - ScheduleRealInfo sch;
45   - for(int i = 0; i < size; i ++){
46   - sch = all.get(i);
47   - if(sch.getDfsjT() > t)
48   - break;
  49 + ScheduleRealInfo sch;
  50 + for(int i = 0; i < size; i ++){
  51 + sch = all.get(i);
  52 + if(sch.getDfsjT() > t)
  53 + break;
49 54  
50   - if(sch.isLate())
51   - continue;
  55 + if(sch.isLate())
  56 + continue;
52 57  
53   - if(sch.getStatus() == 0
54   - && StringUtils.isEmpty(sch.getFcsjActual())){
  58 + if(sch.getStatus() == 0
  59 + && StringUtils.isEmpty(sch.getFcsjActual())){
55 60  
56   - //检查应发未到 当前班次无起点到达时间
57   - if(StringUtils.isEmpty(sch.getQdzArrDatesj())){
58   - ScheduleRealInfo prev = dayOfSchedule.prev(sch);
59   - //上一个班次也没有实际终点到达时间
60   - if(prev != null && StringUtils.isEmpty(prev.getZdsjActual())){
61   - //进入误点调整程序
62   - LateAdjustHandle.putLate(sch);
  61 + //检查应发未到 当前班次无起点到达时间
  62 + if(StringUtils.isEmpty(sch.getQdzArrDatesj())){
  63 + ScheduleRealInfo prev = dayOfSchedule.prev(sch);
  64 + //上一个班次也没有实际终点到达时间
  65 + if(prev != null && StringUtils.isEmpty(prev.getZdsjActual())){
  66 + //进入误点调整程序
  67 + LateAdjustHandle.putLate(sch);
  68 + }
63 69 }
64   - }
65 70  
66   - //应发未发
67   - sch.setLate(true);
68   - //通知客户端
69   - sendUtils.refreshSch(sch);
  71 + //应发未发
  72 + sch.setLate(true);
  73 + //通知客户端
  74 + sendUtils.refreshSch(sch);
  75 + }
70 76 }
  77 + }catch (Exception e){
  78 + logger.error("", e);
71 79 }
72 80 }
73 81 }
74 82 \ No newline at end of file
... ...
src/main/java/com/bsth/entity/directive/D80.java
... ... @@ -241,6 +241,7 @@ public class D80 {
241 241 DC0Data data = new DC0Data();
242 242 data.setOperCode2((short) 0x86);
243 243 data.setRequestAck((short) (reply == 0 ? 0x06 : 0x15));
  244 + data.setTimestamp(this.getTimestamp());
244 245 c0.setData(data);
245 246 this.setC0(c0);
246 247 }
... ...
src/main/java/com/bsth/entity/directive/DC0.java
1 1 package com.bsth.entity.directive;
2 2  
3   -import javax.persistence.Embeddable;
4   -import javax.persistence.Entity;
5   -import javax.persistence.GeneratedValue;
6   -import javax.persistence.Id;
7   -import javax.persistence.Table;
  3 +import javax.persistence.*;
8 4  
9 5 /**
10 6 *
... ... @@ -52,6 +48,12 @@ public class DC0 {
52 48 */
53 49 private Short requestAck;
54 50  
  51 + /**
  52 + * 时间戳
  53 + */
  54 + @Transient
  55 + private Long timestamp;
  56 +
55 57 public Short getOperCode2() {
56 58 return operCode2;
57 59 }
... ... @@ -67,6 +69,14 @@ public class DC0 {
67 69 public void setRequestAck(Short requestAck) {
68 70 this.requestAck = requestAck;
69 71 }
  72 +
  73 + public Long getTimestamp() {
  74 + return timestamp;
  75 + }
  76 +
  77 + public void setTimestamp(Long timestamp) {
  78 + this.timestamp = timestamp;
  79 + }
70 80 }
71 81  
72 82 public Integer getId() {
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -3308,6 +3308,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3308 3308 boolean dest2 = sch.getStatus() == -1;
3309 3309 if (!dest1 && dest2) {
3310 3310 oldSch.destroy();
  3311 + oldSch.setAdjustExps(sch.getAdjustExps());
3311 3312 aflog.log("烂班");
3312 3313 }
3313 3314 else if(dest1 && !dest2){
... ... @@ -3315,6 +3316,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3315 3316 oldSch.setJhlc(oldSch.getJhlcOrig());
3316 3317 oldSch.setStatus(0);
3317 3318 oldSch.calcStatus();
  3319 + oldSch.setAdjustExps(null);
3318 3320 aflog.log("撤销烂班");
3319 3321 }
3320 3322  
... ...
src/main/java/com/bsth/service/traffic/impl/YgcBasicDataServiceImpl.java
... ... @@ -213,6 +213,7 @@ public class YgcBasicDataServiceImpl implements YgcBasicDataService{
213 213 private List<HashMap<String,String>> parseXml(StringBuffer sb){
214 214 List<HashMap<String,String>> list = new ArrayList<>();
215 215 HashMap<String,String> map;
  216 + HashMap<String,Integer> keyMap = new HashMap<>();
216 217 try {
217 218 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
218 219 DocumentBuilder builder = factory.newDocumentBuilder();
... ... @@ -238,13 +239,18 @@ public class YgcBasicDataServiceImpl implements YgcBasicDataService{
238 239 doc.getElementsByTagName("DDFS").item(i).getFirstChild().getNodeValue();
239 240 lineStandardCode = doc.getElementsByTagName("LineStandardCode").item(i).getFirstChild() == null ?"":
240 241 doc.getElementsByTagName("LineStandardCode").item(i).getFirstChild().getNodeValue();
  242 + // 保存相同lineId出现的次数
  243 + keyMap.put(lineId,keyMap.get(lineId) == null ? 1 : keyMap.get(lineId) + 1);
241 244 map = new HashMap<>();
242 245 map.put("lineName",lineName);
243 246 map.put("lineId",lineId);
244 247 map.put("abbreviation",abbreviation);
245 248 map.put("ddfs",ddfs);
246 249 map.put("lineStandardCode",lineStandardCode);
247   - list.add(map);
  250 + // 只保存第一次的lineId信息
  251 + if(keyMap.get(lineId) < 2){
  252 + list.add(map);
  253 + }
248 254 }
249 255 }
250 256 }catch (Exception e){
... ...
src/main/resources/static/pages/summary/work_hours/list.html
... ... @@ -263,8 +263,8 @@
263 263 }
264 264  
265 265 //日期选择器
266   - $('[name=rq_eq]', f).val('2017-09-17');
267   - flatpickr('.ct_search_form_wrap [name=rq_eq]', {"locale": "zh", maxDate: '2017-09-17', minDate: '2017-07-01'});
  266 + $('[name=rq_eq]', f).val('2017-09-24');
  267 + flatpickr('.ct_search_form_wrap [name=rq_eq]', {"locale": "zh", maxDate: '2017-09-24', minDate: '2017-07-01'});
268 268  
269 269 var comps;
270 270 //构建公司级联下拉框
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -1695,4 +1695,8 @@ dl.active&gt;dd.disabled{
1695 1695 #change_user_options-modal .user_info{
1696 1696 width: 360px;
1697 1697 margin: auto;
  1698 +}
  1699 +
  1700 +.display_hide{
  1701 + display: none;
1698 1702 }
1699 1703 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_custom.html
... ... @@ -92,8 +92,8 @@
92 92 return;
93 93 }
94 94 var data = dataArray[i];
95   - //里程为0的不保存
96   - if(data.mileage==0){
  95 + //营运里程为0的不保存
  96 + if(data.mileageType == 'service' && data.mileage==0){
97 97 i++;
98 98 f();
99 99 }
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html
... ... @@ -293,7 +293,7 @@
293 293 }
294 294 var data = dataArray[i];
295 295 //里程为0的不保存
296   - if(data.mileage==0){
  296 + if(data.mileageType == 'service' && data.mileage==0){
297 297 i++;
298 298 f();
299 299 }
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch/editor.html
... ... @@ -34,14 +34,14 @@
34 34 </div>
35 35  
36 36 <script id="history-sch-edit-form-temp" type="text/html">
37   - <input type="hidden" name="id" value="{{id}}"/>
  37 + <input type="hidden" name="id" value="{{sch.id}}"/>
38 38  
39 39 <div class="uk-grid">
40 40 <div class="uk-width-1-3">
41 41 <div class="uk-form-row">
42 42 <label class="uk-form-label" >班次类型</label>
43 43 <div class="uk-form-controls">
44   - <select class="form-control nt-dictionary" data-code="{{bcType}}" name="bcType" data-group=ScheduleType></select>
  44 + <select class="form-control nt-dictionary" data-code="{{sch.bcType}}" name="bcType" data-group=ScheduleType></select>
45 45 </div>
46 46 </div>
47 47 </div>
... ... @@ -69,7 +69,7 @@
69 69 <label class="uk-form-label" >车辆</label>
70 70 <div class="uk-form-controls">
71 71 <div class="uk-autocomplete uk-form car-autocom">
72   - <input type="text" value="{{clZbh}}" name="clZbh" required>
  72 + <input type="text" value="{{sch.clZbh}}" name="clZbh" required>
73 73 </div>
74 74 </div>
75 75 </div>
... ... @@ -79,7 +79,7 @@
79 79 <label class="uk-form-label" >驾驶员</label>
80 80 <div class="uk-form-controls">
81 81 <div class="uk-autocomplete uk-form jsy-autocom">
82   - <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required>
  82 + <input type="text" value="{{sch.jGh}}/{{sch.jName}}" name="jsy" required>
83 83 </div>
84 84 </div>
85 85 </div>
... ... @@ -89,7 +89,7 @@
89 89 <label class="uk-form-label" >售票员</label>
90 90 <div class="uk-form-controls">
91 91 <div class="uk-autocomplete uk-form spy-autocom">
92   - <input type="text" value="{{sGh}}/{{sName}}" name="spy">
  92 + <input type="text" value="{{sch.sGh}}/{{sch.sName}}" name="spy">
93 93 </div>
94 94 </div>
95 95 </div>
... ... @@ -101,7 +101,7 @@
101 101 <div class="uk-form-row">
102 102 <label class="uk-form-label" >计发</label>
103 103 <div class="uk-form-controls">
104   - <input type="time" value="{{fcsj}}" disabled>
  104 + <input type="time" value="{{sch.fcsj}}" disabled>
105 105 </div>
106 106 </div>
107 107 </div>
... ... @@ -109,7 +109,7 @@
109 109 <div class="uk-form-row">
110 110 <label class="uk-form-label" >待发</label>
111 111 <div class="uk-form-controls">
112   - <input type="time" name="dfsj" value="{{dfsj}}" required>
  112 + <input type="time" name="dfsj" value="{{sch.dfsj}}" required>
113 113 </div>
114 114 </div>
115 115 </div>
... ... @@ -117,7 +117,7 @@
117 117 <div class="uk-form-row">
118 118 <label class="uk-form-label" >实发</label>
119 119 <div class="uk-form-controls">
120   - <input type="time" name="fcsjActual" value="{{fcsjActual}}" >
  120 + <input type="time" name="fcsjActual" value="{{sch.fcsjActual}}" >
121 121 </div>
122 122 </div>
123 123 </div>
... ... @@ -128,7 +128,7 @@
128 128 <div class="uk-form-row">
129 129 <label class="uk-form-label" >里程</label>
130 130 <div class="uk-form-controls">
131   - <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false"
  131 + <input type="text" name="jhlc" value="{{sch.jhlc}}" max=222 data-fv-lessthan-inclusive="false"
132 132 required>
133 133 </div>
134 134 </div>
... ... @@ -137,7 +137,7 @@
137 137 <div class="uk-form-row">
138 138 <label class="uk-form-label" >计达</label>
139 139 <div class="uk-form-controls">
140   - <input type="time" value="{{zdsj}}" disabled>
  140 + <input type="time" value="{{sch.zdsj}}" disabled>
141 141 </div>
142 142 </div>
143 143 </div>
... ... @@ -145,7 +145,7 @@
145 145 <div class="uk-form-row">
146 146 <label class="uk-form-label" >实达</label>
147 147 <div class="uk-form-controls">
148   - <input type="time" name="zdsjActual" value="{{zdsjActual}}" >
  148 + <input type="time" name="zdsjActual" value="{{sch.zdsjActual}}" >
149 149 </div>
150 150 </div>
151 151 </div>
... ... @@ -155,17 +155,28 @@
155 155 <div class="uk-form-row">
156 156 <label class="uk-form-label" ></label>
157 157 <label>
158   - &nbsp;<input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if status==-1}}checked{{/if}}>
  158 + &nbsp;<input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if sch.status==-1}}checked{{/if}}>
159 159 是否烂班
160 160 </label>
161 161 </div>
  162 +
  163 + <div class="uk-form-row adjust_exps_select_wrap {{if sch.status!=-1}}display_hide{{/if}}" >
  164 + <label class="uk-form-label" >烂班原因</label>
  165 + <div class="uk-form-controls">
  166 + <select name="adjustExps">
  167 + {{each adjustExps as exp i}}
  168 + <option value="{{exp}}" {{if sch.adjustExps==exp}}selected{{/if}}>{{exp}}</option>
  169 + {{/each}}
  170 + </select>
  171 + </div>
  172 + </div>
162 173 </div>
163 174  
164 175 <div class="uk-width-2-3">
165 176 <div class="uk-form-row ct-stacked">
166 177 <label class="uk-form-label" >备注</label>
167 178 <div class="uk-form-controls" style="margin-top: 5px;">
168   - <textarea id="form-s-t" cols="20" rows="3" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="100" placeholder="备注">{{remarks}}</textarea>
  179 + <textarea id="form-s-t" cols="20" rows="3" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="100" placeholder="备注">{{sch.remarks}}</textarea>
169 180 </div>
170 181 </div>
171 182 </div>
... ... @@ -214,7 +225,7 @@
214 225 var modal = '#history-sch-edit-modal'
215 226 ,gb_sch,parentModal;
216 227 var stationRoutes, parks, information;
217   -
  228 + var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
218 229 $(modal).on('init', function(e, data) {
219 230 e.stopPropagation();
220 231 var id = data.id;
... ... @@ -223,7 +234,7 @@
223 234 $.get('/realSchedule/'+id, function (sch) {
224 235 gb_sch = sch;
225 236  
226   - var htmlStr = template('history-sch-edit-form-temp', sch);
  237 + var htmlStr = template('history-sch-edit-form-temp', {sch: sch, adjustExps: adjustExps});
227 238 $('form.sch_form', modal).html(htmlStr);
228 239 //子任务列表
229 240 sch.cTasks.sort(sub_task_sort);
... ... @@ -239,10 +250,14 @@
239 250 var f = $('form.sch_form', modal).formValidation(gb_form_validation_opts);
240 251 //是否烂班
241 252 $('[name=status]', f).on('click', function () {
242   - if(this.checked)
  253 + if(this.checked){
243 254 $('[name=jhlc]', f).val(0);
244   - else
  255 + $('.adjust_exps_select_wrap', f).show();
  256 + }
  257 + else{
245 258 $('[name=jhlc]', f).val(gb_sch.jhlcOrig);
  259 + $('.adjust_exps_select_wrap', f).hide();
  260 + }
246 261 });
247 262 f.on('success.form.fv', function(e) {
248 263 e.preventDefault();
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch_maintain.html
... ... @@ -127,7 +127,7 @@
127 127 tsStr += '<li ' + (i == 0 ? 'class="uk-active"' : '') + '><a>' + this + '</a></li>';
128 128 });
129 129 //临时放开闵行39路的日期权限
130   - if(gb_data_basic.line_idx=='100001'){
  130 + /*if(gb_data_basic.line_idx=='100001'){
131 131 var st = moment('2017-08-29', 'YYYY-MM-DD');
132 132 var et = moment().format('YYYY-MM-DD');
133 133 tsStr = '';
... ... @@ -139,7 +139,7 @@
139 139 if(rq == et)
140 140 break;
141 141 }
142   - }
  142 + }*/
143 143  
144 144 $('.h-s-time', modal).html(tsStr);
145 145  
... ...
src/main/resources/static/real_control_v2/js/main.js
... ... @@ -47,7 +47,7 @@ var gb_main_ep = new EventProxy(),
47 47 $('li.map-panel', '#main-tab-content').load('/real_control_v2/mapmonitor/real.html');
48 48 }, 1000);
49 49 //弹出更新说明
50   - showUpdateDescription();
  50 + //showUpdateDescription();
51 51 });
52 52  
53 53 function g_emit(id) {
... ...