Commit b11a3aff95bad8e2297c1c91bd8872839100a299
Merge branch 'minhang' into pudong
Showing
13 changed files
with
113 additions
and
56 deletions
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<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<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
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_custom.html
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html
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 | - <input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if status==-1}}checked{{/if}}> | |
| 158 | + <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