Commit a073eb241e12b6fb54d10745388ee9651505a5f2
Merge branch 'master' of http://222.66.0.204:8090/panzhaov5/bsth_control
Showing
36 changed files
with
958 additions
and
190 deletions
src/main/java/com/bsth/StartCommand.java
| @@ -4,6 +4,7 @@ package com.bsth; | @@ -4,6 +4,7 @@ package com.bsth; | ||
| 4 | import com.bsth.security.SecurityMetadataSourceService; | 4 | import com.bsth.security.SecurityMetadataSourceService; |
| 5 | import com.bsth.service.realcontrol.buffer.GetSchedulePlanThread; | 5 | import com.bsth.service.realcontrol.buffer.GetSchedulePlanThread; |
| 6 | import com.bsth.service.realcontrol.buffer.SchedulePersistenceThread; | 6 | import com.bsth.service.realcontrol.buffer.SchedulePersistenceThread; |
| 7 | +import com.bsth.util.DateUtils; | ||
| 7 | import com.bsth.vehicle.common.CommonRefreshThread; | 8 | import com.bsth.vehicle.common.CommonRefreshThread; |
| 8 | import com.bsth.vehicle.directive.thread.DirectivePersistenceThread; | 9 | import com.bsth.vehicle.directive.thread.DirectivePersistenceThread; |
| 9 | import com.bsth.vehicle.directive.thread.FirstScheduleIssuedThread; | 10 | import com.bsth.vehicle.directive.thread.FirstScheduleIssuedThread; |
| @@ -63,13 +64,15 @@ public class StartCommand implements CommandLineRunner{ | @@ -63,13 +64,15 @@ public class StartCommand implements CommandLineRunner{ | ||
| 63 | * GPS实时数据更新 线程 | 64 | * GPS实时数据更新 线程 |
| 64 | * 每8秒和网关HTTP接口同步一次 | 65 | * 每8秒和网关HTTP接口同步一次 |
| 65 | */ | 66 | */ |
| 66 | - //scheduler.scheduleWithFixedDelay(gpsRefreshThread, 0, 8, TimeUnit.SECONDS); | 67 | + scheduler.scheduleWithFixedDelay(gpsRefreshThread, 0, 8, TimeUnit.SECONDS); |
| 67 | 68 | ||
| 68 | /** | 69 | /** |
| 69 | * 每天 0点 抓取当天实际排班 | 70 | * 每天 0点 抓取当天实际排班 |
| 70 | */ | 71 | */ |
| 72 | + //启动时先run一次 | ||
| 73 | + getSchedulePlanThread.start(); | ||
| 71 | scheduler.scheduleAtFixedRate(getSchedulePlanThread | 74 | scheduler.scheduleAtFixedRate(getSchedulePlanThread |
| 72 | - , 0//DateUtils.getTimesnight() + 5 - System.currentTimeMillis() / 1000 | 75 | + , DateUtils.getTimesnight() + 5 - System.currentTimeMillis() / 1000 |
| 73 | , 60 * 60 * 24, TimeUnit.SECONDS); | 76 | , 60 * 60 * 24, TimeUnit.SECONDS); |
| 74 | 77 | ||
| 75 | /** | 78 | /** |
| @@ -106,7 +109,7 @@ public class StartCommand implements CommandLineRunner{ | @@ -106,7 +109,7 @@ public class StartCommand implements CommandLineRunner{ | ||
| 106 | * 还车线程(2分钟运行一次) | 109 | * 还车线程(2分钟运行一次) |
| 107 | * 将借出的车刷回原线路 | 110 | * 将借出的车刷回原线路 |
| 108 | */ | 111 | */ |
| 109 | - //scheduler.scheduleWithFixedDelay(revertLineThread, 60 , 60 * 2 , TimeUnit.SECONDS); | 112 | + scheduler.scheduleWithFixedDelay(revertLineThread, 60 , 60 * 2 , TimeUnit.SECONDS); |
| 110 | } catch (Exception e) { | 113 | } catch (Exception e) { |
| 111 | e.printStackTrace(); | 114 | e.printStackTrace(); |
| 112 | } | 115 | } |
src/main/java/com/bsth/controller/UserController.java
| @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController; | @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController; | ||
| 14 | import org.springframework.web.servlet.ModelAndView; | 14 | import org.springframework.web.servlet.ModelAndView; |
| 15 | 15 | ||
| 16 | import com.bsth.entity.sys.SysUser; | 16 | import com.bsth.entity.sys.SysUser; |
| 17 | +import com.bsth.security.util.SecurityUtils; | ||
| 17 | 18 | ||
| 18 | @RestController | 19 | @RestController |
| 19 | @RequestMapping("user") | 20 | @RequestMapping("user") |
| @@ -58,4 +59,9 @@ public class UserController extends BaseController<SysUser, Integer>{ | @@ -58,4 +59,9 @@ public class UserController extends BaseController<SysUser, Integer>{ | ||
| 58 | } | 59 | } |
| 59 | return new ModelAndView("/"); | 60 | return new ModelAndView("/"); |
| 60 | } | 61 | } |
| 62 | + | ||
| 63 | + @RequestMapping("/currentUser") | ||
| 64 | + public SysUser currentUser(){ | ||
| 65 | + return SecurityUtils.getCurrentUser(); | ||
| 66 | + } | ||
| 61 | } | 67 | } |
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
| @@ -186,6 +186,18 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | @@ -186,6 +186,18 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | ||
| 186 | 186 | ||
| 187 | /** | 187 | /** |
| 188 | * | 188 | * |
| 189 | + * @Title: schInfoFineTune | ||
| 190 | + * @Description: TODO(发车信息微调) | ||
| 191 | + * @param @param map | ||
| 192 | + * @throws | ||
| 193 | + */ | ||
| 194 | + @RequestMapping(value = "/schInfoFineTune", method = RequestMethod.POST) | ||
| 195 | + public Map<String, Object> schInfoFineTune(@RequestParam Map<String, String> map){ | ||
| 196 | + return scheduleRealInfoService.schInfoFineTune(map); | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + /** | ||
| 200 | + * | ||
| 189 | * @Title: trustStatus @Description: TODO(线路托管状态) @param @param lineCodes | 201 | * @Title: trustStatus @Description: TODO(线路托管状态) @param @param lineCodes |
| 190 | * 线路编码 @throws | 202 | * 线路编码 @throws |
| 191 | */ | 203 | */ |
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
| @@ -18,6 +18,9 @@ public class ScheduleRealInfo { | @@ -18,6 +18,9 @@ public class ScheduleRealInfo { | ||
| 18 | @Id | 18 | @Id |
| 19 | @GeneratedValue | 19 | @GeneratedValue |
| 20 | private Long id; | 20 | private Long id; |
| 21 | + | ||
| 22 | + /** 计划ID */ | ||
| 23 | + private Long spId; | ||
| 21 | 24 | ||
| 22 | /** 排班计划日期 */ | 25 | /** 排班计划日期 */ |
| 23 | private Date scheduleDate; | 26 | private Date scheduleDate; |
| @@ -141,10 +144,10 @@ public class ScheduleRealInfo { | @@ -141,10 +144,10 @@ public class ScheduleRealInfo { | ||
| 141 | private Integer directiveState = -1; | 144 | private Integer directiveState = -1; |
| 142 | 145 | ||
| 143 | /** 起点站计划到达时间 */ | 146 | /** 起点站计划到达时间 */ |
| 144 | - private String qdzArrDateJH; | 147 | + private String qdzArrDatejh; |
| 145 | 148 | ||
| 146 | /** 起点站实际到达时间 */ | 149 | /** 起点站实际到达时间 */ |
| 147 | - private String qdzArrDateSJ; | 150 | + private String qdzArrDatesj; |
| 148 | 151 | ||
| 149 | public void addRemarks(String remark){ | 152 | public void addRemarks(String remark){ |
| 150 | String newRem = this.getRemarks(); | 153 | String newRem = this.getRemarks(); |
| @@ -500,8 +503,15 @@ public class ScheduleRealInfo { | @@ -500,8 +503,15 @@ public class ScheduleRealInfo { | ||
| 500 | this.setDfsj(this.getFcsj()); | 503 | this.setDfsj(this.getFcsj()); |
| 501 | //发车时间戳 | 504 | //发车时间戳 |
| 502 | this.setFcsjT(sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + this.getFcsj()).getTime()); | 505 | this.setFcsjT(sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + this.getFcsj()).getTime()); |
| 503 | - //待发时间 | 506 | + //待发时间戳 |
| 504 | this.setDfsjT(this.getFcsjT()); | 507 | this.setDfsjT(this.getFcsjT()); |
| 508 | + | ||
| 509 | + //计划终点时间 | ||
| 510 | + if(this.getBcsj() != null){ | ||
| 511 | + Date zdDate = new Date(this.getFcsjT() + (this.getBcsj() * 60 * 1000)); | ||
| 512 | + this.setZdsjT(zdDate.getTime()); | ||
| 513 | + this.setZdsj(sdfHHmm.format(zdDate)); | ||
| 514 | + } | ||
| 505 | }catch(Exception e){ | 515 | }catch(Exception e){ |
| 506 | e.printStackTrace(); | 516 | e.printStackTrace(); |
| 507 | } | 517 | } |
| @@ -521,19 +531,19 @@ public class ScheduleRealInfo { | @@ -521,19 +531,19 @@ public class ScheduleRealInfo { | ||
| 521 | } | 531 | } |
| 522 | 532 | ||
| 523 | public String getQdzArrDateJH() { | 533 | public String getQdzArrDateJH() { |
| 524 | - return qdzArrDateJH; | 534 | + return qdzArrDatejh; |
| 525 | } | 535 | } |
| 526 | 536 | ||
| 527 | public void setQdzArrDateJH(String qdzArrDateJH) { | 537 | public void setQdzArrDateJH(String qdzArrDateJH) { |
| 528 | - this.qdzArrDateJH = qdzArrDateJH; | 538 | + this.qdzArrDatejh = qdzArrDateJH; |
| 529 | } | 539 | } |
| 530 | 540 | ||
| 531 | public String getQdzArrDateSJ() { | 541 | public String getQdzArrDateSJ() { |
| 532 | - return qdzArrDateSJ; | 542 | + return qdzArrDatesj; |
| 533 | } | 543 | } |
| 534 | 544 | ||
| 535 | public void setQdzArrDateSJ(String qdzArrDateSJ) { | 545 | public void setQdzArrDateSJ(String qdzArrDateSJ) { |
| 536 | - this.qdzArrDateSJ = qdzArrDateSJ; | 546 | + this.qdzArrDatesj = qdzArrDateSJ; |
| 537 | } | 547 | } |
| 538 | 548 | ||
| 539 | public boolean isSflj() { | 549 | public boolean isSflj() { |
| @@ -544,4 +554,56 @@ public class ScheduleRealInfo { | @@ -544,4 +554,56 @@ public class ScheduleRealInfo { | ||
| 544 | this.sflj = sflj; | 554 | this.sflj = sflj; |
| 545 | } | 555 | } |
| 546 | 556 | ||
| 557 | + /** | ||
| 558 | + * | ||
| 559 | + * @Title: setFcsjAll | ||
| 560 | + * @Description: TODO(设置计划发车时间) | ||
| 561 | + * @throws | ||
| 562 | + */ | ||
| 563 | + public void setFcsjAll(String fcsj){ | ||
| 564 | + try { | ||
| 565 | + this.fcsjT = sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + fcsj).getTime(); | ||
| 566 | + this.fcsj = fcsj; | ||
| 567 | + } catch (ParseException e) { | ||
| 568 | + e.printStackTrace(); | ||
| 569 | + } | ||
| 570 | + } | ||
| 571 | + | ||
| 572 | + /** | ||
| 573 | + * | ||
| 574 | + * @Title: setFcsjActualAll | ||
| 575 | + * @Description: TODO(设置实际发车时间) | ||
| 576 | + * @throws | ||
| 577 | + */ | ||
| 578 | + public void setFcsjActualAll(String fcsjActual){ | ||
| 579 | + try { | ||
| 580 | + this.fcsjActualTime = sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + fcsjActual).getTime(); | ||
| 581 | + this.fcsjActual = fcsjActual; | ||
| 582 | + } catch (ParseException e) { | ||
| 583 | + e.printStackTrace(); | ||
| 584 | + } | ||
| 585 | + } | ||
| 586 | + | ||
| 587 | + /** | ||
| 588 | + * | ||
| 589 | + * @Title: setFcsjActualAll | ||
| 590 | + * @Description: TODO(设置实际终点时间) | ||
| 591 | + * @throws | ||
| 592 | + */ | ||
| 593 | + public void setZdsjActualAll(String zdsjActual){ | ||
| 594 | + try { | ||
| 595 | + this.zdsjActualTime = sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + zdsjActual).getTime(); | ||
| 596 | + this.zdsjActual = zdsjActual; | ||
| 597 | + } catch (ParseException e) { | ||
| 598 | + e.printStackTrace(); | ||
| 599 | + } | ||
| 600 | + } | ||
| 601 | + | ||
| 602 | + public Long getSpId() { | ||
| 603 | + return spId; | ||
| 604 | + } | ||
| 605 | + | ||
| 606 | + public void setSpId(Long spId) { | ||
| 607 | + this.spId = spId; | ||
| 608 | + } | ||
| 547 | } | 609 | } |
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
| 1 | package com.bsth.repository.realcontrol; | 1 | package com.bsth.repository.realcontrol; |
| 2 | 2 | ||
| 3 | +import java.util.Date; | ||
| 3 | import java.util.List; | 4 | import java.util.List; |
| 4 | import java.util.Map; | 5 | import java.util.Map; |
| 5 | 6 | ||
| @@ -34,4 +35,13 @@ public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealI | @@ -34,4 +35,13 @@ public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealI | ||
| 34 | 35 | ||
| 35 | @Query(value="select s from ScheduleRealInfo s where s.xlName = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.clZbh like ?3") | 36 | @Query(value="select s from ScheduleRealInfo s where s.xlName = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.clZbh like ?3") |
| 36 | List<ScheduleRealInfo> historyMessage(String line,String date,String code); | 37 | List<ScheduleRealInfo> historyMessage(String line,String date,String code); |
| 38 | + | ||
| 39 | + @Query(value = "select max(id) from ScheduleRealInfo") | ||
| 40 | + Long getMaxId(); | ||
| 41 | + | ||
| 42 | + @Query(value = "select count(*) from ScheduleRealInfo s where s.scheduleDate = ?1") | ||
| 43 | + int countByDate(Date date); | ||
| 44 | + | ||
| 45 | + @Query(value = "select s from ScheduleRealInfo s where s.scheduleDate = ?1") | ||
| 46 | + List<ScheduleRealInfo> findByDate(Date date); | ||
| 37 | } | 47 | } |
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
| @@ -76,4 +76,6 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L | @@ -76,4 +76,6 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L | ||
| 76 | 76 | ||
| 77 | Map<String, Object> spaceAdjust(Long[] ids, Integer space); | 77 | Map<String, Object> spaceAdjust(Long[] ids, Integer space); |
| 78 | 78 | ||
| 79 | + Map<String, Object> schInfoFineTune(Map<String, String> map); | ||
| 80 | + | ||
| 79 | } | 81 | } |
src/main/java/com/bsth/service/realcontrol/buffer/GetSchedulePlanThread.java
| @@ -36,29 +36,41 @@ public class GetSchedulePlanThread extends Thread{ | @@ -36,29 +36,41 @@ public class GetSchedulePlanThread extends Thread{ | ||
| 36 | @Autowired | 36 | @Autowired |
| 37 | ScheduleRealInfoRepository scheduleRealInfoRepository; | 37 | ScheduleRealInfoRepository scheduleRealInfoRepository; |
| 38 | 38 | ||
| 39 | - SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm"); | 39 | + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); |
| 40 | 40 | ||
| 41 | @Override | 41 | @Override |
| 42 | public void run() { | 42 | public void run() { |
| 43 | try{ | 43 | try{ |
| 44 | - String dateStr = /*sdf.format(new Date())*/"2016-06-01"; | ||
| 45 | - List<SchedulePlanInfo> list = schedulePlanInfoRepository.findByDate(dateStr); | 44 | + ScheduleBuffer.clear(); |
| 46 | 45 | ||
| 47 | - //实际排班计划 | ||
| 48 | - List<ScheduleRealInfo> realList = JSONArray.parseArray(JSON.toJSONString(list), ScheduleRealInfo.class); | ||
| 49 | - | ||
| 50 | - Date zdDate; | ||
| 51 | - for(ScheduleRealInfo item : realList){ | ||
| 52 | - item.syncTime(); | ||
| 53 | - //计划终点时间 | ||
| 54 | - if(item.getBcsj() != null){ | ||
| 55 | - zdDate = new Date(item.getFcsjT() + (item.getBcsj() * 60 * 1000)); | ||
| 56 | - item.setZdsjT(zdDate.getTime()); | ||
| 57 | - item.setZdsj(sdfHHmm.format(zdDate)); | 46 | + List<ScheduleRealInfo> realList = null; |
| 47 | + String dateStr = sdfyyyyMMdd.format(new Date()); | ||
| 48 | + Date cDate = sdfyyyyMMdd.parse(dateStr); | ||
| 49 | + //查询数据库是否有今日排班 | ||
| 50 | + int size = scheduleRealInfoRepository.countByDate(cDate); | ||
| 51 | + if(size > 0){ | ||
| 52 | + //从数据库恢复当日排班 | ||
| 53 | + realList = scheduleRealInfoRepository.findByDate(cDate); | ||
| 54 | + } | ||
| 55 | + else{ | ||
| 56 | + List<SchedulePlanInfo> list = schedulePlanInfoRepository.findByDate(dateStr); | ||
| 57 | + | ||
| 58 | + //实际排班计划 | ||
| 59 | + realList = JSONArray.parseArray(JSON.toJSONString(list), ScheduleRealInfo.class); | ||
| 60 | + //查询数据库最大ID | ||
| 61 | + Long id = scheduleRealInfoRepository.getMaxId(); | ||
| 62 | + if(null == id) | ||
| 63 | + id = 0L; | ||
| 64 | + id ++; | ||
| 65 | + | ||
| 66 | + for(ScheduleRealInfo item : realList){ | ||
| 67 | + item.setSpId(item.getId()); | ||
| 68 | + item.setId(id ++);//设置ID | ||
| 58 | } | 69 | } |
| 70 | + //入库 | ||
| 71 | + new BatchSaveUtils<ScheduleRealInfo>().saveList(realList, ScheduleRealInfo.class); | ||
| 59 | } | 72 | } |
| 60 | 73 | ||
| 61 | - //new BatchSaveUtils<ScheduleRealInfo>().saveList(realList, ScheduleRealInfo.class); | ||
| 62 | //写入缓存 | 74 | //写入缓存 |
| 63 | ScheduleBuffer.init(realList); | 75 | ScheduleBuffer.init(realList); |
| 64 | 76 |
src/main/java/com/bsth/service/realcontrol/buffer/ScheduleBuffer.java
| @@ -77,6 +77,11 @@ public class ScheduleBuffer { | @@ -77,6 +77,11 @@ public class ScheduleBuffer { | ||
| 77 | public static int init(List<ScheduleRealInfo> list){ | 77 | public static int init(List<ScheduleRealInfo> list){ |
| 78 | 78 | ||
| 79 | try{ | 79 | try{ |
| 80 | + //计算时间戳 | ||
| 81 | + for(ScheduleRealInfo schedul : list){ | ||
| 82 | + schedul.syncTime(); | ||
| 83 | + } | ||
| 84 | + | ||
| 80 | //发车时间排序 | 85 | //发车时间排序 |
| 81 | Collections.sort(list, scheduleComparator); | 86 | Collections.sort(list, scheduleComparator); |
| 82 | 87 |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| @@ -241,7 +241,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -241,7 +241,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 241 | t.setScheduleDate(new Date()); | 241 | t.setScheduleDate(new Date()); |
| 242 | t.setCreateBy(user); | 242 | t.setCreateBy(user); |
| 243 | t.syncTime(); | 243 | t.syncTime(); |
| 244 | - | 244 | + t.setSflj(true); |
| 245 | Map<String, Object> map = super.save(t); | 245 | Map<String, Object> map = super.save(t); |
| 246 | 246 | ||
| 247 | // 加入缓存 | 247 | // 加入缓存 |
| @@ -473,8 +473,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -473,8 +473,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 473 | // 按发车时间排序 | 473 | // 按发车时间排序 |
| 474 | Collections.sort(list, new ScheduleBuffer.ScheduleComparator()); | 474 | Collections.sort(list, new ScheduleBuffer.ScheduleComparator()); |
| 475 | 475 | ||
| 476 | - // 以第一个待发时间为起点,调整间隔 | ||
| 477 | - Long st = list.get(0).getDfsjT() | 476 | + // 以第一个实际发车/待发时间为起点,调整间隔 |
| 477 | + sch = list.get(0); | ||
| 478 | + Long st = sch.getFcsjActualTime()==null?sch.getDfsjT():sch.getFcsjActualTime() | ||
| 478 | ,plus = space * 60 * 1000L; | 479 | ,plus = space * 60 * 1000L; |
| 479 | 480 | ||
| 480 | for(int i = 1; i < size; i ++){ | 481 | for(int i = 1; i < size; i ++){ |
| @@ -495,4 +496,51 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -495,4 +496,51 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 495 | } | 496 | } |
| 496 | return rs; | 497 | return rs; |
| 497 | } | 498 | } |
| 499 | + | ||
| 500 | + @Override | ||
| 501 | + public Map<String, Object> schInfoFineTune(Map<String, String> map) { | ||
| 502 | + Map<String, Object> rs = new HashMap<>(); | ||
| 503 | + try { | ||
| 504 | + Long id = Long.parseLong(map.get("id")); | ||
| 505 | + //班次类型 | ||
| 506 | + String bcType = map.get("bcType"); | ||
| 507 | + //车辆自编号 | ||
| 508 | + String clZbh = map.get("clZbh"); | ||
| 509 | + //计划发车时间 | ||
| 510 | + String fcsj = map.get("fcsj"); | ||
| 511 | + //实际发车时间 | ||
| 512 | + String fcsjActual = map.get("fcsjActual"); | ||
| 513 | + //驾驶员 | ||
| 514 | + String[] jsy = map.get("jsy").split("/"); | ||
| 515 | + //售票员 | ||
| 516 | + String[] spy = map.get("spy").split("/"); | ||
| 517 | + //实际终点时间 | ||
| 518 | + String zdsjActual = map.get("zdsjActual"); | ||
| 519 | + //备注 | ||
| 520 | + String remarks = map.get("remarks"); | ||
| 521 | + | ||
| 522 | + ScheduleRealInfo sch = ScheduleBuffer.findOne(id); | ||
| 523 | + if(null != sch){ | ||
| 524 | + sch.setBcType(bcType); | ||
| 525 | + sch.setClZbh(clZbh); | ||
| 526 | + sch.setFcsjAll(fcsj); | ||
| 527 | + sch.setFcsjActualAll(fcsjActual); | ||
| 528 | + sch.setZdsjActualAll(zdsjActual); | ||
| 529 | + sch.setjGh(jsy[0]); | ||
| 530 | + sch.setjName(jsy[1]); | ||
| 531 | + sch.setsGh(spy[0]); | ||
| 532 | + sch.setsName(spy[1]); | ||
| 533 | + sch.setRemarks(remarks); | ||
| 534 | + } | ||
| 535 | + | ||
| 536 | + ScheduleBuffer.persistentList.add(sch); | ||
| 537 | + | ||
| 538 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 539 | + rs.put("t", sch); | ||
| 540 | + } catch (Exception e) { | ||
| 541 | + logger.error("", e); | ||
| 542 | + rs.put("status", ResponseCode.ERROR); | ||
| 543 | + } | ||
| 544 | + return rs; | ||
| 545 | + } | ||
| 498 | } | 546 | } |
src/main/java/com/bsth/util/BatchSaveUtils.java
| @@ -36,11 +36,10 @@ public class BatchSaveUtils<T> { | @@ -36,11 +36,10 @@ public class BatchSaveUtils<T> { | ||
| 36 | Logger logger = LoggerFactory.getLogger(this.getClass()); | 36 | Logger logger = LoggerFactory.getLogger(this.getClass()); |
| 37 | 37 | ||
| 38 | static { | 38 | static { |
| 39 | - Tools t = new Tools("application.properties"); | ||
| 40 | - driver = t.getValue("spring.datasource.driver-class-name"); | ||
| 41 | - url = t.getValue("spring.datasource.url"); | ||
| 42 | - uname = t.getValue("spring.datasource.username"); | ||
| 43 | - pwd = t.getValue("spring.datasource.password"); | 39 | + driver = ConfigUtil.get("spring.datasource.driver-class-name"); |
| 40 | + url = ConfigUtil.get("spring.datasource.url"); | ||
| 41 | + uname = ConfigUtil.get("spring.datasource.username"); | ||
| 42 | + pwd = ConfigUtil.get("spring.datasource.password"); | ||
| 44 | } | 43 | } |
| 45 | 44 | ||
| 46 | /** | 45 | /** |
src/main/java/com/bsth/util/ConfigUtil.java
0 → 100644
| 1 | +package com.bsth.util; | ||
| 2 | + | ||
| 3 | +public class ConfigUtil { | ||
| 4 | + | ||
| 5 | + static Tools tools; | ||
| 6 | + | ||
| 7 | + static{ | ||
| 8 | + tools = new Tools("application.properties"); | ||
| 9 | + String active = tools.getValue("spring.profiles.active"); | ||
| 10 | + tools = new Tools("application-"+active+".properties"); | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + public static String get(String key){ | ||
| 14 | + return tools.getValue(key); | ||
| 15 | + } | ||
| 16 | +} |
src/main/java/com/bsth/vehicle/directive/Consts.java
| 1 | package com.bsth.vehicle.directive; | 1 | package com.bsth.vehicle.directive; |
| 2 | 2 | ||
| 3 | -import com.bsth.util.Tools; | ||
| 4 | 3 | ||
| 5 | public class Consts { | 4 | public class Consts { |
| 6 | 5 | ||
| 7 | - static Tools tools = new Tools("application.properties"); | ||
| 8 | - | ||
| 9 | /** | 6 | /** |
| 10 | * 调度指令 -多营运状态 [0][0]上行营运 [0][1]上行非营运 [1][0]下行营运 [1][1]下行非营运 | 7 | * 调度指令 -多营运状态 [0][0]上行营运 [0][1]上行非营运 [1][0]下行营运 [1][1]下行非营运 |
| 11 | */ | 8 | */ |
| 12 | public static final int[][] SERVICE_STATE = { { 0, 0x02000000 }, { 0x10000000, 0x12000000 } }; | 9 | public static final int[][] SERVICE_STATE = { { 0, 0x02000000 }, { 0x10000000, 0x12000000 } }; |
| 13 | 10 | ||
| 14 | - /** | ||
| 15 | - * 消息下发地址 | ||
| 16 | - */ | ||
| 17 | - public static final String SEND_DIRECTIVE_URL = tools.getValue("http.send.directive"); | ||
| 18 | } | 11 | } |
src/main/java/com/bsth/vehicle/directive/service/DirectiveServiceImpl.java
| @@ -110,7 +110,6 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> | @@ -110,7 +110,6 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> | ||
| 110 | directive.setDispatch(true); | 110 | directive.setDispatch(true); |
| 111 | directive.setSch(sch); | 111 | directive.setSch(sch); |
| 112 | DirectiveBuffer.put(directive); | 112 | DirectiveBuffer.put(directive); |
| 113 | - | ||
| 114 | //通知页面,消息已发出 | 113 | //通知页面,消息已发出 |
| 115 | sendDirectiveState(sch); | 114 | sendDirectiveState(sch); |
| 116 | }else{ | 115 | }else{ |
| @@ -281,7 +280,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> | @@ -281,7 +280,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> | ||
| 281 | }else{ | 280 | }else{ |
| 282 | logger.error("send60 upDownChange error, code: " + code); | 281 | logger.error("send60 upDownChange error, code: " + code); |
| 283 | } | 282 | } |
| 284 | - return 0; | 283 | + return code; |
| 285 | } | 284 | } |
| 286 | 285 | ||
| 287 | /** | 286 | /** |
src/main/java/com/bsth/vehicle/directive/thread/FirstScheduleIssuedThread.java
| @@ -35,7 +35,9 @@ public class FirstScheduleIssuedThread extends Thread{ | @@ -35,7 +35,9 @@ public class FirstScheduleIssuedThread extends Thread{ | ||
| 35 | 35 | ||
| 36 | sch = linkedList.getFirst(); | 36 | sch = linkedList.getFirst(); |
| 37 | 37 | ||
| 38 | - if(sch.getFcsjActual() == null) | 38 | + //没有完成班次,且头班车没有发车时间 |
| 39 | + if(!ScheduleBuffer.finishLinkedMap.containsKey(nbbm) | ||
| 40 | + && sch.getFcsjActual() == null) | ||
| 39 | directiveService.send60Dispatch(sch, 0); | 41 | directiveService.send60Dispatch(sch, 0); |
| 40 | } | 42 | } |
| 41 | } | 43 | } |
src/main/java/com/bsth/vehicle/directive/util/HttpUtils.java
| @@ -2,6 +2,7 @@ package com.bsth.vehicle.directive.util; | @@ -2,6 +2,7 @@ package com.bsth.vehicle.directive.util; | ||
| 2 | 2 | ||
| 3 | import java.io.IOException; | 3 | import java.io.IOException; |
| 4 | 4 | ||
| 5 | +import org.apache.http.client.config.RequestConfig; | ||
| 5 | import org.apache.http.client.methods.CloseableHttpResponse; | 6 | import org.apache.http.client.methods.CloseableHttpResponse; |
| 6 | import org.apache.http.client.methods.HttpPost; | 7 | import org.apache.http.client.methods.HttpPost; |
| 7 | import org.apache.http.entity.StringEntity; | 8 | import org.apache.http.entity.StringEntity; |
| @@ -12,7 +13,7 @@ import org.slf4j.Logger; | @@ -12,7 +13,7 @@ import org.slf4j.Logger; | ||
| 12 | import org.slf4j.LoggerFactory; | 13 | import org.slf4j.LoggerFactory; |
| 13 | 14 | ||
| 14 | import com.alibaba.fastjson.JSONObject; | 15 | import com.alibaba.fastjson.JSONObject; |
| 15 | -import com.bsth.vehicle.directive.Consts; | 16 | +import com.bsth.util.ConfigUtil; |
| 16 | 17 | ||
| 17 | /** | 18 | /** |
| 18 | * | 19 | * |
| @@ -26,6 +27,12 @@ public class HttpUtils { | @@ -26,6 +27,12 @@ public class HttpUtils { | ||
| 26 | 27 | ||
| 27 | static Logger logger = LoggerFactory.getLogger(HttpUtils.class); | 28 | static Logger logger = LoggerFactory.getLogger(HttpUtils.class); |
| 28 | 29 | ||
| 30 | + static String url; | ||
| 31 | + | ||
| 32 | + static{ | ||
| 33 | + url = ConfigUtil.get("http.send.directive"); | ||
| 34 | + } | ||
| 35 | + | ||
| 29 | public static int postJson(String jsonStr){ | 36 | public static int postJson(String jsonStr){ |
| 30 | logger.info("send : " + jsonStr); | 37 | logger.info("send : " + jsonStr); |
| 31 | 38 | ||
| @@ -34,7 +41,14 @@ public class HttpUtils { | @@ -34,7 +41,14 @@ public class HttpUtils { | ||
| 34 | try{ | 41 | try{ |
| 35 | httpClient = HttpClients.createDefault(); | 42 | httpClient = HttpClients.createDefault(); |
| 36 | 43 | ||
| 37 | - HttpPost post = new HttpPost(Consts.SEND_DIRECTIVE_URL); | 44 | + //超时时间 |
| 45 | + RequestConfig requestConfig = RequestConfig.custom() | ||
| 46 | + .setConnectTimeout(3000).setConnectionRequestTimeout(1000) | ||
| 47 | + .setSocketTimeout(3000).build(); | ||
| 48 | + | ||
| 49 | + HttpPost post = new HttpPost(url); | ||
| 50 | + | ||
| 51 | + post.setConfig(requestConfig); | ||
| 38 | 52 | ||
| 39 | post.setEntity(new StringEntity(jsonStr, "utf-8")); | 53 | post.setEntity(new StringEntity(jsonStr, "utf-8")); |
| 40 | 54 |
src/main/java/com/bsth/vehicle/gpsdata/GpsArrivalStationThread.java
| @@ -8,7 +8,9 @@ import java.text.SimpleDateFormat; | @@ -8,7 +8,9 @@ import java.text.SimpleDateFormat; | ||
| 8 | import java.util.ArrayList; | 8 | 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.Iterator; | 12 | import java.util.Iterator; |
| 13 | +import java.util.LinkedList; | ||
| 12 | import java.util.List; | 14 | import java.util.List; |
| 13 | import java.util.Set; | 15 | import java.util.Set; |
| 14 | 16 | ||
| @@ -22,6 +24,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; | @@ -22,6 +24,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 22 | import com.bsth.service.realcontrol.buffer.ScheduleBuffer; | 24 | import com.bsth.service.realcontrol.buffer.ScheduleBuffer; |
| 23 | import com.bsth.util.DateUtils; | 25 | import com.bsth.util.DateUtils; |
| 24 | import com.bsth.util.db.DBUtils_MS; | 26 | import com.bsth.util.db.DBUtils_MS; |
| 27 | +import com.bsth.vehicle.common.CommonMapped; | ||
| 25 | import com.bsth.vehicle.directive.service.DirectiveService; | 28 | import com.bsth.vehicle.directive.service.DirectiveService; |
| 26 | import com.bsth.vehicle.gpsdata.buffer.GpsArrivalDataBuffer; | 29 | import com.bsth.vehicle.gpsdata.buffer.GpsArrivalDataBuffer; |
| 27 | import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; | 30 | import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; |
| @@ -57,7 +60,33 @@ public class GpsArrivalStationThread extends Thread{ | @@ -57,7 +60,33 @@ public class GpsArrivalStationThread extends Thread{ | ||
| 57 | } catch (ParseException e) { | 60 | } catch (ParseException e) { |
| 58 | e.printStackTrace(); | 61 | e.printStackTrace(); |
| 59 | } | 62 | } |
| 63 | + //缓存 | ||
| 60 | GpsArrivalDataBuffer.putAll(list); | 64 | GpsArrivalDataBuffer.putAll(list); |
| 65 | + | ||
| 66 | + //车辆 | ||
| 67 | + Set<String> set = new HashSet<>(); | ||
| 68 | + for(ArrivalInfo arr : list) | ||
| 69 | + set.add(CommonMapped.vehicDeviceBiMap.get(arr.getDeviceId())); | ||
| 70 | + | ||
| 71 | + List<ArrivalInfo> rsList = null; | ||
| 72 | + LinkedList<ScheduleRealInfo> linked = null; | ||
| 73 | + int[] status; | ||
| 74 | + ScheduleRealInfo sch; | ||
| 75 | + for(String nbbm : set){ | ||
| 76 | + rsList = GpsArrivalDataBuffer.pops(nbbm); | ||
| 77 | + //和该车辆未执行班次进行匹配 | ||
| 78 | + linked = ScheduleBuffer.vehLinkedMap.get(nbbm); | ||
| 79 | + | ||
| 80 | + if(null == linked || linked.size() == 0) | ||
| 81 | + continue; | ||
| 82 | + //第一个未执行班次 | ||
| 83 | + sch = linked.getFirst(); | ||
| 84 | + | ||
| 85 | + //匹配结果 | ||
| 86 | + status = match(rsList, sch); | ||
| 87 | + } | ||
| 88 | + // | ||
| 89 | + /*GpsArrivalDataBuffer.putAll(list); | ||
| 61 | //实际到离站和计划排班相匹配 | 90 | //实际到离站和计划排班相匹配 |
| 62 | 91 | ||
| 63 | Set<String> keySet = GpsArrivalDataBuffer.allMap.keySet(); | 92 | Set<String> keySet = GpsArrivalDataBuffer.allMap.keySet(); |
| @@ -68,7 +97,42 @@ public class GpsArrivalStationThread extends Thread{ | @@ -68,7 +97,42 @@ public class GpsArrivalStationThread extends Thread{ | ||
| 68 | if(null != schList) | 97 | if(null != schList) |
| 69 | match(GpsArrivalDataBuffer.allMap.get(key), schList); | 98 | match(GpsArrivalDataBuffer.allMap.get(key), schList); |
| 70 | } | 99 | } |
| 71 | - System.out.println("结束..."); | 100 | + System.out.println("结束...");*/ |
| 101 | + } | ||
| 102 | + | ||
| 103 | + public int[] match(List<ArrivalInfo> arrList, ScheduleRealInfo sch){ | ||
| 104 | + //进出分组 | ||
| 105 | + List<ArrivalInfo> in = new ArrayList<>(), out = new ArrayList<>(); | ||
| 106 | + for(ArrivalInfo arr : arrList){ | ||
| 107 | + if(arr.getInOut() == 0) | ||
| 108 | + in.add(arr); | ||
| 109 | + else | ||
| 110 | + out.add(arr); | ||
| 111 | + } | ||
| 112 | + int s1 = 0, s2 = 0; | ||
| 113 | + //匹配发车时间 | ||
| 114 | + if(sch.getFcsjActual() == null) | ||
| 115 | + s1 = matchOut(arrList, sch); | ||
| 116 | + | ||
| 117 | + //匹配终点时间 | ||
| 118 | + if(sch.getZdsjActual() == null) | ||
| 119 | + s2 = matchIn(arrList, sch); | ||
| 120 | + | ||
| 121 | + return new int[]{s1,s2}; | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + public int matchOut(List<ArrivalInfo> arrList, ScheduleRealInfo sch){ | ||
| 125 | + | ||
| 126 | + for(ArrivalInfo arr : arrList){ | ||
| 127 | + if(arr.getStopNo().equals(sch.getQdzCode())){ | ||
| 128 | + | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + return 0; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + public int matchIn(List<ArrivalInfo> arrList, ScheduleRealInfo sch){ | ||
| 135 | + return 0; | ||
| 72 | } | 136 | } |
| 73 | 137 | ||
| 74 | 138 | ||
| @@ -80,21 +144,21 @@ public class GpsArrivalStationThread extends Thread{ | @@ -80,21 +144,21 @@ public class GpsArrivalStationThread extends Thread{ | ||
| 80 | * @param @param schList 计划排班链表 | 144 | * @param @param schList 计划排班链表 |
| 81 | * @throws | 145 | * @throws |
| 82 | */ | 146 | */ |
| 83 | - public void match(List<ArrivalInfo> arrList, List<ScheduleRealInfo> schList){ | 147 | + /*public void match(List<ArrivalInfo> arrList, List<ScheduleRealInfo> schList){ |
| 84 | Iterator<ScheduleRealInfo> schIterator = schList.iterator(); | 148 | Iterator<ScheduleRealInfo> schIterator = schList.iterator(); |
| 85 | 149 | ||
| 86 | while(schIterator.hasNext()) | 150 | while(schIterator.hasNext()) |
| 87 | match(schIterator.next(), arrList); | 151 | match(schIterator.next(), arrList); |
| 88 | - } | 152 | + }*/ |
| 89 | 153 | ||
| 90 | 154 | ||
| 91 | - public void match(ScheduleRealInfo scInfo, List<ArrivalInfo> arrList){ | 155 | + /*public void match(ScheduleRealInfo scInfo, List<ArrivalInfo> arrList){ |
| 92 | for(ArrivalInfo arr : arrList){ | 156 | for(ArrivalInfo arr : arrList){ |
| 93 | match(scInfo, arr); | 157 | match(scInfo, arr); |
| 94 | } | 158 | } |
| 95 | - } | 159 | + }*/ |
| 96 | 160 | ||
| 97 | - public void match(ScheduleRealInfo scInfo, ArrivalInfo arr){ | 161 | +/* public void match(ScheduleRealInfo scInfo, ArrivalInfo arr){ |
| 98 | try{ | 162 | try{ |
| 99 | //匹配起点 | 163 | //匹配起点 |
| 100 | matchStart(scInfo, arr); | 164 | matchStart(scInfo, arr); |
| @@ -104,7 +168,7 @@ public class GpsArrivalStationThread extends Thread{ | @@ -104,7 +168,7 @@ public class GpsArrivalStationThread extends Thread{ | ||
| 104 | }catch(Exception e){ | 168 | }catch(Exception e){ |
| 105 | e.printStackTrace(); | 169 | e.printStackTrace(); |
| 106 | } | 170 | } |
| 107 | - } | 171 | + }*/ |
| 108 | 172 | ||
| 109 | /** | 173 | /** |
| 110 | * | 174 | * |
src/main/java/com/bsth/vehicle/gpsdata/GpsRefreshThread.java
| @@ -19,7 +19,7 @@ import org.springframework.stereotype.Component; | @@ -19,7 +19,7 @@ import org.springframework.stereotype.Component; | ||
| 19 | 19 | ||
| 20 | import com.alibaba.fastjson.JSON; | 20 | import com.alibaba.fastjson.JSON; |
| 21 | import com.alibaba.fastjson.JSONObject; | 21 | import com.alibaba.fastjson.JSONObject; |
| 22 | -import com.bsth.util.Tools; | 22 | +import com.bsth.util.ConfigUtil; |
| 23 | import com.bsth.vehicle.gpsdata.buffer.GpsRealDataBuffer; | 23 | import com.bsth.vehicle.gpsdata.buffer.GpsRealDataBuffer; |
| 24 | import com.bsth.vehicle.gpsdata.entity.GpsRealData; | 24 | import com.bsth.vehicle.gpsdata.entity.GpsRealData; |
| 25 | import com.google.common.collect.ImmutableMap; | 25 | import com.google.common.collect.ImmutableMap; |
| @@ -42,8 +42,7 @@ public class GpsRefreshThread extends Thread{ | @@ -42,8 +42,7 @@ public class GpsRefreshThread extends Thread{ | ||
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | public GpsRefreshThread() { | 44 | public GpsRefreshThread() { |
| 45 | - Tools t = new Tools("application.properties"); | ||
| 46 | - url = t.getValue("http.gps.real.url"); | 45 | + url = ConfigUtil.get("http.gps.real.url"); |
| 47 | } | 46 | } |
| 48 | 47 | ||
| 49 | @Autowired | 48 | @Autowired |
src/main/java/com/bsth/vehicle/gpsdata/buffer/GpsArrivalDataBuffer.java
| @@ -2,7 +2,9 @@ package com.bsth.vehicle.gpsdata.buffer; | @@ -2,7 +2,9 @@ package com.bsth.vehicle.gpsdata.buffer; | ||
| 2 | 2 | ||
| 3 | import java.util.Collections; | 3 | import java.util.Collections; |
| 4 | import java.util.Comparator; | 4 | import java.util.Comparator; |
| 5 | +import java.util.HashMap; | ||
| 5 | import java.util.List; | 6 | import java.util.List; |
| 7 | +import java.util.Map; | ||
| 6 | 8 | ||
| 7 | import com.bsth.vehicle.common.CommonMapped; | 9 | import com.bsth.vehicle.common.CommonMapped; |
| 8 | import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; | 10 | import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; |
| @@ -10,54 +12,74 @@ import com.google.common.collect.LinkedListMultimap; | @@ -10,54 +12,74 @@ import com.google.common.collect.LinkedListMultimap; | ||
| 10 | 12 | ||
| 11 | /** | 13 | /** |
| 12 | * | 14 | * |
| 13 | - * @ClassName: GpsArrivalDataBuffer | ||
| 14 | - * @Description: TODO(GPS到离站数据缓存) | 15 | + * @ClassName: GpsArrivalDataBuffer |
| 16 | + * @Description: TODO(GPS到离站数据缓存) | ||
| 15 | * @author PanZhao | 17 | * @author PanZhao |
| 16 | - * @date 2016年6月27日 下午1:08:35 | 18 | + * @date 2016年6月27日 下午1:08:35 |
| 17 | * | 19 | * |
| 18 | */ | 20 | */ |
| 19 | public class GpsArrivalDataBuffer { | 21 | public class GpsArrivalDataBuffer { |
| 20 | 22 | ||
| 21 | /** | 23 | /** |
| 22 | - * 车辆 时间戳排序的进出站链表 | 24 | + * 车辆 时间戳排序的进出站链表 |
| 23 | */ | 25 | */ |
| 24 | public static LinkedListMultimap<String, ArrivalInfo> allMap; | 26 | public static LinkedListMultimap<String, ArrivalInfo> allMap; |
| 25 | - | 27 | + |
| 28 | + /** | ||
| 29 | + * 车辆 和 进出站链表索引 | ||
| 30 | + */ | ||
| 31 | + public static Map<String, Integer> markMap; | ||
| 32 | + | ||
| 26 | /** | 33 | /** |
| 27 | * 时间戳标记,从数据库增量查询时起始时间 | 34 | * 时间戳标记,从数据库增量查询时起始时间 |
| 28 | */ | 35 | */ |
| 29 | public static Long markTime; | 36 | public static Long markTime; |
| 30 | - | ||
| 31 | - | ||
| 32 | - static{ | 37 | + |
| 38 | + public static List<ArrivalInfo> pops(String nbbm) { | ||
| 39 | + Integer mark = null; | ||
| 40 | + if (!markMap.containsKey(nbbm)) | ||
| 41 | + mark = 0; | ||
| 42 | + else | ||
| 43 | + mark = markMap.get(nbbm); | ||
| 44 | + | ||
| 45 | + List<ArrivalInfo> all = allMap.get(nbbm); | ||
| 46 | + int size = all.size(); | ||
| 47 | + if(size == 0) | ||
| 48 | + return null; | ||
| 49 | + | ||
| 50 | + List<ArrivalInfo> rs = all.subList(mark, size); | ||
| 51 | + | ||
| 52 | + markMap.put(nbbm, size); | ||
| 53 | + return rs; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + static { | ||
| 33 | allMap = LinkedListMultimap.create(); | 57 | allMap = LinkedListMultimap.create(); |
| 58 | + markMap = new HashMap<>(); | ||
| 34 | } | 59 | } |
| 35 | - | 60 | + |
| 36 | /** | 61 | /** |
| 37 | * | 62 | * |
| 38 | - * @Title: putAll | ||
| 39 | - * @Description: TODO(将增量数据添加到缓存) | ||
| 40 | - * @param @param list 设定文件 | ||
| 41 | - * @return void 返回类型 | ||
| 42 | - * @throws | 63 | + * @Title: putAll @Description: TODO(将增量数据添加到缓存) @param @param list |
| 64 | + * 设定文件 @return void 返回类型 @throws | ||
| 43 | */ | 65 | */ |
| 44 | - public static void putAll(List<ArrivalInfo> list){ | ||
| 45 | - //按时间戳排序 | 66 | + public static void putAll(List<ArrivalInfo> list) { |
| 67 | + // 按时间戳排序 | ||
| 46 | Collections.sort(list, new Comparator<ArrivalInfo>() { | 68 | Collections.sort(list, new Comparator<ArrivalInfo>() { |
| 47 | @Override | 69 | @Override |
| 48 | public int compare(ArrivalInfo o1, ArrivalInfo o2) { | 70 | public int compare(ArrivalInfo o1, ArrivalInfo o2) { |
| 49 | return (int) (o1.getTs() - o2.getTs()); | 71 | return (int) (o1.getTs() - o2.getTs()); |
| 50 | } | 72 | } |
| 51 | }); | 73 | }); |
| 52 | - | 74 | + |
| 53 | int len = list.size(); | 75 | int len = list.size(); |
| 54 | ArrivalInfo arrival; | 76 | ArrivalInfo arrival; |
| 55 | String nbbm; | 77 | String nbbm; |
| 56 | - for(int i = 0; i < len; i ++){ | 78 | + for (int i = 0; i < len; i++) { |
| 57 | arrival = list.get(i); | 79 | arrival = list.get(i); |
| 58 | nbbm = CommonMapped.vehicDeviceBiMap.get(arrival.getDeviceId()); | 80 | nbbm = CommonMapped.vehicDeviceBiMap.get(arrival.getDeviceId()); |
| 59 | - | ||
| 60 | - if(null != nbbm) | 81 | + |
| 82 | + if (null != nbbm) | ||
| 61 | allMap.put(nbbm, arrival); | 83 | allMap.put(nbbm, arrival); |
| 62 | } | 84 | } |
| 63 | } | 85 | } |
src/main/resources/application-dev.properties
0 → 100644
| 1 | +server.port=9088 | ||
| 2 | +management.port= 9001 | ||
| 3 | +management.address= 127.0.0.1 | ||
| 4 | + | ||
| 5 | +spring.jpa.hibernate.ddl-auto= update | ||
| 6 | +spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy | ||
| 7 | +#DATABASE | ||
| 8 | +spring.jpa.database= MYSQL | ||
| 9 | +spring.jpa.show-sql= true | ||
| 10 | +spring.datasource.driver-class-name= com.mysql.jdbc.Driver | ||
| 11 | +spring.datasource.url= jdbc:mysql://192.168.168.201:3306/control | ||
| 12 | +spring.datasource.username= root | ||
| 13 | +spring.datasource.password= 123456 | ||
| 14 | +#DATASOURCE | ||
| 15 | +spring.datasource.max-active=100 | ||
| 16 | +spring.datasource.max-idle=8 | ||
| 17 | +spring.datasource.min-idle=8 | ||
| 18 | +spring.datasource.initial-size=5 | ||
| 19 | + | ||
| 20 | +spring.datasource.test-on-borrow=true | ||
| 21 | +spring.datasource.test-on-connect=true | ||
| 22 | +spring.datasource.test-on-return=true | ||
| 23 | +spring.datasource.test-while-idle=true | ||
| 24 | +spring.datasource.validation-query=select 1 | ||
| 25 | + | ||
| 26 | +## | ||
| 27 | +#222.66.0.204:5555 | ||
| 28 | +##\u5B9E\u65F6gps | ||
| 29 | +http.gps.real.url= http://192.168.168.192:8080/transport_server/rtgps/ | ||
| 30 | +##\u6D88\u606F\u4E0B\u53D1 | ||
| 31 | +http.send.directive = http://192.168.168.192:8080/transport_server/message/ |
src/main/resources/application-prod.properties
0 → 100644
| 1 | +server.port=9088 | ||
| 2 | +management.port= 9001 | ||
| 3 | +management.address= 127.0.0.1 | ||
| 4 | + | ||
| 5 | +spring.jpa.hibernate.ddl-auto= update | ||
| 6 | +spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy | ||
| 7 | +#DATABASE | ||
| 8 | +spring.jpa.database= MYSQL | ||
| 9 | +spring.jpa.show-sql= true | ||
| 10 | +spring.datasource.driver-class-name= com.mysql.jdbc.Driver | ||
| 11 | +spring.datasource.url= jdbc:mysql://192.168.168.171:3306/control | ||
| 12 | +spring.datasource.username= root | ||
| 13 | +spring.datasource.password= root2jsp | ||
| 14 | +#DATASOURCE | ||
| 15 | +spring.datasource.max-active=100 | ||
| 16 | +spring.datasource.max-idle=8 | ||
| 17 | +spring.datasource.min-idle=8 | ||
| 18 | +spring.datasource.initial-size=5 | ||
| 19 | + | ||
| 20 | +spring.datasource.test-on-borrow=true | ||
| 21 | +spring.datasource.test-on-connect=true | ||
| 22 | +spring.datasource.test-on-return=true | ||
| 23 | +spring.datasource.test-while-idle=true | ||
| 24 | +spring.datasource.validation-query=select 1 | ||
| 25 | + | ||
| 26 | +## | ||
| 27 | +#222.66.0.204:5555 | ||
| 28 | +##\u5B9E\u65F6gps | ||
| 29 | +http.gps.real.url= http://192.168.168.171:8080/transport_server/rtgps/ | ||
| 30 | +##\u6D88\u606F\u4E0B\u53D1 | ||
| 31 | +http.send.directive = http://192.168.168.171:8080/transport_server/message/ |
src/main/resources/application.properties
| 1 | -server.port=9088 | ||
| 2 | -management.port= 9001 | ||
| 3 | -management.address= 127.0.0.1 | ||
| 4 | - | ||
| 5 | -spring.jpa.hibernate.ddl-auto= update | ||
| 6 | -spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy | ||
| 7 | - | ||
| 8 | -#DATABASE | ||
| 9 | -spring.jpa.database= MYSQL | ||
| 10 | -spring.jpa.show-sql= true | ||
| 11 | -spring.datasource.driver-class-name= com.mysql.jdbc.Driver | ||
| 12 | -spring.datasource.url= jdbc:mysql://192.168.168.201:3306/control | ||
| 13 | -spring.datasource.username= root | ||
| 14 | -spring.datasource.password= 123456 | ||
| 15 | - | ||
| 16 | -#DATASOURCE | ||
| 17 | -spring.datasource.max-active=100 | ||
| 18 | -spring.datasource.max-idle=8 | ||
| 19 | -spring.datasource.min-idle=8 | ||
| 20 | -spring.datasource.initial-size=5 | ||
| 21 | - | ||
| 22 | -spring.datasource.test-on-borrow=true | ||
| 23 | -spring.datasource.test-on-connect=true | ||
| 24 | -spring.datasource.test-on-return=true | ||
| 25 | -spring.datasource.test-while-idle=true | ||
| 26 | -spring.datasource.validation-query=select 1 | 1 | +spring.profiles: dev,prod |
| 2 | +spring.profiles.active: dev | ||
| 27 | 3 | ||
| 28 | spring.view.suffix=.html | 4 | spring.view.suffix=.html |
| 29 | - | ||
| 30 | server.session-timeout=-1 | 5 | server.session-timeout=-1 |
| 31 | - | ||
| 32 | security.basic.enabled=false | 6 | security.basic.enabled=false |
| 33 | 7 | ||
| 34 | -# 上传文件大小限制配置 | 8 | +# \u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u914D\u7F6E |
| 35 | # File size limit | 9 | # File size limit |
| 36 | multipart.maxFileSize = -1 | 10 | multipart.maxFileSize = -1 |
| 37 | # Total request size for a multipart/form-data | 11 | # Total request size for a multipart/form-data |
| 38 | multipart.maxRequestSize = -1 | 12 | multipart.maxRequestSize = -1 |
| 39 | 13 | ||
| 40 | -## | ||
| 41 | -#222.66.0.204:5555 | ||
| 42 | -##\u5B9E\u65F6gps | ||
| 43 | -http.gps.real.url= http://192.168.168.192:8080/transport_server/rtgps/ | ||
| 44 | -##\u6D88\u606F\u4E0B\u53D1 | ||
| 45 | -http.send.directive = http://192.168.168.192:8080/transport_server/message/ |
src/main/resources/static/assets/img/logo_text.png
0 → 100644
14.7 KB
src/main/resources/static/assets/js/common.js
src/main/resources/static/index.html
| @@ -108,6 +108,17 @@ tr.row-active td { | @@ -108,6 +108,17 @@ tr.row-active td { | ||
| 108 | .page-content.active{ | 108 | .page-content.active{ |
| 109 | display: block !important; | 109 | display: block !important; |
| 110 | } | 110 | } |
| 111 | + | ||
| 112 | +.page-header.navbar .page-logo { | ||
| 113 | + width: 335px; | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +.page-header.navbar .page-logo .logo-default { | ||
| 117 | + margin: 0; | ||
| 118 | +} | ||
| 119 | +.page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle { | ||
| 120 | + background-color: #284a99; | ||
| 121 | +} | ||
| 111 | </style> | 122 | </style> |
| 112 | 123 | ||
| 113 | <!-- ocLazyLoading载入文件的位置 --> | 124 | <!-- ocLazyLoading载入文件的位置 --> |
| @@ -115,28 +126,18 @@ tr.row-active td { | @@ -115,28 +126,18 @@ tr.row-active td { | ||
| 115 | 126 | ||
| 116 | </head> | 127 | </head> |
| 117 | <body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed"> | 128 | <body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed"> |
| 118 | - <div class="page-header navbar navbar-fixed-top"> | 129 | + <div class="page-header navbar navbar-fixed-top" style="background: #23438e;"> |
| 119 | <div class="page-header-inner "> | 130 | <div class="page-header-inner "> |
| 120 | <!-- LOGO --> | 131 | <!-- LOGO --> |
| 121 | <div class="page-logo"> | 132 | <div class="page-logo"> |
| 122 | <a href="index.html"> | 133 | <a href="index.html"> |
| 123 | - <img src="" alt="logo" class="logo-default" /> </a> | 134 | + <img src="/assets/img/logo_text.png" alt="logo" class="logo-default" /> </a> |
| 124 | <div class="menu-toggler sidebar-toggler"> | 135 | <div class="menu-toggler sidebar-toggler"> |
| 125 | </div> | 136 | </div> |
| 126 | </div> | 137 | </div> |
| 127 | <!-- END LOGO --> | 138 | <!-- END LOGO --> |
| 128 | <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"> </a> | 139 | <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"> </a> |
| 129 | <div class="page-top"> | 140 | <div class="page-top"> |
| 130 | - <form class="search-form" action="page_general_search_2.html" method="GET"> | ||
| 131 | - <div class="input-group"> | ||
| 132 | - <input type="text" class="form-control input-sm" placeholder="Search..." name="query"> | ||
| 133 | - <span class="input-group-btn"> | ||
| 134 | - <a href="javascript:;" class="btn submit"> | ||
| 135 | - <i class="fa fa-search"></i> | ||
| 136 | - </a> | ||
| 137 | - </span> | ||
| 138 | - </div> | ||
| 139 | - </form> | ||
| 140 | <div class="top-menu"> | 141 | <div class="top-menu"> |
| 141 | <ul class="nav navbar-nav pull-right"> | 142 | <ul class="nav navbar-nav pull-right"> |
| 142 | <!-- 信息通知区 --> | 143 | <!-- 信息通知区 --> |
| @@ -158,7 +159,7 @@ tr.row-active td { | @@ -158,7 +159,7 @@ tr.row-active td { | ||
| 158 | </li> | 159 | </li> |
| 159 | <li class="dropdown dropdown-user dropdown-dark"> | 160 | <li class="dropdown dropdown-user dropdown-dark"> |
| 160 | <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> | 161 | <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> |
| 161 | - <span class="username username-hide-on-mobile" style="vertical-align: middle;">潘钊 <i class="fa fa-user"></i></span> | 162 | + <span id="indexTopUName" class="username username-hide-on-mobile" style="vertical-align: middle;"> <i class="fa fa-user"></i></span> |
| 162 | </a> | 163 | </a> |
| 163 | <ul class="dropdown-menu dropdown-menu-default"> | 164 | <ul class="dropdown-menu dropdown-menu-default"> |
| 164 | <li> | 165 | <li> |
| @@ -301,12 +302,12 @@ tr.row-active td { | @@ -301,12 +302,12 @@ tr.row-active td { | ||
| 301 | <!-- angularJS相关库 --> | 302 | <!-- angularJS相关库 --> |
| 302 | <!-- 这个是基于angularjs 1.4.10修改的版本,主要是修改了history控制部分,用于兼容route和pjax的同时操作history的冲突 --> | 303 | <!-- 这个是基于angularjs 1.4.10修改的版本,主要是修改了history控制部分,用于兼容route和pjax的同时操作history的冲突 --> |
| 303 | <script src="/assets/js/angular.js" data-autocephaly=1></script> | 304 | <script src="/assets/js/angular.js" data-autocephaly=1></script> |
| 304 | -<script src="/assets/bower_components/angular-resource/angular-resource.min.js" data-autocephaly=1></script> | ||
| 305 | -<script src="/assets/bower_components/angular-sanitize/angular-sanitize.min.js" data-autocephaly=1></script> | ||
| 306 | -<script src="/assets/bower_components/angular-touch/angular-touch.min.js" data-autocephaly=1></script> | ||
| 307 | -<script src="/assets/bower_components/angular-ui-router/release/angular-ui-router.min.js" data-autocephaly=1></script> | ||
| 308 | -<script src="/assets/bower_components/oclazyload/dist/ocLazyLoad.min.js" data-autocephaly=1></script> | ||
| 309 | -<script src="/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js" data-autocephaly=1></script> | 305 | +<script src="/assets/bower_components/angular-resource/angular-resource.min.js" data-exclude=1></script> |
| 306 | +<script src="/assets/bower_components/angular-sanitize/angular-sanitize.min.js" data-exclude=1></script> | ||
| 307 | +<script src="/assets/bower_components/angular-touch/angular-touch.min.js" data-exclude=1></script> | ||
| 308 | +<script src="/assets/bower_components/angular-ui-router/release/angular-ui-router.min.js" data-exclude=1></script> | ||
| 309 | +<script src="/assets/bower_components/oclazyload/dist/ocLazyLoad.min.js" data-exclude=1></script> | ||
| 310 | +<script src="/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js" data-exclude=1></script> | ||
| 310 | <!-- schedule计划调度AngularJS模块主JS --> | 311 | <!-- schedule计划调度AngularJS模块主JS --> |
| 311 | <script src="/pages/scheduleApp/module/main.js" data-exclude=1></script> | 312 | <script src="/pages/scheduleApp/module/main.js" data-exclude=1></script> |
| 312 | 313 | ||
| @@ -320,6 +321,10 @@ var pjaxContainer = '#pjax-container' | @@ -320,6 +321,10 @@ var pjaxContainer = '#pjax-container' | ||
| 320 | ,angJsContainer = '#route-container'; | 321 | ,angJsContainer = '#route-container'; |
| 321 | 322 | ||
| 322 | $(function(){ | 323 | $(function(){ |
| 324 | + $.get('/user/currentUser', function(user){ | ||
| 325 | + $('#indexTopUName').text(user.userName); | ||
| 326 | + }); | ||
| 327 | + | ||
| 323 | //带 data-pjax 的链接由pjax加载 | 328 | //带 data-pjax 的链接由pjax加载 |
| 324 | $(document).pjax('a[data-pjax]', pjaxContainer); | 329 | $(document).pjax('a[data-pjax]', pjaxContainer); |
| 325 | 330 |
src/main/resources/static/pages/control/line/css/lineControl.css
| 1 | +.load-anim{ | ||
| 2 | + position: fixed;z-index: 9999999;width: 100%;height: 100%; | ||
| 3 | + background: rgba(8, 47, 74, 0.89);top: 0;left: 0; | ||
| 4 | +} | ||
| 5 | +.load-anim .loader{ | ||
| 6 | + margin: auto !important; | ||
| 7 | + position: absolute; | ||
| 8 | + top: 0; | ||
| 9 | + left: 0; | ||
| 10 | + bottom: 0; | ||
| 11 | + right: 0; | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | + | ||
| 15 | +.load8 .loader { | ||
| 16 | + font-size: 10px; | ||
| 17 | + text-indent: -9999em; | ||
| 18 | + border-top: 1.1em solid rgba(255, 255, 255, 0.2); | ||
| 19 | + border-right: 1.1em solid rgba(255, 255, 255, 0.2); | ||
| 20 | + border-bottom: 1.1em solid rgba(255, 255, 255, 0.2); | ||
| 21 | + border-left: 1.1em solid #ffffff; | ||
| 22 | + -webkit-animation: load8 1.1s infinite linear; | ||
| 23 | + animation: load8 1.1s infinite linear; | ||
| 24 | +} | ||
| 25 | +.load8 .loader, | ||
| 26 | +.load8 .loader:after { | ||
| 27 | + border-radius: 50% !important; | ||
| 28 | + width: 8em; | ||
| 29 | + height: 8em; | ||
| 30 | +} | ||
| 31 | +@-webkit-keyframes load8 { | ||
| 32 | + 0% { | ||
| 33 | + -webkit-transform: rotate(0deg); | ||
| 34 | + transform: rotate(0deg); | ||
| 35 | + } | ||
| 36 | + 100% { | ||
| 37 | + -webkit-transform: rotate(360deg); | ||
| 38 | + transform: rotate(360deg); | ||
| 39 | + } | ||
| 40 | +} | ||
| 41 | +@keyframes load8 { | ||
| 42 | + 0% { | ||
| 43 | + -webkit-transform: rotate(0deg); | ||
| 44 | + transform: rotate(0deg); | ||
| 45 | + } | ||
| 46 | + 100% { | ||
| 47 | + -webkit-transform: rotate(360deg); | ||
| 48 | + transform: rotate(360deg); | ||
| 49 | + } | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | + | ||
| 1 | label { | 53 | label { |
| 2 | max-width: none; | 54 | max-width: none; |
| 3 | } | 55 | } |
| @@ -220,7 +272,7 @@ body{ | @@ -220,7 +272,7 @@ body{ | ||
| 220 | } | 272 | } |
| 221 | 273 | ||
| 222 | .card_wrap{ | 274 | .card_wrap{ |
| 223 | - height: 268px; | 275 | + min-height: 268px; |
| 224 | text-align: center; | 276 | text-align: center; |
| 225 | } | 277 | } |
| 226 | 278 | ||
| @@ -425,7 +477,7 @@ body{ | @@ -425,7 +477,7 @@ body{ | ||
| 425 | 477 | ||
| 426 | .station_text{ | 478 | .station_text{ |
| 427 | writing-mode: tb; | 479 | writing-mode: tb; |
| 428 | - letter-spacing: -2.6px; | 480 | + /* letter-spacing: -2.6px; */ |
| 429 | } | 481 | } |
| 430 | 482 | ||
| 431 | .station_text:hover{ | 483 | .station_text:hover{ |
| @@ -877,6 +929,10 @@ height: 400px; | @@ -877,6 +929,10 @@ height: 400px; | ||
| 877 | .pb-table tr td:nth-child(9){ | 929 | .pb-table tr td:nth-child(9){ |
| 878 | width: 55px; | 930 | width: 55px; |
| 879 | } | 931 | } |
| 932 | + | ||
| 933 | + .station_text { | ||
| 934 | + letter-spacing: -2.6px; | ||
| 935 | + } | ||
| 880 | } | 936 | } |
| 881 | 937 | ||
| 882 | .pb-table.head tr td{ | 938 | .pb-table.head tr td{ |
| @@ -911,6 +967,14 @@ height: 400px; | @@ -911,6 +967,14 @@ height: 400px; | ||
| 911 | .pb-table tr td:nth-child(8){ | 967 | .pb-table tr td:nth-child(8){ |
| 912 | width: 15%; | 968 | width: 15%; |
| 913 | } | 969 | } |
| 970 | + | ||
| 971 | + .card_wrap .col-lg-2 .table td{ | ||
| 972 | + font-size: 12px; | ||
| 973 | + } | ||
| 974 | + | ||
| 975 | + .station_text { | ||
| 976 | + letter-spacing: 1px; | ||
| 977 | + } | ||
| 914 | } | 978 | } |
| 915 | 979 | ||
| 916 | /** 1310px 以下 */ | 980 | /** 1310px 以下 */ |
| @@ -946,6 +1010,9 @@ height: 400px; | @@ -946,6 +1010,9 @@ height: 400px; | ||
| 946 | 1010 | ||
| 947 | .table.pb-table>tbody>tr>td{ | 1011 | .table.pb-table>tbody>tr>td{ |
| 948 | line-height: 1.43257; | 1012 | line-height: 1.43257; |
| 1013 | + white-space: nowrap; | ||
| 1014 | + overflow: hidden; | ||
| 1015 | + text-overflow: ellipsis; | ||
| 949 | } | 1016 | } |
| 950 | 1017 | ||
| 951 | .pic-panel{ | 1018 | .pic-panel{ |
| @@ -2094,4 +2161,29 @@ tr._tr_active.active-line-no .in-badge{ | @@ -2094,4 +2161,29 @@ tr._tr_active.active-line-no .in-badge{ | ||
| 2094 | 2161 | ||
| 2095 | tr._tr_active.active-line-no .out-badge{ | 2162 | tr._tr_active.active-line-no .out-badge{ |
| 2096 | background: #67a3a8; | 2163 | background: #67a3a8; |
| 2097 | -} | ||
| 2098 | \ No newline at end of file | 2164 | \ No newline at end of file |
| 2165 | +} | ||
| 2166 | + | ||
| 2167 | +.sfsj-sch-detail{ | ||
| 2168 | + list-style: none; | ||
| 2169 | + padding: 3px; | ||
| 2170 | + /* color: black; */ | ||
| 2171 | + font-family: 微软雅黑; | ||
| 2172 | +} | ||
| 2173 | +.sfsj-sch-detail li{ | ||
| 2174 | + font-size: 14px; | ||
| 2175 | + margin: 6px 4px; | ||
| 2176 | +} | ||
| 2177 | + | ||
| 2178 | +.sfsj-sch-detail li span{ | ||
| 2179 | + display: inline-block; | ||
| 2180 | + width: 75px; | ||
| 2181 | + text-align: right; | ||
| 2182 | + /* color: #818181; */ | ||
| 2183 | +} | ||
| 2184 | + | ||
| 2185 | +.vehicDataTable a{ | ||
| 2186 | + text-decoration: underline; | ||
| 2187 | + color: black; | ||
| 2188 | +} | ||
| 2189 | + | ||
| 2190 | + |
src/main/resources/static/pages/control/line/index.html
| 1 | <link href="css/lineControl.css" rel="stylesheet" type="text/css" /> | 1 | <link href="css/lineControl.css" rel="stylesheet" type="text/css" /> |
| 2 | <link href="/metronic_v4.5.4/css/animate.min.css" rel="stylesheet" type="text/css" /> | 2 | <link href="/metronic_v4.5.4/css/animate.min.css" rel="stylesheet" type="text/css" /> |
| 3 | 3 | ||
| 4 | +<!-- 初始load动画 --> | ||
| 5 | +<div class="load-anim load8" > | ||
| 6 | +<div class="loader">Loading...</div> | ||
| 7 | +</div> | ||
| 8 | + | ||
| 4 | <div class="portlet light portlet-fullscreen" style="transition: all .5s ease;padding: 0;" oncontextmenu=self.event.returnValue=false> | 9 | <div class="portlet light portlet-fullscreen" style="transition: all .5s ease;padding: 0;" oncontextmenu=self.event.returnValue=false> |
| 10 | + | ||
| 5 | <div class="portlet-title" style="padding: 17px 20px 0px 20px;border-bottom: none;margin-bottom: 0;background: linear-gradient(to right ,#082F4A, #125688,#0a3f64);padding-bottom: 5px;"> | 11 | <div class="portlet-title" style="padding: 17px 20px 0px 20px;border-bottom: none;margin-bottom: 0;background: linear-gradient(to right ,#082F4A, #125688,#0a3f64);padding-bottom: 5px;"> |
| 6 | <div class="caption col_hide_1280" style="color: #FFF;"> | 12 | <div class="caption col_hide_1280" style="color: #FFF;"> |
| 7 | <i class="fa fa-life-ring" style="font-size: 22px;color: #FFF;"></i> <span | 13 | <i class="fa fa-life-ring" style="font-size: 22px;color: #FFF;"></i> <span |
| 8 | - class="caption-subject bold" style="font-size: 24px;">线路调度系统</span> | 14 | + class="caption-subject bold" style="font-size: 24px;">闵行公交线路调度系统</span> |
| 9 | </div> | 15 | </div> |
| 10 | <div class="col_hide_1440" style="color: white;font-size: 18px;position: absolute;right: 25px;top: 75px;"> | 16 | <div class="col_hide_1440" style="color: white;font-size: 18px;position: absolute;right: 25px;top: 75px;"> |
| 11 | - panzhao,在线! | 17 | + <span class="top_username"></span>,在线! |
| 12 | </div> | 18 | </div> |
| 13 | <div class="actions col_hide_1280" > | 19 | <div class="actions col_hide_1280" > |
| 14 | <div class="btn-group"> | 20 | <div class="btn-group"> |
| @@ -84,6 +90,7 @@ | @@ -84,6 +90,7 @@ | ||
| 84 | </div> | 90 | </div> |
| 85 | <div id="tooltipShade" class="animated fadeIn"></div> | 91 | <div id="tooltipShade" class="animated fadeIn"></div> |
| 86 | 92 | ||
| 93 | +<!-- 线路调度右键菜单 --> | ||
| 87 | <menu class="menu" id="rightMenu"> | 94 | <menu class="menu" id="rightMenu"> |
| 88 | <li class="menu-item" > | 95 | <li class="menu-item" > |
| 89 | <button type="button" class="menu-btn" data-method="outgoAdjust"> | 96 | <button type="button" class="menu-btn" data-method="outgoAdjust"> |
| @@ -122,6 +129,11 @@ | @@ -122,6 +129,11 @@ | ||
| 122 | <span class="menu-text">误点调整</span> | 129 | <span class="menu-text">误点调整</span> |
| 123 | </button> | 130 | </button> |
| 124 | </li> | 131 | </li> |
| 132 | + <li class="menu-item" > | ||
| 133 | + <button type="button" class="menu-btn" data-method="schInfoFineTune"> | ||
| 134 | + <span class="menu-text">发车信息微调</span> | ||
| 135 | + </button> | ||
| 136 | + </li> | ||
| 125 | <li class="menu-separator"></li> | 137 | <li class="menu-separator"></li> |
| 126 | <li class="menu-item" > | 138 | <li class="menu-item" > |
| 127 | <button type="button" class="menu-btn" data-method="childTask"> | 139 | <button type="button" class="menu-btn" data-method="childTask"> |
| @@ -137,13 +149,6 @@ | @@ -137,13 +149,6 @@ | ||
| 137 | </button> | 149 | </button> |
| 138 | </li> | 150 | </li> |
| 139 | <li class="menu-separator"></li> | 151 | <li class="menu-separator"></li> |
| 140 | -<!-- <li class="menu-item" > | ||
| 141 | - <button type="button" class="menu-btn" data-method="temporaryAdd"> | ||
| 142 | - <i class="fa fa-plus"></i> | ||
| 143 | - <span class="menu-text">临加班次</span> | ||
| 144 | - </button> | ||
| 145 | - </li> --> | ||
| 146 | - <li class="menu-separator"></li> | ||
| 147 | <li class="menu-item" > | 152 | <li class="menu-item" > |
| 148 | <button type="button" class="menu-btn" data-method="vehicAndPerAdjust"> | 153 | <button type="button" class="menu-btn" data-method="vehicAndPerAdjust"> |
| 149 | <i class="fa fa-retweet"></i> | 154 | <i class="fa fa-retweet"></i> |
| @@ -158,6 +163,42 @@ | @@ -158,6 +163,42 @@ | ||
| 158 | </button> | 163 | </button> |
| 159 | </li> | 164 | </li> |
| 160 | </menu> | 165 | </menu> |
| 166 | +<!-- 主页右键菜单 --> | ||
| 167 | +<menu class="menu" id="homeMenu"> | ||
| 168 | + <li class="menu-item disabled" id="menu-linename"> | ||
| 169 | + <button type="button" class="menu-btn"> | ||
| 170 | + <span class="menu-text">--- W2B-102 ---</span> | ||
| 171 | + </button> | ||
| 172 | + </li> | ||
| 173 | + <li class="menu-item" > | ||
| 174 | + <button type="button" class="menu-btn" data-method="sendPhrase"> | ||
| 175 | + <span class="menu-text">发送消息短语</span> | ||
| 176 | + </button> | ||
| 177 | + </li> | ||
| 178 | + <li class="menu-separator"></li> | ||
| 179 | + <li class="menu-item" > | ||
| 180 | + <button type="button" class="menu-btn" data-method="showState"> | ||
| 181 | + <span class="menu-text">车辆状态查看</span> | ||
| 182 | + </button> | ||
| 183 | + </li> | ||
| 184 | + <li class="menu-item submenu"> | ||
| 185 | + <button type="button" class="menu-btn"> | ||
| 186 | + <span class="menu-text">车辆状态发送</span> | ||
| 187 | + </button> | ||
| 188 | + <menu class="menu"> | ||
| 189 | + <li class="menu-item"> | ||
| 190 | + <button type="button" class="menu-btn" data-method="changeUp"> | ||
| 191 | + <span class="menu-text">上行营运</span> | ||
| 192 | + </button> | ||
| 193 | + </li> | ||
| 194 | + <li class="menu-item"> | ||
| 195 | + <button type="button" class="menu-btn" data-method="changeDown"> | ||
| 196 | + <span class="menu-text">下行营运</span> | ||
| 197 | + </button> | ||
| 198 | + </li> | ||
| 199 | + </menu> | ||
| 200 | + </li> | ||
| 201 | +</menu> | ||
| 161 | 202 | ||
| 162 | </div> | 203 | </div> |
| 163 | <div id="temps"></div> | 204 | <div id="temps"></div> |
| @@ -169,6 +210,7 @@ | @@ -169,6 +210,7 @@ | ||
| 169 | <script src="/pages/control/line/js/drawSvg.js"></script> | 210 | <script src="/pages/control/line/js/drawSvg.js"></script> |
| 170 | <script src="/pages/control/line/js/data.js"></script> | 211 | <script src="/pages/control/line/js/data.js"></script> |
| 171 | <script src="/pages/control/line/js/rightMenu.js"></script> | 212 | <script src="/pages/control/line/js/rightMenu.js"></script> |
| 213 | +<script src="/pages/control/line/js/homeMenu.js"></script> | ||
| 172 | <script src="/pages/control/line/js/alone.js"></script> | 214 | <script src="/pages/control/line/js/alone.js"></script> |
| 173 | <script src="/pages/control/line/js/main.js"></script> | 215 | <script src="/pages/control/line/js/main.js"></script> |
| 174 | <script src="/pages/control/line/js/console.js"></script> | 216 | <script src="/pages/control/line/js/console.js"></script> |
| @@ -179,10 +221,16 @@ var lineCodes = '' //全部线路编码字符串,由data.js初始化 | @@ -179,10 +221,16 @@ var lineCodes = '' //全部线路编码字符串,由data.js初始化 | ||
| 179 | , lineMap = {} //编码和线路详细对照,由data.js初始化; | 221 | , lineMap = {} //编码和线路详细对照,由data.js初始化; |
| 180 | ,animationend = 'webkitAnimationEnd animationend'; | 222 | ,animationend = 'webkitAnimationEnd animationend'; |
| 181 | moment.locale('zh-cn'); | 223 | moment.locale('zh-cn'); |
| 224 | + | ||
| 225 | +var cUser; | ||
| 226 | +//当前用户 | ||
| 227 | +$.get('/user/currentUser', function(user){ | ||
| 228 | + cUser = user; | ||
| 229 | + $('.portlet-fullscreen .top_username').text(cUser.userName); | ||
| 230 | +}); | ||
| 182 | $(function() { | 231 | $(function() { |
| 183 | //加载模板文件 | 232 | //加载模板文件 |
| 184 | getTemp('temps/home_tp.html'); | 233 | getTemp('temps/home_tp.html'); |
| 185 | - getTemp('temps/home_table_tp.html'); | ||
| 186 | getTemp('temps/tooltip_tp.html'); | 234 | getTemp('temps/tooltip_tp.html'); |
| 187 | getTemp('temps/alone_tp.html'); | 235 | getTemp('temps/alone_tp.html'); |
| 188 | getTemp('temps/child_task_case_tp.html'); | 236 | getTemp('temps/child_task_case_tp.html'); |
src/main/resources/static/pages/control/line/js/alone.js
| @@ -98,11 +98,6 @@ var _alone = (function(){ | @@ -98,11 +98,6 @@ var _alone = (function(){ | ||
| 98 | calculateLineNo: calculateLineNo | 98 | calculateLineNo: calculateLineNo |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | - //实发时间单元格事件 | ||
| 102 | - $('.portlet-fullscreen').on('click', 'table.pb-table .sfsj-item', function(){ | ||
| 103 | - | ||
| 104 | - }); | ||
| 105 | - | ||
| 106 | //计算行号 | 101 | //计算行号 |
| 107 | function calculateLineNo(table){ | 102 | function calculateLineNo(table){ |
| 108 | var rows = table.rows; | 103 | var rows = table.rows; |
| @@ -162,13 +157,22 @@ var _alone = (function(){ | @@ -162,13 +157,22 @@ var _alone = (function(){ | ||
| 162 | var tgTools = $('#tgTools_' + line); | 157 | var tgTools = $('#tgTools_' + line); |
| 163 | 158 | ||
| 164 | tgTools.html(tgHtml[status]).data('status', status); | 159 | tgTools.html(tgHtml[status]).data('status', status); |
| 160 | + var array = $('#top-tabs-wrap a[data-id='+line+'] span zz'); | ||
| 161 | + | ||
| 165 | if(status == 0){ | 162 | if(status == 0){ |
| 166 | //托管Question | 163 | //托管Question |
| 167 | $('.tgQuestion', tgTools).popover(tgPopoverOps); | 164 | $('.tgQuestion', tgTools).popover(tgPopoverOps); |
| 168 | tgTools.removeClass('hand'); | 165 | tgTools.removeClass('hand'); |
| 166 | + | ||
| 167 | + $(array[2]).text('托管'); | ||
| 169 | } | 168 | } |
| 170 | - else | 169 | + else{ |
| 171 | tgTools.addClass('hand'); | 170 | tgTools.addClass('hand'); |
| 171 | + $(array[2]).text(''); | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + //tab 头改变 | ||
| 175 | + | ||
| 172 | } | 176 | } |
| 173 | 177 | ||
| 174 | function initRemarksPop(){ | 178 | function initRemarksPop(){ |
src/main/resources/static/pages/control/line/js/drawSvg.js
| @@ -49,6 +49,12 @@ var drawSvg = (function(){ | @@ -49,6 +49,12 @@ var drawSvg = (function(){ | ||
| 49 | svg = drawSvgObject.init(lineId, data, container, w, 80); | 49 | svg = drawSvgObject.init(lineId, data, container, w, 80); |
| 50 | //线路编码 和 首页SVG对照 | 50 | //线路编码 和 首页SVG对照 |
| 51 | homeSvgMapp[lineId] = svg; | 51 | homeSvgMapp[lineId] = svg; |
| 52 | + if(svg && svg.length > 0){ | ||
| 53 | + //双击事件 | ||
| 54 | + $(svg[0]).dblclick(function(){ | ||
| 55 | + $('#top-tabs-wrap .nav-tabs a[data-id='+this.id+']').click(); | ||
| 56 | + }); | ||
| 57 | + } | ||
| 52 | }, | 58 | }, |
| 53 | initAloneSvg: function(lineId, data, container){ | 59 | initAloneSvg: function(lineId, data, container){ |
| 54 | var w = $(document).width(), | 60 | var w = $(document).width(), |
| @@ -371,5 +377,8 @@ var drawSvg = (function(){ | @@ -371,5 +377,8 @@ var drawSvg = (function(){ | ||
| 371 | } | 377 | } |
| 372 | } | 378 | } |
| 373 | 379 | ||
| 380 | + //双击svg切换 | ||
| 381 | + //$('.line_chart svg'). | ||
| 382 | + | ||
| 374 | return drawSvgObject; | 383 | return drawSvgObject; |
| 375 | })(); | 384 | })(); |
src/main/resources/static/pages/control/line/js/homeMenu.js
0 → 100644
| 1 | +var _home_menu = (function(){ | ||
| 2 | + | ||
| 3 | + $('#homeMenu .menu-item button').on('click', function(){ | ||
| 4 | + var method = $(this).data('method'); | ||
| 5 | + if(!method)return; | ||
| 6 | + var nbbm = $('.vehicDataTable tr._home_tr_active').data('nbbm'); | ||
| 7 | + | ||
| 8 | + if(!nbbm){ | ||
| 9 | + layer.alert('无法获取车辆自编号,请尝试刷新页面!', {icon: 2, title: '异常'}); | ||
| 10 | + return; | ||
| 11 | + } | ||
| 12 | + menuObject[method](nbbm); | ||
| 13 | + }); | ||
| 14 | + | ||
| 15 | + //右键事件 | ||
| 16 | + $('.portlet-fullscreen').on('contextmenu', '.vehicDataTable tr td', function(e){ | ||
| 17 | + e.preventDefault(); | ||
| 18 | + $('.vehicDataTable tr._home_tr_active').removeClass('_home_tr_active'); | ||
| 19 | + $(this).parent().addClass('_home_tr_active'); | ||
| 20 | + showMenu(e.pageX, e.pageY + 3); | ||
| 21 | + $(document).one('click', function() { | ||
| 22 | + $('#homeMenu').removeClass('show-menu'); | ||
| 23 | + }); | ||
| 24 | + }); | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + function showMenu(x, y) { | ||
| 28 | + var menu = $('#homeMenu'), | ||
| 29 | + docWidth = $(document).width(), docHeight = $(document).height(), | ||
| 30 | + menuHeight = menu.height(), | ||
| 31 | + menuWidth = menu.width(), | ||
| 32 | + offset = 12; | ||
| 33 | + /* 边界 */ | ||
| 34 | + if (y > (docHeight - menuHeight)) { | ||
| 35 | + y = docHeight - menuHeight - offset; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + if (x > (docWidth - (menuWidth * 2))) { | ||
| 39 | + x = docWidth - (menuWidth * 2) - offset; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + menu.css('left', x + 'px') | ||
| 43 | + .css('top', y + 'px') | ||
| 44 | + .addClass('show-menu'); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + var menuObject = { | ||
| 48 | + //发送消息短语 | ||
| 49 | + sendPhrase: function(nbbm){ | ||
| 50 | + layer.prompt({title: '请输入短语信息', formType: 2 , shift: 5 | ||
| 51 | + }, function(space){ | ||
| 52 | + $.post('/directive/phrase', {nbbm: nbbm, text: space}, function(rs){ | ||
| 53 | + if(rs == 0) | ||
| 54 | + layer.msg('发送成功!'); | ||
| 55 | + else | ||
| 56 | + layer.alert('发送短语信息失败!', {icon: 2, title: '操作失败'}); | ||
| 57 | + }); | ||
| 58 | + }); | ||
| 59 | + }, | ||
| 60 | + //上行营运 | ||
| 61 | + changeUp: function(nbbm){ | ||
| 62 | + $.post('/directive/upDownChange', {nbbm: nbbm, upDown: 0}, function(rs){ | ||
| 63 | + if(rs == 0) | ||
| 64 | + layer.msg('发送指令成功!'); | ||
| 65 | + else | ||
| 66 | + layer.alert('发送指令失败!', {icon: 2, title: '操作失败'}); | ||
| 67 | + }); | ||
| 68 | + }, | ||
| 69 | + //下行营运 | ||
| 70 | + changeDown: function(nbbm){ | ||
| 71 | + $.post('/directive/upDownChange', {nbbm: nbbm, upDown: 1}, function(rs){ | ||
| 72 | + if(rs == 0) | ||
| 73 | + layer.msg('发送指令成功!'); | ||
| 74 | + else | ||
| 75 | + layer.alert('发送指令失败!', {icon: 2, title: '操作失败'}); | ||
| 76 | + }); | ||
| 77 | + }, | ||
| 78 | + //车辆状态查看 | ||
| 79 | + showState: function(nbbm){ | ||
| 80 | + /*var index = layer.open({ | ||
| 81 | + type: 1, | ||
| 82 | + area: '370px', | ||
| 83 | + maxmin: true, | ||
| 84 | + content: template('', data), | ||
| 85 | + shift: 5, | ||
| 86 | + title: '---' + nbbm + '---', | ||
| 87 | + success: function(){} | ||
| 88 | + });*/ | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | +})(); | ||
| 92 | + |
src/main/resources/static/pages/control/line/js/keyboardListen.js
| 1 | /** 键盘监听 */ | 1 | /** 键盘监听 */ |
| 2 | 2 | ||
| 3 | //禁止选中 | 3 | //禁止选中 |
| 4 | -$(document).on('selectstart','table.pb-table', function(event){ | 4 | +$(document).on('selectstart','table.pb-table,svg', function(event){ |
| 5 | event = window.event||event; | 5 | event = window.event||event; |
| 6 | event.returnValue = false; | 6 | event.returnValue = false; |
| 7 | }); | 7 | }); |
src/main/resources/static/pages/control/line/js/main.js
| @@ -36,6 +36,10 @@ | @@ -36,6 +36,10 @@ | ||
| 36 | var homeHtmlStr = template('line_control_home_temp', {tabList: tabData}); | 36 | var homeHtmlStr = template('line_control_home_temp', {tabList: tabData}); |
| 37 | 37 | ||
| 38 | $('#tab_home').html(homeHtmlStr); | 38 | $('#tab_home').html(homeHtmlStr); |
| 39 | + //计算高度 40 页脚 | ||
| 40 | + var ah = $('#top-tabs-wrap .tab-content').height() - 40 - 5; | ||
| 41 | + console.log(ah); | ||
| 42 | + $('.card_wrap').css('height', ah / 3); | ||
| 39 | 43 | ||
| 40 | //滚动条 | 44 | //滚动条 |
| 41 | $('.card_wrap .table_wrap').slimscroll({ | 45 | $('.card_wrap .table_wrap').slimscroll({ |
| @@ -61,6 +65,7 @@ | @@ -61,6 +65,7 @@ | ||
| 61 | 65 | ||
| 62 | //按线路分组 | 66 | //按线路分组 |
| 63 | var listMap = groupByLine(addList); | 67 | var listMap = groupByLine(addList); |
| 68 | + console.log('listMap', listMap); | ||
| 64 | for(var key in listMap){ | 69 | for(var key in listMap){ |
| 65 | var htmlStr = template('home_table_temp', {list: listMap[key]}); | 70 | var htmlStr = template('home_table_temp', {list: listMap[key]}); |
| 66 | $('#tab_' + key).find('tbody').html(htmlStr); | 71 | $('#tab_' + key).find('tbody').html(htmlStr); |
| @@ -69,16 +74,15 @@ | @@ -69,16 +74,15 @@ | ||
| 69 | } | 74 | } |
| 70 | }); | 75 | }); |
| 71 | 76 | ||
| 72 | - | ||
| 73 | setTimeout(function(){ | 77 | setTimeout(function(){ |
| 78 | + //打开GPS定时刷新 | ||
| 74 | _data.startRefreshGpsTimer(); | 79 | _data.startRefreshGpsTimer(); |
| 75 | - }, 300); | ||
| 76 | - /* setTimeout(function(){ | ||
| 77 | - homeObject.refreshGps(function(add, update){ | ||
| 78 | - //将新增的点画到模拟图上 | ||
| 79 | - drawSvg.drawVehicle(add); | ||
| 80 | - }); | ||
| 81 | - }, 300);*/ | 80 | + |
| 81 | + setTimeout(function(){ | ||
| 82 | + //去掉loading | ||
| 83 | + $('.load-anim').fadeOut(); | ||
| 84 | + }, 500); | ||
| 85 | + }, 400); | ||
| 82 | 86 | ||
| 83 | } | 87 | } |
| 84 | } | 88 | } |
| @@ -88,7 +92,7 @@ setTimeout(function(){ | @@ -88,7 +92,7 @@ setTimeout(function(){ | ||
| 88 | var topTabs = '', tabPanels = ''; | 92 | var topTabs = '', tabPanels = ''; |
| 89 | $.each(_data.getLines(), function(i, line){ | 93 | $.each(_data.getLines(), function(i, line){ |
| 90 | topTabs += '<li ><a data-id="'+line.lineCode+'" href="#tab_line_'+line.lineCode+'" data-toggle="tab" '+ | 94 | topTabs += '<li ><a data-id="'+line.lineCode+'" href="#tab_line_'+line.lineCode+'" data-toggle="tab" '+ |
| 91 | - 'aria-expanded="false"> '+line.name+'<span>(0,0 托管)</span> </a></li>'; | 95 | + 'aria-expanded="false"> '+line.name+'<span>(<zz>0</zz>,<zz>0</zz> <zz>托管</zz>)</span> </a></li>'; |
| 92 | 96 | ||
| 93 | tabPanels += '<div class="tab-pane fade tab_line" data-id="'+line.lineCode+'" id="tab_line_'+line.lineCode+'"></div>'; | 97 | tabPanels += '<div class="tab-pane fade tab_line" data-id="'+line.lineCode+'" id="tab_line_'+line.lineCode+'"></div>'; |
| 94 | 98 |
src/main/resources/static/pages/control/line/js/rightMenu.js
| @@ -87,6 +87,21 @@ var _menu = (function() { | @@ -87,6 +87,21 @@ var _menu = (function() { | ||
| 87 | return $(firstCell).addClass('selected').parent().addClass('_tr_active active-line-no'); | 87 | return $(firstCell).addClass('selected').parent().addClass('_tr_active active-line-no'); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | + //实发时间单元格事件 | ||
| 91 | + var layerTip; | ||
| 92 | + $('.portlet-fullscreen').on('click', 'table.pb-table .sfsj-item', function(){ | ||
| 93 | + var id = $(this).parent().data('id'); | ||
| 94 | + var sch = _data.getSchedulById(id); | ||
| 95 | + | ||
| 96 | + layerTip = layer.tips(template('sfsj_sch-detail-temp', sch), this, { | ||
| 97 | + tips: [2, '#709d94'],shift:5, time: 5000 | ||
| 98 | + }); | ||
| 99 | + }); | ||
| 100 | + | ||
| 101 | + $('.portlet-fullscreen').on('dbclick', 'table.pb-table .sfsj-item', function(){ | ||
| 102 | + alert(11); | ||
| 103 | + }); | ||
| 104 | + | ||
| 90 | //选中关联班次 | 105 | //选中关联班次 |
| 91 | function selCognateSch($ctr){ | 106 | function selCognateSch($ctr){ |
| 92 | //选中关联班次 | 107 | //选中关联班次 |
| @@ -119,6 +134,10 @@ var _menu = (function() { | @@ -119,6 +134,10 @@ var _menu = (function() { | ||
| 119 | $('.pb-table tr td.' + ac).removeClass(ac); | 134 | $('.pb-table tr td.' + ac).removeClass(ac); |
| 120 | $('.pb-table tr.selected').removeClass('selected'); | 135 | $('.pb-table tr.selected').removeClass('selected'); |
| 121 | $('.pb-table tr.next-sch').removeClass('next-sch'); | 136 | $('.pb-table tr.next-sch').removeClass('next-sch'); |
| 137 | + if(layerTip){ | ||
| 138 | + layer.close(layerTip); | ||
| 139 | + layerTip = null; | ||
| 140 | + } | ||
| 122 | } | 141 | } |
| 123 | function resetAllState(){ | 142 | function resetAllState(){ |
| 124 | $('.pb-table tr td.' + ac).removeClass(ac); | 143 | $('.pb-table tr td.' + ac).removeClass(ac); |
| @@ -128,6 +147,10 @@ var _menu = (function() { | @@ -128,6 +147,10 @@ var _menu = (function() { | ||
| 128 | $('.pb-table.data tr td.selected[name=lineNo]').removeClass('selected'); | 147 | $('.pb-table.data tr td.selected[name=lineNo]').removeClass('selected'); |
| 129 | 148 | ||
| 130 | prveSelRow = null; | 149 | prveSelRow = null; |
| 150 | + if(layerTip){ | ||
| 151 | + layer.close(layerTip); | ||
| 152 | + layerTip = null; | ||
| 153 | + } | ||
| 131 | } | 154 | } |
| 132 | 155 | ||
| 133 | //根据起止行号选中多行 | 156 | //根据起止行号选中多行 |
| @@ -163,14 +186,34 @@ var _menu = (function() { | @@ -163,14 +186,34 @@ var _menu = (function() { | ||
| 163 | title: '待发调整', | 186 | title: '待发调整', |
| 164 | success: function(){ | 187 | success: function(){ |
| 165 | dictionaryUtils.transformDom($('#outgoAdjustForm .nt-dictionary')); | 188 | dictionaryUtils.transformDom($('#outgoAdjustForm .nt-dictionary')); |
| 189 | + //驾驶员 | ||
| 190 | + $.get('/realSchedule/driver', {lineCode: schedul.xlBm}, function(rs){ | ||
| 191 | + initPinYinSelect2('#outgoAdjustForm select[name=jsy]', rs, function(that){ | ||
| 192 | + //默认选中 | ||
| 193 | + that.val(schedul.jGh + '/' + schedul.jName).change(); | ||
| 194 | + }); | ||
| 195 | + }); | ||
| 196 | + //售票员 | ||
| 197 | + $.get('/realSchedule/conductor', {lineCode: schedul.xlBm}, function(rs){ | ||
| 198 | + initPinYinSelect2('#outgoAdjustForm select[name=spy]' , rs, function(that){ | ||
| 199 | + //默认选中 | ||
| 200 | + that.val(schedul.sGh + '/' + schedul.sName).change(); | ||
| 201 | + }); | ||
| 202 | + }); | ||
| 203 | + //车辆 | ||
| 204 | + $.get('/realSchedule/cars', {lineCode: schedul.xlBm}, function(rs){ | ||
| 205 | + $('#outgoAdjustForm select[name=clZbh]').select2({data: rs}).val(schedul.clZbh).change(); | ||
| 206 | + }); | ||
| 207 | + | ||
| 166 | $('#outgoAdjustForm button.confirm').one('click', function(){ | 208 | $('#outgoAdjustForm button.confirm').one('click', function(){ |
| 209 | + | ||
| 167 | var params = $('#outgoAdjustForm').serializeJSON(); | 210 | var params = $('#outgoAdjustForm').serializeJSON(); |
| 168 | $post('/realSchedule/outgoAdjust', params, function(rs){ | 211 | $post('/realSchedule/outgoAdjust', params, function(rs){ |
| 169 | layer.close(index); | 212 | layer.close(index); |
| 170 | - layer.msg('调整成功!'); | ||
| 171 | schedul.dfsj = rs.dfsj; | 213 | schedul.dfsj = rs.dfsj; |
| 172 | schedul.remarks = rs.remarks; | 214 | schedul.remarks = rs.remarks; |
| 173 | _alone.refreshSchedule(schedul); | 215 | _alone.refreshSchedule(schedul); |
| 216 | + layer.msg('调整成功!'); | ||
| 174 | }); | 217 | }); |
| 175 | }); | 218 | }); |
| 176 | } | 219 | } |
| @@ -413,6 +456,64 @@ var _menu = (function() { | @@ -413,6 +456,64 @@ var _menu = (function() { | ||
| 413 | layer.alert('发送调度指令失败', {icon: 2, title: '操作失败'}); | 456 | layer.alert('发送调度指令失败', {icon: 2, title: '操作失败'}); |
| 414 | }); | 457 | }); |
| 415 | }); | 458 | }); |
| 459 | + }, | ||
| 460 | + //发车信息微调 | ||
| 461 | + schInfoFineTune: function(schedul){ | ||
| 462 | + var index = layer.open({ | ||
| 463 | + type: 1, | ||
| 464 | + area: '630px', | ||
| 465 | + maxmin: true, | ||
| 466 | + content: template('schinfo_fine_tune_temp', schedul), | ||
| 467 | + shift: 5, | ||
| 468 | + title: '发车信息微调', | ||
| 469 | + success: function(){ | ||
| 470 | + var ntds = $('#schinfoFineTune .nt-dictionary'); | ||
| 471 | + dictionaryUtils.transformDom(ntds); | ||
| 472 | + //驾驶员 | ||
| 473 | + $.get('/realSchedule/driver', {lineCode: schedul.xlBm}, function(rs){ | ||
| 474 | + initPinYinSelect2('#schinfoFineTune select[name=jsy]', rs, function(that){ | ||
| 475 | + //默认选中 | ||
| 476 | + that.val(schedul.jGh + '/' + schedul.jName).change(); | ||
| 477 | + }); | ||
| 478 | + | ||
| 479 | + }); | ||
| 480 | + //售票员 | ||
| 481 | + $.get('/realSchedule/conductor', {lineCode: schedul.xlBm}, function(rs){ | ||
| 482 | + initPinYinSelect2('#schinfoFineTune select[name=spy]' , rs, function(rs){ | ||
| 483 | + initPinYinSelect2('#outgoAdjustForm select[name=spy]' , rs, function(that){ | ||
| 484 | + //默认选中 | ||
| 485 | + that.val(schedul.sGh + '/' + schedul.sName).change(); | ||
| 486 | + }); | ||
| 487 | + }); | ||
| 488 | + }); | ||
| 489 | + //车辆 | ||
| 490 | + $.get('/realSchedule/cars', {lineCode: schedul.xlBm}, function(rs){ | ||
| 491 | + $('#schinfoFineTune select[name=clZbh]').select2({data: rs}).val(schedul.clZbh).change(); | ||
| 492 | + }); | ||
| 493 | + | ||
| 494 | + | ||
| 495 | + //调整说明 | ||
| 496 | + $('#schinfoFineTune select[name=reason]').on('change', function(){ | ||
| 497 | + var t = $(this).val(); | ||
| 498 | + if(!t) return; | ||
| 499 | + var textarea = $('#schinfoFineTune textarea[name=remarks]'); | ||
| 500 | + textarea.val(textarea.val() + t + ','); | ||
| 501 | + }); | ||
| 502 | + //确定 | ||
| 503 | + $('#schinfoFineTune button.confirm').on('click', function(){ | ||
| 504 | + var params = $('form#schinfoFineTune').serializeJSON(); | ||
| 505 | + if(!$.trim(params.fcsj)){ | ||
| 506 | + layer.msg('计发时间不能为空!'); | ||
| 507 | + return; | ||
| 508 | + } | ||
| 509 | + $post('/realSchedule/schInfoFineTune', params, function(rs){ | ||
| 510 | + layer.close(index); | ||
| 511 | + if(rs.t) | ||
| 512 | + _alone.refreshSchedule(rs.t); | ||
| 513 | + }); | ||
| 514 | + }); | ||
| 515 | + } | ||
| 516 | + }); | ||
| 416 | } | 517 | } |
| 417 | } | 518 | } |
| 418 | 519 |
src/main/resources/static/pages/control/line/js/webSocketHandle.js
| @@ -8,7 +8,7 @@ setTimeout(function(){ | @@ -8,7 +8,7 @@ setTimeout(function(){ | ||
| 8 | $.post('/realSchedule/registerLine', {lineCodes: lineCodes} | 8 | $.post('/realSchedule/registerLine', {lineCodes: lineCodes} |
| 9 | ,function(rs){ | 9 | ,function(rs){ |
| 10 | if(rs == 0){ | 10 | if(rs == 0){ |
| 11 | - layer.msg('注册线路成功!'); | 11 | + console.log('注册线路成功!'); |
| 12 | initWebSocket(); | 12 | initWebSocket(); |
| 13 | } | 13 | } |
| 14 | }); | 14 | }); |
src/main/resources/static/pages/control/line/temps/alone_tp.html
| @@ -212,7 +212,7 @@ | @@ -212,7 +212,7 @@ | ||
| 212 | <div class="form-custom-row"> | 212 | <div class="form-custom-row"> |
| 213 | <div class="item"> | 213 | <div class="item"> |
| 214 | <span class="item-label" style="width: 80px;">班次类型:</span> | 214 | <span class="item-label" style="width: 80px;">班次类型:</span> |
| 215 | - <input class="form-control nt-dictionary" disabled data-code={{bcType}} data-group=ScheduleType> | 215 | + <select class="form-control nt-dictionary" data-code={{bcType}} data-group=ScheduleType></select> |
| 216 | </div> | 216 | </div> |
| 217 | </div> | 217 | </div> |
| 218 | <div class="form-custom-row"> | 218 | <div class="form-custom-row"> |
| @@ -236,7 +236,7 @@ | @@ -236,7 +236,7 @@ | ||
| 236 | <div class="form-custom-row"> | 236 | <div class="form-custom-row"> |
| 237 | <div class="item"> | 237 | <div class="item"> |
| 238 | <span class="item-label" style="width: 80px;">车辆编码: </span> | 238 | <span class="item-label" style="width: 80px;">车辆编码: </span> |
| 239 | - <input class="form-control" disabled value="{{clZbh}}" name="clZbh"> | 239 | + <select class="form-control" value="{{clZbh}}" name="clZbh"></select> |
| 240 | </div> | 240 | </div> |
| 241 | <div class="item"> | 241 | <div class="item"> |
| 242 | <span class="item-label" style="width: 80px;">路 牌: </span> | 242 | <span class="item-label" style="width: 80px;">路 牌: </span> |
| @@ -258,11 +258,11 @@ | @@ -258,11 +258,11 @@ | ||
| 258 | <div class="form-custom-row"> | 258 | <div class="form-custom-row"> |
| 259 | <div class="item"> | 259 | <div class="item"> |
| 260 | <span class="item-label" style="width: 80px;">驾驶员: </span> | 260 | <span class="item-label" style="width: 80px;">驾驶员: </span> |
| 261 | - <input class="form-control" disabled value="{{jName}}" name="jName"> | 261 | + <select class="form-control" value="{{jName}}" name="jsy"></select> |
| 262 | </div> | 262 | </div> |
| 263 | <div class="item"> | 263 | <div class="item"> |
| 264 | <span class="item-label" style="width: 80px;">售票员: </span> | 264 | <span class="item-label" style="width: 80px;">售票员: </span> |
| 265 | - <input class="form-control" disabled value="{{sName}}" name="sName"> | 265 | + <select class="form-control" value="{{sName}}" name="spy"></select> |
| 266 | </div> | 266 | </div> |
| 267 | </div> | 267 | </div> |
| 268 | <hr> | 268 | <hr> |
| @@ -351,6 +351,105 @@ | @@ -351,6 +351,105 @@ | ||
| 351 | </form> | 351 | </form> |
| 352 | </script> | 352 | </script> |
| 353 | 353 | ||
| 354 | +<!-- 发车信息微调 --> | ||
| 355 | +<script id="schinfo_fine_tune_temp" type="text/html"> | ||
| 356 | +<form action="#" class="form-horizontal form-custom" id="schinfoFineTune"> | ||
| 357 | + <input value={{id}} type="hidden" name="id"> | ||
| 358 | + <div class="form-body"> | ||
| 359 | + <div class="form-custom-row"> | ||
| 360 | + <div class="item"> | ||
| 361 | + <span class="item-label" style="width: 80px;">发车站点: </span> | ||
| 362 | + <input class="form-control" disabled value="{{qdzName}}" name="qdzName"> | ||
| 363 | + </div> | ||
| 364 | + <div class="item"> | ||
| 365 | + <span class="item-label" style="width: 80px;">结束站点: </span> | ||
| 366 | + <input class="form-control" disabled value="{{zdzName}}" name="zdzName"> | ||
| 367 | + </div> | ||
| 368 | + </div> | ||
| 369 | + | ||
| 370 | + <div class="form-custom-row"> | ||
| 371 | + <div class="item"> | ||
| 372 | + <span class="item-label" style="width: 80px;">车辆编码: </span> | ||
| 373 | + <select class="form-control" value="{{clZbh}}" name="clZbh"></select> | ||
| 374 | + </div> | ||
| 375 | + <div class="item"> | ||
| 376 | + <span class="item-label" style="width: 80px;">路 牌: </span> | ||
| 377 | + <input class="form-control" disabled value="{{lpName}}" name="lpName"> | ||
| 378 | + </div> | ||
| 379 | + </div> | ||
| 380 | + | ||
| 381 | + <div class="form-custom-row"> | ||
| 382 | + <div class="item"> | ||
| 383 | + <span class="item-label" style="width: 80px;">驾驶员: </span> | ||
| 384 | + <select class="form-control" value="{{jName}}" name="jsy"></select> | ||
| 385 | + </div> | ||
| 386 | + <div class="item"> | ||
| 387 | + <span class="item-label" style="width: 80px;">售票员: </span> | ||
| 388 | + <select class="form-control" value="{{sName}}" name="spy"></select> | ||
| 389 | + </div> | ||
| 390 | + </div> | ||
| 391 | + | ||
| 392 | + <div class="form-custom-row"> | ||
| 393 | + <div class="item"> | ||
| 394 | + <span class="item-label" style="width: 80px;">计发时刻: </span> | ||
| 395 | + <input type="time" class="form-control" value="{{fcsj}}" name="fcsj"> | ||
| 396 | + </div> | ||
| 397 | + <div class="item"> | ||
| 398 | + <span class="item-label" style="width: 80px;">实际时刻: </span> | ||
| 399 | + <input type="time" class="form-control" value="{{fcsjActual}}" name="fcsjActual"> | ||
| 400 | + </div> | ||
| 401 | + </div> | ||
| 402 | + | ||
| 403 | + <div class="form-custom-row"> | ||
| 404 | + <div class="item"> | ||
| 405 | + <span class="item-label" style="width: 80px;">到达时刻: </span> | ||
| 406 | + <input type="time" class="form-control" value="{{zdsjActual}}" name="zdsjActual"> | ||
| 407 | + </div> | ||
| 408 | + <div class="item"> | ||
| 409 | + <span class="item-label" style="width: 80px;">班次类型: </span> | ||
| 410 | + <select type="text" class="form-control nt-dictionary" data-group="ScheduleType" data-code="{{bcType}}" name="bcType"></select> | ||
| 411 | + </div> | ||
| 412 | + </div> | ||
| 413 | + | ||
| 414 | + <div class="form-custom-row"> | ||
| 415 | + <div class="item full"> | ||
| 416 | + <span class="item-label" style="width: 80px;">调整说明: </span><br> | ||
| 417 | + <select class="form-control" style="width: 100%;margin-top: 4px;" name="reason"> | ||
| 418 | + <option value="">请选择..</option> | ||
| 419 | + <option value="配车">配车</option> | ||
| 420 | + <option value="保养">保养</option> | ||
| 421 | + <option value="故障">故障</option> | ||
| 422 | + <option value="肇事">肇事</option> | ||
| 423 | + <option value="路阻">路阻</option> | ||
| 424 | + <option value="纠纷">纠纷</option> | ||
| 425 | + <option value="缺人">缺人</option> | ||
| 426 | + <option value="客稀">客稀</option> | ||
| 427 | + <option value="缺车">缺车</option> | ||
| 428 | + <option value="气候">气候</option> | ||
| 429 | + <option value="援外">援外</option> | ||
| 430 | + <option value="吊慢">吊慢</option> | ||
| 431 | + <option value="抽减">抽减</option> | ||
| 432 | + <option value="其他">其他</option> | ||
| 433 | + </select> | ||
| 434 | + </div> | ||
| 435 | + </div> | ||
| 436 | + | ||
| 437 | + <div class="form-custom-row"> | ||
| 438 | + <div class="item full"> | ||
| 439 | + <textarea class="form-control" rows="4" placeholder="备注" name="remarks">{{remarks}}</textarea> | ||
| 440 | + </div> | ||
| 441 | + </div> | ||
| 442 | + | ||
| 443 | + <hr> | ||
| 444 | + <div class="form-custom-footer"> | ||
| 445 | + <button type="button" class="btn blue-madison confirm"> <i class="fa fa-check"></i> 确 定 </button> | ||
| 446 | + <button type="button" class="btn layui-layer-close"> 取消 </button> | ||
| 447 | + </div> | ||
| 448 | + </div> | ||
| 449 | +</form> | ||
| 450 | +<br> | ||
| 451 | +</script> | ||
| 452 | + | ||
| 354 | <script id="real_outgo_adjust_body_temp" type="text/html"> | 453 | <script id="real_outgo_adjust_body_temp" type="text/html"> |
| 355 | <form action="#" class="form-horizontal form-custom" id="realOutgoAdjust"> | 454 | <form action="#" class="form-horizontal form-custom" id="realOutgoAdjust"> |
| 356 | <input type="hidden" name="id" value={{id}}> | 455 | <input type="hidden" name="id" value={{id}}> |
| @@ -396,4 +495,18 @@ | @@ -396,4 +495,18 @@ | ||
| 396 | <button type="button" class="btn layui-layer-close"> 取消 </button> | 495 | <button type="button" class="btn layui-layer-close"> 取消 </button> |
| 397 | </div> | 496 | </div> |
| 398 | </form> | 497 | </form> |
| 399 | -</script> | ||
| 400 | \ No newline at end of file | 498 | \ No newline at end of file |
| 499 | +</script> | ||
| 500 | + | ||
| 501 | +<script id="sfsj_sch-detail-temp" type="text/html"> | ||
| 502 | +<ul class="sfsj-sch-detail"> | ||
| 503 | + <li><span>路牌名:</span>{{lpName}}</li> | ||
| 504 | + <li><span>车辆编码:</span>{{clZbh}}</li> | ||
| 505 | + <li><span>计发时刻:</span>{{fcsj}}</li> | ||
| 506 | + <li><span>实发时刻:</span>{{fcsjActual}}</li> | ||
| 507 | + <li><span>计达时刻:</span>{{zdsj}}</li> | ||
| 508 | + <li><span>实达时刻:</span>{{zdsjActual}}</li> | ||
| 509 | + <li><span>驾驶员:</span>{{jName}}</li> | ||
| 510 | + <li><span>售票员:</span>{{sName}}</li> | ||
| 511 | + <li><span>终点站:</span>{{zdzName}}</li> | ||
| 512 | +</ul> | ||
| 513 | +</script> |
src/main/resources/static/pages/control/line/temps/home_table_tp.html deleted
100644 → 0
| 1 | -<script id="home_table_temp" type="text/html"> | ||
| 2 | -{{each list as obj i}} | ||
| 3 | -<tr> | ||
| 4 | - <td style="width: 22%;"> {{obj.nbbm}} </td> | ||
| 5 | - <td style="width: 17%;"> | ||
| 6 | - {{if obj.currSch != null}} | ||
| 7 | - {{obj.currSch.lpName}} | ||
| 8 | - {{else}} | ||
| 9 | - 无 | ||
| 10 | - {{/if}} | ||
| 11 | - </td> | ||
| 12 | - <td style="width: 17%;"> {{obj.speed}} </td> | ||
| 13 | - <td style="width: 22%;" > 暂无 </td> | ||
| 14 | - <td style="width: 22%;" class="col_hide_1680"> | ||
| 15 | -{{if obj.nextSch != null}} | ||
| 16 | - {{obj.nextSch.dfsj}} | ||
| 17 | -{{else}} | ||
| 18 | - 无 | ||
| 19 | -{{/if}} | ||
| 20 | - </td> | ||
| 21 | -</tr> | ||
| 22 | -{{/each}} | ||
| 23 | -</script> | ||
| 24 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/control/line/temps/home_tp.html
| @@ -43,7 +43,8 @@ | @@ -43,7 +43,8 @@ | ||
| 43 | <table | 43 | <table |
| 44 | class="table table-striped table-bordered table-advance table-hover vehicDataTable" | 44 | class="table table-striped table-bordered table-advance table-hover vehicDataTable" |
| 45 | style="table-layout: fixed;" id="tab_{{lineObj.lineCode}}_0"> | 45 | style="table-layout: fixed;" id="tab_{{lineObj.lineCode}}_0"> |
| 46 | - <tbody></tbody> | 46 | + <tbody> |
| 47 | + </tbody> | ||
| 47 | </table> | 48 | </table> |
| 48 | </div> | 49 | </div> |
| 49 | </div> | 50 | </div> |
| @@ -118,6 +119,30 @@ | @@ -118,6 +119,30 @@ | ||
| 118 | </div> | 119 | </div> |
| 119 | </script> | 120 | </script> |
| 120 | 121 | ||
| 122 | +<script id="home_table_temp" type="text/html"> | ||
| 123 | +{{each list as obj i}} | ||
| 124 | +<tr data-nbbm="{{obj.nbbm}}" data-device="{{obj.deviceId}}"> | ||
| 125 | + <td style="width: 22%;"> {{obj.nbbm}} </td> | ||
| 126 | + <td style="width: 17%;"> | ||
| 127 | + {{if obj.currSch != null}} | ||
| 128 | + {{obj.currSch.lpName}} | ||
| 129 | + {{else}} | ||
| 130 | + 无 | ||
| 131 | + {{/if}} | ||
| 132 | + </td> | ||
| 133 | + <td style="width: 17%;"> {{obj.speed}} </td> | ||
| 134 | + <td style="width: 22%;" > 暂无 </td> | ||
| 135 | + <td style="width: 22%;" class="col_hide_1680"> | ||
| 136 | +{{if obj.nextSch != null}} | ||
| 137 | + {{obj.nextSch.dfsj}} | ||
| 138 | +{{else}} | ||
| 139 | + 无 | ||
| 140 | +{{/if}} | ||
| 141 | + </td> | ||
| 142 | +</tr> | ||
| 143 | +{{/each}} | ||
| 144 | +</script> | ||
| 145 | + | ||
| 121 | <script id="ctrl_f_search_temp" type="text/html"> | 146 | <script id="ctrl_f_search_temp" type="text/html"> |
| 122 | <div class="ctrl_f_search"> | 147 | <div class="ctrl_f_search"> |
| 123 | <select class="form-control pd90" id="ctrlFSearchSelect" ></select> | 148 | <select class="form-control pd90" id="ctrlFSearchSelect" ></select> |