Commit b22c208355895840594b32d1fc88ce110c317b2f
1 parent
06356c2b
例行更新
Showing
21 changed files
with
556 additions
and
131 deletions
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
| @@ -5,6 +5,7 @@ import java.util.List; | @@ -5,6 +5,7 @@ import java.util.List; | ||
| 5 | import java.util.Map; | 5 | import java.util.Map; |
| 6 | 6 | ||
| 7 | import org.springframework.beans.factory.annotation.Autowired; | 7 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | +import org.springframework.web.bind.annotation.PathVariable; | ||
| 8 | import org.springframework.web.bind.annotation.RequestMapping; | 9 | import org.springframework.web.bind.annotation.RequestMapping; |
| 9 | import org.springframework.web.bind.annotation.RequestMethod; | 10 | import org.springframework.web.bind.annotation.RequestMethod; |
| 10 | import org.springframework.web.bind.annotation.RequestParam; | 11 | import org.springframework.web.bind.annotation.RequestParam; |
| @@ -205,6 +206,18 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | @@ -205,6 +206,18 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | ||
| 205 | public Map<Integer, Integer> trustStatus(@RequestParam String lineCodes) { | 206 | public Map<Integer, Integer> trustStatus(@RequestParam String lineCodes) { |
| 206 | return scheduleRealInfoService.trustStatus(lineCodes); | 207 | return scheduleRealInfoService.trustStatus(lineCodes); |
| 207 | } | 208 | } |
| 209 | + | ||
| 210 | + /** | ||
| 211 | + * | ||
| 212 | + * @Title: outgoAdjustAll | ||
| 213 | + * @Description: TODO(批量待发调整) | ||
| 214 | + * @param @param list | ||
| 215 | + * @throws | ||
| 216 | + */ | ||
| 217 | + @RequestMapping(value = "/outgoAdjustAll", method = RequestMethod.POST) | ||
| 218 | + public Map<String, Object> outgoAdjustAll(@RequestParam String params){ | ||
| 219 | + return scheduleRealInfoService.outgoAdjustAll(params); | ||
| 220 | + } | ||
| 208 | 221 | ||
| 209 | /** | 222 | /** |
| 210 | * | 223 | * |
| @@ -223,13 +236,23 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | @@ -223,13 +236,23 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | ||
| 223 | * @Description: TODO(根据线路和走向获取班次) | 236 | * @Description: TODO(根据线路和走向获取班次) |
| 224 | * @param @param line | 237 | * @param @param line |
| 225 | * @param @param upDown | 238 | * @param @param upDown |
| 226 | - * @throws | ||
| 227 | */ | 239 | */ |
| 228 | @RequestMapping(value = "/findByLineAndUpDown") | 240 | @RequestMapping(value = "/findByLineAndUpDown") |
| 229 | public List<ScheduleRealInfo> findByLineAndUpDown(@RequestParam Integer line,@RequestParam Integer upDown){ | 241 | public List<ScheduleRealInfo> findByLineAndUpDown(@RequestParam Integer line,@RequestParam Integer upDown){ |
| 230 | return ScheduleBuffer.findByLineAndUpDown(line, upDown); | 242 | return ScheduleBuffer.findByLineAndUpDown(line, upDown); |
| 231 | } | 243 | } |
| 232 | 244 | ||
| 245 | + /** | ||
| 246 | + * | ||
| 247 | + * @Title: findByLineCode | ||
| 248 | + * @Description: TODO(根据线路获取班次信息) | ||
| 249 | + * @param @param lineCode | ||
| 250 | + */ | ||
| 251 | + @RequestMapping(value = "/lineCode/{lineCode}") | ||
| 252 | + public List<ScheduleRealInfo> findByLineCode(@PathVariable("lineCode") String lineCode){ | ||
| 253 | + return ScheduleBuffer.schedulListMap.get(lineCode); | ||
| 254 | + } | ||
| 255 | + | ||
| 233 | @RequestMapping(value = "/queryUserInfo") | 256 | @RequestMapping(value = "/queryUserInfo") |
| 234 | public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line, @RequestParam String date) { | 257 | public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line, @RequestParam String date) { |
| 235 | return scheduleRealInfoService.queryUserInfo(line, date); | 258 | return scheduleRealInfoService.queryUserInfo(line, date); |
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
| @@ -482,6 +482,17 @@ public class ScheduleRealInfo { | @@ -482,6 +482,17 @@ public class ScheduleRealInfo { | ||
| 482 | this.dfsj = sdfHHmm.format(new Date(this.dfsjT)); | 482 | this.dfsj = sdfHHmm.format(new Date(this.dfsjT)); |
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | + public void setDfsjAll(String dfsj) { | ||
| 486 | + | ||
| 487 | + try { | ||
| 488 | + String dfsjFull = sdfyyyyMMdd.format(this.scheduleDate) + " " + dfsj; | ||
| 489 | + this.dfsjT = sdfyyyyMMddHHmm.parse(dfsjFull).getTime(); | ||
| 490 | + this.dfsj = dfsj; | ||
| 491 | + } catch (ParseException e) { | ||
| 492 | + e.printStackTrace(); | ||
| 493 | + } | ||
| 494 | + } | ||
| 495 | + | ||
| 485 | @Transient | 496 | @Transient |
| 486 | static SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); | 497 | static SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); |
| 487 | @Transient | 498 | @Transient |
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
| @@ -78,4 +78,6 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L | @@ -78,4 +78,6 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L | ||
| 78 | 78 | ||
| 79 | Map<String, Object> schInfoFineTune(Map<String, String> map); | 79 | Map<String, Object> schInfoFineTune(Map<String, String> map); |
| 80 | 80 | ||
| 81 | + Map<String, Object> outgoAdjustAll(String params); | ||
| 82 | + | ||
| 81 | } | 83 | } |
src/main/java/com/bsth/service/realcontrol/buffer/GetSchedulePlanThread.java
| 1 | package com.bsth.service.realcontrol.buffer; | 1 | package com.bsth.service.realcontrol.buffer; |
| 2 | 2 | ||
| 3 | +import java.text.ParseException; | ||
| 3 | import java.text.SimpleDateFormat; | 4 | import java.text.SimpleDateFormat; |
| 4 | import java.util.Date; | 5 | import java.util.Date; |
| 5 | import java.util.List; | 6 | import java.util.List; |
| @@ -16,7 +17,7 @@ import com.bsth.entity.schedule.SchedulePlanInfo; | @@ -16,7 +17,7 @@ import com.bsth.entity.schedule.SchedulePlanInfo; | ||
| 16 | import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; | 17 | import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; |
| 17 | import com.bsth.repository.schedule.SchedulePlanInfoRepository; | 18 | import com.bsth.repository.schedule.SchedulePlanInfoRepository; |
| 18 | import com.bsth.util.BatchSaveUtils; | 19 | import com.bsth.util.BatchSaveUtils; |
| 19 | -import com.fasterxml.jackson.databind.ObjectMapper; | 20 | +import com.bsth.vehicle.directive.buffer.DirectiveBuffer; |
| 20 | 21 | ||
| 21 | /** | 22 | /** |
| 22 | * | 23 | * |
| @@ -37,56 +38,65 @@ public class GetSchedulePlanThread extends Thread{ | @@ -37,56 +38,65 @@ public class GetSchedulePlanThread extends Thread{ | ||
| 37 | @Autowired | 38 | @Autowired |
| 38 | ScheduleRealInfoRepository scheduleRealInfoRepository; | 39 | ScheduleRealInfoRepository scheduleRealInfoRepository; |
| 39 | 40 | ||
| 40 | - @Autowired | ||
| 41 | - ObjectMapper objectMapper; | ||
| 42 | - | ||
| 43 | SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); | 41 | SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); |
| 44 | 42 | ||
| 43 | + @Autowired | ||
| 44 | + DirectiveBuffer directiveBuffer; | ||
| 45 | + | ||
| 45 | @Override | 46 | @Override |
| 46 | public void run() { | 47 | public void run() { |
| 47 | try{ | 48 | try{ |
| 49 | + //清除缓存 | ||
| 48 | ScheduleBuffer.clear(); | 50 | ScheduleBuffer.clear(); |
| 51 | + //所有指令入库 | ||
| 52 | + directiveBuffer.saveAll(); | ||
| 53 | + DirectiveBuffer.clear(); | ||
| 49 | 54 | ||
| 50 | - List<ScheduleRealInfo> realList = null; | ||
| 51 | - String dateStr = sdfyyyyMMdd.format(new Date()); | ||
| 52 | - Date cDate = sdfyyyyMMdd.parse(dateStr); | ||
| 53 | - //查询数据库是否有今日排班 | ||
| 54 | - int size = scheduleRealInfoRepository.countByDate(cDate); | ||
| 55 | - if(size > 0){ | ||
| 56 | - //从数据库恢复当日排班 | ||
| 57 | - realList = scheduleRealInfoRepository.findByDate(cDate); | ||
| 58 | - logger.info("从数据库恢复当日排班 " + realList.size()); | ||
| 59 | - //写入缓存 | ||
| 60 | - ScheduleBuffer.init(realList); | ||
| 61 | - } | ||
| 62 | - else{ | ||
| 63 | - List<SchedulePlanInfo> list = schedulePlanInfoRepository.findByDate(cDate); | ||
| 64 | - | ||
| 65 | - for(SchedulePlanInfo sp : list){ | ||
| 66 | - sp.setSchedulePlan(null); | ||
| 67 | - } | ||
| 68 | - | ||
| 69 | - //实际排班计划 | ||
| 70 | - realList = JSONArray.parseArray(JSON.toJSONString(list), ScheduleRealInfo.class); | ||
| 71 | - //查询数据库最大ID | ||
| 72 | - Long id = scheduleRealInfoRepository.getMaxId(); | ||
| 73 | - if(null == id) | ||
| 74 | - id = 0L; | ||
| 75 | - id ++; | ||
| 76 | - | ||
| 77 | - for(ScheduleRealInfo item : realList){ | ||
| 78 | - item.setSpId(item.getId()); | ||
| 79 | - item.setId(id ++);//设置ID | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - //写入缓存 | ||
| 83 | - ScheduleBuffer.init(realList); | ||
| 84 | - //入库 | ||
| 85 | - new BatchSaveUtils<ScheduleRealInfo>().saveList(realList, ScheduleRealInfo.class); | ||
| 86 | - } | ||
| 87 | - logger.info("获取当天实际排班计划数量:" + realList.size()); | 55 | + //加载新的排班 |
| 56 | + loaSchedule(); | ||
| 88 | }catch(Exception e){ | 57 | }catch(Exception e){ |
| 89 | logger.error("",e); | 58 | logger.error("",e); |
| 90 | } | 59 | } |
| 91 | } | 60 | } |
| 61 | + | ||
| 62 | + public void loaSchedule() throws ParseException{ | ||
| 63 | + List<ScheduleRealInfo> realList = null; | ||
| 64 | + String dateStr = sdfyyyyMMdd.format(new Date()); | ||
| 65 | + Date cDate = sdfyyyyMMdd.parse(dateStr); | ||
| 66 | + //查询数据库是否有今日排班 | ||
| 67 | + int size = scheduleRealInfoRepository.countByDate(cDate); | ||
| 68 | + if(size > 0){ | ||
| 69 | + //从数据库恢复当日排班 | ||
| 70 | + realList = scheduleRealInfoRepository.findByDate(cDate); | ||
| 71 | + logger.info("从数据库恢复当日排班 " + realList.size()); | ||
| 72 | + //写入缓存 | ||
| 73 | + ScheduleBuffer.init(realList); | ||
| 74 | + } | ||
| 75 | + else{ | ||
| 76 | + List<SchedulePlanInfo> list = schedulePlanInfoRepository.findByDate(cDate); | ||
| 77 | + | ||
| 78 | + for(SchedulePlanInfo sp : list){ | ||
| 79 | + sp.setSchedulePlan(null); | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + //实际排班计划 | ||
| 83 | + realList = JSONArray.parseArray(JSON.toJSONString(list), ScheduleRealInfo.class); | ||
| 84 | + //查询数据库最大ID | ||
| 85 | + Long id = scheduleRealInfoRepository.getMaxId(); | ||
| 86 | + if(null == id) | ||
| 87 | + id = 0L; | ||
| 88 | + id ++; | ||
| 89 | + | ||
| 90 | + for(ScheduleRealInfo item : realList){ | ||
| 91 | + item.setSpId(item.getId()); | ||
| 92 | + item.setId(id ++);//设置ID | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + //写入缓存 | ||
| 96 | + ScheduleBuffer.init(realList); | ||
| 97 | + //入库 | ||
| 98 | + new BatchSaveUtils<ScheduleRealInfo>().saveList(realList, ScheduleRealInfo.class); | ||
| 99 | + } | ||
| 100 | + logger.info("获取当天实际排班计划数量:" + realList.size()); | ||
| 101 | + } | ||
| 92 | } | 102 | } |
src/main/java/com/bsth/service/realcontrol/buffer/ScheduleBuffer.java
| @@ -36,13 +36,19 @@ public class ScheduleBuffer { | @@ -36,13 +36,19 @@ public class ScheduleBuffer { | ||
| 36 | /** | 36 | /** |
| 37 | * K: 车辆自编号 V: 未完成班次链表 | 37 | * K: 车辆自编号 V: 未完成班次链表 |
| 38 | */ | 38 | */ |
| 39 | - public static Map<String, LinkedList<ScheduleRealInfo>> vehLinkedMap; | 39 | + /*public static Map<String, LinkedList<ScheduleRealInfo>> vehLinkedMap;*/ |
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * K: 车辆自编号 V: 班次链表 | ||
| 43 | + */ | ||
| 44 | + public static ArrayListMultimap<String, ScheduleRealInfo> vehSchListMap; | ||
| 45 | + /*public static Map<String, LinkedList<ScheduleRealInfo>> vehSchLinkedMap;*/ | ||
| 40 | 46 | ||
| 41 | 47 | ||
| 42 | /** | 48 | /** |
| 43 | * K: 车辆自编号 V: 已执行班次链表 | 49 | * K: 车辆自编号 V: 已执行班次链表 |
| 44 | */ | 50 | */ |
| 45 | - public static LinkedListMultimap<String, ScheduleRealInfo> finishLinkedMap; | 51 | + /*public static LinkedListMultimap<String, ScheduleRealInfo> finishLinkedMap;*/ |
| 46 | 52 | ||
| 47 | 53 | ||
| 48 | /** | 54 | /** |
| @@ -73,8 +79,9 @@ public class ScheduleBuffer { | @@ -73,8 +79,9 @@ public class ScheduleBuffer { | ||
| 73 | schedulListMap = ArrayListMultimap.create(); | 79 | schedulListMap = ArrayListMultimap.create(); |
| 74 | pkSchedulMap = new HashMap<>(); | 80 | pkSchedulMap = new HashMap<>(); |
| 75 | persistentList = new LinkedList<>(); | 81 | persistentList = new LinkedList<>(); |
| 76 | - vehLinkedMap = new HashMap<>(); | ||
| 77 | - finishLinkedMap = LinkedListMultimap.create(); | 82 | + /*vehLinkedMap = new HashMap<>(); |
| 83 | + finishLinkedMap = LinkedListMultimap.create();*/ | ||
| 84 | + vehSchListMap = ArrayListMultimap.create(); | ||
| 78 | trustMap = new HashMap<>(); | 85 | trustMap = new HashMap<>(); |
| 79 | } | 86 | } |
| 80 | 87 | ||
| @@ -96,10 +103,11 @@ public class ScheduleBuffer { | @@ -96,10 +103,11 @@ public class ScheduleBuffer { | ||
| 96 | 103 | ||
| 97 | //初始化车辆和班次列表对照 | 104 | //初始化车辆和班次列表对照 |
| 98 | zbh = schedul.getClZbh(); | 105 | zbh = schedul.getClZbh(); |
| 99 | - if(!vehLinkedMap.containsKey(zbh)) | 106 | + vehSchListMap.put(zbh, schedul); |
| 107 | + /*if(!vehLinkedMap.containsKey(zbh)) | ||
| 100 | vehLinkedMap.put(zbh, new LinkedList<ScheduleRealInfo>()); | 108 | vehLinkedMap.put(zbh, new LinkedList<ScheduleRealInfo>()); |
| 101 | 109 | ||
| 102 | - vehLinkedMap.get(zbh).add(schedul); | 110 | + vehLinkedMap.get(zbh).add(schedul);*/ |
| 103 | } | 111 | } |
| 104 | 112 | ||
| 105 | //计算起点应到时间 | 113 | //计算起点应到时间 |
| @@ -152,18 +160,23 @@ public class ScheduleBuffer { | @@ -152,18 +160,23 @@ public class ScheduleBuffer { | ||
| 152 | 160 | ||
| 153 | public static int put(ScheduleRealInfo sch){ | 161 | public static int put(ScheduleRealInfo sch){ |
| 154 | schedulListMap.put(sch.getXlBm(), sch); | 162 | schedulListMap.put(sch.getXlBm(), sch); |
| 155 | - pkSchedulMap.put(sch.getId(), sch); | ||
| 156 | 163 | ||
| 164 | + pkSchedulMap.put(sch.getId(), sch); | ||
| 157 | String zbh = sch.getClZbh(); | 165 | String zbh = sch.getClZbh(); |
| 158 | - if(!vehLinkedMap.containsKey(zbh)) | 166 | + vehSchListMap.put(zbh, sch); |
| 167 | + | ||
| 168 | + //List<ScheduleRealInfo> list = vehSchListMap.get(sch.getClZbh()); | ||
| 169 | + | ||
| 170 | + /*if(!vehLinkedMap.containsKey(zbh)) | ||
| 159 | vehLinkedMap.put(zbh, new LinkedList<ScheduleRealInfo>()); | 171 | vehLinkedMap.put(zbh, new LinkedList<ScheduleRealInfo>()); |
| 160 | - vehLinkedMap.get(zbh).add(sch); | 172 | + vehLinkedMap.get(zbh).add(sch);*/ |
| 161 | 173 | ||
| 162 | //重新排序 | 174 | //重新排序 |
| 163 | - //Collections.sort(vehLinkedMap.get(zbh), scheduleComparator); | 175 | + Collections.sort(schedulListMap.get(sch.getXlBm()), scheduleComparator); |
| 164 | 176 | ||
| 165 | //重新计算应到时间 | 177 | //重新计算应到时间 |
| 166 | - calcArrDateQd(vehLinkedMap.get(zbh)); | 178 | + //calcArrDateQd(vehLinkedMap.get(zbh)); |
| 179 | + calcArrDateQd(vehSchListMap.get(zbh)); | ||
| 167 | return 0; | 180 | return 0; |
| 168 | } | 181 | } |
| 169 | 182 | ||
| @@ -184,12 +197,15 @@ public class ScheduleBuffer { | @@ -184,12 +197,15 @@ public class ScheduleBuffer { | ||
| 184 | * @throws | 197 | * @throws |
| 185 | */ | 198 | */ |
| 186 | public static ScheduleRealInfo finishSch(ScheduleRealInfo sch){ | 199 | public static ScheduleRealInfo finishSch(ScheduleRealInfo sch){ |
| 187 | - LinkedList<ScheduleRealInfo> list = vehLinkedMap.get(sch.getClZbh()); | 200 | + //LinkedList<ScheduleRealInfo> list = vehLinkedMap.get(sch.getClZbh()); |
| 188 | //状态修改为已执行 | 201 | //状态修改为已执行 |
| 189 | sch.setStatus(2); | 202 | sch.setStatus(2); |
| 190 | persistentList.add(sch); | 203 | persistentList.add(sch); |
| 191 | 204 | ||
| 192 | - ScheduleRealInfo temp; | 205 | + //下一个班次 |
| 206 | + ScheduleRealInfo next = getNext(sch); | ||
| 207 | + next.setQdzArrDateSJ(sch.getZdsjActual()); | ||
| 208 | + /*ScheduleRealInfo temp; | ||
| 193 | int len = list.size(); | 209 | int len = list.size(); |
| 194 | for(int i = 0; i < len; i ++){ | 210 | for(int i = 0; i < len; i ++){ |
| 195 | temp = list.poll(); | 211 | temp = list.poll(); |
| @@ -199,8 +215,41 @@ public class ScheduleBuffer { | @@ -199,8 +215,41 @@ public class ScheduleBuffer { | ||
| 199 | break; | 215 | break; |
| 200 | } | 216 | } |
| 201 | } | 217 | } |
| 202 | - ScheduleRealInfo next = list.getFirst(); | ||
| 203 | - next.setQdzArrDateSJ(sch.getZdsjActual()); | 218 | + ScheduleRealInfo next = list.getFirst();*/ |
| 219 | + //next.setQdzArrDateSJ(sch.getZdsjActual()); | ||
| 220 | + return next; | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + public static ScheduleRealInfo getNext(ScheduleRealInfo sch){ | ||
| 224 | + List<ScheduleRealInfo> list = vehSchListMap.get(sch.getClZbh()); | ||
| 225 | + | ||
| 226 | + boolean flag = false; | ||
| 227 | + ScheduleRealInfo next = null; | ||
| 228 | + for(ScheduleRealInfo temp : list){ | ||
| 229 | + if(temp.getId() == sch.getId()){ | ||
| 230 | + flag = true; | ||
| 231 | + continue; | ||
| 232 | + } | ||
| 233 | + //忽略烂班 | ||
| 234 | + if(temp.getStatus() == -1) | ||
| 235 | + continue; | ||
| 236 | + | ||
| 237 | + if(flag){ | ||
| 238 | + next = temp; | ||
| 239 | + break; | ||
| 240 | + } | ||
| 241 | + } | ||
| 242 | + | ||
| 243 | + | ||
| 244 | + /*int size = list.size(); | ||
| 245 | + for(int i = 0; i < size; i ++){ | ||
| 246 | + current = list.get(i); | ||
| 247 | + if(current.getId() == sch.getId() | ||
| 248 | + && i < (size - 1)){ | ||
| 249 | + next = list.get(i + 1); | ||
| 250 | + break; | ||
| 251 | + } | ||
| 252 | + }*/ | ||
| 204 | return next; | 253 | return next; |
| 205 | } | 254 | } |
| 206 | 255 | ||
| @@ -212,7 +261,56 @@ public class ScheduleBuffer { | @@ -212,7 +261,56 @@ public class ScheduleBuffer { | ||
| 212 | * @throws | 261 | * @throws |
| 213 | */ | 262 | */ |
| 214 | public static int getFinishSchNo(String nbbm){ | 263 | public static int getFinishSchNo(String nbbm){ |
| 215 | - return finishLinkedMap.get(nbbm) == null ? 0 : finishLinkedMap.get(nbbm).size(); | 264 | + List<ScheduleRealInfo> list = vehSchListMap.get(nbbm); |
| 265 | + int no = 0; | ||
| 266 | + for(ScheduleRealInfo sch : list){ | ||
| 267 | + if(sch.getStatus() == 2) | ||
| 268 | + no ++; | ||
| 269 | + } | ||
| 270 | + return no; | ||
| 271 | + //return finishLinkedMap.get(nbbm) == null ? 0 : finishLinkedMap.get(nbbm).size(); | ||
| 272 | + } | ||
| 273 | + | ||
| 274 | + /** | ||
| 275 | + * | ||
| 276 | + * @Title: findCurrent | ||
| 277 | + * @Description: TODO(获取车辆当前正在执行的班次) | ||
| 278 | + * @param @param nbbm | ||
| 279 | + * @throws | ||
| 280 | + */ | ||
| 281 | + public static ScheduleRealInfo findCurrent(String nbbm){ | ||
| 282 | + List<ScheduleRealInfo> list = ScheduleBuffer.vehSchListMap.get(nbbm); | ||
| 283 | + | ||
| 284 | + int size = list.size(); | ||
| 285 | + ScheduleRealInfo sch; | ||
| 286 | + //最后一个状态为 正在执行的班次 | ||
| 287 | + for(int i = size - 1; i > 0; i --){ | ||
| 288 | + sch = list.get(i); | ||
| 289 | + if(sch.getStatus() == 1) | ||
| 290 | + return sch; | ||
| 291 | + } | ||
| 292 | + return null; | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + /** | ||
| 296 | + * | ||
| 297 | + * @Title: findNextList | ||
| 298 | + * @Description: TODO(获取后续班次) | ||
| 299 | + * @param @param sch | ||
| 300 | + * @throws | ||
| 301 | + */ | ||
| 302 | + public static List<ScheduleRealInfo> findNextList(ScheduleRealInfo sch){ | ||
| 303 | + List<ScheduleRealInfo> list = vehSchListMap.get(sch.getClZbh()), | ||
| 304 | + rs = null; | ||
| 305 | + | ||
| 306 | + for(ScheduleRealInfo temp : list){ | ||
| 307 | + if(temp.getId() == sch.getId()) | ||
| 308 | + rs = new ArrayList<>(); | ||
| 309 | + | ||
| 310 | + if(rs != null) | ||
| 311 | + rs.add(temp); | ||
| 312 | + } | ||
| 313 | + return rs == null?new ArrayList<ScheduleRealInfo>():rs; | ||
| 216 | } | 314 | } |
| 217 | 315 | ||
| 218 | public static void calcArrDateQd(List<ScheduleRealInfo> list){ | 316 | public static void calcArrDateQd(List<ScheduleRealInfo> list){ |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| @@ -19,6 +19,8 @@ import org.slf4j.LoggerFactory; | @@ -19,6 +19,8 @@ import org.slf4j.LoggerFactory; | ||
| 19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
| 20 | import org.springframework.stereotype.Service; | 20 | import org.springframework.stereotype.Service; |
| 21 | 21 | ||
| 22 | +import com.alibaba.fastjson.JSONArray; | ||
| 23 | +import com.alibaba.fastjson.JSONObject; | ||
| 22 | import com.bsth.common.ResponseCode; | 24 | import com.bsth.common.ResponseCode; |
| 23 | import com.bsth.entity.Cars; | 25 | import com.bsth.entity.Cars; |
| 24 | import com.bsth.entity.Line; | 26 | import com.bsth.entity.Line; |
| @@ -121,6 +123,10 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -121,6 +123,10 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 121 | ScheduleRealInfo schedule = null; | 123 | ScheduleRealInfo schedule = null; |
| 122 | for (String id : idList) { | 124 | for (String id : idList) { |
| 123 | schedule = ScheduleBuffer.pkSchedulMap.get(Long.parseLong(id)); | 125 | schedule = ScheduleBuffer.pkSchedulMap.get(Long.parseLong(id)); |
| 126 | + /*if(schedule.getStatus() == -1){ | ||
| 127 | + map.put("status", ResponseCode.ERROR); | ||
| 128 | + map.put("msg", value) | ||
| 129 | + }*/ | ||
| 124 | if (null != schedule) { | 130 | if (null != schedule) { |
| 125 | schedule.setStatus(-1); | 131 | schedule.setStatus(-1); |
| 126 | schedule.addRemarks(remarks); | 132 | schedule.addRemarks(remarks); |
| @@ -264,7 +270,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -264,7 +270,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 264 | // 加入缓存 | 270 | // 加入缓存 |
| 265 | ScheduleBuffer.put(t); | 271 | ScheduleBuffer.put(t); |
| 266 | //将该临加之后的班次作为更新返回页面 | 272 | //将该临加之后的班次作为更新返回页面 |
| 267 | - List<ScheduleRealInfo> list = ScheduleBuffer.vehLinkedMap.get(t.getClZbh()) | 273 | + List<ScheduleRealInfo> list = ScheduleBuffer.findNextList(t) |
| 268 | ,rsList = null; | 274 | ,rsList = null; |
| 269 | 275 | ||
| 270 | for(ScheduleRealInfo sch : list){ | 276 | for(ScheduleRealInfo sch : list){ |
| @@ -492,8 +498,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -492,8 +498,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 492 | rs.put("msg", "无实发时间,无法撤销!"); | 498 | rs.put("msg", "无实发时间,无法撤销!"); |
| 493 | } else { | 499 | } else { |
| 494 | sch.setStatus(0); | 500 | sch.setStatus(0); |
| 495 | - sch.setFcsjActual(""); | ||
| 496 | - sch.setFcsjActualTime(0L); | 501 | + sch.setFcsjActual(null); |
| 502 | + sch.setFcsjActualTime(null); | ||
| 497 | rs.put("status", ResponseCode.SUCCESS); | 503 | rs.put("status", ResponseCode.SUCCESS); |
| 498 | rs.put("t", sch); | 504 | rs.put("t", sch); |
| 499 | 505 | ||
| @@ -564,10 +570,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -564,10 +570,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 564 | String fcsj = map.get("fcsj"); | 570 | String fcsj = map.get("fcsj"); |
| 565 | //实际发车时间 | 571 | //实际发车时间 |
| 566 | String fcsjActual = map.get("fcsjActual"); | 572 | String fcsjActual = map.get("fcsjActual"); |
| 567 | - //驾驶员 | ||
| 568 | - String[] jsy = map.get("jsy").split("/"); | ||
| 569 | - //售票员 | ||
| 570 | - String[] spy = map.get("spy").split("/"); | 573 | + |
| 571 | //实际终点时间 | 574 | //实际终点时间 |
| 572 | String zdsjActual = map.get("zdsjActual"); | 575 | String zdsjActual = map.get("zdsjActual"); |
| 573 | //备注 | 576 | //备注 |
| @@ -575,27 +578,47 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -575,27 +578,47 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 575 | 578 | ||
| 576 | ScheduleRealInfo sch = ScheduleBuffer.findOne(id); | 579 | ScheduleRealInfo sch = ScheduleBuffer.findOne(id); |
| 577 | if(null != sch){ | 580 | if(null != sch){ |
| 581 | + //驾驶员 | ||
| 582 | + if(StringUtils.isNotBlank(map.get("jsy"))){ | ||
| 583 | + String[] jsy = map.get("jsy").split("/"); | ||
| 584 | + sch.setjGh(jsy[0]); | ||
| 585 | + sch.setjName(jsy[1]); | ||
| 586 | + } | ||
| 587 | + | ||
| 588 | + //售票员 | ||
| 589 | + if(StringUtils.isNotBlank(map.get("spy"))){ | ||
| 590 | + String[] spy = map.get("spy").split("/"); | ||
| 591 | + sch.setsGh(spy[0]); | ||
| 592 | + sch.setsName(spy[1]); | ||
| 593 | + } | ||
| 594 | + | ||
| 578 | sch.setBcType(bcType); | 595 | sch.setBcType(bcType); |
| 579 | sch.setClZbh(clZbh); | 596 | sch.setClZbh(clZbh); |
| 580 | sch.setFcsjAll(fcsj); | 597 | sch.setFcsjAll(fcsj); |
| 581 | - if(null == fcsjActual){ | 598 | + if(StringUtils.isNotBlank(fcsjActual)){ |
| 599 | + //调整实发 | ||
| 600 | + sch.setFcsjActualAll(fcsjActual); | ||
| 601 | + sch.setStatus(1); | ||
| 602 | + } | ||
| 603 | + else{ | ||
| 582 | sch.setFcsjActual(null); | 604 | sch.setFcsjActual(null); |
| 583 | sch.setFcsjActualTime(null); | 605 | sch.setFcsjActualTime(null); |
| 584 | } | 606 | } |
| 585 | - else | ||
| 586 | - sch.setFcsjActualAll(fcsjActual); | ||
| 587 | 607 | ||
| 588 | - if(null == zdsjActual){ | 608 | + if(StringUtils.isNotBlank(zdsjActual)){ |
| 609 | + //调整实达 | ||
| 610 | + sch.setZdsjActualAll(zdsjActual); | ||
| 611 | + sch.setStatus(2); | ||
| 612 | + //下一班次起点到达 | ||
| 613 | + ScheduleRealInfo next = ScheduleBuffer.getNext(sch); | ||
| 614 | + next.setQdzArrDateSJ(zdsjActual); | ||
| 615 | + rs.put("nextSch", next); | ||
| 616 | + } | ||
| 617 | + else{ | ||
| 589 | sch.setZdsjActual(null); | 618 | sch.setZdsjActual(null); |
| 590 | sch.setZdsjActualTime(null); | 619 | sch.setZdsjActualTime(null); |
| 591 | } | 620 | } |
| 592 | - else | ||
| 593 | - sch.setZdsjActualAll(zdsjActual); | ||
| 594 | 621 | ||
| 595 | - sch.setjGh(jsy[0]); | ||
| 596 | - sch.setjName(jsy[1]); | ||
| 597 | - sch.setsGh(spy[0]); | ||
| 598 | - sch.setsName(spy[1]); | ||
| 599 | sch.setRemarks(remarks); | 622 | sch.setRemarks(remarks); |
| 600 | } | 623 | } |
| 601 | 624 | ||
| @@ -609,4 +632,32 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -609,4 +632,32 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 609 | } | 632 | } |
| 610 | return rs; | 633 | return rs; |
| 611 | } | 634 | } |
| 635 | + | ||
| 636 | + @Override | ||
| 637 | + public Map<String, Object> outgoAdjustAll(String params) { | ||
| 638 | + Map<String, Object> rs = new HashMap<>(); | ||
| 639 | + try{ | ||
| 640 | + JSONArray jsonArray = JSONArray.parseArray(params); | ||
| 641 | + | ||
| 642 | + ScheduleRealInfo schedule = null; | ||
| 643 | + JSONObject jsonObj; | ||
| 644 | + String dfsj; | ||
| 645 | + for(int i = 0; i < jsonArray.size(); i ++){ | ||
| 646 | + jsonObj = jsonArray.getJSONObject(i); | ||
| 647 | + dfsj = jsonObj.getString("t"); | ||
| 648 | + schedule = ScheduleBuffer.findOne(jsonObj.getLong("id")); | ||
| 649 | + //设置待发时间 | ||
| 650 | + schedule.setDfsjAll(dfsj); | ||
| 651 | + ScheduleBuffer.persistentList.add(schedule); | ||
| 652 | + } | ||
| 653 | + | ||
| 654 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 655 | + //将更新的最后一个班次返回 | ||
| 656 | + rs.put("t", schedule); | ||
| 657 | + }catch(Exception e){ | ||
| 658 | + logger.error("", e); | ||
| 659 | + rs.put("status", ResponseCode.ERROR); | ||
| 660 | + } | ||
| 661 | + return rs; | ||
| 662 | + } | ||
| 612 | } | 663 | } |
src/main/java/com/bsth/vehicle/directive/buffer/DirectiveBuffer.java
| 1 | package com.bsth.vehicle.directive.buffer; | 1 | package com.bsth.vehicle.directive.buffer; |
| 2 | 2 | ||
| 3 | +import java.util.ArrayList; | ||
| 3 | import java.util.HashMap; | 4 | import java.util.HashMap; |
| 5 | +import java.util.Iterator; | ||
| 4 | import java.util.LinkedList; | 6 | import java.util.LinkedList; |
| 7 | +import java.util.List; | ||
| 5 | import java.util.Map; | 8 | import java.util.Map; |
| 6 | 9 | ||
| 7 | import org.slf4j.Logger; | 10 | import org.slf4j.Logger; |
| @@ -19,6 +22,7 @@ import com.bsth.vehicle.directive.entity.Directive80; | @@ -19,6 +22,7 @@ import com.bsth.vehicle.directive.entity.Directive80; | ||
| 19 | import com.bsth.vehicle.directive.entity.DirectiveC0; | 22 | import com.bsth.vehicle.directive.entity.DirectiveC0; |
| 20 | import com.bsth.vehicle.directive.entity.DirectiveC0.DirectiveC0Data; | 23 | import com.bsth.vehicle.directive.entity.DirectiveC0.DirectiveC0Data; |
| 21 | import com.bsth.vehicle.directive.entity.LineChange; | 24 | import com.bsth.vehicle.directive.entity.LineChange; |
| 25 | +import com.bsth.vehicle.directive.repository.Directive60Repository; | ||
| 22 | import com.bsth.vehicle.directive.repository.Directive80Repository; | 26 | import com.bsth.vehicle.directive.repository.Directive80Repository; |
| 23 | import com.bsth.vehicle.directive.repository.LineChangeRepository; | 27 | import com.bsth.vehicle.directive.repository.LineChangeRepository; |
| 24 | import com.bsth.vehicle.directive.util.HttpUtils; | 28 | import com.bsth.vehicle.directive.util.HttpUtils; |
| @@ -61,6 +65,9 @@ public class DirectiveBuffer { | @@ -61,6 +65,9 @@ public class DirectiveBuffer { | ||
| 61 | */ | 65 | */ |
| 62 | private static Map<Integer, Directive60> directiveMap; | 66 | private static Map<Integer, Directive60> directiveMap; |
| 63 | 67 | ||
| 68 | + @Autowired | ||
| 69 | + Directive60Repository d60Repository; | ||
| 70 | + | ||
| 64 | /** | 71 | /** |
| 65 | * 驾驶员上报数据 | 72 | * 驾驶员上报数据 |
| 66 | * {K: 线路编码} | 73 | * {K: 线路编码} |
| @@ -71,10 +78,7 @@ public class DirectiveBuffer { | @@ -71,10 +78,7 @@ public class DirectiveBuffer { | ||
| 71 | RealControlSocketHandler socketHandler; | 78 | RealControlSocketHandler socketHandler; |
| 72 | 79 | ||
| 73 | static{ | 80 | static{ |
| 74 | - transientList = new LinkedList<>(); | ||
| 75 | - directiveMap = new HashMap<>(); | ||
| 76 | - reportMultiMap = ArrayListMultimap.create(); | ||
| 77 | - changeMap = new HashMap<>(); | 81 | + clear(); |
| 78 | } | 82 | } |
| 79 | 83 | ||
| 80 | public static void put(Directive60 directive){ | 84 | public static void put(Directive60 directive){ |
| @@ -205,4 +209,34 @@ public class DirectiveBuffer { | @@ -205,4 +209,34 @@ public class DirectiveBuffer { | ||
| 205 | c0.setData(data); | 209 | c0.setData(data); |
| 206 | return c0; | 210 | return c0; |
| 207 | } | 211 | } |
| 212 | + | ||
| 213 | + /** | ||
| 214 | + * | ||
| 215 | + * @Title: saveAll | ||
| 216 | + * @Description: TODO(所有缓存里的指令全部入库) | ||
| 217 | + */ | ||
| 218 | + public void saveAll(){ | ||
| 219 | + Iterator<Directive60> iterator = directiveMap.values().iterator(); | ||
| 220 | + List<Directive60> pList = new ArrayList<>(); | ||
| 221 | + Directive60 d60; | ||
| 222 | + while(iterator.hasNext()){ | ||
| 223 | + d60 = iterator.next(); | ||
| 224 | + if(!d60.isPersistent()) | ||
| 225 | + pList.add(d60); | ||
| 226 | + } | ||
| 227 | + d60Repository.save(pList); | ||
| 228 | + } | ||
| 229 | + | ||
| 230 | + /** | ||
| 231 | + * | ||
| 232 | + * @Title: clear | ||
| 233 | + * @Description: TODO(清理缓存) | ||
| 234 | + * @throws | ||
| 235 | + */ | ||
| 236 | + public static void clear(){ | ||
| 237 | + transientList = new LinkedList<>(); | ||
| 238 | + directiveMap = new HashMap<>(); | ||
| 239 | + reportMultiMap = ArrayListMultimap.create(); | ||
| 240 | + changeMap = new HashMap<>(); | ||
| 241 | + } | ||
| 208 | } | 242 | } |
src/main/java/com/bsth/vehicle/directive/entity/Directive60.java
| @@ -84,6 +84,9 @@ public class Directive60 { | @@ -84,6 +84,9 @@ public class Directive60 { | ||
| 84 | @ManyToOne | 84 | @ManyToOne |
| 85 | private SysUser sender; | 85 | private SysUser sender; |
| 86 | 86 | ||
| 87 | + @Transient | ||
| 88 | + private boolean persistent; | ||
| 89 | + | ||
| 87 | @Embeddable | 90 | @Embeddable |
| 88 | public static class DirectiveData { | 91 | public static class DirectiveData { |
| 89 | // 公司代码 | 92 | // 公司代码 |
| @@ -280,4 +283,12 @@ public class Directive60 { | @@ -280,4 +283,12 @@ public class Directive60 { | ||
| 280 | public void setSender(SysUser sender) { | 283 | public void setSender(SysUser sender) { |
| 281 | this.sender = sender; | 284 | this.sender = sender; |
| 282 | } | 285 | } |
| 286 | + | ||
| 287 | + public boolean isPersistent() { | ||
| 288 | + return persistent; | ||
| 289 | + } | ||
| 290 | + | ||
| 291 | + public void setPersistent(boolean persistent) { | ||
| 292 | + this.persistent = persistent; | ||
| 293 | + } | ||
| 283 | } | 294 | } |
src/main/java/com/bsth/vehicle/directive/thread/DirectivePersistenceThread.java
| @@ -38,6 +38,7 @@ public class DirectivePersistenceThread extends Thread{ | @@ -38,6 +38,7 @@ public class DirectivePersistenceThread extends Thread{ | ||
| 38 | if(null == directive) | 38 | if(null == directive) |
| 39 | break; | 39 | break; |
| 40 | 40 | ||
| 41 | + directive.setPersistent(true); | ||
| 41 | directiveRepository.save(directive); | 42 | directiveRepository.save(directive); |
| 42 | } | 43 | } |
| 43 | } | 44 | } |
src/main/java/com/bsth/vehicle/directive/thread/FirstScheduleIssuedThread.java
| 1 | package com.bsth.vehicle.directive.thread; | 1 | package com.bsth.vehicle.directive.thread; |
| 2 | 2 | ||
| 3 | import java.util.LinkedList; | 3 | import java.util.LinkedList; |
| 4 | +import java.util.List; | ||
| 4 | import java.util.Set; | 5 | import java.util.Set; |
| 5 | 6 | ||
| 6 | import org.springframework.beans.factory.annotation.Autowired; | 7 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -27,7 +28,25 @@ public class FirstScheduleIssuedThread extends Thread{ | @@ -27,7 +28,25 @@ public class FirstScheduleIssuedThread extends Thread{ | ||
| 27 | @Override | 28 | @Override |
| 28 | public void run() { | 29 | public void run() { |
| 29 | 30 | ||
| 30 | - Set<String> keys = ScheduleBuffer.vehLinkedMap.keySet(); | 31 | + Set<String> keys = ScheduleBuffer.vehSchListMap.keySet(); |
| 32 | + List<ScheduleRealInfo> list; | ||
| 33 | + | ||
| 34 | + Long t = System.currentTimeMillis(); | ||
| 35 | + ScheduleRealInfo sch; | ||
| 36 | + for(String nbbm : keys){ | ||
| 37 | + list = ScheduleBuffer.vehSchListMap.get(nbbm); | ||
| 38 | + | ||
| 39 | + if(list.size() == 0) | ||
| 40 | + continue; | ||
| 41 | + | ||
| 42 | + sch = list.get(0); | ||
| 43 | + | ||
| 44 | + if(sch.getStatus() == 0 && sch.getFcsjT() > t){ | ||
| 45 | + directiveService.send60Dispatch(sch, 0); | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + /*Set<String> keys = ScheduleBuffer.vehLinkedMap.keySet(); | ||
| 31 | LinkedList<ScheduleRealInfo> linkedList; | 50 | LinkedList<ScheduleRealInfo> linkedList; |
| 32 | ScheduleRealInfo sch; | 51 | ScheduleRealInfo sch; |
| 33 | for(String nbbm : keys){ | 52 | for(String nbbm : keys){ |
| @@ -39,6 +58,6 @@ public class FirstScheduleIssuedThread extends Thread{ | @@ -39,6 +58,6 @@ public class FirstScheduleIssuedThread extends Thread{ | ||
| 39 | if(!ScheduleBuffer.finishLinkedMap.containsKey(nbbm) | 58 | if(!ScheduleBuffer.finishLinkedMap.containsKey(nbbm) |
| 40 | && sch.getFcsjActual() == null) | 59 | && sch.getFcsjActual() == null) |
| 41 | directiveService.send60Dispatch(sch, 0); | 60 | directiveService.send60Dispatch(sch, 0); |
| 42 | - } | 61 | + }*/ |
| 43 | } | 62 | } |
| 44 | } | 63 | } |
src/main/java/com/bsth/vehicle/gpsdata/GpsArrivalStationThread.java
| @@ -9,7 +9,6 @@ import java.util.ArrayList; | @@ -9,7 +9,6 @@ import java.util.ArrayList; | ||
| 9 | import java.util.Calendar; | 9 | import java.util.Calendar; |
| 10 | import java.util.Date; | 10 | import java.util.Date; |
| 11 | import java.util.HashSet; | 11 | import java.util.HashSet; |
| 12 | -import java.util.LinkedList; | ||
| 13 | import java.util.List; | 12 | import java.util.List; |
| 14 | import java.util.Set; | 13 | import java.util.Set; |
| 15 | 14 | ||
| @@ -68,18 +67,18 @@ public class GpsArrivalStationThread extends Thread{ | @@ -68,18 +67,18 @@ public class GpsArrivalStationThread extends Thread{ | ||
| 68 | set.add(CommonMapped.vehicDeviceBiMap.get(arr.getDeviceId())); | 67 | set.add(CommonMapped.vehicDeviceBiMap.get(arr.getDeviceId())); |
| 69 | 68 | ||
| 70 | List<ArrivalInfo> rsList = null; | 69 | List<ArrivalInfo> rsList = null; |
| 71 | - LinkedList<ScheduleRealInfo> linked = null; | 70 | + List<ScheduleRealInfo> subList = null; |
| 72 | ArrivalInfo[] status; | 71 | ArrivalInfo[] status; |
| 73 | for(String nbbm : set){ | 72 | for(String nbbm : set){ |
| 74 | rsList = GpsArrivalDataBuffer.pops(nbbm); | 73 | rsList = GpsArrivalDataBuffer.pops(nbbm); |
| 75 | - //和该车辆未执行班次进行匹配 | ||
| 76 | - linked = ScheduleBuffer.vehLinkedMap.get(nbbm); | 74 | + //和该车辆班次进行匹配 |
| 75 | + subList = ScheduleBuffer.vehSchListMap.get(nbbm); | ||
| 77 | 76 | ||
| 78 | - if(null == linked || linked.size() == 0) | 77 | + if(null == subList || subList.size() == 0) |
| 79 | continue; | 78 | continue; |
| 80 | 79 | ||
| 81 | try{ | 80 | try{ |
| 82 | - for(ScheduleRealInfo schedule : linked){ | 81 | + for(ScheduleRealInfo schedule : subList){ |
| 83 | //匹配结果 | 82 | //匹配结果 |
| 84 | status = match(rsList, schedule); | 83 | status = match(rsList, schedule); |
| 85 | 84 |
src/main/java/com/bsth/vehicle/gpsdata/GpsArrivalStationThread_old.java
| @@ -64,7 +64,7 @@ public class GpsArrivalStationThread_old extends Thread{ | @@ -64,7 +64,7 @@ public class GpsArrivalStationThread_old extends Thread{ | ||
| 64 | System.out.println("开始..."); | 64 | System.out.println("开始..."); |
| 65 | List<ScheduleRealInfo> schList; | 65 | List<ScheduleRealInfo> schList; |
| 66 | for(String key : keySet){ | 66 | for(String key : keySet){ |
| 67 | - schList = extractSched(ScheduleBuffer.vehLinkedMap.get(key)); | 67 | + schList = extractSched(ScheduleBuffer.vehSchListMap.get(key)); |
| 68 | if(null != schList) | 68 | if(null != schList) |
| 69 | match(GpsArrivalDataBuffer.allMap.get(key), schList); | 69 | match(GpsArrivalDataBuffer.allMap.get(key), schList); |
| 70 | } | 70 | } |
| @@ -221,8 +221,8 @@ public class GpsArrivalStationThread_old extends Thread{ | @@ -221,8 +221,8 @@ public class GpsArrivalStationThread_old extends Thread{ | ||
| 221 | try { | 221 | try { |
| 222 | conn = DBUtils_MS.getConnection(); | 222 | conn = DBUtils_MS.getConnection(); |
| 223 | ps = conn.prepareStatement(sql); | 223 | ps = conn.prepareStatement(sql); |
| 224 | - ps.setInt(1, /*weeks_year*/28); | ||
| 225 | - ps.setLong(2, /*GpsArrivalDataBuffer.markTime*/1467853749000L); | 224 | + ps.setInt(1, weeks_year); |
| 225 | + ps.setLong(2, GpsArrivalDataBuffer.markTime); | ||
| 226 | 226 | ||
| 227 | Long t = System.currentTimeMillis(); | 227 | Long t = System.currentTimeMillis(); |
| 228 | rs = ps.executeQuery(); | 228 | rs = ps.executeQuery(); |
src/main/java/com/bsth/vehicle/gpsdata/buffer/GpsRealDataBuffer.java
| @@ -3,7 +3,6 @@ package com.bsth.vehicle.gpsdata.buffer; | @@ -3,7 +3,6 @@ package com.bsth.vehicle.gpsdata.buffer; | ||
| 3 | import java.util.ArrayList; | 3 | import java.util.ArrayList; |
| 4 | import java.util.HashMap; | 4 | import java.util.HashMap; |
| 5 | import java.util.Iterator; | 5 | import java.util.Iterator; |
| 6 | -import java.util.LinkedList; | ||
| 7 | import java.util.List; | 6 | import java.util.List; |
| 8 | import java.util.Map; | 7 | import java.util.Map; |
| 9 | import java.util.Set; | 8 | import java.util.Set; |
| @@ -136,15 +135,27 @@ public class GpsRealDataBuffer { | @@ -136,15 +135,27 @@ public class GpsRealDataBuffer { | ||
| 136 | 135 | ||
| 137 | //写入车辆自编号 | 136 | //写入车辆自编号 |
| 138 | String nbbm; | 137 | String nbbm; |
| 139 | - LinkedList<ScheduleRealInfo> linkedList; | ||
| 140 | - int size; | 138 | + ScheduleRealInfo current, next; |
| 141 | for(GpsRealData gpsData : list){ | 139 | for(GpsRealData gpsData : list){ |
| 142 | nbbm = CommonMapped.vehicDeviceBiMap.get(gpsData.getDeviceId()); | 140 | nbbm = CommonMapped.vehicDeviceBiMap.get(gpsData.getDeviceId()); |
| 143 | if(null != nbbm){ | 141 | if(null != nbbm){ |
| 144 | gpsData.setNbbm(nbbm); | 142 | gpsData.setNbbm(nbbm); |
| 145 | gpsData.setStationName(CommonMapped.stationCodeMap.get(gpsData.getStopNo())); | 143 | gpsData.setStationName(CommonMapped.stationCodeMap.get(gpsData.getStopNo())); |
| 146 | 144 | ||
| 147 | - linkedList = ScheduleBuffer.vehLinkedMap.get(nbbm); | 145 | + current = ScheduleBuffer.findCurrent(nbbm); |
| 146 | + next = ScheduleBuffer.getNext(current); | ||
| 147 | + | ||
| 148 | + if(current != null) | ||
| 149 | + gpsData.setCurrSchId(current.getId()); | ||
| 150 | + if(next != null) | ||
| 151 | + gpsData.setNextSchId(next.getId()); | ||
| 152 | + //gpsData.setCurrSchId(ScheduleBuffer.findCurrent(nbbm)); | ||
| 153 | + /*subList = ScheduleBuffer.vehSchListMap.get(nbbm); | ||
| 154 | + if(subList.size() == 0) | ||
| 155 | + continue;*/ | ||
| 156 | + | ||
| 157 | + | ||
| 158 | + /*linkedList = ScheduleBuffer.vehLinkedMap.get(nbbm); | ||
| 148 | if(null != linkedList){ | 159 | if(null != linkedList){ |
| 149 | //为GPS点附加班次信息 | 160 | //为GPS点附加班次信息 |
| 150 | size = linkedList.size(); | 161 | size = linkedList.size(); |
| @@ -152,7 +163,7 @@ public class GpsRealDataBuffer { | @@ -152,7 +163,7 @@ public class GpsRealDataBuffer { | ||
| 152 | gpsData.setCurrSchId(linkedList.peekFirst().getId()); | 163 | gpsData.setCurrSchId(linkedList.peekFirst().getId()); |
| 153 | if(size > 1) | 164 | if(size > 1) |
| 154 | gpsData.setNextSchId(linkedList.get(1).getId()); | 165 | gpsData.setNextSchId(linkedList.get(1).getId()); |
| 155 | - } | 166 | + }*/ |
| 156 | resList.add(gpsData); | 167 | resList.add(gpsData); |
| 157 | } | 168 | } |
| 158 | } | 169 | } |
src/main/resources/static/pages/control/line/child_pages/child_task.html
| @@ -189,7 +189,7 @@ $(function(){ | @@ -189,7 +189,7 @@ $(function(){ | ||
| 189 | 189 | ||
| 190 | //显示班次详细 | 190 | //显示班次详细 |
| 191 | $.each(this.cells, function(i,cell){ | 191 | $.each(this.cells, function(i,cell){ |
| 192 | - $('#mainDetailPabel input[data-cell='+i+']').val($(cell).text()); | 192 | + $('#mainDetailPabel input[data-cell='+i+']').val($.trim($(cell).text())); |
| 193 | }); | 193 | }); |
| 194 | if(!changeHandlerPanel(this)) | 194 | if(!changeHandlerPanel(this)) |
| 195 | return; | 195 | return; |
| @@ -284,7 +284,7 @@ $(function(){ | @@ -284,7 +284,7 @@ $(function(){ | ||
| 284 | var cont = $('.custom-table-panel'); | 284 | var cont = $('.custom-table-panel'); |
| 285 | cont.animate({ | 285 | cont.animate({ |
| 286 | scrollTop: $tr.offset().top - cont.offset().top + $tr.scrollTop() - 36 * 4 | 286 | scrollTop: $tr.offset().top - cont.offset().top + $tr.scrollTop() - 36 * 4 |
| 287 | - }, 500); | 287 | + }, 500); |
| 288 | 288 | ||
| 289 | }, 100); | 289 | }, 100); |
| 290 | }); | 290 | }); |
| @@ -381,6 +381,18 @@ $(function(){ | @@ -381,6 +381,18 @@ $(function(){ | ||
| 381 | $(this).show(); | 381 | $(this).show(); |
| 382 | $('input.no', schAddPanel).val($(tr.cells[0]).text()); | 382 | $('input.no', schAddPanel).val($(tr.cells[0]).text()); |
| 383 | $('select[name=xlDir]', schAddPanel).trigger('change'); | 383 | $('select[name=xlDir]', schAddPanel).trigger('change'); |
| 384 | + //当前表格第一条数据 data-type="empty" | ||
| 385 | + var $tr = $('.mainTable tr[data-id]', '#childTaskDiv').eq(0); | ||
| 386 | + if($tr.length > 0){ | ||
| 387 | + var sch = _data.getSchedulById($tr.data('id')); | ||
| 388 | + console.log(sch); | ||
| 389 | + //默认车辆 | ||
| 390 | + $('select[name=clZbh]', schAddPanel).val(sch.clZbh).trigger('change'); | ||
| 391 | + //默认驾驶员 | ||
| 392 | + $('select[name=jGh]', schAddPanel).val(sch.jGh + '/' + sch.jName).trigger('change'); | ||
| 393 | + //默认售票员 | ||
| 394 | + $('select[name=sGh]', schAddPanel).val(sch.sGh + '/' + sch.sName).trigger('change'); | ||
| 395 | + } | ||
| 384 | }); | 396 | }); |
| 385 | //切换上下行 | 397 | //切换上下行 |
| 386 | $(schAddPanel).on('change', 'select[name=xlDir]', function(){ | 398 | $(schAddPanel).on('change', 'select[name=xlDir]', function(){ |
| @@ -454,7 +466,8 @@ $(function(){ | @@ -454,7 +466,8 @@ $(function(){ | ||
| 454 | _data.updateSchedule(ups[i]); | 466 | _data.updateSchedule(ups[i]); |
| 455 | } */ | 467 | } */ |
| 456 | //刷新表格 | 468 | //刷新表格 |
| 457 | - _alone.addScheduleToTable(sch); | 469 | + //_alone.updateTableBySch(sch); |
| 470 | + _alone.update2Table(sch.xlBm, sch); | ||
| 458 | 471 | ||
| 459 | //关闭弹出层 | 472 | //关闭弹出层 |
| 460 | layer.closeAll(); | 473 | layer.closeAll(); |
src/main/resources/static/pages/control/line/child_pages/outgo_adjust_all.html
| @@ -122,7 +122,6 @@ | @@ -122,7 +122,6 @@ | ||
| 122 | //线路下拉框 | 122 | //线路下拉框 |
| 123 | var data = []; | 123 | var data = []; |
| 124 | lineCodeMaps = _data.getLineIds(); | 124 | lineCodeMaps = _data.getLineIds(); |
| 125 | - console.log(lineCodeMaps); | ||
| 126 | for(var line in lineCodeMaps){ | 125 | for(var line in lineCodeMaps){ |
| 127 | data.push({id: line, text: lineCodeMaps[line]}); | 126 | data.push({id: line, text: lineCodeMaps[line]}); |
| 128 | } | 127 | } |
| @@ -196,17 +195,35 @@ | @@ -196,17 +195,35 @@ | ||
| 196 | $(e).removeClass('custom-val-error'); | 195 | $(e).removeClass('custom-val-error'); |
| 197 | 196 | ||
| 198 | if(old != t) | 197 | if(old != t) |
| 199 | - changes.push({old: old, t: t}); | 198 | + changes.push({old: old, t: t, id: $(e).parents('tr').data('id')}); |
| 200 | } | 199 | } |
| 201 | 200 | ||
| 202 | var text = template('outgo_adjust_change_text_temp', {list: changes}); | 201 | var text = template('outgo_adjust_change_text_temp', {list: changes}); |
| 203 | layer.confirm(text, { | 202 | layer.confirm(text, { |
| 204 | btn: ['确认调整','取消'],title:'待发调整确认' | 203 | btn: ['确认调整','取消'],title:'待发调整确认' |
| 205 | }, function(){ | 204 | }, function(){ |
| 206 | - layer.msg('确认调整', {icon: 1}); | 205 | + $.ajax({ |
| 206 | + url: '/realSchedule/outgoAdjustAll', | ||
| 207 | + type: 'post', | ||
| 208 | + data: {params: JSON.stringify(changes)}, | ||
| 209 | + success:function(rs){ | ||
| 210 | + if(rs.status == 'SUCCESS' && rs.t){ | ||
| 211 | + layer.closeAll(); | ||
| 212 | + layer.msg('调整成功!', {icon: 1}); | ||
| 213 | + //刷新表格 | ||
| 214 | + _alone.update2Table(rs.t.xlBm); | ||
| 215 | + } | ||
| 216 | + }, | ||
| 217 | + error: errorHandle | ||
| 218 | + }); | ||
| 207 | }); | 219 | }); |
| 208 | }); | 220 | }); |
| 209 | }); | 221 | }); |
| 222 | + | ||
| 223 | + | ||
| 224 | + function errorHandle(){ | ||
| 225 | + layer.alert('服务器出现异常!', {icon: 2, title: '操作失败'}); | ||
| 226 | + } | ||
| 210 | }(); | 227 | }(); |
| 211 | </script> | 228 | </script> |
| 212 | </div> | 229 | </div> |
| 213 | \ No newline at end of file | 230 | \ No newline at end of file |
src/main/resources/static/pages/control/line/css/lineControl.css
| @@ -2009,7 +2009,8 @@ span.log-item-handle a { | @@ -2009,7 +2009,8 @@ span.log-item-handle a { | ||
| 2009 | .log-item.fache { | 2009 | .log-item.fache { |
| 2010 | } | 2010 | } |
| 2011 | 2011 | ||
| 2012 | -.in-badge, .out-badge { | 2012 | +.in-badge, .out-badge, |
| 2013 | +span.blue-badge { | ||
| 2013 | font-size: 13px; | 2014 | font-size: 13px; |
| 2014 | margin-left: 2px; | 2015 | margin-left: 2px; |
| 2015 | padding: 2px 4px; | 2016 | padding: 2px 4px; |
| @@ -2017,6 +2018,16 @@ span.log-item-handle a { | @@ -2017,6 +2018,16 @@ span.log-item-handle a { | ||
| 2017 | display: inline-block; | 2018 | display: inline-block; |
| 2018 | } | 2019 | } |
| 2019 | 2020 | ||
| 2021 | +span.blue-badge{ | ||
| 2022 | + background: #7cccaa; | ||
| 2023 | + color: white; | ||
| 2024 | +} | ||
| 2025 | + | ||
| 2026 | +tr._active .blue-badge{ | ||
| 2027 | + background: #ffffff; | ||
| 2028 | + color: #3c973c; | ||
| 2029 | +} | ||
| 2030 | + | ||
| 2020 | .out-badge{ | 2031 | .out-badge{ |
| 2021 | background: #59d8e3; | 2032 | background: #59d8e3; |
| 2022 | color: white; | 2033 | color: white; |
| @@ -2125,37 +2136,51 @@ span.log-item-handle a { | @@ -2125,37 +2136,51 @@ span.log-item-handle a { | ||
| 2125 | color: white; | 2136 | color: white; |
| 2126 | } | 2137 | } |
| 2127 | 2138 | ||
| 2128 | -.tab_line .panel-wrap ._panel ._body .pb-table tr._tr_active.active-line-no a{ | ||
| 2129 | - color: #afafaf; | 2139 | +.tab_line .panel-wrap ._panel ._body .pb-table tr._tr_active.active-line-no a, |
| 2140 | +.pb-table tr.selected.dir_0 a, | ||
| 2141 | +.pb-table tr.selected.dir_1 a{ | ||
| 2142 | + color: #afafaf !important; | ||
| 2130 | } | 2143 | } |
| 2131 | 2144 | ||
| 2132 | .tab_line .pb-table tr._tr_active.active-line-no a.remarks-popover{ | 2145 | .tab_line .pb-table tr._tr_active.active-line-no a.remarks-popover{ |
| 2133 | color: #bebebe; | 2146 | color: #bebebe; |
| 2134 | } | 2147 | } |
| 2135 | 2148 | ||
| 2136 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-qrlb{ | 2149 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-qrlb, |
| 2150 | +.pb-table tr.selected.dir_0 td.tl-qrlb, | ||
| 2151 | +.pb-table tr.selected.dir_1 td.tl-qrlb{ | ||
| 2137 | background: none; | 2152 | background: none; |
| 2138 | color: #ff796a; | 2153 | color: #ff796a; |
| 2139 | } | 2154 | } |
| 2140 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-zzzx{ | 2155 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-zzzx, |
| 2156 | +.pb-table tr.selected.dir_0 td.tl-zzzx, | ||
| 2157 | +.pb-table tr.selected.dir_1 td.tl-zzzx{ | ||
| 2141 | background: none; | 2158 | background: none; |
| 2142 | color: #5ae35a; | 2159 | color: #5ae35a; |
| 2143 | } | 2160 | } |
| 2144 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-yzx{ | 2161 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-yzx, |
| 2162 | +.pb-table tr.selected.dir_0 td.tl-yzx, | ||
| 2163 | +.pb-table tr.selected.dir_1 td.tl-yzx{ | ||
| 2145 | background: none; | 2164 | background: none; |
| 2146 | color: #80c8fa; | 2165 | color: #80c8fa; |
| 2147 | } | 2166 | } |
| 2148 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxfc{ | 2167 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxfc, |
| 2168 | +.pb-table tr.selected.dir_0 td.tl-xxfc, | ||
| 2169 | +.pb-table tr.selected.dir_1 td.tl-xxfc{ | ||
| 2149 | background: none; | 2170 | background: none; |
| 2150 | color: #a16dff; | 2171 | color: #a16dff; |
| 2151 | } | 2172 | } |
| 2152 | 2173 | ||
| 2153 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxsd{ | 2174 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxsd, |
| 2175 | +.pb-table tr.selected.dir_0 td.tl-xxsd, | ||
| 2176 | +.pb-table tr.selected.dir_1 td.tl-xxsd{ | ||
| 2154 | background: none; | 2177 | background: none; |
| 2155 | color: #ffb193; | 2178 | color: #ffb193; |
| 2156 | } | 2179 | } |
| 2157 | 2180 | ||
| 2158 | -.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxrd{ | 2181 | +.tab_line .pb-table tr._tr_active.active-line-no td.tl-xxrd, |
| 2182 | +.pb-table tr.selected.dir_0 td.tl-xxrd, | ||
| 2183 | +.pb-table tr.selected.dir_1 td.tl-xxrd{ | ||
| 2159 | background: none; | 2184 | background: none; |
| 2160 | color: #5cb0e9; | 2185 | color: #5cb0e9; |
| 2161 | } | 2186 | } |
| @@ -2250,3 +2275,11 @@ tr._tr_active.active-line-no .out-badge{ | @@ -2250,3 +2275,11 @@ tr._tr_active.active-line-no .out-badge{ | ||
| 2250 | .change-confirm-text i{ | 2275 | .change-confirm-text i{ |
| 2251 | color: #46c146; | 2276 | color: #46c146; |
| 2252 | } | 2277 | } |
| 2278 | + | ||
| 2279 | +.pb-table tr.selected.dir_0{ | ||
| 2280 | + background-color: #5d5da9 !important; | ||
| 2281 | +} | ||
| 2282 | + | ||
| 2283 | +.pb-table tr.selected.dir_1{ | ||
| 2284 | + background-color: #dc5a5a !important; | ||
| 2285 | +} | ||
| 2253 | \ No newline at end of file | 2286 | \ No newline at end of file |
src/main/resources/static/pages/control/line/js/alone.js
| @@ -73,8 +73,8 @@ var _alone = (function(){ | @@ -73,8 +73,8 @@ var _alone = (function(){ | ||
| 73 | var table = $('tr[data-id='+array[0].id+']').parents('table')[0]; | 73 | var table = $('tr[data-id='+array[0].id+']').parents('table')[0]; |
| 74 | calculateLineNo(table); | 74 | calculateLineNo(table); |
| 75 | }, | 75 | }, |
| 76 | - //添加一个班次到表格 | ||
| 77 | - addScheduleToTable: function(schedule){ | 76 | + //将班次所在的表格做全量更新 |
| 77 | + updateTableBySch: function(schedule){ | ||
| 78 | //将该线路走向班次 全部从服务器同步一次 | 78 | //将该线路走向班次 全部从服务器同步一次 |
| 79 | var xlDir = schedule.xlDir, xlBm = schedule.xlBm; | 79 | var xlDir = schedule.xlDir, xlBm = schedule.xlBm; |
| 80 | $.get('/realSchedule/findByLineAndUpDown', {line: xlBm, upDown: xlDir} | 80 | $.get('/realSchedule/findByLineAndUpDown', {line: xlBm, upDown: xlDir} |
| @@ -103,6 +103,35 @@ var _alone = (function(){ | @@ -103,6 +103,35 @@ var _alone = (function(){ | ||
| 103 | currTr.parents('._body').slimScroll({ scrollTo: top + 'px' }); | 103 | currTr.parents('._body').slimScroll({ scrollTo: top + 'px' }); |
| 104 | }); | 104 | }); |
| 105 | }, | 105 | }, |
| 106 | + update2Table: function(xlBm, schedule){ | ||
| 107 | + //上行 | ||
| 108 | + $.get('/realSchedule/lineCode/' + xlBm, function(array){ | ||
| 109 | + //加入_data缓存 | ||
| 110 | + $.each(array, function(){ | ||
| 111 | + _data.pushSchedule(this); | ||
| 112 | + }); | ||
| 113 | + | ||
| 114 | + var rs = splitDir(array) | ||
| 115 | + ,tab = $('#tab_line_' + xlBm) | ||
| 116 | + ,half = tab.find('._body').height() / 2; | ||
| 117 | + //填充表格数据 | ||
| 118 | + calculateLineNo( | ||
| 119 | + //上行 | ||
| 120 | + tab.find('table[data-type=up] tbody').html(template('alone_plan_table_temp', {list: rs.up}))[0] | ||
| 121 | + ); | ||
| 122 | + calculateLineNo( | ||
| 123 | + //下行 | ||
| 124 | + tab.find('table[data-type=down] tbody').html(template('alone_plan_table_temp', {list: rs.down}))[0] | ||
| 125 | + ); | ||
| 126 | + //定位到指定的班次 | ||
| 127 | + var currTr = tab.find('tr[data-id='+schedule.id+']') | ||
| 128 | + ,top = parseInt(currTr.find('td[name=lineNo]').text()) * 37 - half; | ||
| 129 | + | ||
| 130 | + top = top>0?top:0; | ||
| 131 | + currTr.addClass('anim-delay animated flash'); | ||
| 132 | + currTr.parents('._body').slimScroll({ scrollTo: top + 'px' }); | ||
| 133 | + }); | ||
| 134 | + }, | ||
| 106 | //重新计算行号 | 135 | //重新计算行号 |
| 107 | calculateLineNo: calculateLineNo | 136 | calculateLineNo: calculateLineNo |
| 108 | } | 137 | } |
src/main/resources/static/pages/control/line/js/data.js
| @@ -23,17 +23,36 @@ var _data = (function(){ | @@ -23,17 +23,36 @@ var _data = (function(){ | ||
| 23 | //线路标准信息 | 23 | //线路标准信息 |
| 24 | var lineInformations = {}; | 24 | var lineInformations = {}; |
| 25 | //车辆和班次数组映射 | 25 | //车辆和班次数组映射 |
| 26 | - var clSchMap = {}; | 26 | + //var clSchMap = {}; |
| 27 | 27 | ||
| 28 | //车辆自编号和设备号对照 | 28 | //车辆自编号和设备号对照 |
| 29 | var carDeviceIdMapp = {}; | 29 | var carDeviceIdMapp = {}; |
| 30 | 30 | ||
| 31 | + var fcsjSort = function(a, b){ | ||
| 32 | + return a.fcsjT - b.fcsjT; | ||
| 33 | + } | ||
| 34 | + | ||
| 31 | var dataObject = { | 35 | var dataObject = { |
| 32 | /*//班次发车 | 36 | /*//班次发车 |
| 33 | setFcsj: function(schId, fcsj, fcsjT){ | 37 | setFcsj: function(schId, fcsj, fcsjT){ |
| 34 | schedules[schId].fcsjActual = fcsj; | 38 | schedules[schId].fcsjActual = fcsj; |
| 35 | schedules[schId].fcsjActualTime = fcsjT; | 39 | schedules[schId].fcsjActualTime = fcsjT; |
| 36 | },*/ | 40 | },*/ |
| 41 | + //根据线路编码获取上行和下行班次 | ||
| 42 | + /*findByLineAll: function(xlbm){ | ||
| 43 | + var array = [],sch; | ||
| 44 | + for(var id in schedules){ | ||
| 45 | + sch = schedules[id]; | ||
| 46 | + if(sch.xlBm == xlbm) | ||
| 47 | + array.push(e); | ||
| 48 | + } | ||
| 49 | + //排序 | ||
| 50 | + array.sort(function(a, b){ | ||
| 51 | + return a.fcsjT - b.fcsjT; | ||
| 52 | + }); | ||
| 53 | + | ||
| 54 | + return array; | ||
| 55 | + },*/ | ||
| 37 | //根据线路和上下行获取计划排班 | 56 | //根据线路和上下行获取计划排班 |
| 38 | findSchByLine: function(xlbm, upDown){ | 57 | findSchByLine: function(xlbm, upDown){ |
| 39 | var array = []; | 58 | var array = []; |
| @@ -46,15 +65,22 @@ var _data = (function(){ | @@ -46,15 +65,22 @@ var _data = (function(){ | ||
| 46 | } | 65 | } |
| 47 | } | 66 | } |
| 48 | //排序 | 67 | //排序 |
| 49 | - array.sort(function(a, b){ | ||
| 50 | - return a.fcsjT - b.fcsjT; | ||
| 51 | - }); | 68 | + array.sort(fcsjSort); |
| 52 | 69 | ||
| 53 | return array; | 70 | return array; |
| 54 | }, | 71 | }, |
| 55 | //根据车辆获取班次数组 | 72 | //根据车辆获取班次数组 |
| 56 | findByCl: function(nbbm){ | 73 | findByCl: function(nbbm){ |
| 57 | - return clSchMap[nbbm]; | 74 | + var array = []; |
| 75 | + for(var id in schedules){ | ||
| 76 | + sch = schedules[id]; | ||
| 77 | + if(sch.clZbh == nbbm) | ||
| 78 | + array.push(sch); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + //排序 | ||
| 82 | + array.sort(fcsjSort); | ||
| 83 | + return array; | ||
| 58 | }, | 84 | }, |
| 59 | //添加一个班次 | 85 | //添加一个班次 |
| 60 | pushSchedule: function(sch){ | 86 | pushSchedule: function(sch){ |
| @@ -133,9 +159,9 @@ var _data = (function(){ | @@ -133,9 +159,9 @@ var _data = (function(){ | ||
| 133 | lineLpMap[lineCode][this.lpName] = []; | 159 | lineLpMap[lineCode][this.lpName] = []; |
| 134 | lineLpMap[lineCode][this.lpName].push(this); | 160 | lineLpMap[lineCode][this.lpName].push(this); |
| 135 | //车辆 ——> 班次数组 | 161 | //车辆 ——> 班次数组 |
| 136 | - if(!clSchMap[this.clZbh]) | 162 | + /*if(!clSchMap[this.clZbh]) |
| 137 | clSchMap[this.clZbh] = []; | 163 | clSchMap[this.clZbh] = []; |
| 138 | - clSchMap[this.clZbh].push(this); | 164 | + clSchMap[this.clZbh].push(this);*/ |
| 139 | }); | 165 | }); |
| 140 | 166 | ||
| 141 | //按发车时间排序 | 167 | //按发车时间排序 |
| @@ -161,9 +187,7 @@ var _data = (function(){ | @@ -161,9 +187,7 @@ var _data = (function(){ | ||
| 161 | } | 187 | } |
| 162 | 188 | ||
| 163 | //排序 | 189 | //排序 |
| 164 | - array.sort(function(a, b){ | ||
| 165 | - return a.fcsjT - b.fcsjT; | ||
| 166 | - }); | 190 | + array.sort(fcsjSort); |
| 167 | return array; | 191 | return array; |
| 168 | }, | 192 | }, |
| 169 | //根据设备号获取GPS | 193 | //根据设备号获取GPS |
src/main/resources/static/pages/control/line/js/rightMenu.js
| @@ -31,7 +31,7 @@ var _menu = (function() { | @@ -31,7 +31,7 @@ var _menu = (function() { | ||
| 31 | 31 | ||
| 32 | // 表格右键呼出菜单 | 32 | // 表格右键呼出菜单 |
| 33 | var ac = 'active-menu' | 33 | var ac = 'active-menu' |
| 34 | - ,items = '.pb-table.data tr td[name!=lineNo]'; | 34 | + ,items = '.pb-table.data tr td[name!=lineNo][data-name!=lpName]'; |
| 35 | $('.portlet-fullscreen').on('contextmenu', items, | 35 | $('.portlet-fullscreen').on('contextmenu', items, |
| 36 | function(e) { | 36 | function(e) { |
| 37 | e.preventDefault(); | 37 | e.preventDefault(); |
| @@ -83,6 +83,20 @@ var _menu = (function() { | @@ -83,6 +83,20 @@ var _menu = (function() { | ||
| 83 | 83 | ||
| 84 | }); | 84 | }); |
| 85 | 85 | ||
| 86 | + //点击路牌 | ||
| 87 | + var lps = '.pb-table.data tr td[data-name=lpName]'; | ||
| 88 | + $('.portlet-fullscreen').on('click', lps, function(e){ | ||
| 89 | + var lp = $(this).text(); | ||
| 90 | + layer.msg('高亮路牌:' + lp + '',{offset: 'ct', shift : 5}); | ||
| 91 | + var lineCode = $(this).parents('.tab-pane').data('id'); | ||
| 92 | + var schArray = _data.getLineLpMap()[lineCode][lp]; | ||
| 93 | + | ||
| 94 | + resetAllState(); | ||
| 95 | + $.each(schArray, function(){ | ||
| 96 | + $('.pb-table tr[data-id='+this.id+']').addClass('selected dir_' + this.xlDir); | ||
| 97 | + }); | ||
| 98 | + }); | ||
| 99 | + | ||
| 86 | function selectOneRow(firstCell){ | 100 | function selectOneRow(firstCell){ |
| 87 | return $(firstCell).addClass('selected').parent().addClass('_tr_active active-line-no'); | 101 | return $(firstCell).addClass('selected').parent().addClass('_tr_active active-line-no'); |
| 88 | } | 102 | } |
| @@ -97,11 +111,11 @@ var _menu = (function() { | @@ -97,11 +111,11 @@ var _menu = (function() { | ||
| 97 | tips: [2, '#709d94'],shift:5, time: 5000 | 111 | tips: [2, '#709d94'],shift:5, time: 5000 |
| 98 | }); | 112 | }); |
| 99 | }); | 113 | }); |
| 100 | - | 114 | +/* |
| 101 | $('.portlet-fullscreen').on('dbclick', 'table.pb-table .sfsj-item', function(){ | 115 | $('.portlet-fullscreen').on('dbclick', 'table.pb-table .sfsj-item', function(){ |
| 102 | alert(11); | 116 | alert(11); |
| 103 | }); | 117 | }); |
| 104 | - | 118 | +*/ |
| 105 | //选中关联班次 | 119 | //选中关联班次 |
| 106 | function selCognateSch($ctr){ | 120 | function selCognateSch($ctr){ |
| 107 | //选中关联班次 | 121 | //选中关联班次 |
| @@ -110,6 +124,7 @@ var _menu = (function() { | @@ -110,6 +124,7 @@ var _menu = (function() { | ||
| 110 | ,sch = _data.getSchedulById(schId); | 124 | ,sch = _data.getSchedulById(schId); |
| 111 | 125 | ||
| 112 | var scroll = false; | 126 | var scroll = false; |
| 127 | + console.log(_data.findByCl(clnbbm)); | ||
| 113 | $.each(_data.findByCl(clnbbm), function(){ | 128 | $.each(_data.findByCl(clnbbm), function(){ |
| 114 | if(scroll){ | 129 | if(scroll){ |
| 115 | var nextTr = $('tr[data-id='+this.id+']'); | 130 | var nextTr = $('tr[data-id='+this.id+']'); |
| @@ -122,8 +137,11 @@ var _menu = (function() { | @@ -122,8 +137,11 @@ var _menu = (function() { | ||
| 122 | } | 137 | } |
| 123 | scroll = false; | 138 | scroll = false; |
| 124 | nextTr.addClass('next-sch'); | 139 | nextTr.addClass('next-sch'); |
| 140 | + | ||
| 141 | + $('.pb-table tr[data-id='+this.id+']').addClass('selected'); | ||
| 142 | + return false; | ||
| 125 | } | 143 | } |
| 126 | - $('.pb-table tr[data-id='+this.id+']').addClass('selected'); | 144 | + //$('.pb-table tr[data-id='+this.id+']').addClass('selected'); |
| 127 | if(this.id == schId) | 145 | if(this.id == schId) |
| 128 | scroll = true; | 146 | scroll = true; |
| 129 | }); | 147 | }); |
| @@ -134,6 +152,8 @@ var _menu = (function() { | @@ -134,6 +152,8 @@ var _menu = (function() { | ||
| 134 | $('.pb-table tr td.' + ac).removeClass(ac); | 152 | $('.pb-table tr td.' + ac).removeClass(ac); |
| 135 | $('.pb-table tr.selected').removeClass('selected'); | 153 | $('.pb-table tr.selected').removeClass('selected'); |
| 136 | $('.pb-table tr.next-sch').removeClass('next-sch'); | 154 | $('.pb-table tr.next-sch').removeClass('next-sch'); |
| 155 | + $('.pb-table tr.dir_0').removeClass('dir_0'); | ||
| 156 | + $('.pb-table tr.dir_1').removeClass('dir_1'); | ||
| 137 | if(layerTip){ | 157 | if(layerTip){ |
| 138 | layer.close(layerTip); | 158 | layer.close(layerTip); |
| 139 | layerTip = null; | 159 | layerTip = null; |
| @@ -142,6 +162,8 @@ var _menu = (function() { | @@ -142,6 +162,8 @@ var _menu = (function() { | ||
| 142 | function resetAllState(){ | 162 | function resetAllState(){ |
| 143 | $('.pb-table tr td.' + ac).removeClass(ac); | 163 | $('.pb-table tr td.' + ac).removeClass(ac); |
| 144 | $('.pb-table tr.selected').removeClass('selected'); | 164 | $('.pb-table tr.selected').removeClass('selected'); |
| 165 | + $('.pb-table tr.dir_0').removeClass('dir_0'); | ||
| 166 | + $('.pb-table tr.dir_1').removeClass('dir_1'); | ||
| 145 | $('.pb-table tr._tr_active').removeClass('_tr_active active-line-no'); | 167 | $('.pb-table tr._tr_active').removeClass('_tr_active active-line-no'); |
| 146 | $('.pb-table tr.next-sch').removeClass('next-sch'); | 168 | $('.pb-table tr.next-sch').removeClass('next-sch'); |
| 147 | $('.pb-table.data tr td.selected[name=lineNo]').removeClass('selected'); | 169 | $('.pb-table.data tr td.selected[name=lineNo]').removeClass('selected'); |
| @@ -223,7 +245,18 @@ var _menu = (function() { | @@ -223,7 +245,18 @@ var _menu = (function() { | ||
| 223 | }, | 245 | }, |
| 224 | //计划烂班 | 246 | //计划烂班 |
| 225 | planDestroy: function(schedul){ | 247 | planDestroy: function(schedul){ |
| 226 | - var data = {item: schedul, array : _data.getSchedulByVeh(schedul.clZbh)} | 248 | + /*if(schedul.status == -1){ |
| 249 | + layer.alert('不能重复烂班!', {icon: 2, title: '提示', shift: 5}); | ||
| 250 | + return; | ||
| 251 | + }*/ | ||
| 252 | + var array = []; | ||
| 253 | + //获取未烂班的班次 | ||
| 254 | + $.each(_data.getSchedulByVeh(schedul.clZbh),function(){ | ||
| 255 | + if(this.status != -1) | ||
| 256 | + array.push(this); | ||
| 257 | + }); | ||
| 258 | + | ||
| 259 | + var data = {item: schedul, array : array} | ||
| 227 | var index = layer.open({ | 260 | var index = layer.open({ |
| 228 | type: 1, | 261 | type: 1, |
| 229 | area: ['370px', '645px'], | 262 | area: ['370px', '645px'], |
| @@ -507,6 +540,9 @@ var _menu = (function() { | @@ -507,6 +540,9 @@ var _menu = (function() { | ||
| 507 | layer.close(index); | 540 | layer.close(index); |
| 508 | if(rs.t) | 541 | if(rs.t) |
| 509 | _alone.refreshSchedule(rs.t); | 542 | _alone.refreshSchedule(rs.t); |
| 543 | + | ||
| 544 | + if(rs.nextSch) | ||
| 545 | + _alone.refreshSchedule(rs.nextSch); | ||
| 510 | }); | 546 | }); |
| 511 | }); | 547 | }); |
| 512 | } | 548 | } |
src/main/resources/static/pages/control/line/temps/alone_tp.html
| @@ -293,7 +293,7 @@ | @@ -293,7 +293,7 @@ | ||
| 293 | {{each array as obj i}} | 293 | {{each array as obj i}} |
| 294 | <label> | 294 | <label> |
| 295 | <div class="checker"> | 295 | <div class="checker"> |
| 296 | - <span><input type="checkbox" value={{obj.id}} name="ids[]" class="icheck" {{if obj.dfsj==item.dfsj}}checked{{/if}}></span></div> {{obj.dfsj}} | 296 | + <span><input type="checkbox" value={{obj.id}} name="ids[]" class="icheck" {{if obj.id==item.id}}checked{{/if}}></span></div> {{obj.dfsj}} |
| 297 | </label> | 297 | </label> |
| 298 | {{/each}} | 298 | {{/each}} |
| 299 | </div> | 299 | </div> |
src/main/resources/static/pages/control/line/temps/child_task_case_tp.html
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | <script id="child_task_main_table_temp" type="text/html"> | 3 | <script id="child_task_main_table_temp" type="text/html"> |
| 4 | {{each list as item i}} | 4 | {{each list as item i}} |
| 5 | {{if item == null}} | 5 | {{if item == null}} |
| 6 | - <tr class="empty"> | 6 | + <tr class="empty" data-type="empty"> |
| 7 | <td width="5%" >{{i + 1}}</td> | 7 | <td width="5%" >{{i + 1}}</td> |
| 8 | <td width="9%" ></td> | 8 | <td width="9%" ></td> |
| 9 | <td width="9%" ></td> | 9 | <td width="9%" ></td> |
| @@ -17,7 +17,10 @@ | @@ -17,7 +17,10 @@ | ||
| 17 | {{else}} | 17 | {{else}} |
| 18 | <tr data-id="{{item.id}}" > | 18 | <tr data-id="{{item.id}}" > |
| 19 | <td width="5%" >{{i + 1}}</td> | 19 | <td width="5%" >{{i + 1}}</td> |
| 20 | - <td width="9%" >{{item.fcsj}}</td> | 20 | + <td width="9%" > |
| 21 | + {{if item.fcsjActual != null}}{{item.fcsjActual}}<span class="blue-badge">实</span>{{else}}{{item.dfsj}} | ||
| 22 | + {{/if}} | ||
| 23 | + </td> | ||
| 21 | <td width="9%" >{{item.zdsj}}</td> | 24 | <td width="9%" >{{item.zdsj}}</td> |
| 22 | <td width="14%" >{{item.qdzName}}</td> | 25 | <td width="14%" >{{item.qdzName}}</td> |
| 23 | <td width="14%" >{{item.zdzName}}</td> | 26 | <td width="14%" >{{item.zdzName}}</td> |