Commit 1e9c5e4448edf5aee07e398d49d673a887222d20
1 parent
58d9c438
update...
Showing
20 changed files
with
409 additions
and
78 deletions
src/main/java/com/bsth/controller/gps/GpsController.java
| @@ -108,4 +108,22 @@ public class GpsController { | @@ -108,4 +108,22 @@ public class GpsController { | ||
| 108 | public Map<String, Object> history_v2(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et){ | 108 | public Map<String, Object> history_v2(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et){ |
| 109 | return gpsService.history_v2(nbbm, st, et); | 109 | return gpsService.history_v2(nbbm, st, et); |
| 110 | } | 110 | } |
| 111 | + | ||
| 112 | + /** | ||
| 113 | + * 安全驾驶数据 分页查询 | ||
| 114 | + * @param map | ||
| 115 | + * @param page | ||
| 116 | + * @param size | ||
| 117 | + * @param order | ||
| 118 | + * @param direction | ||
| 119 | + * @return | ||
| 120 | + */ | ||
| 121 | + @RequestMapping(value = "/safeDriv") | ||
| 122 | + public Map<String, Object> safeDrivList(@RequestParam Map<String, Object> map, | ||
| 123 | + @RequestParam(defaultValue = "0") int page, | ||
| 124 | + @RequestParam(defaultValue = "15") int size, | ||
| 125 | + @RequestParam(defaultValue = "timestamp") String order, | ||
| 126 | + @RequestParam(defaultValue = "DESC") String direction){ | ||
| 127 | + return gpsService.safeDrivList(map , page, size, order, direction); | ||
| 128 | + } | ||
| 111 | } | 129 | } |
src/main/java/com/bsth/data/safe_driv/SafeDriv.java
| @@ -27,6 +27,8 @@ public class SafeDriv { | @@ -27,6 +27,8 @@ public class SafeDriv { | ||
| 27 | */ | 27 | */ |
| 28 | private String xlmc; | 28 | private String xlmc; |
| 29 | 29 | ||
| 30 | + private String xlbm; | ||
| 31 | + | ||
| 30 | /** | 32 | /** |
| 31 | * 车辆自编号 | 33 | * 车辆自编号 |
| 32 | */ | 34 | */ |
| @@ -127,4 +129,12 @@ public class SafeDriv { | @@ -127,4 +129,12 @@ public class SafeDriv { | ||
| 127 | public void setTs(Long ts) { | 129 | public void setTs(Long ts) { |
| 128 | this.ts = ts; | 130 | this.ts = ts; |
| 129 | } | 131 | } |
| 132 | + | ||
| 133 | + public String getXlbm() { | ||
| 134 | + return xlbm; | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + public void setXlbm(String xlbm) { | ||
| 138 | + this.xlbm = xlbm; | ||
| 139 | + } | ||
| 130 | } | 140 | } |
src/main/java/com/bsth/data/safe_driv/SafeDrivCenter.java
| 1 | package com.bsth.data.safe_driv; | 1 | package com.bsth.data.safe_driv; |
| 2 | 2 | ||
| 3 | -import com.bsth.Application; | ||
| 4 | import com.bsth.websocket.handler.SendUtils; | 3 | import com.bsth.websocket.handler.SendUtils; |
| 5 | import org.joda.time.format.DateTimeFormat; | 4 | import org.joda.time.format.DateTimeFormat; |
| 6 | import org.joda.time.format.DateTimeFormatter; | 5 | import org.joda.time.format.DateTimeFormatter; |
| @@ -15,7 +14,6 @@ import java.util.HashMap; | @@ -15,7 +14,6 @@ import java.util.HashMap; | ||
| 15 | import java.util.HashSet; | 14 | import java.util.HashSet; |
| 16 | import java.util.Map; | 15 | import java.util.Map; |
| 17 | import java.util.Set; | 16 | import java.util.Set; |
| 18 | -import java.util.concurrent.TimeUnit; | ||
| 19 | 17 | ||
| 20 | /** | 18 | /** |
| 21 | * 安全驾驶 | 19 | * 安全驾驶 |
| @@ -44,7 +42,6 @@ public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware | @@ -44,7 +42,6 @@ public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware | ||
| 44 | private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"); | 42 | private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
| 45 | public static void put(SafeDriv sd){ | 43 | public static void put(SafeDriv sd){ |
| 46 | sd.setTs(fmt.parseMillis(sd.getStartime())); | 44 | sd.setTs(fmt.parseMillis(sd.getStartime())); |
| 47 | - data.add(sd); | ||
| 48 | 45 | ||
| 49 | if(sd.getYczltype().indexOf("A") == -1) | 46 | if(sd.getYczltype().indexOf("A") == -1) |
| 50 | sd.setYczltype("A" + sd.getYczltype()); | 47 | sd.setYczltype("A" + sd.getYczltype()); |
| @@ -53,15 +50,24 @@ public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware | @@ -53,15 +50,24 @@ public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware | ||
| 53 | if(old == null || sd.getTs() > old.getTs()){ | 50 | if(old == null || sd.getTs() > old.getTs()){ |
| 54 | //通知客户端 | 51 | //通知客户端 |
| 55 | sendUtils.sendSafeDriv(sd); | 52 | sendUtils.sendSafeDriv(sd); |
| 53 | + data.add(sd); | ||
| 54 | + safeMap.put(sd.getClzbh(), sd); | ||
| 56 | } | 55 | } |
| 56 | + } | ||
| 57 | + | ||
| 58 | + public static Set<SafeDriv> findAll(){ | ||
| 59 | + return data; | ||
| 60 | + } | ||
| 57 | 61 | ||
| 58 | - safeMap.put(sd.getClzbh(), sd); | 62 | + public static void clear(){ |
| 63 | + data = new HashSet<>(); | ||
| 64 | + safeMap = new HashMap<>(); | ||
| 59 | } | 65 | } |
| 60 | 66 | ||
| 61 | @Override | 67 | @Override |
| 62 | public void run(String... strings) throws Exception { | 68 | public void run(String... strings) throws Exception { |
| 63 | //定时加载安全驾驶数据 | 69 | //定时加载安全驾驶数据 |
| 64 | - Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 60, 5, TimeUnit.SECONDS); | 70 | + //Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 60, 60, TimeUnit.SECONDS); |
| 65 | } | 71 | } |
| 66 | 72 | ||
| 67 | @Override | 73 | @Override |
src/main/java/com/bsth/data/schedule/thread/CalcOilThread.java
| 1 | package com.bsth.data.schedule.thread; | 1 | package com.bsth.data.schedule.thread; |
| 2 | 2 | ||
| 3 | +import com.bsth.data.safe_driv.SafeDrivCenter; | ||
| 3 | import com.bsth.service.oil.YlbService; | 4 | import com.bsth.service.oil.YlbService; |
| 4 | import org.slf4j.Logger; | 5 | import org.slf4j.Logger; |
| 5 | import org.slf4j.LoggerFactory; | 6 | import org.slf4j.LoggerFactory; |
| @@ -24,6 +25,9 @@ public class CalcOilThread extends Thread{ | @@ -24,6 +25,9 @@ public class CalcOilThread extends Thread{ | ||
| 24 | logger.info("开始计算路单里程加注量...."); | 25 | logger.info("开始计算路单里程加注量...."); |
| 25 | ylbService.obtainDsq(); | 26 | ylbService.obtainDsq(); |
| 26 | logger.info("计算路单里程加注量结束!"); | 27 | logger.info("计算路单里程加注量结束!"); |
| 28 | + | ||
| 29 | + //清除安全驾驶数据 先临时蹭这个线程 | ||
| 30 | + SafeDrivCenter.clear(); | ||
| 27 | } catch(Exception e){ | 31 | } catch(Exception e){ |
| 28 | logger.error("计算路单里程加注量失败",e); | 32 | logger.error("计算路单里程加注量失败",e); |
| 29 | } | 33 | } |
src/main/java/com/bsth/entity/realcontrol/ChildTaskPlan.java
| @@ -223,7 +223,7 @@ public class ChildTaskPlan { | @@ -223,7 +223,7 @@ public class ChildTaskPlan { | ||
| 223 | 223 | ||
| 224 | @Override | 224 | @Override |
| 225 | public int hashCode() { | 225 | public int hashCode() { |
| 226 | - return ("" + this.getId() + this.getSchedule().getId()).hashCode(); | 226 | + return ("cTask" + this.getId() + this.getSchedule().getId()).hashCode(); |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | @Override | 229 | @Override |
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
| @@ -171,7 +171,7 @@ public class ScheduleRealInfo { | @@ -171,7 +171,7 @@ public class ScheduleRealInfo { | ||
| 171 | private String qdzArrDatesj; | 171 | private String qdzArrDatesj; |
| 172 | 172 | ||
| 173 | /** 子任务 */ | 173 | /** 子任务 */ |
| 174 | - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) | 174 | + @OneToMany(fetch = FetchType.LAZY, mappedBy = "schedule") |
| 175 | private Set<ChildTaskPlan> cTasks = new HashSet<>(); | 175 | private Set<ChildTaskPlan> cTasks = new HashSet<>(); |
| 176 | 176 | ||
| 177 | /** 关联的公司名称 */ | 177 | /** 关联的公司名称 */ |
src/main/java/com/bsth/service/gps/GpsService.java
| @@ -27,4 +27,6 @@ public interface GpsService { | @@ -27,4 +27,6 @@ public interface GpsService { | ||
| 27 | List<GpsSpeed_DTO> speeds(String nbbm, long st, long et); | 27 | List<GpsSpeed_DTO> speeds(String nbbm, long st, long et); |
| 28 | 28 | ||
| 29 | List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et); | 29 | List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et); |
| 30 | + | ||
| 31 | + Map<String, Object> safeDrivList(Map<String, Object> map, int page, int size, String order, String direction); | ||
| 30 | } | 32 | } |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| @@ -6,6 +6,8 @@ import com.bsth.data.arrival.ArrivalEntity; | @@ -6,6 +6,8 @@ import com.bsth.data.arrival.ArrivalEntity; | ||
| 6 | import com.bsth.data.gpsdata.GpsEntity; | 6 | import com.bsth.data.gpsdata.GpsEntity; |
| 7 | import com.bsth.data.gpsdata.GpsRealData; | 7 | import com.bsth.data.gpsdata.GpsRealData; |
| 8 | import com.bsth.data.gpsdata.arrival.utils.GeoUtils; | 8 | import com.bsth.data.gpsdata.arrival.utils.GeoUtils; |
| 9 | +import com.bsth.data.safe_driv.SafeDriv; | ||
| 10 | +import com.bsth.data.safe_driv.SafeDrivCenter; | ||
| 9 | import com.bsth.data.schedule.DayOfSchedule; | 11 | import com.bsth.data.schedule.DayOfSchedule; |
| 10 | import com.bsth.entity.realcontrol.ScheduleRealInfo; | 12 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 11 | import com.bsth.repository.CarParkRepository; | 13 | import com.bsth.repository.CarParkRepository; |
| @@ -357,17 +359,12 @@ public class GpsServiceImpl implements GpsService { | @@ -357,17 +359,12 @@ public class GpsServiceImpl implements GpsService { | ||
| 357 | //过滤后的 | 359 | //过滤后的 |
| 358 | List<GpsEntity> rs = new ArrayList<>(); | 360 | List<GpsEntity> rs = new ArrayList<>(); |
| 359 | Field[] fields = GpsEntity.class.getDeclaredFields(); | 361 | Field[] fields = GpsEntity.class.getDeclaredFields(); |
| 360 | - //排序字段 | ||
| 361 | - Field orderField = null; | ||
| 362 | //参与过滤的字段 | 362 | //参与过滤的字段 |
| 363 | List<Field> fs = new ArrayList<>(); | 363 | List<Field> fs = new ArrayList<>(); |
| 364 | for (Field f : fields) { | 364 | for (Field f : fields) { |
| 365 | f.setAccessible(true); | 365 | f.setAccessible(true); |
| 366 | if (map.containsKey(f.getName())) | 366 | if (map.containsKey(f.getName())) |
| 367 | fs.add(f); | 367 | fs.add(f); |
| 368 | - | ||
| 369 | - if (f.getName().equals(order)) | ||
| 370 | - orderField = f; | ||
| 371 | } | 368 | } |
| 372 | //过滤数据 | 369 | //过滤数据 |
| 373 | for (GpsEntity gps : list) { | 370 | for (GpsEntity gps : list) { |
| @@ -375,9 +372,6 @@ public class GpsServiceImpl implements GpsService { | @@ -375,9 +372,6 @@ public class GpsServiceImpl implements GpsService { | ||
| 375 | rs.add(gps); | 372 | rs.add(gps); |
| 376 | } | 373 | } |
| 377 | 374 | ||
| 378 | - //排序 | ||
| 379 | -/* if (null != orderField) | ||
| 380 | - sortGpsList(orderField, rs);*/ | ||
| 381 | //时间戳排序 | 375 | //时间戳排序 |
| 382 | Collections.sort(rs, new Comparator<GpsEntity>() { | 376 | Collections.sort(rs, new Comparator<GpsEntity>() { |
| 383 | @Override | 377 | @Override |
| @@ -593,6 +587,52 @@ public class GpsServiceImpl implements GpsService { | @@ -593,6 +587,52 @@ public class GpsServiceImpl implements GpsService { | ||
| 593 | return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et)); | 587 | return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et)); |
| 594 | } | 588 | } |
| 595 | 589 | ||
| 590 | + @Override | ||
| 591 | + public Map<String, Object> safeDrivList(Map<String, Object> map, int page, int size, String order, String direction) { | ||
| 592 | + Map<String, Object> rsMap = new HashMap<>(); | ||
| 593 | + try { | ||
| 594 | + //全量 | ||
| 595 | + List<SafeDriv> list = new ArrayList<>(SafeDrivCenter.findAll()); | ||
| 596 | + //过滤后的 | ||
| 597 | + List<SafeDriv> rs = new ArrayList<>(); | ||
| 598 | + Field[] fields = SafeDriv.class.getDeclaredFields(); | ||
| 599 | + //参与过滤的字段 | ||
| 600 | + List<Field> fs = new ArrayList<>(); | ||
| 601 | + for (Field f : fields) { | ||
| 602 | + f.setAccessible(true); | ||
| 603 | + if (map.containsKey(f.getName())) | ||
| 604 | + fs.add(f); | ||
| 605 | + } | ||
| 606 | + //过滤数据 | ||
| 607 | + for (SafeDriv sd : list) { | ||
| 608 | + if (fieldEquals(fs, sd, map)) | ||
| 609 | + rs.add(sd); | ||
| 610 | + } | ||
| 611 | + | ||
| 612 | + //时间戳排序 | ||
| 613 | + Collections.sort(rs, new Comparator<SafeDriv>() { | ||
| 614 | + @Override | ||
| 615 | + public int compare(SafeDriv o1, SafeDriv o2) { | ||
| 616 | + return o2.getTs().intValue() - o1.getTs().intValue(); | ||
| 617 | + } | ||
| 618 | + }); | ||
| 619 | + | ||
| 620 | + //分页 | ||
| 621 | + int count = rs.size(), s = page * size, e = s + size; | ||
| 622 | + if (e > count) | ||
| 623 | + e = count; | ||
| 624 | + | ||
| 625 | + rsMap.put("list", rs.subList(s, e)); | ||
| 626 | + rsMap.put("totalPages", count % size == 0 ? count / size - 1 : count / size); | ||
| 627 | + rsMap.put("page", page); | ||
| 628 | + rsMap.put("status", ResponseCode.SUCCESS); | ||
| 629 | + } catch (Exception e) { | ||
| 630 | + logger.error("", e); | ||
| 631 | + rsMap.put("status", ResponseCode.ERROR); | ||
| 632 | + } | ||
| 633 | + return rsMap; | ||
| 634 | + } | ||
| 635 | + | ||
| 596 | private void matchRoadToGps(HistoryGps_DTO gps, List<Road_DTO> roads) { | 636 | private void matchRoadToGps(HistoryGps_DTO gps, List<Road_DTO> roads) { |
| 597 | double min = -1, distance; | 637 | double min = -1, distance; |
| 598 | Road_DTO nearRoad = null; | 638 | Road_DTO nearRoad = null; |
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
| 1 | package com.bsth.service.realcontrol.impl; | 1 | package com.bsth.service.realcontrol.impl; |
| 2 | 2 | ||
| 3 | +import com.bsth.common.ResponseCode; | ||
| 3 | import com.bsth.data.BasicData; | 4 | import com.bsth.data.BasicData; |
| 4 | -import com.bsth.data.match.Arrival2Schedule; | ||
| 5 | import com.bsth.data.schedule.DayOfSchedule; | 5 | import com.bsth.data.schedule.DayOfSchedule; |
| 6 | import com.bsth.entity.realcontrol.ChildTaskPlan; | 6 | import com.bsth.entity.realcontrol.ChildTaskPlan; |
| 7 | import com.bsth.entity.realcontrol.ScheduleRealInfo; | 7 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| @@ -10,19 +10,19 @@ import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; | @@ -10,19 +10,19 @@ import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; | ||
| 10 | import com.bsth.service.impl.BaseServiceImpl; | 10 | import com.bsth.service.impl.BaseServiceImpl; |
| 11 | import com.bsth.service.realcontrol.ChildTaskPlanService; | 11 | import com.bsth.service.realcontrol.ChildTaskPlanService; |
| 12 | import org.apache.commons.lang3.StringUtils; | 12 | import org.apache.commons.lang3.StringUtils; |
| 13 | +import org.slf4j.Logger; | ||
| 14 | +import org.slf4j.LoggerFactory; | ||
| 13 | import org.springframework.beans.factory.annotation.Autowired; | 15 | import org.springframework.beans.factory.annotation.Autowired; |
| 14 | import org.springframework.jdbc.core.JdbcTemplate; | 16 | import org.springframework.jdbc.core.JdbcTemplate; |
| 15 | import org.springframework.stereotype.Service; | 17 | import org.springframework.stereotype.Service; |
| 16 | 18 | ||
| 17 | import javax.transaction.Transactional; | 19 | import javax.transaction.Transactional; |
| 20 | +import java.util.HashMap; | ||
| 18 | import java.util.Map; | 21 | import java.util.Map; |
| 19 | 22 | ||
| 20 | @Service | 23 | @Service |
| 21 | public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { | 24 | public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { |
| 22 | 25 | ||
| 23 | - /*@Autowired | ||
| 24 | - ScheduleRealInfoServiceImpl scheduleRealInfoService;*/ | ||
| 25 | - | ||
| 26 | @Autowired | 26 | @Autowired |
| 27 | ScheduleRealInfoRepository scheduleRealInfoRepository; | 27 | ScheduleRealInfoRepository scheduleRealInfoRepository; |
| 28 | 28 | ||
| @@ -33,34 +33,41 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | @@ -33,34 +33,41 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | ||
| 33 | DayOfSchedule dayOfSchedule; | 33 | DayOfSchedule dayOfSchedule; |
| 34 | 34 | ||
| 35 | @Autowired | 35 | @Autowired |
| 36 | - Arrival2Schedule arrival2Schedule; | ||
| 37 | - | ||
| 38 | - @Autowired | ||
| 39 | JdbcTemplate jdbcTemplate; | 36 | JdbcTemplate jdbcTemplate; |
| 40 | 37 | ||
| 38 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | ||
| 39 | + | ||
| 41 | @Transactional | 40 | @Transactional |
| 42 | @Override | 41 | @Override |
| 43 | public Map<String, Object> save(ChildTaskPlan t) { | 42 | public Map<String, Object> save(ChildTaskPlan t) { |
| 44 | - ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId()); | ||
| 45 | - Map<String, Object> rs; | ||
| 46 | - //保存起终点名称 | ||
| 47 | - String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_"; | ||
| 48 | - | ||
| 49 | - if(StringUtils.isEmpty(t.getStartStationName())) | ||
| 50 | - t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix)); | ||
| 51 | - | ||
| 52 | - if(StringUtils.isEmpty(t.getEndStationName())) | ||
| 53 | - t.setEndStationName(BasicData.getStationNameByCode(t.getEndStation(), prefix)); | ||
| 54 | - //先持久化子任务 | ||
| 55 | - rs = super.save(t); | ||
| 56 | - //再关联主任务 | ||
| 57 | - sch.getcTasks().add(t); | ||
| 58 | - dayOfSchedule.save(sch); | ||
| 59 | - | ||
| 60 | - rs.put("t", sch); | ||
| 61 | 43 | ||
| 62 | - if (sch.getZdsjActual() == null) | ||
| 63 | - arrival2Schedule.removeExpect(sch.getClZbh()); | 44 | + Map<String, Object> rs = new HashMap(); |
| 45 | + try { | ||
| 46 | + ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId()); | ||
| 47 | + //保存起终点名称 | ||
| 48 | + String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_"; | ||
| 49 | + if(StringUtils.isEmpty(t.getStartStationName())) | ||
| 50 | + t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix)); | ||
| 51 | + | ||
| 52 | + if(StringUtils.isEmpty(t.getEndStationName())) | ||
| 53 | + t.setEndStationName(BasicData.getStationNameByCode(t.getEndStation(), prefix)); | ||
| 54 | + //先持久化子任务 | ||
| 55 | + rs = super.save(t); | ||
| 56 | + //关联主任务 | ||
| 57 | + System.out.println("schschsch: " + sch); | ||
| 58 | + System.out.println("sch.getcTasks()sch.getcTasks(): " + sch.getcTasks()); | ||
| 59 | + sch.getcTasks().add(t); | ||
| 60 | + dayOfSchedule.save(sch); | ||
| 61 | + //直接持久化 | ||
| 62 | + //scheduleRealInfoRepository.save(sch); | ||
| 63 | + | ||
| 64 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 65 | + rs.put("t", sch); | ||
| 66 | + }catch (Exception e){ | ||
| 67 | + logger.error("", e); | ||
| 68 | + rs.put("status", ResponseCode.ERROR); | ||
| 69 | + rs.put("msg", e.getMessage()); | ||
| 70 | + } | ||
| 64 | return rs; | 71 | return rs; |
| 65 | } | 72 | } |
| 66 | 73 | ||
| @@ -69,16 +76,13 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | @@ -69,16 +76,13 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | ||
| 69 | Map<String, Object> rs; | 76 | Map<String, Object> rs; |
| 70 | 77 | ||
| 71 | ChildTaskPlan cPlan = childTaskPlanRepository.findOne(id); | 78 | ChildTaskPlan cPlan = childTaskPlanRepository.findOne(id); |
| 72 | - //解除和主任务关联 | ||
| 73 | - ScheduleRealInfo sch = dayOfSchedule.get(cPlan.getSchedule().getId()); | ||
| 74 | - sch.getcTasks().remove(cPlan); | ||
| 75 | - //删除关联表数据 | ||
| 76 | - jdbcTemplate.execute("delete from bsth_c_s_sp_info_real_c_tasks where bsth_c_s_sp_info_real=" + sch.getId() + " and c_tasks=" + cPlan.getId()); | ||
| 77 | 79 | ||
| 78 | //删除子任务 | 80 | //删除子任务 |
| 79 | rs = super.delete(id); | 81 | rs = super.delete(id); |
| 80 | - dayOfSchedule.save(sch); | ||
| 81 | - | 82 | + //dayOfSchedule.save(sch); |
| 83 | + //解除和主任务关联 | ||
| 84 | + ScheduleRealInfo sch = dayOfSchedule.get(cPlan.getSchedule().getId()); | ||
| 85 | + sch.getcTasks().remove(cPlan); | ||
| 82 | rs.put("t", sch); | 86 | rs.put("t", sch); |
| 83 | return rs; | 87 | return rs; |
| 84 | } | 88 | } |
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/lightbox.min.js
0 → 100644
| 1 | +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ | ||
| 2 | +!function(i){var t;window.UIkit&&(t=i(UIkit)),"function"==typeof define&&define.amd&&define("uikit-lightbox",["uikit"],function(){return t||i(UIkit)})}(function(i){"use strict";function t(t){if(e)return e.lightbox=t,e;e=i.$(['<div class="uk-modal">','<div class="uk-modal-dialog uk-modal-dialog-lightbox uk-slidenav-position" style="margin-left:auto;margin-right:auto;width:200px;height:200px;top:'+Math.abs(window.innerHeight/2-200)+'px;">','<a href="#" class="uk-modal-close uk-close uk-close-alt"></a>','<div class="uk-lightbox-content"></div>','<div class="uk-modal-spinner uk-hidden"></div>',"</div>","</div>"].join("")).appendTo("body"),e.dialog=e.find(".uk-modal-dialog:first"),e.content=e.find(".uk-lightbox-content:first"),e.loader=e.find(".uk-modal-spinner:first"),e.closer=e.find(".uk-close.uk-close-alt"),e.modal=i.modal(e,{modal:!1}),e.on("swipeRight swipeLeft",function(i){e.lightbox["swipeLeft"==i.type?"next":"previous"]()}).on("click","[data-lightbox-previous], [data-lightbox-next]",function(t){t.preventDefault(),e.lightbox[i.$(this).is("[data-lightbox-next]")?"next":"previous"]()}),e.on("hide.uk.modal",function(){e.content.html("")});var o={w:window.innerWidth,h:window.innerHeight};return i.$win.on("load resize orientationchange",i.Utils.debounce(function(){o.w!==window.innerWidth&&e.is(":visible")&&!i.Utils.isFullscreen()&&e.lightbox.fitSize(),o={w:window.innerWidth,h:window.innerHeight}},100)),e.lightbox=t,e}var e,o={};return i.component("lightbox",{defaults:{allowfullscreen:!0,duration:400,group:!1,keyboard:!0},index:0,items:!1,boot:function(){i.$html.on("click","[data-uk-lightbox]",function(t){t.preventDefault();var e=i.$(this);e.data("lightbox")||i.lightbox(e,i.Utils.options(e.attr("data-uk-lightbox"))),e.data("lightbox").show(e)}),i.$doc.on("keyup",function(i){if(e&&e.is(":visible")&&e.lightbox.options.keyboard)switch(i.preventDefault(),i.keyCode){case 37:e.lightbox.previous();break;case 39:e.lightbox.next()}})},init:function(){var t=[];if(this.index=0,this.siblings=[],this.element&&this.element.length){var e=this.options.group?i.$(['[data-uk-lightbox*="'+this.options.group+'"]',"[data-uk-lightbox*='"+this.options.group+"']"].join(",")):this.element;e.each(function(){var e=i.$(this);t.push({source:e.attr("href"),title:e.attr("data-title")||e.attr("title"),type:e.attr("data-lightbox-type")||"auto",link:e})}),this.index=e.index(this.element),this.siblings=t}else this.options.group&&this.options.group.length&&(this.siblings=this.options.group);this.trigger("lightbox-init",[this])},show:function(e){this.modal=t(this),this.modal.dialog.stop(),this.modal.content.stop();var o,n,s=this,h=i.$.Deferred();e=e||0,"object"==typeof e&&this.siblings.forEach(function(i,t){e[0]===i.link[0]&&(e=t)}),0>e?e=this.siblings.length-e:this.siblings[e]||(e=0),n=this.siblings[e],o={lightbox:s,source:n.source,type:n.type,index:e,promise:h,title:n.title,item:n,meta:{content:"",width:null,height:null}},this.index=e,this.modal.content.empty(),this.modal.is(":visible")||(this.modal.content.css({width:"",height:""}).empty(),this.modal.modal.show()),this.modal.loader.removeClass("uk-hidden"),h.promise().done(function(){s.data=o,s.fitSize(o)}).fail(function(){o.meta.content='<div class="uk-position-cover uk-flex uk-flex-middle uk-flex-center"><strong>Loading resource failed!</strong></div>',o.meta.width=400,o.meta.height=300,s.data=o,s.fitSize(o)}),s.trigger("showitem.uk.lightbox",[o])},fitSize:function(){var t=this,e=this.data,o=this.modal.dialog.outerWidth()-this.modal.dialog.width(),n=parseInt(this.modal.dialog.css("margin-top"),10),s=parseInt(this.modal.dialog.css("margin-bottom"),10),h=n+s,a=e.meta.content,l=t.options.duration;this.siblings.length>1&&(a=[a,'<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-previous uk-hidden-touch" data-lightbox-previous></a>','<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-next uk-hidden-touch" data-lightbox-next></a>'].join(""));var d,r,u=i.$("<div> </div>").css({opacity:0,position:"absolute",top:0,left:0,width:"100%","max-width":t.modal.dialog.css("max-width"),padding:t.modal.dialog.css("padding"),margin:t.modal.dialog.css("margin")}),c=e.meta.width,g=e.meta.height;u.appendTo("body").width(),d=u.width(),r=window.innerHeight-h,u.remove(),this.modal.dialog.find(".uk-modal-caption").remove(),e.title&&(this.modal.dialog.append('<div class="uk-modal-caption">'+e.title+"</div>"),r-=this.modal.dialog.find(".uk-modal-caption").outerHeight()),d<e.meta.width&&(g=Math.floor(g*(d/c)),c=d),g>r&&(g=Math.floor(r),c=Math.ceil(e.meta.width*(r/e.meta.height))),this.modal.content.css("opacity",0).width(c).html(a),"iframe"==e.type&&this.modal.content.find("iframe:first").height(g);var m=g+o,p=Math.floor(window.innerHeight/2-m/2)-h;0>p&&(p=0),this.modal.closer.addClass("uk-hidden"),t.modal.data("mwidth")==c&&t.modal.data("mheight")==g&&(l=0),this.modal.dialog.animate({width:c+o,height:g+o,top:p},l,"swing",function(){t.modal.loader.addClass("uk-hidden"),t.modal.content.css({width:""}).animate({opacity:1},function(){t.modal.closer.removeClass("uk-hidden")}),t.modal.data({mwidth:c,mheight:g})})},next:function(){this.show(this.siblings[this.index+1]?this.index+1:0)},previous:function(){this.show(this.siblings[this.index-1]?this.index-1:this.siblings.length-1)}}),i.plugin("lightbox","image",{init:function(i){i.on("showitem.uk.lightbox",function(i,t){if("image"==t.type||t.source&&t.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)){var e=function(i,e,o){t.meta={content:'<img class="uk-responsive-width" width="'+e+'" height="'+o+'" src ="'+i+'">',width:e,height:o},t.type="image",t.promise.resolve()};if(o[t.source])e(t.source,o[t.source].width,o[t.source].height);else{var n=new Image;n.onerror=function(){t.promise.reject("Loading image failed")},n.onload=function(){o[t.source]={width:n.width,height:n.height},e(t.source,o[t.source].width,o[t.source].height)},n.src=t.source}}})}}),i.plugin("lightbox","youtube",{init:function(i){var t=/(\/\/.*?youtube\.[a-z]+)\/watch\?v=([^&]+)&?(.*)/,n=/youtu\.be\/(.*)/;i.on("showitem.uk.lightbox",function(i,s){var h,a,l=function(i,t,o){s.meta={content:'<iframe src="//www.youtube.com/embed/'+i+'" width="'+t+'" height="'+o+'" style="max-width:100%;"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:o},s.type="iframe",s.promise.resolve()};if((a=s.source.match(t))&&(h=a[2]),(a=s.source.match(n))&&(h=a[1]),h){if(o[h])l(h,o[h].width,o[h].height);else{var d=new Image,r=!1;d.onerror=function(){o[h]={width:640,height:320},l(h,o[h].width,o[h].height)},d.onload=function(){120==d.width&&90==d.height?r?(o[h]={width:640,height:320},l(h,o[h].width,o[h].height)):(r=!0,d.src="//img.youtube.com/vi/"+h+"/0.jpg"):(o[h]={width:d.width,height:d.height},l(h,d.width,d.height))},d.src="//img.youtube.com/vi/"+h+"/maxresdefault.jpg"}i.stopImmediatePropagation()}})}}),i.plugin("lightbox","vimeo",{init:function(t){var n,s=/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/;t.on("showitem.uk.lightbox",function(t,h){var a,l=function(i,t,o){h.meta={content:'<iframe src="//player.vimeo.com/video/'+i+'" width="'+t+'" height="'+o+'" style="width:100%;box-sizing:border-box;"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:o},h.type="iframe",h.promise.resolve()};(n=h.source.match(s))&&(a=n[2],o[a]?l(a,o[a].width,o[a].height):i.$.ajax({type:"GET",url:"//vimeo.com/api/oembed.json?url="+encodeURI(h.source),jsonp:"callback",dataType:"jsonp",success:function(i){o[a]={width:i.width,height:i.height},l(a,o[a].width,o[a].height)}}),t.stopImmediatePropagation())})}}),i.plugin("lightbox","video",{init:function(t){t.on("showitem.uk.lightbox",function(t,e){var n=function(i,t,o){e.meta={content:'<video class="uk-responsive-width" src="'+i+'" width="'+t+'" height="'+o+'" controls></video>',width:t,height:o},e.type="video",e.promise.resolve()};if("video"==e.type||e.source.match(/\.(mp4|webm|ogv)$/i))if(o[e.source])n(e.source,o[e.source].width,o[e.source].height);else var s=i.$('<video style="position:fixed;visibility:hidden;top:-10000px;"></video>').attr("src",e.source).appendTo("body"),h=setInterval(function(){s[0].videoWidth&&(clearInterval(h),o[e.source]={width:s[0].videoWidth,height:s[0].videoHeight},n(e.source,o[e.source].width,o[e.source].height),s.remove())},20)})}}),UIkit.plugin("lightbox","iframe",{init:function(i){i.on("showitem.uk.lightbox",function(t,o){var n=function(i,t,n){o.meta={content:'<iframe class="uk-responsive-width" src="'+i+'" width="'+t+'" height="'+n+'"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:n},o.type="iframe",o.promise.resolve()};("iframe"===o.type||o.source.match(/\.(html|php)$/))&&n(o.source,i.options.width||800,i.options.height||600)})}}),i.lightbox.create=function(t,e){if(t){var o,n=[];return t.forEach(function(t){n.push(i.$.extend({source:"",title:"",type:"auto",link:!1},"string"==typeof t?{source:t}:t))}),o=i.lightbox(i.$.extend({},e,{group:n}))}},i.lightbox}); | ||
| 0 | \ No newline at end of file | 3 | \ No newline at end of file |
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css
0 → 100644
| 1 | +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ | ||
| 2 | +.uk-slidenav{display:inline-block;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} | ||
| 0 | \ No newline at end of file | 3 | \ No newline at end of file |
src/main/resources/static/real_control_v2/css/main.css
| @@ -930,18 +930,19 @@ option.oil_station_opt{ | @@ -930,18 +930,19 @@ option.oil_station_opt{ | ||
| 930 | position: absolute; | 930 | position: absolute; |
| 931 | right: 12px; | 931 | right: 12px; |
| 932 | bottom: 12px; | 932 | bottom: 12px; |
| 933 | + z-index: 99; | ||
| 933 | } | 934 | } |
| 934 | 935 | ||
| 935 | .safe_driv_pop{ | 936 | .safe_driv_pop{ |
| 936 | - height: 45px; | ||
| 937 | background: #d44b4b; | 937 | background: #d44b4b; |
| 938 | - color: #f2f2f2; | ||
| 939 | font-size: 15px; | 938 | font-size: 15px; |
| 940 | padding: 9px 10px 0; | 939 | padding: 9px 10px 0; |
| 941 | border: 1px solid #f4f0f0; | 940 | border: 1px solid #f4f0f0; |
| 942 | border-radius: 5px; | 941 | border-radius: 5px; |
| 943 | cursor: pointer; | 942 | cursor: pointer; |
| 944 | box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); | 943 | box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); |
| 944 | + transition: all .03s; | ||
| 945 | + color: #f2f2f2; | ||
| 945 | } | 946 | } |
| 946 | 947 | ||
| 947 | .safe_driv_pop:hover{ | 948 | .safe_driv_pop:hover{ |
| @@ -949,15 +950,33 @@ option.oil_station_opt{ | @@ -949,15 +950,33 @@ option.oil_station_opt{ | ||
| 949 | } | 950 | } |
| 950 | 951 | ||
| 951 | .safe_driv_pop .title{ | 952 | .safe_driv_pop .title{ |
| 952 | - font-weight: 600; | ||
| 953 | } | 953 | } |
| 954 | 954 | ||
| 955 | -.safe_driv_pop i.uk-icon-times-circle{ | 955 | +/*.safe_driv_pop i.uk-icon-times-circle{ |
| 956 | margin-right: 5px; | 956 | margin-right: 5px; |
| 957 | -} | 957 | +}*/ |
| 958 | .safe_driv_pop .desc{ | 958 | .safe_driv_pop .desc{ |
| 959 | display: block; | 959 | display: block; |
| 960 | font-size: 12px; | 960 | font-size: 12px; |
| 961 | - margin: 2px 0 0 20px; | ||
| 962 | - color: #e3e3e3; | ||
| 963 | -} | ||
| 964 | \ No newline at end of file | 961 | \ No newline at end of file |
| 962 | + color: #ff9d9d; | ||
| 963 | + text-align: right; | ||
| 964 | + margin-right: 5px; | ||
| 965 | +} | ||
| 966 | + | ||
| 967 | +/*.safe_driv_pop .detail_content{ | ||
| 968 | + display: none; | ||
| 969 | +} | ||
| 970 | + | ||
| 971 | +.safe_driv_pop.open .detail_content{ | ||
| 972 | + display: block; | ||
| 973 | + background: rgb(255, 255, 255); | ||
| 974 | + height: 200px; | ||
| 975 | + margin: 7px 0; | ||
| 976 | + border-radius: 5px; | ||
| 977 | + color: #000000; | ||
| 978 | +} | ||
| 979 | + | ||
| 980 | +.safe_driv_pop.open .desc{ | ||
| 981 | + display: none; | ||
| 982 | +}*/ | ||
| 983 | +/** 安全驾驶相关css结束 */ | ||
| 965 | \ No newline at end of file | 984 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
| 1 | -<div class="uk-modal" id="all-devices-modal"> | 1 | +<div class="uk-modal ct_move_modal" id="all-devices-modal"> |
| 2 | <div class="uk-modal-dialog" style="width: 1100px;"> | 2 | <div class="uk-modal-dialog" style="width: 1100px;"> |
| 3 | <a href="" class="uk-modal-close uk-close"></a> | 3 | <a href="" class="uk-modal-close uk-close"></a> |
| 4 | <div class="uk-modal-header"> | 4 | <div class="uk-modal-header"> |
src/main/resources/static/real_control_v2/fragments/north/nav/safeDriving.html
0 → 100644
| 1 | +<div class="uk-modal ct_move_modal" id="safe_dring_list-modal" style="z-index: 99;"> | ||
| 2 | + <div class="uk-modal-dialog" style="width: 1100px;"> | ||
| 3 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 4 | + <div class="uk-modal-header"> | ||
| 5 | + <h2>安全驾驶图像信息(当日)</h2></div> | ||
| 6 | + | ||
| 7 | + <div class="uk-panel uk-panel-box uk-panel-box-primary"> | ||
| 8 | + <form class="uk-form search-form"> | ||
| 9 | + <fieldset data-uk-margin> | ||
| 10 | + <legend> | ||
| 11 | + 数据检索 | ||
| 12 | + </legend> | ||
| 13 | + <span class="horizontal-field">车辆</span> | ||
| 14 | + <div class="uk-autocomplete uk-form autocomplete-cars" > | ||
| 15 | + <input type="text" name="clzbh" placeholder="车辆自编号"> | ||
| 16 | + </div> | ||
| 17 | + <span class="horizontal-field">异常类型</span> | ||
| 18 | + <select name="yczltype"> | ||
| 19 | + <option value="">全部</option> | ||
| 20 | + <option value="A1">手部离开方向盘</option> | ||
| 21 | + <option value="A2">摄像头异常</option> | ||
| 22 | + <option value="A3">未戴安全带</option> | ||
| 23 | + <option value="A4">未戴袖章</option> | ||
| 24 | + <option value="A5">眨眼/疲劳驾驶</option> | ||
| 25 | + <option value="A6">打哈欠/打瞌睡</option> | ||
| 26 | + <option value="A7">行驶中与人交谈</option> | ||
| 27 | + </select> | ||
| 28 | + <button class="uk-button">检索</button> | ||
| 29 | + </fieldset> | ||
| 30 | + </form> | ||
| 31 | + </div> | ||
| 32 | + <div style="height: 495px;margin:5px 0 -18px;"> | ||
| 33 | + <table class="ct-fixed-table uk-table uk-table-hover"> | ||
| 34 | + <thead> | ||
| 35 | + <tr> | ||
| 36 | + <th style="width: 12%;">线路</th> | ||
| 37 | + <th style="width: 13%;">车辆自编号</th> | ||
| 38 | + <th style="width: 13%;">设备</th> | ||
| 39 | + <th style="width: 13%;">异常类型</th> | ||
| 40 | + <th style="width: 17%;">时间</th> | ||
| 41 | + <th style="width: 11%;">检查属性</th> | ||
| 42 | + <th style="width: 11%;">图像</th> | ||
| 43 | + <th>视频</th> | ||
| 44 | + </tr> | ||
| 45 | + </thead> | ||
| 46 | + <tbody data-uk-observe> | ||
| 47 | + </tbody> | ||
| 48 | + </table> | ||
| 49 | + </div> | ||
| 50 | + | ||
| 51 | + <div class="uk-modal-footer uk-text-right pagination-wrap"> | ||
| 52 | + </div> | ||
| 53 | + </div> | ||
| 54 | + | ||
| 55 | + <script id="all-safe_dring-table-temp" type="text/html"> | ||
| 56 | + {{each array as sd i}} | ||
| 57 | + <tr> | ||
| 58 | + <td style="width: 14%;">{{sd.xlmc}}</td> | ||
| 59 | + <td style="width: 14%;">{{sd.clzbh}}</td> | ||
| 60 | + <td style="width: 13%;">{{sd.sbbh}}</td> | ||
| 61 | + <td style="width: 13%;">{{sd.yczlText}}</td> | ||
| 62 | + <td style="width: 10%;">{{sd.timeStr}}</td> | ||
| 63 | + <td style="width: 10%;"> | ||
| 64 | + {{if sd.yczltype=='A1'}} | ||
| 65 | + {{if sd.jctype==0}} | ||
| 66 | + 双脱手 | ||
| 67 | + {{else if sd.jctype==1}} | ||
| 68 | + 单脱手 | ||
| 69 | + {{/if}} | ||
| 70 | + {{/if}} | ||
| 71 | + </td> | ||
| 72 | + <td style="width: 10%;"> | ||
| 73 | + <a class="image_link" href="{{sd.url}}.jpg" data-uk-lightbox="{group:'jpg_group1'}" title="{{sd.title}}">JPG</a> | ||
| 74 | + </td> | ||
| 75 | + <td> | ||
| 76 | + <a class="image_link" href="{{sd.url}}.gif" data-uk-lightbox="{group:'gif_group2'}" title="{{sd.title}}">查看视频</a> | ||
| 77 | + </td> | ||
| 78 | + </tr> | ||
| 79 | + {{/each}} | ||
| 80 | + </script> | ||
| 81 | + | ||
| 82 | + <script> | ||
| 83 | + (function() { | ||
| 84 | + var modal = '#safe_dring_list-modal'; | ||
| 85 | + var form = $('.search-form', modal); | ||
| 86 | + var page = 0; | ||
| 87 | + var pageSize = 12; | ||
| 88 | + | ||
| 89 | + $(modal).on('init', function(e, data) { | ||
| 90 | + e.stopPropagation(); | ||
| 91 | + | ||
| 92 | + query(); | ||
| 93 | + }); | ||
| 94 | + | ||
| 95 | + //sumit event | ||
| 96 | + form.on('submit', function(e) { | ||
| 97 | + e.preventDefault(); | ||
| 98 | + resetPagination = true; | ||
| 99 | + page=0; | ||
| 100 | + query(); | ||
| 101 | + }); | ||
| 102 | + | ||
| 103 | + var query = function() { | ||
| 104 | + scanFlag = false; | ||
| 105 | + var data = form.serializeJSON(); | ||
| 106 | + data.page = page; | ||
| 107 | + data.size = pageSize; | ||
| 108 | + | ||
| 109 | + gb_common.$get('/gps/safeDriv', data, function (rs) { | ||
| 110 | + //数据转换 | ||
| 111 | + var code2Name=gb_data_basic.lineCode2NameAll(), url,stm, p; | ||
| 112 | + $.each(rs.list, function(){ | ||
| 113 | + if(this.xlbm) | ||
| 114 | + this.xlmc=code2Name[this.xlbm]; | ||
| 115 | + else | ||
| 116 | + this.xlmc=''; | ||
| 117 | + stm = moment(this.ts); | ||
| 118 | + this.timeStr = stm.format('YYYY-MM-DD HH:mm:ss'); | ||
| 119 | + this.yczlText= gb_safe_driv.safeCode[this.yczltype]; | ||
| 120 | + //拼接图片地址 | ||
| 121 | + p = (this.sbbh+'_'+this.yczltype+'_'+stm.format('YYYYMMDDHHmmss')); | ||
| 122 | + url = stm.format('YYYYMMDD')+'/'+p+'/'+p; | ||
| 123 | + this.url = gb_safe_driv.urlPath + url; | ||
| 124 | + //title | ||
| 125 | + this.title = this.clzbh+' '+stm.format('HH时mm分ss秒')+' '+this.yczlText; | ||
| 126 | + }); | ||
| 127 | + | ||
| 128 | + var bodyHtml = template('all-safe_dring-table-temp', { | ||
| 129 | + array: rs.list | ||
| 130 | + }); | ||
| 131 | + $('table tbody', modal).html(bodyHtml); | ||
| 132 | + if (resetPagination) | ||
| 133 | + pagination(rs.totalPages + 1, rs.page); | ||
| 134 | + | ||
| 135 | + //扫描图片是否存在 | ||
| 136 | + scanFlag = true; | ||
| 137 | + scanImgIsExist(); | ||
| 138 | + }); | ||
| 139 | + }; | ||
| 140 | + | ||
| 141 | + var scanFlag; | ||
| 142 | + var scanImgIsExist = function () { | ||
| 143 | + var array = $('table tbody a.image_link', modal); | ||
| 144 | + var i = 0; | ||
| 145 | + //匿名函数递归 | ||
| 146 | + (function () { | ||
| 147 | + //计数 | ||
| 148 | + if(i >= array.length || !scanFlag){ | ||
| 149 | + console.log('扫描图片结束'); | ||
| 150 | + return; | ||
| 151 | + } | ||
| 152 | + var f = arguments.callee; | ||
| 153 | + var $a = $(array[i]); | ||
| 154 | + i ++; | ||
| 155 | + var img = new Image(); | ||
| 156 | + img.onerror = function(){ | ||
| 157 | + $a.removeAttr('href').removeAttr('data-uk-lightbox').text('无').css('color', '#b8b8b8'); | ||
| 158 | + f(); | ||
| 159 | + }; | ||
| 160 | + img.onload = function(){ | ||
| 161 | + f(); | ||
| 162 | + }; | ||
| 163 | + img.src=$a.attr('href'); | ||
| 164 | + })(); | ||
| 165 | + }; | ||
| 166 | + | ||
| 167 | + var resetPagination = true; | ||
| 168 | + var pagination = function(pages, currentPage) { | ||
| 169 | + var wrap = $('.pagination-wrap', modal).empty() | ||
| 170 | + ,e = $('<ul class="uk-pagination"></ul>').appendTo(wrap); | ||
| 171 | + | ||
| 172 | + var pagination = UIkit.pagination(e, { | ||
| 173 | + pages: pages, | ||
| 174 | + currentPage: currentPage | ||
| 175 | + }); | ||
| 176 | + | ||
| 177 | + e.on('select.uk.pagination', function(e, pageIndex){ | ||
| 178 | + page = pageIndex; | ||
| 179 | + query(); | ||
| 180 | + }); | ||
| 181 | + | ||
| 182 | + resetPagination = false; | ||
| 183 | + }; | ||
| 184 | + })(); | ||
| 185 | + </script> | ||
| 186 | +</div> |
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
src/main/resources/static/real_control_v2/js/modal_extend.js
| 1 | //modal hide remove dom | 1 | //modal hide remove dom |
| 2 | $(document).on('hide.uk.modal', '.uk-modal', function () { | 2 | $(document).on('hide.uk.modal', '.uk-modal', function () { |
| 3 | + //放过灯箱 | ||
| 4 | + if($('.uk-modal-dialog', this).hasClass('uk-modal-dialog-lightbox')){ | ||
| 5 | + return; | ||
| 6 | + } | ||
| 3 | $(this).remove(); | 7 | $(this).remove(); |
| 4 | }); | 8 | }); |
| 5 | 9 | ||
| @@ -7,10 +11,6 @@ $(document).on('show.uk.modal', '.uk-modal.ct_move_modal', function () { | @@ -7,10 +11,6 @@ $(document).on('show.uk.modal', '.uk-modal.ct_move_modal', function () { | ||
| 7 | if($('.uk-modal-dialog', this).hasClass('uk-modal-dialog-blank')) | 11 | if($('.uk-modal-dialog', this).hasClass('uk-modal-dialog-blank')) |
| 8 | return; | 12 | return; |
| 9 | 13 | ||
| 10 | - /* //临时放过轨迹回放 | ||
| 11 | - if($(this).attr('id')=='map-playback-modal') | ||
| 12 | - return;*/ | ||
| 13 | - | ||
| 14 | //计算居中位置 | 14 | //计算居中位置 |
| 15 | var win = $('body'); | 15 | var win = $('body'); |
| 16 | var Y = (win.width() - $('.uk-modal-dialog', this).width()) / 2 - 10; | 16 | var Y = (win.width() - $('.uk-modal-dialog', this).width()) / 2 - 10; |
| @@ -55,7 +55,6 @@ var modal_move = function (m_header) { | @@ -55,7 +55,6 @@ var modal_move = function (m_header) { | ||
| 55 | var win = $('body'); | 55 | var win = $('body'); |
| 56 | 56 | ||
| 57 | $(m_header).on('mousedown', function (e) { | 57 | $(m_header).on('mousedown', function (e) { |
| 58 | - console.log('mousedown'); | ||
| 59 | e.preventDefault(); | 58 | e.preventDefault(); |
| 60 | _moveFlag = true; | 59 | _moveFlag = true; |
| 61 | _moveObj = $(this).parent(); | 60 | _moveObj = $(this).parent(); |
src/main/resources/static/real_control_v2/js/north/toolbar.js
| @@ -188,6 +188,9 @@ var gb_northToolbar = (function () { | @@ -188,6 +188,9 @@ var gb_northToolbar = (function () { | ||
| 188 | }, | 188 | }, |
| 189 | form_schedule_daily: function () { | 189 | form_schedule_daily: function () { |
| 190 | gb_embed_form_hanlde.open_modal_form_fragment('/pages/forms/statement/scheduleDaily.html', '调度工作日报表'); | 190 | gb_embed_form_hanlde.open_modal_form_fragment('/pages/forms/statement/scheduleDaily.html', '调度工作日报表'); |
| 191 | + }, | ||
| 192 | + safe_driving: function () { | ||
| 193 | + open_modal('/real_control_v2/fragments/north/nav/safeDriving.html', {}, modal_opts); | ||
| 191 | } | 194 | } |
| 192 | }; | 195 | }; |
| 193 | 196 |
src/main/resources/static/real_control_v2/js/safe_driv/safeDriv.js
| @@ -13,32 +13,49 @@ var gb_safe_driv = (function () { | @@ -13,32 +13,49 @@ var gb_safe_driv = (function () { | ||
| 13 | 'A7': '与人交谈' | 13 | 'A7': '与人交谈' |
| 14 | }; | 14 | }; |
| 15 | 15 | ||
| 16 | + var path = 'http://180.166.5.82:9988/CurrentSafeDriving/'; | ||
| 17 | + | ||
| 16 | var $wrap = $('.safe_driv_pop_wrap'); | 18 | var $wrap = $('.safe_driv_pop_wrap'); |
| 17 | var max = 5; | 19 | var max = 5; |
| 18 | 20 | ||
| 19 | var pop = function (sd) { | 21 | var pop = function (sd) { |
| 20 | //只有admin用户能收到 | 22 | //只有admin用户能收到 |
| 21 | var user = gb_northToolbar.user(); | 23 | var user = gb_northToolbar.user(); |
| 22 | - if(!user || user.userName.indexOf('admin') == -1) | 24 | + if (!user || user.userName.indexOf('admin') == -1) |
| 23 | return; | 25 | return; |
| 24 | 26 | ||
| 25 | - var htmlStr = '<div class="safe_driv_pop uk-animation-slide-bottom">'+ | ||
| 26 | - ' <span class="title"><i class="uk-icon-times-circle"></i>安全驾驶 '+moment(sd.ts).format('HH:mm')+'</span>'+ | ||
| 27 | - ' <span class="text"> '+sd.clzbh+' 违规驾驶('+codes[sd.yczltype]+')</span><span class="desc">请至安全驾驶监管平台查看图像信息</span>'+ | ||
| 28 | - '</div>'; | ||
| 29 | - | 27 | + //时间格式化 |
| 28 | + var stm = moment(sd.ts); | ||
| 29 | + sd.timeStr = stm.format('HH时mm分ss秒'); | ||
| 30 | + //异常状态文本 | ||
| 31 | + sd.ycztText = codes[sd.yczltype]; | ||
| 32 | + //图片地址 | ||
| 33 | + var p = (sd.sbbh+'_'+sd.yczltype+'_'+stm.format('YYYYMMDDHHmmss')); | ||
| 34 | + var url = stm.format('YYYYMMDD')+'/'+p+'/'+p; | ||
| 35 | + sd.url = path + url + '.jpg'; | ||
| 36 | + | ||
| 37 | + var htmlStr = template('safe_driv_item-temp', sd); | ||
| 30 | var items = $wrap.find('.safe_driv_pop'), len = items.length; | 38 | var items = $wrap.find('.safe_driv_pop'), len = items.length; |
| 31 | - if(len >= max) | ||
| 32 | - $wrap.find('.safe_driv_pop:lt('+(len - max)+')').remove(); | 39 | + if (len >= max) |
| 40 | + $wrap.find('.safe_driv_pop:lt(' + (len - max) + ')').remove(); | ||
| 33 | 41 | ||
| 34 | $wrap.append(htmlStr); | 42 | $wrap.append(htmlStr); |
| 35 | }; | 43 | }; |
| 36 | 44 | ||
| 37 | $wrap.on('click', '.safe_driv_pop', function () { | 45 | $wrap.on('click', '.safe_driv_pop', function () { |
| 46 | + var title = $(this).data('title'); | ||
| 47 | + var url = $(this).data('url'); | ||
| 38 | $(this).remove(); | 48 | $(this).remove(); |
| 49 | + var lightbox = UIkit.lightbox.create([ | ||
| 50 | + {title: title, 'source': url} | ||
| 51 | + ]); | ||
| 52 | + | ||
| 53 | + lightbox.show(); | ||
| 39 | }); | 54 | }); |
| 40 | 55 | ||
| 41 | return { | 56 | return { |
| 42 | - pop: pop | 57 | + pop: pop, |
| 58 | + safeCode: codes, | ||
| 59 | + urlPath: path | ||
| 43 | } | 60 | } |
| 44 | })(); | 61 | })(); |
| 45 | \ No newline at end of file | 62 | \ No newline at end of file |
src/main/resources/static/real_control_v2/main.html
| @@ -11,6 +11,7 @@ | @@ -11,6 +11,7 @@ | ||
| 11 | <link rel="stylesheet" | 11 | <link rel="stylesheet" |
| 12 | href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css"/> | 12 | href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css"/> |
| 13 | <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css"/> | 13 | <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css"/> |
| 14 | + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css"/> | ||
| 14 | 15 | ||
| 15 | <!-- main style --> | 16 | <!-- main style --> |
| 16 | <link rel="stylesheet" href="/real_control_v2/css/main.css"/> | 17 | <link rel="stylesheet" href="/real_control_v2/css/main.css"/> |
| @@ -60,7 +61,6 @@ | @@ -60,7 +61,6 @@ | ||
| 60 | </div> | 61 | </div> |
| 61 | </div> | 62 | </div> |
| 62 | 63 | ||
| 63 | -<div class="safe_driv_pop_wrap"></div> | ||
| 64 | <script> | 64 | <script> |
| 65 | delete window.exports; | 65 | delete window.exports; |
| 66 | delete window.module; | 66 | delete window.module; |
| @@ -123,6 +123,7 @@ | @@ -123,6 +123,7 @@ | ||
| 123 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js"></script> | 123 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js"></script> |
| 124 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js"></script> | 124 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js"></script> |
| 125 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js"></script> | 125 | <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js"></script> |
| 126 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/lightbox.min.js"></script> | ||
| 126 | 127 | ||
| 127 | <!-- jquery contextMenu --> | 128 | <!-- jquery contextMenu --> |
| 128 | <script src="/real_control_v2/assets/js/jquery.contextMenu.min.js"></script> | 129 | <script src="/real_control_v2/assets/js/jquery.contextMenu.min.js"></script> |
| @@ -185,8 +186,21 @@ | @@ -185,8 +186,21 @@ | ||
| 185 | <script src="/real_control_v2/js/forms/form_embed.js"></script> | 186 | <script src="/real_control_v2/js/forms/form_embed.js"></script> |
| 186 | <!-- 模态框扩展 --> | 187 | <!-- 模态框扩展 --> |
| 187 | <script src="/real_control_v2/js/modal_extend.js"></script> | 188 | <script src="/real_control_v2/js/modal_extend.js"></script> |
| 188 | -<!-- 安全驾驶相关 --> | 189 | + |
| 190 | +<!-- #### 安全驾驶 start ### --> | ||
| 191 | +<div class="safe_driv_pop_wrap" ></div> | ||
| 192 | +<script id="safe_driv_item-temp" type="text/html"> | ||
| 193 | + <div class="safe_driv_pop uk-animation-slide-bottom" data-title="{{clzbh}} {{timeStr}} {{ycztText}}" data-url="{{url}}"> | ||
| 194 | + <div> | ||
| 195 | + <span class="title">异常 {{clzbh}}</span> | ||
| 196 | + <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span> | ||
| 197 | + <span class="desc">--安全驾驶监管平台</span> | ||
| 198 | + </div> | ||
| 199 | + </div> | ||
| 200 | +</script> | ||
| 201 | + | ||
| 189 | <script src="/real_control_v2/js/safe_driv/safeDriv.js" ></script> | 202 | <script src="/real_control_v2/js/safe_driv/safeDriv.js" ></script> |
| 203 | +<!-- #### 安全驾驶 end ### --> | ||
| 190 | </body> | 204 | </body> |
| 191 | 205 | ||
| 192 | </html> | 206 | </html> |
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v2/main.html
| @@ -169,7 +169,7 @@ | @@ -169,7 +169,7 @@ | ||
| 169 | <input type="checkbox" name="stationName"> 站点名称 | 169 | <input type="checkbox" name="stationName"> 站点名称 |
| 170 | </label> | 170 | </label> |
| 171 | <label> | 171 | <label> |
| 172 | - 停车场 <i class="uk-icon-angle-down"></i> | 172 | + <a>停车场 <i class="uk-icon-angle-down"></i></a> |
| 173 | </label> | 173 | </label> |
| 174 | </form> | 174 | </form> |
| 175 | </div> | 175 | </div> |
| @@ -320,7 +320,7 @@ | @@ -320,7 +320,7 @@ | ||
| 320 | 320 | ||
| 321 | var init = function (data) { | 321 | var init = function (data) { |
| 322 | //设置初始值 | 322 | //设置初始值 |
| 323 | - if (data.nbbm) | 323 | + /*if (data.nbbm) |
| 324 | $('[name=nbbm]', f).val(data.nbbm); | 324 | $('[name=nbbm]', f).val(data.nbbm); |
| 325 | var st = moment().subtract(2, 'hour'); | 325 | var st = moment().subtract(2, 'hour'); |
| 326 | if (data.st) | 326 | if (data.st) |
| @@ -331,15 +331,15 @@ | @@ -331,15 +331,15 @@ | ||
| 331 | if (data.et) | 331 | if (data.et) |
| 332 | et = moment(data.et, 'YYYY-MM-DD HH:mm'); | 332 | et = moment(data.et, 'YYYY-MM-DD HH:mm'); |
| 333 | $('[name=eDate]', f).val(et.format('YYYY-MM-DD')); | 333 | $('[name=eDate]', f).val(et.format('YYYY-MM-DD')); |
| 334 | - $('[name=eTime]', f).val(et.format('HH:mm')); | 334 | + $('[name=eTime]', f).val(et.format('HH:mm'));*/ |
| 335 | 335 | ||
| 336 | 336 | ||
| 337 | - /*$('[name=nbbm]', f).val('W0A-018'); | 337 | + $('[name=nbbm]', f).val('W0A-018'); |
| 338 | $('[name=sDate]', f).val('2017-04-06'); | 338 | $('[name=sDate]', f).val('2017-04-06'); |
| 339 | $('[name=sTime]', f).val('04:49'); | 339 | $('[name=sTime]', f).val('04:49'); |
| 340 | 340 | ||
| 341 | $('[name=eDate]', f).val('2017-04-06'); | 341 | $('[name=eDate]', f).val('2017-04-06'); |
| 342 | - $('[name=eTime]', f).val('09:49');*/ | 342 | + $('[name=eTime]', f).val('09:49'); |
| 343 | //搜索事件 | 343 | //搜索事件 |
| 344 | $('button[type=submit]', f).on('click', search); | 344 | $('button[type=submit]', f).on('click', search); |
| 345 | }; | 345 | }; |