Commit 2baff217ade8b6c2562ce23d07ce11bff5c82168
Merge branch 'minhang' of http://222.66.0.204:8090//panzhaov5/bsth_control into minhang
Showing
20 changed files
with
1454 additions
and
755 deletions
src/main/java/com/bsth/controller/BaseController.java
| ... | ... | @@ -24,37 +24,34 @@ import java.util.List; |
| 24 | 24 | import java.util.Map; |
| 25 | 25 | |
| 26 | 26 | /** |
| 27 | - * | |
| 28 | - * @ClassName: BaseController | |
| 29 | - * @Description: TODO(基础的Controller实现) | |
| 30 | - * @author PanZhao | |
| 31 | - * @date 2016年3月17日 下午12:44:06 | |
| 32 | - * | |
| 33 | 27 | * @param <T> |
| 34 | 28 | * @param <ID> 主键类型 |
| 29 | + * @author PanZhao | |
| 30 | + * @ClassName: BaseController | |
| 31 | + * @Description: TODO(基础的Controller实现) | |
| 32 | + * @date 2016年3月17日 下午12:44:06 | |
| 35 | 33 | */ |
| 36 | 34 | public class BaseController<T, ID extends Serializable> { |
| 37 | - | |
| 38 | - @Autowired | |
| 39 | - protected BaseService<T, ID> baseService; | |
| 35 | + | |
| 36 | + @Autowired | |
| 37 | + protected BaseService<T, ID> baseService; | |
| 40 | 38 | @Autowired |
| 41 | 39 | DataImportExportService dataImportExportService; |
| 42 | - | |
| 43 | - /** | |
| 44 | - * | |
| 45 | - * @Title: list | |
| 46 | - * @Description: TODO(多条件分页查询) | |
| 47 | - * @param @param map 查询条件 | |
| 48 | - * @param @param page 页码 | |
| 49 | - * @param @param size 每页显示数量 | |
| 50 | - * @throws | |
| 51 | - */ | |
| 52 | - @RequestMapping(method = RequestMethod.GET) | |
| 53 | - public Page<T> list(@RequestParam Map<String, Object> map, | |
| 54 | - @RequestParam(defaultValue = "0") int page, | |
| 55 | - @RequestParam(defaultValue = "10") int size, | |
| 56 | - @RequestParam(defaultValue = "id") String order, | |
| 57 | - @RequestParam(defaultValue = "DESC") String direction){ | |
| 40 | + | |
| 41 | + /** | |
| 42 | + * @param @param map 查询条件 | |
| 43 | + * @param @param page 页码 | |
| 44 | + * @param @param size 每页显示数量 | |
| 45 | + * @throws | |
| 46 | + * @Title: list | |
| 47 | + * @Description: TODO(多条件分页查询) | |
| 48 | + */ | |
| 49 | + @RequestMapping(method = RequestMethod.GET) | |
| 50 | + public Page<T> list(@RequestParam Map<String, Object> map, | |
| 51 | + @RequestParam(defaultValue = "0") int page, | |
| 52 | + @RequestParam(defaultValue = "10") int size, | |
| 53 | + @RequestParam(defaultValue = "id") String order, | |
| 54 | + @RequestParam(defaultValue = "DESC") String direction) { | |
| 58 | 55 | |
| 59 | 56 | // 允许多个字段排序,order可以写单个字段,也可以写多个字段 |
| 60 | 57 | // 多个字段格式:{col1},{col2},{col3},....,{coln} |
| ... | ... | @@ -81,60 +78,57 @@ public class BaseController<T, ID extends Serializable> { |
| 81 | 78 | } else { |
| 82 | 79 | throw new RuntimeException("多字段排序参数格式问题,排序顺序和字段数不一致"); |
| 83 | 80 | } |
| 84 | - } | |
| 85 | - | |
| 86 | - /** | |
| 87 | - * | |
| 88 | - * @Title: list | |
| 89 | - * @Description: TODO(多条件查询) | |
| 90 | - * @param @param map | |
| 91 | - * @throws | |
| 92 | - */ | |
| 93 | - @RequestMapping(value = "/all", method = RequestMethod.GET) | |
| 94 | - public Iterable<T> list(@RequestParam Map<String, Object> map){ | |
| 95 | - return baseService.list(map); | |
| 96 | - } | |
| 97 | - | |
| 98 | - /** | |
| 99 | - * | |
| 100 | - * @Title: save | |
| 101 | - * @Description: TODO(持久化对象) | |
| 102 | - * @param @param t | |
| 103 | - * @param @return 设定文件 | |
| 104 | - * @return Map<String,Object> {status: 1(成功),-1(失败)} | |
| 105 | - * @throws | |
| 106 | - */ | |
| 107 | - @RequestMapping(method = RequestMethod.POST) | |
| 108 | - public Map<String, Object> save(T t){ | |
| 109 | - return baseService.save(t); | |
| 110 | - } | |
| 111 | - | |
| 112 | - /** | |
| 113 | - * | |
| 114 | - * @Title: findById | |
| 115 | - * @Description: TODO(根据主键获取单个对象) | |
| 116 | - * @param @param id | |
| 117 | - * @throws | |
| 118 | - */ | |
| 119 | - @RequestMapping(value="/{id}",method = RequestMethod.GET) | |
| 120 | - public T findById(@PathVariable("id") ID id){ | |
| 121 | - return baseService.findById(id); | |
| 122 | - } | |
| 123 | - | |
| 124 | - /** | |
| 125 | - * | |
| 126 | - * @Title: delete | |
| 127 | - * @Description: TODO(根据主键删除对象) | |
| 128 | - * @param @param id | |
| 129 | - * @throws | |
| 130 | - */ | |
| 131 | - @RequestMapping(value="/{id}",method = RequestMethod.DELETE) | |
| 132 | - public Map<String, Object> delete(@PathVariable("id") ID id){ | |
| 133 | - return baseService.delete(id); | |
| 134 | - } | |
| 81 | + } | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * @param @param map | |
| 85 | + * @throws | |
| 86 | + * @Title: list | |
| 87 | + * @Description: TODO(多条件查询) | |
| 88 | + */ | |
| 89 | + @RequestMapping(value = "/all", method = RequestMethod.GET) | |
| 90 | + public Iterable<T> list(@RequestParam Map<String, Object> map) { | |
| 91 | + return baseService.list(map); | |
| 92 | + } | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * @param @param t | |
| 96 | + * @param @return 设定文件 | |
| 97 | + * @return Map<String,Object> {status: 1(成功),-1(失败)} | |
| 98 | + * @throws | |
| 99 | + * @Title: save | |
| 100 | + * @Description: TODO(持久化对象) | |
| 101 | + */ | |
| 102 | + @RequestMapping(method = RequestMethod.POST) | |
| 103 | + public Map<String, Object> save(T t) { | |
| 104 | + return baseService.save(t); | |
| 105 | + } | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * @param @param id | |
| 109 | + * @throws | |
| 110 | + * @Title: findById | |
| 111 | + * @Description: TODO(根据主键获取单个对象) | |
| 112 | + */ | |
| 113 | + @RequestMapping(value = "/{id}", method = RequestMethod.GET) | |
| 114 | + public T findById(@PathVariable("id") ID id) { | |
| 115 | + return baseService.findById(id); | |
| 116 | + } | |
| 117 | + | |
| 118 | + /** | |
| 119 | + * @param @param id | |
| 120 | + * @throws | |
| 121 | + * @Title: delete | |
| 122 | + * @Description: TODO(根据主键删除对象) | |
| 123 | + */ | |
| 124 | + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) | |
| 125 | + public Map<String, Object> delete(@PathVariable("id") ID id) { | |
| 126 | + return baseService.delete(id); | |
| 127 | + } | |
| 135 | 128 | |
| 136 | 129 | /** |
| 137 | 130 | * 上传数据文件,并使用ktr转换文件导入数据。 |
| 131 | + * | |
| 138 | 132 | * @param file |
| 139 | 133 | * @return |
| 140 | 134 | * @throws Exception |
| ... | ... | @@ -163,6 +157,7 @@ public class BaseController<T, ID extends Serializable> { |
| 163 | 157 | |
| 164 | 158 | /** |
| 165 | 159 | * 使用ktr导出数据。 |
| 160 | + * | |
| 166 | 161 | * @param response |
| 167 | 162 | * @throws Exception |
| 168 | 163 | */ |
| ... | ... | @@ -241,5 +236,5 @@ public class BaseController<T, ID extends Serializable> { |
| 241 | 236 | // 默认返回异常,子类如果要使用导入功能,必须覆写此方法,指定ktr文件类路径 |
| 242 | 237 | throw new RuntimeException("必须override,并指定ktr classpath"); |
| 243 | 238 | } |
| 244 | - | |
| 239 | + | |
| 245 | 240 | } | ... | ... |
src/main/java/com/bsth/controller/gps/GpsController.java
| ... | ... | @@ -15,77 +15,85 @@ import java.util.Map; |
| 15 | 15 | @RequestMapping("gps") |
| 16 | 16 | public class GpsController { |
| 17 | 17 | |
| 18 | - @Autowired | |
| 19 | - GpsRealData gpsRealData; | |
| 20 | - | |
| 21 | - @Autowired | |
| 22 | - GpsService gpsService; | |
| 23 | - | |
| 24 | - @RequestMapping(value = "/real/all") | |
| 25 | - public Map<String, Object> search(@RequestParam Map<String, Object> map, | |
| 26 | - @RequestParam(defaultValue = "0") int page, | |
| 27 | - @RequestParam(defaultValue = "15") int size, | |
| 28 | - @RequestParam(defaultValue = "timestamp") String order, | |
| 29 | - @RequestParam(defaultValue = "DESC") String direction){ | |
| 30 | - | |
| 31 | - | |
| 32 | - return gpsService.search(map, page, size, order, direction); | |
| 33 | - } | |
| 34 | - | |
| 35 | - @RequestMapping(value = "/real/line/{lineCode}") | |
| 36 | - public List<GpsEntity> findByLineCode(@PathVariable("lineCode") String lineCode) { | |
| 37 | - return gpsRealData.getByLine(lineCode); | |
| 38 | - } | |
| 39 | - | |
| 40 | - @RequestMapping(value = "/real/line") | |
| 41 | - public List<GpsEntity> findByLineCodes(@RequestParam String lineCodes) { | |
| 42 | - return gpsRealData.get(Splitter.on(",").splitToList(lineCodes)); | |
| 43 | - } | |
| 44 | - | |
| 45 | - @RequestMapping(value = "/allDevices") | |
| 46 | - public Iterable<String> allDevices(){ | |
| 47 | - return gpsRealData.allDevices(); | |
| 48 | - } | |
| 49 | - | |
| 50 | - @RequestMapping(value = "/removeRealGps", method = RequestMethod.POST) | |
| 51 | - public Map<String, Object> removeRealGps(@RequestParam String device){ | |
| 52 | - return gpsService.removeRealGps(device); | |
| 53 | - } | |
| 54 | - | |
| 55 | - /** | |
| 56 | - * | |
| 57 | - * @Title: history @Description: TODO(这个方法给测试页面用) @throws | |
| 58 | - */ | |
| 59 | - @RequestMapping(value = "/history/{device}") | |
| 60 | - public List<Map<String, Object>> history(@PathVariable("device") String device, @RequestParam Long startTime, | |
| 61 | - @RequestParam Long endTime, @RequestParam int directions) { | |
| 62 | - | |
| 63 | - return gpsService.history(device, startTime, endTime, directions); | |
| 64 | - } | |
| 65 | - | |
| 66 | - @RequestMapping(value = "/gpsHistory/multiple") | |
| 67 | - public List<Map<String, Object>> gpsHistory(@RequestParam String[] nbbmArray, @RequestParam Long st, | |
| 68 | - @RequestParam Long et) { | |
| 69 | - return gpsService.history(nbbmArray, st, et); | |
| 70 | - } | |
| 18 | + @Autowired | |
| 19 | + GpsRealData gpsRealData; | |
| 20 | + | |
| 21 | + @Autowired | |
| 22 | + GpsService gpsService; | |
| 23 | + | |
| 24 | + @RequestMapping(value = "/real/all") | |
| 25 | + public Map<String, Object> search(@RequestParam Map<String, Object> map, | |
| 26 | + @RequestParam(defaultValue = "0") int page, | |
| 27 | + @RequestParam(defaultValue = "15") int size, | |
| 28 | + @RequestParam(defaultValue = "timestamp") String order, | |
| 29 | + @RequestParam(defaultValue = "DESC") String direction) { | |
| 30 | + | |
| 31 | + | |
| 32 | + return gpsService.search(map, page, size, order, direction); | |
| 33 | + } | |
| 34 | + | |
| 35 | + @RequestMapping(value = "/real/line/{lineCode}") | |
| 36 | + public List<GpsEntity> findByLineCode(@PathVariable("lineCode") String lineCode) { | |
| 37 | + return gpsRealData.getByLine(lineCode); | |
| 38 | + } | |
| 39 | + | |
| 40 | + @RequestMapping(value = "/real/line") | |
| 41 | + public List<GpsEntity> findByLineCodes(@RequestParam String lineCodes) { | |
| 42 | + return gpsRealData.get(Splitter.on(",").splitToList(lineCodes)); | |
| 43 | + } | |
| 44 | + | |
| 45 | + @RequestMapping(value = "/allDevices") | |
| 46 | + public Iterable<String> allDevices() { | |
| 47 | + return gpsRealData.allDevices(); | |
| 48 | + } | |
| 49 | + | |
| 50 | + @RequestMapping(value = "/removeRealGps", method = RequestMethod.POST) | |
| 51 | + public Map<String, Object> removeRealGps(@RequestParam String device) { | |
| 52 | + return gpsService.removeRealGps(device); | |
| 53 | + } | |
| 54 | + | |
| 55 | + /** | |
| 56 | + * @Title: history @Description: TODO(这个方法给测试页面用) @throws | |
| 57 | + */ | |
| 58 | + @RequestMapping(value = "/history/{device}") | |
| 59 | + public List<Map<String, Object>> history(@PathVariable("device") String device, @RequestParam Long startTime, | |
| 60 | + @RequestParam Long endTime, @RequestParam int directions) { | |
| 61 | + | |
| 62 | + return gpsService.history(device, startTime, endTime, directions); | |
| 63 | + } | |
| 64 | + | |
| 65 | + @RequestMapping(value = "/gpsHistory/multiple") | |
| 66 | + public List<Map<String, Object>> gpsHistory(@RequestParam String[] nbbmArray, @RequestParam Long st, | |
| 67 | + @RequestParam Long et) { | |
| 68 | + return gpsService.history(nbbmArray, st, et); | |
| 69 | + } | |
| 71 | 70 | |
| 72 | 71 | /*@RequestMapping(value = "/analyse/ram") |
| 73 | - public List<ArrivalInfo> ramData(@RequestParam String nbbm) { | |
| 72 | + public List<ArrivalInfo> ramData(@RequestParam String nbbm) { | |
| 74 | 73 | return ArrivalDataBuffer.allMap.get(nbbm); |
| 75 | 74 | }*/ |
| 76 | 75 | |
| 77 | - @RequestMapping(value = "/Car2DeviceId") | |
| 78 | - public Map<String, String> findCarDeviceIdMap() { | |
| 79 | - return BasicData.deviceId2NbbmMap.inverse(); | |
| 80 | - } | |
| 81 | - | |
| 82 | - @RequestMapping(value = "/buffAera") | |
| 83 | - public Map<String, Object> findBuffAeraByCode(@RequestParam String code,@RequestParam String type){ | |
| 84 | - return gpsService.findBuffAeraByCode(code, type); | |
| 85 | - } | |
| 86 | - | |
| 87 | - @RequestMapping(value = "/findRoadSpeed") | |
| 88 | - public Map<String, Object> findRoadSpeed(@RequestParam String lineCode){ | |
| 89 | - return gpsService.findRoadSpeed(lineCode); | |
| 90 | - } | |
| 76 | + @RequestMapping(value = "/Car2DeviceId") | |
| 77 | + public Map<String, String> findCarDeviceIdMap() { | |
| 78 | + return BasicData.deviceId2NbbmMap.inverse(); | |
| 79 | + } | |
| 80 | + | |
| 81 | + @RequestMapping(value = "/buffAera") | |
| 82 | + public Map<String, Object> findBuffAeraByCode(@RequestParam String code, @RequestParam String type) { | |
| 83 | + return gpsService.findBuffAeraByCode(code, type); | |
| 84 | + } | |
| 85 | + | |
| 86 | + @RequestMapping(value = "/findRoadSpeed") | |
| 87 | + public Map<String, Object> findRoadSpeed(@RequestParam String lineCode) { | |
| 88 | + return gpsService.findRoadSpeed(lineCode); | |
| 89 | + } | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * gps补全 | |
| 93 | + * @return | |
| 94 | + */ | |
| 95 | + @RequestMapping(value = "/gpsCompletion", method = RequestMethod.POST) | |
| 96 | + public Map<String, Object> gpsCompletion(@RequestParam long schId) { | |
| 97 | + return gpsService.gpsCompletion(schId); | |
| 98 | + } | |
| 91 | 99 | } | ... | ... |
src/main/java/com/bsth/controller/realcontrol/PageForwardingController.java
0 → 100644
| 1 | +package com.bsth.controller.realcontrol; | |
| 2 | + | |
| 3 | +import com.bsth.entity.sys.SysUser; | |
| 4 | +import com.bsth.security.util.SecurityUtils; | |
| 5 | +import org.springframework.stereotype.Controller; | |
| 6 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 7 | +import org.springframework.web.servlet.ModelAndView; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 线调登入页面转发 | |
| 11 | + * Created by panzhao on 2017/1/21. | |
| 12 | + */ | |
| 13 | +@Controller | |
| 14 | +@RequestMapping("real_control") | |
| 15 | +public class PageForwardingController { | |
| 16 | + | |
| 17 | + @RequestMapping("/v2") | |
| 18 | + public ModelAndView v2(){ | |
| 19 | + ModelAndView mv = new ModelAndView(); | |
| 20 | + SysUser user = SecurityUtils.getCurrentUser(); | |
| 21 | + | |
| 22 | + //班次管理员 | |
| 23 | + if(user.getUserName().equals("bcgly")){ | |
| 24 | + mv.setViewName("/real_control_v2/sch_manage/sch_imitate.html"); | |
| 25 | + } | |
| 26 | + //正常线调主页 | |
| 27 | + else | |
| 28 | + mv.setViewName("/real_control_v2/main.html"); | |
| 29 | + return mv; | |
| 30 | + } | |
| 31 | +} | ... | ... |
src/main/java/com/bsth/controller/sys/UserController.java
| ... | ... | @@ -217,7 +217,7 @@ public class UserController extends BaseController<SysUser, Integer> { |
| 217 | 217 | * 确认新密码 |
| 218 | 218 | * @return |
| 219 | 219 | */ |
| 220 | - @RequestMapping("/changePWD") | |
| 220 | + @RequestMapping(value = "/changePWD", method = RequestMethod.POST) | |
| 221 | 221 | public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) { |
| 222 | 222 | SysUser sysUser = SecurityUtils.getCurrentUser(); |
| 223 | 223 | String msg = ""; | ... | ... |
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
| ... | ... | @@ -341,6 +341,13 @@ public class DayOfSchedule implements CommandLineRunner { |
| 341 | 341 | if (StringUtils.isEmpty(sch.getFcsj())) |
| 342 | 342 | sch.setFcsj("00:00"); |
| 343 | 343 | |
| 344 | + if(sch.getFcsj().equals("24:00")) | |
| 345 | + sch.setFcsj("23:59"); | |
| 346 | + | |
| 347 | + if(sch.getFcsj().substring(0, 2).equals("24")){ | |
| 348 | + sch.setFcsj("00" + sch.getFcsj().substring(2)); | |
| 349 | + } | |
| 350 | + | |
| 344 | 351 | fcsj = sch.getFcsj().trim(); |
| 345 | 352 | //处理一下发车时间格式没有:号的问题 |
| 346 | 353 | if (fcsj.indexOf(":") == -1 && fcsj.length() >= 4) { |
| ... | ... | @@ -823,8 +830,8 @@ public class DayOfSchedule implements CommandLineRunner { |
| 823 | 830 | first = executeCurr(nbbm); |
| 824 | 831 | |
| 825 | 832 | if(first.getBcType().equals("out") |
| 826 | - && first.getDfsjT() < second.getDfsjT() | |
| 827 | - && doneSum(nbbm) == 0 && second.getDfsjT() > time) | |
| 833 | + && first.getDfsjT() < second.getDfsjT() | |
| 834 | + && doneSum(nbbm) == 0 && second.getDfsjT() > time) | |
| 828 | 835 | return true; |
| 829 | 836 | } catch (Exception e) { |
| 830 | 837 | logger.error("", e); |
| ... | ... | @@ -840,10 +847,10 @@ public class DayOfSchedule implements CommandLineRunner { |
| 840 | 847 | |
| 841 | 848 | public int stopTimePlan(Object task) { |
| 842 | 849 | |
| 843 | - ScheduleRealInfo sch = prev((ScheduleRealInfo) task); | |
| 850 | + ScheduleRealInfo sch = prev((ScheduleRealInfo) task); | |
| 844 | 851 | |
| 845 | - sch.getzdsj | |
| 846 | - return -1; | |
| 852 | + sch.getzdsj | |
| 853 | + return -1; | |
| 847 | 854 | }*/ |
| 848 | 855 | |
| 849 | 856 | /** | ... | ... |
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
| ... | ... | @@ -181,6 +181,9 @@ public class ScheduleRealInfo { |
| 181 | 181 | //是否有GPS信号 |
| 182 | 182 | private boolean online; |
| 183 | 183 | |
| 184 | + /** 是否有补发GPS信号 */ | |
| 185 | + private boolean reissue; | |
| 186 | + | |
| 184 | 187 | public boolean isDfAuto() { |
| 185 | 188 | return dfAuto; |
| 186 | 189 | } |
| ... | ... | @@ -819,4 +822,12 @@ public class ScheduleRealInfo { |
| 819 | 822 | public void setAdjustExps(String adjustExps) { |
| 820 | 823 | this.adjustExps = adjustExps; |
| 821 | 824 | } |
| 825 | + | |
| 826 | + public boolean isReissue() { | |
| 827 | + return reissue; | |
| 828 | + } | |
| 829 | + | |
| 830 | + public void setReissue(boolean reissue) { | |
| 831 | + this.reissue = reissue; | |
| 832 | + } | |
| 822 | 833 | } | ... | ... |
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
| 1 | 1 | package com.bsth.repository.realcontrol; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 4 | +import com.bsth.entity.schedule.CarConfigInfo; | |
| 4 | 5 | import com.bsth.repository.BaseRepository; |
| 6 | +import org.springframework.data.domain.Page; | |
| 7 | +import org.springframework.data.domain.Pageable; | |
| 8 | +import org.springframework.data.jpa.domain.Specification; | |
| 5 | 9 | import org.springframework.data.jpa.repository.EntityGraph; |
| 6 | 10 | import org.springframework.data.jpa.repository.Modifying; |
| 7 | 11 | import org.springframework.data.jpa.repository.Query; |
| ... | ... | @@ -131,4 +135,16 @@ public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealI |
| 131 | 135 | @Query(value="select new map(xlBm as xlBm) from ScheduleRealInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 GROUP BY xlBm ORDER BY xlBm") |
| 132 | 136 | List<Map<String,Object>> setDDRBGroup(String date); |
| 133 | 137 | |
| 138 | + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH) | |
| 139 | + @Override | |
| 140 | + Page<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec, Pageable pageable); | |
| 141 | + | |
| 142 | + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH) | |
| 143 | + @Override | |
| 144 | + List<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec); | |
| 145 | + | |
| 146 | + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH) | |
| 147 | + @Override | |
| 148 | + List<ScheduleRealInfo> findAll(); | |
| 149 | + | |
| 134 | 150 | } | ... | ... |
src/main/java/com/bsth/service/gps/GpsService.java
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| ... | ... | @@ -5,8 +5,11 @@ import com.bsth.data.BasicData; |
| 5 | 5 | import com.bsth.data.arrival.ArrivalEntity; |
| 6 | 6 | import com.bsth.data.gpsdata.GpsEntity; |
| 7 | 7 | import com.bsth.data.gpsdata.GpsRealData; |
| 8 | +import com.bsth.data.schedule.DayOfSchedule; | |
| 9 | +import com.bsth.entity.realcontrol.ScheduleRealInfo; | |
| 8 | 10 | import com.bsth.repository.CarParkRepository; |
| 9 | 11 | import com.bsth.repository.StationRepository; |
| 12 | +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; | |
| 10 | 13 | import com.bsth.util.DateUtils; |
| 11 | 14 | import com.bsth.util.TransGPS; |
| 12 | 15 | import com.bsth.util.TransGPS.Location; |
| ... | ... | @@ -47,6 +50,12 @@ public class GpsServiceImpl implements GpsService { |
| 47 | 50 | @Autowired |
| 48 | 51 | JdbcTemplate jdbcTemplate; |
| 49 | 52 | |
| 53 | + @Autowired | |
| 54 | + DayOfSchedule dayOfSchedule; | |
| 55 | + | |
| 56 | + @Autowired | |
| 57 | + ScheduleRealInfoRepository scheduleRealInfoRepository; | |
| 58 | + | |
| 50 | 59 | // 历史gps查询 |
| 51 | 60 | @Override |
| 52 | 61 | public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) { |
| ... | ... | @@ -203,7 +212,7 @@ public class GpsServiceImpl implements GpsService { |
| 203 | 212 | conn = DBUtils_MS.getConnection(); |
| 204 | 213 | ps = conn.prepareStatement(sql); |
| 205 | 214 | ps.setInt(1, dayOfYear); |
| 206 | - /* ps.setArray(2, conn.createArrayOf("VARCHAR", devices)); */ | |
| 215 | + /* ps.setArray(2, conn.createArrayOf("VARCHAR", devices)); */ | |
| 207 | 216 | ps.setLong(2, st * 1000); |
| 208 | 217 | ps.setLong(3, et * 1000); |
| 209 | 218 | |
| ... | ... | @@ -411,6 +420,96 @@ public class GpsServiceImpl implements GpsService { |
| 411 | 420 | return rs; |
| 412 | 421 | } |
| 413 | 422 | |
| 423 | + /** | |
| 424 | + * gps补全 | |
| 425 | + * | |
| 426 | + * @param schId | |
| 427 | + * @return | |
| 428 | + */ | |
| 429 | + @Override | |
| 430 | + public Map<String, Object> gpsCompletion(long schId) { | |
| 431 | + Map<String, Object> rs = new HashMap<>(); | |
| 432 | + | |
| 433 | + try { | |
| 434 | + ScheduleRealInfo sch = dayOfSchedule.get(schId); | |
| 435 | + if (sch == null) { | |
| 436 | + rs.put("status", ResponseCode.ERROR); | |
| 437 | + rs.put("msg", "找不到对应班次!!!"); | |
| 438 | + return rs; | |
| 439 | + } | |
| 440 | + | |
| 441 | + if(sch.isReissue()){ | |
| 442 | + rs.put("status", ResponseCode.ERROR); | |
| 443 | + rs.put("msg", "你不能重复这个操作"); | |
| 444 | + return rs; | |
| 445 | + } | |
| 446 | + | |
| 447 | + String sql = "select * from bsth_gps_template where line_id='" + sch.getXlBm() + "' and up_down=" + sch.getXlDir(); | |
| 448 | + List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); | |
| 449 | + | |
| 450 | + if(list.size() == 0){ | |
| 451 | + rs.put("status", ResponseCode.ERROR); | |
| 452 | + rs.put("msg", "缺少模板数据,请联系系统管理员!!"); | |
| 453 | + return rs; | |
| 454 | + } | |
| 455 | + //排序 | |
| 456 | + Collections.sort(list, new Comparator<Map<String, Object>>() { | |
| 457 | + @Override | |
| 458 | + public int compare(Map<String, Object> o1, Map<String, Object> o2) { | |
| 459 | + return (int) (Long.parseLong(o1.get("ts").toString()) - Long.parseLong(o2.get("ts").toString())); | |
| 460 | + } | |
| 461 | + }); | |
| 462 | + Map<String, Object> fs = list.get(0); | |
| 463 | + //替换设备号和时间 | |
| 464 | + int diff = (int) (sch.getDfsjT() - Long.parseLong(fs.get("ts").toString()) - 1000 * 70); | |
| 465 | + | |
| 466 | + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh()); | |
| 467 | + for(Map<String, Object> map : list){ | |
| 468 | + map.put("device_id", deviceId); | |
| 469 | + map.put("ts", Long.parseLong(map.get("ts").toString()) + diff); | |
| 470 | + } | |
| 471 | + | |
| 472 | + String sqlBefore = "insert into bsth_c_template(" | |
| 473 | + ,sqlValues = " values("; | |
| 474 | + | |
| 475 | + Set<String> ks = fs.keySet(); | |
| 476 | + for(String k : ks){ | |
| 477 | + sqlBefore += (k + ","); | |
| 478 | + sqlValues += "?,"; | |
| 479 | + } | |
| 480 | + sqlBefore = sqlBefore.substring(0, sqlBefore.length() - 1) + ", create_ts)"; | |
| 481 | + sqlValues = sqlValues.substring(0, sqlValues.length() - 1) + ", "+System.currentTimeMillis()+")"; | |
| 482 | + sql = sqlBefore + " " + sqlValues; | |
| 483 | + | |
| 484 | + Connection conn = DBUtils_MS.getConnection(); | |
| 485 | + conn.setAutoCommit(false); | |
| 486 | + ps = conn.prepareStatement(sql); | |
| 487 | + int fsize = ks.size(); | |
| 488 | + List<Object> vs; | |
| 489 | + for(Map<String, Object> map : list){ | |
| 490 | + vs = new ArrayList<>(map.values()); | |
| 491 | + for(int i = 0; i < fsize; i ++){ | |
| 492 | + ps.setObject(i + 1, vs.get(i)); | |
| 493 | + } | |
| 494 | + ps.addBatch(); | |
| 495 | + } | |
| 496 | + ps.executeBatch(); | |
| 497 | + conn.commit(); | |
| 498 | + | |
| 499 | + rs.put("status", ResponseCode.SUCCESS); | |
| 500 | + | |
| 501 | + //标记班次 | |
| 502 | + sch.setReissue(true); | |
| 503 | + scheduleRealInfoRepository.save(sch); | |
| 504 | + | |
| 505 | + rs.put("status", ResponseCode.SUCCESS); | |
| 506 | + } catch (Exception e) { | |
| 507 | + logger.error("", e); | |
| 508 | + rs.put("status", ResponseCode.ERROR); | |
| 509 | + } | |
| 510 | + return rs; | |
| 511 | + } | |
| 512 | + | |
| 414 | 513 | private void sortGpsList(final Field f, List<GpsEntity> rs) { |
| 415 | 514 | Collections.sort(rs, new Comparator<GpsEntity>() { |
| 416 | 515 | ... | ... |
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
| ... | ... | @@ -328,10 +328,21 @@ public class TrafficManageServiceImpl implements TrafficManageService{ |
| 328 | 328 | if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("lpName")+"") |
| 329 | 329 | .equals(scheduleRealInfo.getLpName()) |
| 330 | 330 | && (schRealInfo.get("clZbh")+"").equals(scheduleRealInfo.getClZbh())){ |
| 331 | - if(scheduleRealInfo.getFcsjActual() == null ||scheduleRealInfo.getBcType().equals("in") | |
| 331 | + | |
| 332 | + if(scheduleRealInfo.isDestroy()){ | |
| 333 | + if(scheduleRealInfo.isReissue()){ | |
| 334 | + scheduleRealInfo.setFcsjActualAll(scheduleRealInfo.getDfsj()); | |
| 335 | + scheduleRealInfo.setZdsjActualAll(scheduleRealInfo.getZdsj()); | |
| 336 | + } | |
| 337 | + else | |
| 338 | + continue; | |
| 339 | + } | |
| 340 | + | |
| 341 | + if(scheduleRealInfo.getBcType().equals("in") | |
| 332 | 342 | || scheduleRealInfo.getBcType().equals("out")){ |
| 333 | 343 | continue; |
| 334 | 344 | } |
| 345 | + | |
| 335 | 346 | scheduleRealInfo.getQdzCode(); |
| 336 | 347 | sf.append("<LD>"); |
| 337 | 348 | sf.append("<SJGH>"+scheduleRealInfo.getjGh()+"</SJGH>"); | ... | ... |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| ... | ... | @@ -2365,7 +2365,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2365 | 2365 | // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName); |
| 2366 | 2366 | int jhbc = 0,cjbc = 0,ljbc = 0; |
| 2367 | 2367 | double jhlc = 0, yygl = 0, ksgl = 0,tempJhlc = 0,jcclc=0; |
| 2368 | - float addMileage = 0l,remMileage = 0l; | |
| 2368 | + float addMileage = 0l,remMileage = 0l, addgl = 0, remgl = 0; | |
| 2369 | 2369 | int xyz=1; |
| 2370 | 2370 | Map<String,Object> map; |
| 2371 | 2371 | for(ScheduleRealInfo scheduleRealInfo : scheduleRealInfos){ |
| ... | ... | @@ -2375,6 +2375,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2375 | 2375 | //烂班里程(主任务烂班), |
| 2376 | 2376 | //临加里程(主任务临加), |
| 2377 | 2377 | //计划班次,烂班班次,增加班次 |
| 2378 | + double jh = 0, sj = 0; | |
| 2378 | 2379 | tempJhlc = scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc(); |
| 2379 | 2380 | if(scheduleRealInfo.isSflj()){ |
| 2380 | 2381 | ljbc++; |
| ... | ... | @@ -2382,7 +2383,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2382 | 2383 | if( !(scheduleRealInfo.getBcType().equals("in") |
| 2383 | 2384 | ||scheduleRealInfo.getBcType().equals("out")) ){ |
| 2384 | 2385 | jhbc++; |
| 2385 | - jhlc += tempJhlc; | |
| 2386 | + jh += tempJhlc; | |
| 2386 | 2387 | } |
| 2387 | 2388 | if(scheduleRealInfo.getStatus() == -1){ |
| 2388 | 2389 | remMileage += tempJhlc; |
| ... | ... | @@ -2405,7 +2406,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2405 | 2406 | if(scheduleRealInfo.isSflj()){ |
| 2406 | 2407 | addMileage += tempJhlc; |
| 2407 | 2408 | } |
| 2408 | - yygl += tempJhlc; | |
| 2409 | + sj += tempJhlc; | |
| 2409 | 2410 | } |
| 2410 | 2411 | } |
| 2411 | 2412 | }else{ |
| ... | ... | @@ -2429,7 +2430,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2429 | 2430 | if(scheduleRealInfo.isSflj()){ |
| 2430 | 2431 | addMileage += tempJhlc; |
| 2431 | 2432 | } |
| 2432 | - yygl += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); | |
| 2433 | + sj += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); | |
| 2433 | 2434 | } |
| 2434 | 2435 | } |
| 2435 | 2436 | } |
| ... | ... | @@ -2480,6 +2481,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2480 | 2481 | e.printStackTrace(); |
| 2481 | 2482 | } |
| 2482 | 2483 | } |
| 2484 | + jhlc += jh; | |
| 2485 | + yygl += sj; | |
| 2486 | + if(jh > sj){ | |
| 2487 | + remgl += jh - sj; | |
| 2488 | + } else { | |
| 2489 | + addgl += sj - jh; | |
| 2490 | + } | |
| 2483 | 2491 | } |
| 2484 | 2492 | } |
| 2485 | 2493 | |
| ... | ... | @@ -2496,17 +2504,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2496 | 2504 | map.put("jzl", jzl); |
| 2497 | 2505 | map.put("jhlc", format.format(jhlc+jcclc)); |
| 2498 | 2506 | map.put("yygljh", format.format(jhlc)); |
| 2499 | - map.put("ssgl", format.format(remMileage)); | |
| 2507 | + map.put("ssgl", format.format(remgl)); | |
| 2500 | 2508 | map.put("ksgl", format.format(ksgl)); |
| 2501 | - map.put("yyglsj", format.format(yygl+remMileage)); | |
| 2509 | + map.put("yyglsj", format.format(yygl)); | |
| 2502 | 2510 | map.put("jhbc", jhbc); |
| 2503 | 2511 | map.put("jcclc", jcclc); |
| 2504 | 2512 | |
| 2505 | - map.put("ljgl", format.format(addMileage)); | |
| 2513 | + map.put("ljgl", format.format(addgl)); | |
| 2506 | 2514 | map.put("ssbc", cjbc); |
| 2507 | 2515 | map.put("ysgl", format.format(yygl)); |
| 2508 | 2516 | map.put("sjbc", jhbc-cjbc+ljbc); |
| 2509 | - map.put("zgl", format.format(yygl+remMileage+ksgl+jcclc)); | |
| 2517 | + map.put("zgl", format.format(yygl+ksgl+jcclc)); | |
| 2510 | 2518 | map.put("ljbc", ljbc); |
| 2511 | 2519 | String zdp="",zwdp="",wdp=""; |
| 2512 | 2520 | SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| ... | ... | @@ -2557,7 +2565,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2557 | 2565 | // int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName); |
| 2558 | 2566 | int jhbc = 0,cjbc = 0,ljbc = 0; |
| 2559 | 2567 | double jhlc = 0, yygl = 0, ksgl = 0,tempJhlc = 0,jcclc=0; |
| 2560 | - float addMileage = 0l,remMileage = 0l; | |
| 2568 | + float addMileage = 0l,remMileage = 0l, addgl = 0, remgl = 0; | |
| 2561 | 2569 | Map<String,Object> map = new HashMap<String, Object>(); |
| 2562 | 2570 | for(ScheduleRealInfo scheduleRealInfo : list){ |
| 2563 | 2571 | if(scheduleRealInfo != null){ |
| ... | ... | @@ -2565,6 +2573,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2565 | 2573 | //烂班里程(主任务烂班), |
| 2566 | 2574 | //临加里程(主任务临加), |
| 2567 | 2575 | //计划班次,烂班班次,增加班次 |
| 2576 | + double jh = 0, sj = 0; | |
| 2568 | 2577 | tempJhlc = scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc(); |
| 2569 | 2578 | if(scheduleRealInfo.isSflj()){ |
| 2570 | 2579 | ljbc++; |
| ... | ... | @@ -2572,7 +2581,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2572 | 2581 | if( !(scheduleRealInfo.getBcType().equals("in") |
| 2573 | 2582 | ||scheduleRealInfo.getBcType().equals("out")) ){ |
| 2574 | 2583 | jhbc++; |
| 2575 | - jhlc += tempJhlc; | |
| 2584 | + jh += tempJhlc; | |
| 2576 | 2585 | } |
| 2577 | 2586 | |
| 2578 | 2587 | if(scheduleRealInfo.getStatus() == -1){ |
| ... | ... | @@ -2597,7 +2606,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2597 | 2606 | if(scheduleRealInfo.isSflj()){ |
| 2598 | 2607 | addMileage += tempJhlc; |
| 2599 | 2608 | } |
| 2600 | - yygl += tempJhlc; | |
| 2609 | + sj += tempJhlc; | |
| 2601 | 2610 | } |
| 2602 | 2611 | } |
| 2603 | 2612 | }else{ |
| ... | ... | @@ -2621,26 +2630,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 2621 | 2630 | if(scheduleRealInfo.isSflj()){ |
| 2622 | 2631 | addMileage += tempJhlc; |
| 2623 | 2632 | } |
| 2624 | - yygl += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); | |
| 2633 | + sj += childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); | |
| 2625 | 2634 | } |
| 2626 | 2635 | } |
| 2627 | 2636 | } |
| 2628 | 2637 | } |
| 2638 | + jhlc += jh; | |
| 2639 | + yygl += sj; | |
| 2640 | + if(jh > sj){ | |
| 2641 | + remgl += jh - sj; | |
| 2642 | + } else if(sj > jh){ | |
| 2643 | + addgl += sj - jh; | |
| 2644 | + } | |
| 2629 | 2645 | } |
| 2630 | 2646 | } |
| 2631 | 2647 | map.put("jhlc", format.format(jhlc+jcclc)); |
| 2632 | 2648 | map.put("yygljh", format.format(jhlc)); |
| 2633 | - map.put("ssgl", format.format(remMileage)); | |
| 2649 | + map.put("ssgl", format.format(remgl)); | |
| 2634 | 2650 | map.put("ksgl", format.format(ksgl)); |
| 2635 | - map.put("yyglsj", format.format(yygl+remMileage)); | |
| 2651 | + map.put("yyglsj", format.format(yygl)); | |
| 2636 | 2652 | map.put("jhbc", jhbc); |
| 2637 | 2653 | map.put("jcclc", jcclc); |
| 2638 | 2654 | |
| 2639 | - map.put("ljgl", format.format(addMileage)); | |
| 2655 | + map.put("ljgl", format.format(addgl)); | |
| 2640 | 2656 | map.put("ssbc", cjbc); |
| 2641 | 2657 | map.put("ysgl", format.format(yygl)); |
| 2642 | 2658 | map.put("sjbc", jhbc-cjbc+ljbc); |
| 2643 | - map.put("zgl", format.format(yygl+remMileage+ksgl+jcclc)); | |
| 2659 | + map.put("zgl", format.format(yygl+ksgl+jcclc)); | |
| 2644 | 2660 | map.put("ljbc", ljbc); |
| 2645 | 2661 | |
| 2646 | 2662 | return map; | ... | ... |
src/main/resources/static/pages/control/lineallot/allot.html
| 1 | 1 | <style> |
| 2 | -.line-select{ | |
| 3 | - border: 1px solid #ddd; | |
| 4 | - height: 350px; | |
| 5 | - margin-top: 15px; | |
| 6 | - box-shadow: 0 2px 5px 0 rgba(221, 221, 221, 0.24), 0 2px 10px 0 rgba(221, 221, 221, 0.24); | |
| 7 | -} | |
| 8 | - | |
| 9 | -.line-select.selected{ | |
| 10 | - height: 190px; | |
| 11 | -} | |
| 12 | - | |
| 13 | -.line-select .company{ | |
| 14 | - font-family: 仿宋; | |
| 15 | - font-weight: 600; | |
| 16 | -} | |
| 17 | - | |
| 18 | -.line-select .line{ | |
| 19 | - display: inline-block; | |
| 20 | - padding: 8px; | |
| 21 | - min-width: 85px; | |
| 22 | - text-align: center; | |
| 23 | - border: 1px solid #C1C1C1; | |
| 24 | - color: #666; | |
| 25 | - border-radius: 5px !important; | |
| 26 | - margin: 5px; | |
| 27 | -} | |
| 28 | - | |
| 29 | -.line-select .line.active{ | |
| 30 | - color: white; | |
| 31 | - background: #32C5D2; | |
| 32 | - border: 1px solid #32C5D2; | |
| 33 | -} | |
| 34 | - | |
| 35 | -.line-select-cont{ | |
| 36 | - text-align: left; | |
| 37 | - overflow: auto; | |
| 38 | - height: 270px; | |
| 39 | - padding-right: 0px; | |
| 40 | -} | |
| 41 | - | |
| 42 | -.line-select-cont .slimScrollBar{ | |
| 43 | - background: rgb(50, 197, 210) !important; | |
| 44 | - border-radius: 5px !important; | |
| 45 | -} | |
| 46 | - | |
| 47 | -.line-select .search-input{ | |
| 48 | - margin: 25px 0 5px 0; | |
| 49 | - padding-left: 0; | |
| 50 | -} | |
| 51 | - | |
| 52 | -.line-select .search-input .input-icon-lg{ | |
| 53 | - box-shadow: 0 2px 5px 0 rgba(194, 202, 216, 0.49), 0 2px 10px 0 rgba(194, 202, 216, 0.49) !important; | |
| 54 | -} | |
| 55 | - | |
| 56 | -.line-select .fa-search{ | |
| 57 | - color: #32c5d2 !important; | |
| 58 | -} | |
| 59 | - | |
| 60 | -.line-select .fa-plus-circle{ | |
| 61 | - cursor: pointer; | |
| 62 | - transform: rotate(43deg); | |
| 63 | -} | |
| 64 | - | |
| 65 | -.line-select .fa-plus-circle:hover{ | |
| 66 | - color: #A9A9A9; | |
| 67 | -} | |
| 68 | - | |
| 69 | -.selected .line{ | |
| 70 | - display: inline-block !important; | |
| 71 | -} | |
| 72 | -.load-text{ | |
| 73 | - position: absolute; | |
| 74 | - top: 50%; | |
| 75 | - left: 50%; | |
| 76 | - transform: translate(-50%); | |
| 77 | - font-size: 14px; | |
| 78 | - font-family: 仿宋; | |
| 79 | -} | |
| 80 | - | |
| 81 | -/* .selected a{ | |
| 82 | - position: absolute; | |
| 83 | - bottom: 20px; | |
| 84 | -} | |
| 85 | -.selected a.btn{ | |
| 86 | - bottom: 10px; | |
| 87 | -} */ | |
| 88 | - | |
| 89 | -.lb_panel{ | |
| 90 | - position: absolute; | |
| 91 | - bottom: 20px; | |
| 92 | -} | |
| 93 | - | |
| 94 | -.lb_panel a{ | |
| 95 | - margin-right: 5px; | |
| 96 | -} | |
| 97 | - | |
| 98 | -.gotoControl.red{ | |
| 99 | - background: #ec7b7b; | |
| 100 | - border-color: #ec7b7b; | |
| 101 | -} | |
| 102 | - | |
| 103 | -.gotoControl.red:hover{ | |
| 104 | - background: #d96262; | |
| 105 | - border-color: #d96262; | |
| 106 | -} | |
| 107 | - | |
| 108 | -#resetBtn,#historyBtn{ | |
| 109 | - vertical-align: bottom; | |
| 110 | - display: inline-block; | |
| 111 | - margin-bottom: 3px; | |
| 112 | -} | |
| 113 | - | |
| 114 | -/** 闵行没有分公司,直接隐藏 */ | |
| 115 | -.company,.sub-company{ | |
| 116 | - display: none !important; | |
| 117 | -} | |
| 2 | + .line-select { | |
| 3 | + border: 1px solid #ddd; | |
| 4 | + height: 350px; | |
| 5 | + margin-top: 15px; | |
| 6 | + box-shadow: 0 2px 5px 0 rgba(221, 221, 221, 0.24), 0 2px 10px 0 rgba(221, 221, 221, 0.24); | |
| 7 | + } | |
| 8 | + | |
| 9 | + .line-select.selected { | |
| 10 | + height: 190px; | |
| 11 | + } | |
| 12 | + | |
| 13 | + .line-select .company { | |
| 14 | + font-family: 仿宋; | |
| 15 | + font-weight: 600; | |
| 16 | + } | |
| 17 | + | |
| 18 | + .line-select .line { | |
| 19 | + display: inline-block; | |
| 20 | + padding: 8px; | |
| 21 | + min-width: 85px; | |
| 22 | + text-align: center; | |
| 23 | + border: 1px solid #C1C1C1; | |
| 24 | + color: #666; | |
| 25 | + border-radius: 5px !important; | |
| 26 | + margin: 5px; | |
| 27 | + } | |
| 28 | + | |
| 29 | + .line-select .line.active { | |
| 30 | + color: white; | |
| 31 | + background: #32C5D2; | |
| 32 | + border: 1px solid #32C5D2; | |
| 33 | + } | |
| 34 | + | |
| 35 | + .line-select-cont { | |
| 36 | + text-align: left; | |
| 37 | + overflow: auto; | |
| 38 | + height: 270px; | |
| 39 | + padding-right: 0px; | |
| 40 | + } | |
| 41 | + | |
| 42 | + .line-select-cont .slimScrollBar { | |
| 43 | + background: rgb(50, 197, 210) !important; | |
| 44 | + border-radius: 5px !important; | |
| 45 | + } | |
| 46 | + | |
| 47 | + .line-select .search-input { | |
| 48 | + margin: 25px 0 5px 0; | |
| 49 | + padding-left: 0; | |
| 50 | + } | |
| 51 | + | |
| 52 | + .line-select .search-input .input-icon-lg { | |
| 53 | + box-shadow: 0 2px 5px 0 rgba(194, 202, 216, 0.49), 0 2px 10px 0 rgba(194, 202, 216, 0.49) !important; | |
| 54 | + } | |
| 55 | + | |
| 56 | + .line-select .fa-search { | |
| 57 | + color: #32c5d2 !important; | |
| 58 | + } | |
| 59 | + | |
| 60 | + .line-select .fa-plus-circle { | |
| 61 | + cursor: pointer; | |
| 62 | + transform: rotate(43deg); | |
| 63 | + } | |
| 64 | + | |
| 65 | + .line-select .fa-plus-circle:hover { | |
| 66 | + color: #A9A9A9; | |
| 67 | + } | |
| 68 | + | |
| 69 | + .selected .line { | |
| 70 | + display: inline-block !important; | |
| 71 | + } | |
| 72 | + | |
| 73 | + .load-text { | |
| 74 | + position: absolute; | |
| 75 | + top: 50%; | |
| 76 | + left: 50%; | |
| 77 | + transform: translate(-50%); | |
| 78 | + font-size: 14px; | |
| 79 | + font-family: 仿宋; | |
| 80 | + } | |
| 81 | + | |
| 82 | + /* .selected a{ | |
| 83 | + position: absolute; | |
| 84 | + bottom: 20px; | |
| 85 | + } | |
| 86 | + .selected a.btn{ | |
| 87 | + bottom: 10px; | |
| 88 | + } */ | |
| 89 | + | |
| 90 | + .lb_panel { | |
| 91 | + position: absolute; | |
| 92 | + bottom: 20px; | |
| 93 | + } | |
| 94 | + | |
| 95 | + .lb_panel a { | |
| 96 | + margin-right: 5px; | |
| 97 | + } | |
| 98 | + | |
| 99 | + .gotoControl.red { | |
| 100 | + background: #ec7b7b; | |
| 101 | + border-color: #ec7b7b; | |
| 102 | + } | |
| 103 | + | |
| 104 | + .gotoControl.red:hover { | |
| 105 | + background: #d96262; | |
| 106 | + border-color: #d96262; | |
| 107 | + } | |
| 108 | + | |
| 109 | + #resetBtn, #historyBtn { | |
| 110 | + vertical-align: bottom; | |
| 111 | + display: inline-block; | |
| 112 | + margin-bottom: 3px; | |
| 113 | + } | |
| 114 | + | |
| 115 | + /** 闵行没有分公司,直接隐藏 */ | |
| 116 | + .company, .sub-company { | |
| 117 | + display: none !important; | |
| 118 | + } | |
| 118 | 119 | </style> |
| 119 | 120 | |
| 120 | 121 | <div class="page-head"> |
| 121 | - <div class="page-title"> | |
| 122 | - <h1>线路分配</h1> | |
| 123 | - </div> | |
| 122 | + <div class="page-title"> | |
| 123 | + <h1>线路分配</h1> | |
| 124 | + </div> | |
| 124 | 125 | </div> |
| 125 | 126 | |
| 126 | 127 | <ul class="page-breadcrumb breadcrumb"> |
| 127 | - <li><a href="/pages/home.html" data-pjax>首页</a> <i | |
| 128 | - class="fa fa-circle"></i></li> | |
| 129 | - <li><span class="active">线路调度管理</span> <i class="fa fa-circle"></i></li> | |
| 130 | - <li><span class="active">线路分配</span></li> | |
| 128 | + <li><a href="/pages/home.html" data-pjax>首页</a> <i | |
| 129 | + class="fa fa-circle"></i></li> | |
| 130 | + <li><span class="active">线路调度管理</span> <i class="fa fa-circle"></i></li> | |
| 131 | + <li><span class="active">线路分配</span></li> | |
| 131 | 132 | </ul> |
| 132 | 133 | |
| 133 | 134 | <div class="portlet light bordered"> |
| 134 | - <div class="portlet-title"> | |
| 135 | - <div class="caption"> | |
| 136 | - <i class="icon-social-dribbble font-green"></i> <span | |
| 137 | - class="caption-subject font-green bold uppercase">选择线路</span> | |
| 138 | - </div> | |
| 139 | - </div> | |
| 140 | - <div class="portlet-body"> | |
| 141 | - <div class="row" style="margin-bottom: 30px;"> | |
| 142 | - <div class="col-md-8 col-sm-12 col-md-offset-2" style="text-align: center;"> | |
| 143 | - <div class="col-md-12 line-select" > | |
| 144 | - <div class="col-md-12 search-input" > | |
| 145 | - <div class="col-md-6" style="padding-left: 0;"> | |
| 146 | - <div class="input-icon input-icon-lg right" > | |
| 147 | - <i class="fa fa-search"></i> | |
| 148 | - <input type="text" id="searchLineInput" class="form-control input-lg" placeholder="搜索线路"> </div> | |
| 149 | - </div> | |
| 150 | - </div> | |
| 151 | - <div class="line-select-cont col-md-12" > | |
| 152 | - <div class="line-select-body" style="margin-top: 20px;"> | |
| 153 | - <span class="load-text">加载中...</span> | |
| 154 | - </div> | |
| 155 | - </div> | |
| 135 | + <div class="portlet-title"> | |
| 136 | + <div class="caption"> | |
| 137 | + <i class="icon-social-dribbble font-green"></i> <span | |
| 138 | + class="caption-subject font-green bold uppercase">选择线路</span> | |
| 139 | + </div> | |
| 140 | + </div> | |
| 141 | + <div class="portlet-body"> | |
| 142 | + <div class="row" style="margin-bottom: 30px;"> | |
| 143 | + <div class="col-md-8 col-sm-12 col-md-offset-2" style="text-align: center;"> | |
| 144 | + <div class="col-md-12 line-select"> | |
| 145 | + <div class="col-md-12 search-input"> | |
| 146 | + <div class="col-md-6" style="padding-left: 0;"> | |
| 147 | + <div class="input-icon input-icon-lg right"> | |
| 148 | + <i class="fa fa-search"></i> | |
| 149 | + <input type="text" id="searchLineInput" class="form-control input-lg" | |
| 150 | + placeholder="搜索线路"></div> | |
| 151 | + </div> | |
| 152 | + </div> | |
| 153 | + <div class="line-select-cont col-md-12"> | |
| 154 | + <div class="line-select-body" style="margin-top: 20px;"> | |
| 155 | + <span class="load-text">加载中...</span> | |
| 156 | + </div> | |
| 157 | + </div> | |
| 156 | 158 | </div> |
| 157 | - | |
| 159 | + | |
| 158 | 160 | <div class="col-md-12 line-select selected" style="text-align: left;"> |
| 159 | - <h5 style="font-family: 仿宋; display: block;">已选中线路</h5> | |
| 160 | - <div class="selected-body"></div> | |
| 161 | - | |
| 162 | - <div class="lb_panel"> | |
| 163 | - <a href="javascript:;" class="btn btn-lg blue gotoControl red" data-status=1> | |
| 164 | - <i class="fa fa-power-off"></i> 主调模式 </a> | |
| 165 | - | |
| 166 | - <a href="javascript:;" id="monitor" class="btn btn-lg grey gotoControl" data-status=0> | |
| 167 | - <i class="fa fa-tv"></i> 监控模式 </a> | |
| 168 | - | |
| 169 | - <a href="javascript:;" id="resetBtn" style="left: 120px;color: #3598DC;"> | |
| 170 | - <i class="fa fa-history"></i> 重置</a> | |
| 171 | - | |
| 172 | - <a href="javascript:;" id="historyBtn" style="left: 180px;color: #f36a5a;"> | |
| 173 | - <i class="fa fa-history"></i> 历史纪录 </a> | |
| 174 | - </div> | |
| 161 | + <h5 style="font-family: 仿宋; display: block;">已选中线路</h5> | |
| 162 | + <div class="selected-body"></div> | |
| 163 | + | |
| 164 | + <div class="lb_panel"> | |
| 165 | + <a href="javascript:;" class="btn btn-lg blue gotoControl red" data-status=1> | |
| 166 | + <i class="fa fa-power-off"></i> 主调模式 </a> | |
| 167 | + | |
| 168 | + <a href="javascript:;" id="monitor" class="btn btn-lg grey gotoControl" data-status=0> | |
| 169 | + <i class="fa fa-tv"></i> 监控模式 </a> | |
| 170 | + | |
| 171 | + <a href="javascript:;" id="resetBtn" style="left: 120px;color: #3598DC;"> | |
| 172 | + <i class="fa fa-history"></i> 重置</a> | |
| 173 | + | |
| 174 | + <a href="javascript:;" id="historyBtn" style="left: 180px;color: #f36a5a;"> | |
| 175 | + <i class="fa fa-history"></i> 历史纪录 </a> | |
| 176 | + </div> | |
| 175 | 177 | </div> |
| 176 | - </div> | |
| 177 | - </div> | |
| 178 | - </div> | |
| 178 | + </div> | |
| 179 | + </div> | |
| 180 | + </div> | |
| 179 | 181 | </div> |
| 180 | 182 | |
| 181 | 183 | <div class="clone_line"> |
| 182 | 184 | </div> |
| 183 | 185 | |
| 184 | 186 | <script id="line_select_cont_temp" type="text/html"> |
| 185 | -{{each data as obj company}} | |
| 186 | - <h3 class="company" >{{company}}</h3> | |
| 187 | - {{each data[company] as subObj subCompany}} | |
| 188 | - <h5 class="sub-company" style="font-family: 仿宋;">{{company}}_{{subCompany}}</h5> | |
| 189 | - {{each data[company][subCompany] as line i}} | |
| 190 | - <div class="line" name="line_{{line.lineCode}}" data-id={{line.lineCode}}>{{line.name}}</div> | |
| 191 | - {{/each}} | |
| 192 | - {{/each}} | |
| 193 | -{{/each}} | |
| 187 | + {{each data as obj company}} | |
| 188 | + <h3 class="company">{{company}}</h3> | |
| 189 | + {{each data[company] as subObj subCompany}} | |
| 190 | + <h5 class="sub-company" style="font-family: 仿宋;">{{company}}_{{subCompany}}</h5> | |
| 191 | + {{each data[company][subCompany] as line i}} | |
| 192 | + <div class="line" name="line_{{line.lineCode}}" data-id={{line.lineCode}}>{{line.name}}</div> | |
| 193 | + {{/each}} | |
| 194 | + {{/each}} | |
| 195 | + {{/each}} | |
| 194 | 196 | </script> |
| 195 | 197 | <script src="/assets/js/eventproxy.js"></script> |
| 196 | 198 | <script> |
| 197 | -$(function(){ | |
| 198 | - //大写字母映射 | |
| 199 | - var camelChars = {}; | |
| 200 | - //全拼映射 | |
| 201 | - var fullChars = {}; | |
| 202 | - //中文映射 | |
| 203 | - var zhChars = {}; | |
| 204 | - //合并所有映射 | |
| 205 | - var allChars = {}; | |
| 206 | - | |
| 207 | - //线路编码映射 | |
| 208 | - var lineIdMap = {}; | |
| 209 | - | |
| 210 | - //线路编码和名称对照 (写入localStorage,线调用) | |
| 211 | - var lineIds = {}; | |
| 212 | - | |
| 213 | - var storage = window.localStorage; | |
| 214 | - | |
| 215 | - $get('/line/all', {destroy_eq:0}, function(allLine){ | |
| 216 | - $('#searchLineInput').focus(); | |
| 217 | - //按公司分组 | |
| 218 | - var companyJson = groupData(allLine, 'company'); | |
| 219 | - //按分公司分组 | |
| 220 | - for(var company in companyJson){ | |
| 221 | - companyJson[company] = groupData(companyJson[company], 'brancheCompany'); | |
| 222 | - } | |
| 223 | - | |
| 224 | - var htmlStr = template('line_select_cont_temp', {data: companyJson}); | |
| 225 | - $('.line-select-body').html(htmlStr) | |
| 226 | - .slimscroll({//滚动条 | |
| 227 | - height: '270px' | |
| 228 | - }); | |
| 229 | - | |
| 230 | - //替换公司编码 | |
| 231 | -/* var gsmap = {}; | |
| 232 | - $get('/business/all', null, function(array){ | |
| 233 | - $.each(array, function(i, gs){ | |
| 234 | - var k = gs.upCode + '_' + gs.businessCode; | |
| 235 | - if(gs.upCode === '88'){ | |
| 236 | - k = gs.businessCode; | |
| 237 | - } | |
| 238 | - gsmap[k] = gs.businessName; | |
| 239 | - }); | |
| 240 | - | |
| 241 | - $.each($('.company,.sub-company'), function(j , e){ | |
| 242 | - var k = $(e).text(); | |
| 243 | - gsmap[k] && $(e).text(gsmap[k]); | |
| 244 | - }) | |
| 245 | - }); */ | |
| 246 | - | |
| 247 | - //映射 | |
| 248 | - $.each(allLine, function(s, line){ | |
| 249 | - camelChars[pinyin.getCamelChars(line.name)] = line.lineCode; | |
| 250 | - fullChars[pinyin.getFullChars(line.name).toUpperCase()] = line.lineCode; | |
| 251 | - zhChars[line.name] = line.lineCode; | |
| 252 | - lineIdMap[line.lineCode] = line; | |
| 253 | - | |
| 254 | - lineIds[line.lineCode] = line.name; | |
| 255 | - }); | |
| 256 | - //合并映射 | |
| 257 | - $.extend(allChars, camelChars, fullChars, zhChars); | |
| 258 | - | |
| 259 | - //线路选中事件 | |
| 260 | - $('.line-select-body .line').on('click', function(){ | |
| 261 | - if($(this).hasClass('active')){ | |
| 262 | - $(this).removeClass('active'); | |
| 263 | - $('.selected-body .line[name='+$(this).attr('name')+']').remove(); | |
| 264 | - } | |
| 265 | - else{ | |
| 266 | - $(this).addClass('active'); | |
| 267 | - $('.selected-body').append($(this).clone()); | |
| 268 | - } | |
| 269 | - }); | |
| 270 | - | |
| 271 | - storage.setItem('lineIds', JSON.stringify(lineIds)); | |
| 272 | - }); | |
| 273 | - | |
| 274 | - //搜索框事件 | |
| 275 | - $('#searchLineInput').on('keyup', filterLines); | |
| 276 | - | |
| 277 | - $('.line-select .input-icon i').on('click', function(){ | |
| 278 | - if($(this).hasClass('fa-plus-circle')){ | |
| 279 | - $('#searchLineInput').val(''); | |
| 280 | - filterLines(); | |
| 281 | - } | |
| 282 | - }); | |
| 283 | - | |
| 284 | - $('.selected-body').on('click', '.line', function(){ | |
| 285 | - $('.line-select-body .line[name='+$(this).attr('name')+']').removeClass('active'); | |
| 286 | - $(this).remove(); | |
| 287 | - }); | |
| 288 | - | |
| 289 | - //确定 | |
| 290 | - $('.gotoControl').on('click', function(){ | |
| 291 | - var lines = $('.selected-body .line'); | |
| 292 | - if(lines.length == 0){ | |
| 293 | - layer.alert('你还没有选择线路!',{icon: 3}); | |
| 294 | - return; | |
| 295 | - } | |
| 296 | - | |
| 297 | - showLoad('更新缓存信息...'); | |
| 298 | - //将选择的线路写入localstorage | |
| 299 | - var lsData = []; | |
| 300 | - $.each(lines, function(i, e){ | |
| 301 | - lsData.push(lineIdMap[$(e).data('id')]); | |
| 302 | - }); | |
| 303 | - storage.setItem('lineControlItems', JSON.stringify(lsData)); | |
| 304 | - | |
| 305 | - var operationMode = $(this).data('status'); | |
| 306 | - //监控模式还是主调模式 | |
| 307 | - storage.setItem('operationMode', operationMode); | |
| 308 | - | |
| 309 | - var ep = new EventProxy(); | |
| 310 | - //缓存车辆自编号和设备号对照 | |
| 311 | - cacheCar2DeviceId(function(){ | |
| 312 | - delayEmit(ep, 'cacheRoute'); | |
| 313 | - }); | |
| 314 | - | |
| 315 | - //缓存线路路由 | |
| 316 | - ep.tail('cacheRoute', function(){ | |
| 317 | - cacheRoute(lsData, function(cacheData){ | |
| 318 | - delayEmit(ep, 'checkLineConfig'); | |
| 319 | - }); | |
| 320 | - }); | |
| 321 | - | |
| 322 | - //检查线路配置信息 | |
| 323 | - ep.tail('checkLineConfig', function(){ | |
| 324 | - checkLineConfig(lsData, function(rs){ | |
| 325 | - if(rs.status == 0) | |
| 326 | - delayEmit(ep, 'gotoControl', rs); | |
| 327 | - else if(rs.status == 1) | |
| 328 | - delayEmit(ep, 'initLineConfig', rs); | |
| 329 | - }); | |
| 330 | - }); | |
| 331 | - | |
| 332 | - //初始化没有 线路配置信息 的线路 | |
| 333 | - ep.tail('initLineConfig',function(rs){ | |
| 334 | - initLineConfig(rs.not, function(){ | |
| 335 | - delayEmit(ep, 'gotoControl', rs); | |
| 336 | - }); | |
| 337 | - }); | |
| 338 | - | |
| 339 | - //进入线调 | |
| 340 | - ep.tail('gotoControl', function(){ | |
| 341 | - //alert('进入线调'); | |
| 342 | - layer.closeAll(); | |
| 343 | - //loadPage('/pages/control/line/index.html'); | |
| 344 | - window.location.href="/real_control_v2/main.html"; | |
| 345 | - }); | |
| 346 | - }); | |
| 347 | - | |
| 348 | - function checkLineConfig(lsData, cb){ | |
| 349 | - showLoad('检查线路配置信息...'); | |
| 350 | - var lineCodeArray = []; | |
| 351 | - $.each(lsData, function(){ | |
| 352 | - lineCodeArray.push(this.lineCode); | |
| 353 | - }); | |
| 354 | - | |
| 355 | - $.ajax({ | |
| 356 | - url: '/lineConfig/check', | |
| 357 | - traditional: true, | |
| 358 | - data: {codeArray: lineCodeArray}, | |
| 359 | - method: 'POST', | |
| 360 | - success: cb | |
| 361 | - }); | |
| 362 | - } | |
| 363 | - | |
| 364 | - function initLineConfig(arr, cb){ | |
| 365 | - var i = 0; | |
| 366 | - (function(){ | |
| 367 | - if(i >= arr.length){ | |
| 368 | - cb && cb(); | |
| 369 | - return; | |
| 370 | - } | |
| 371 | - var f = arguments.callee | |
| 372 | - ,lineCode = arr[i]; | |
| 373 | - | |
| 374 | - showLoad('初始化'+lineIds[lineCode]+'配置信息...'); | |
| 375 | - $.post('/lineConfig/init/' + lineCode, function(rs){ | |
| 376 | - if(rs == 1){ | |
| 377 | - i ++; | |
| 378 | - f(); | |
| 379 | - } | |
| 380 | - }); | |
| 381 | - })(); | |
| 382 | - } | |
| 383 | - | |
| 384 | - function cacheCar2DeviceId(cb){ | |
| 385 | - //showLoad('缓存基础对照信息...'); | |
| 386 | - $.get('/gps/Car2DeviceId', function(rs){ | |
| 387 | - storage.setItem('car2DeviceId', JSON.stringify(rs)); | |
| 388 | - cb && cb(); | |
| 389 | - }); | |
| 390 | - } | |
| 391 | - | |
| 392 | - function cacheRoute(lsData, cb){ | |
| 393 | - //showLoad('缓存线路路由信息...'); | |
| 394 | - var i = 0, cacheData = {}; | |
| 395 | - (function(){ | |
| 396 | - if(i >= lsData.length){ | |
| 397 | - //写入localStorage | |
| 398 | - for(var lineCode in cacheData) | |
| 399 | - storage.setItem(lineCode + '_route', JSON.stringify(cacheData[lineCode])); | |
| 400 | - | |
| 401 | - cb && cb(); | |
| 402 | - return; | |
| 403 | - } | |
| 404 | - var f = arguments.callee | |
| 405 | - ,item = lsData[i]; | |
| 406 | - | |
| 407 | - $.get('/realMap/findRouteByLine', {lineCode: item.lineCode}, function(rs){ | |
| 408 | - //$.get('/realSchedule/findRouteByLine', {lineCode: item.lineCode}, function(rs){ | |
| 409 | - if(rs && rs.lineId){ | |
| 410 | - cacheData[item.lineCode] = rs; | |
| 411 | - i ++; | |
| 412 | - f(); | |
| 413 | - } | |
| 414 | - }); | |
| 415 | - })(); | |
| 416 | - } | |
| 417 | - | |
| 418 | - //历史纪录 | |
| 419 | - $('#historyBtn').on('click', function(){ | |
| 420 | - var lineControlItems = window.localStorage.getItem('lineControlItems'); | |
| 421 | - if(!lineControlItems){ | |
| 422 | - layer.alert('没有在当前电脑找到历史纪录!',{icon: 3}); | |
| 423 | - return; | |
| 424 | - } | |
| 425 | - else{ | |
| 426 | - var array = JSON.parse(lineControlItems); | |
| 427 | - clear(); | |
| 428 | - $.each(array, function(i, line){ | |
| 429 | - $('.line-select-body .line[name=line_'+line.lineCode+']').click(); | |
| 430 | - }); | |
| 431 | - } | |
| 432 | - }); | |
| 433 | - | |
| 434 | - //重置 | |
| 435 | - $('#resetBtn').on('click', clear); | |
| 436 | - | |
| 437 | - function clear(){ | |
| 438 | - $('.line-select-body .line.active').removeClass('active'); | |
| 439 | - $('.selected-body .line').remove(); | |
| 440 | - | |
| 441 | - $('.line-select .input-icon i.fa-plus-circle').click(); | |
| 442 | - filterLines(); | |
| 443 | - } | |
| 444 | - | |
| 445 | - function filterLines(){ | |
| 446 | - var t = $('#searchLineInput').val().toUpperCase() | |
| 447 | - ,es = [] | |
| 448 | - ,bs = $('.line-select-body .line, .line-select-body .company, .line-select-body .sub-company') | |
| 449 | - ,icon = $('.line-select .input-icon i'); | |
| 450 | - | |
| 451 | - if(!t){ | |
| 452 | - bs.show(); | |
| 453 | - icon.removeClass('fa-plus-circle').addClass('fa-search'); | |
| 454 | - return; | |
| 455 | - } | |
| 456 | - else | |
| 457 | - icon.removeClass('fa-search').addClass('fa-plus-circle'); | |
| 458 | - | |
| 459 | - for(var c in allChars){ | |
| 460 | - if(c.indexOf(t) != -1) | |
| 461 | - es.push('.line-select-body .line[name=line_' + allChars[c] + ']'); | |
| 462 | - } | |
| 463 | - | |
| 464 | - bs.hide(); | |
| 465 | - $.each(es, function(i, e){ | |
| 466 | - $(e).show(); | |
| 467 | - }); | |
| 468 | - } | |
| 469 | - | |
| 470 | - function groupData(array, g){ | |
| 471 | - var groups = {}, key; | |
| 472 | - | |
| 473 | - $.each(array, function(i, item){ | |
| 474 | - key = item[g]; | |
| 475 | - if(!groups[key]) | |
| 476 | - groups[key] = []; | |
| 477 | - | |
| 478 | - groups[key].push(item); | |
| 479 | - }); | |
| 480 | - | |
| 481 | - return groups; | |
| 482 | - } | |
| 483 | - | |
| 484 | - function showLoad(text){ | |
| 485 | - layer.msg(text, {icon: 16, time: 0, shade: 0.3}); | |
| 486 | - } | |
| 487 | - | |
| 488 | - function delayEmit(ep, t, p){ | |
| 489 | - setTimeout(function(){ | |
| 490 | - ep.emit(t, p); | |
| 491 | - }, 300); | |
| 492 | - } | |
| 493 | -}); | |
| 199 | + $(function () { | |
| 200 | + //大写字母映射 | |
| 201 | + var camelChars = {}; | |
| 202 | + //全拼映射 | |
| 203 | + var fullChars = {}; | |
| 204 | + //中文映射 | |
| 205 | + var zhChars = {}; | |
| 206 | + //合并所有映射 | |
| 207 | + var allChars = {}; | |
| 208 | + | |
| 209 | + //线路编码映射 | |
| 210 | + var lineIdMap = {}; | |
| 211 | + | |
| 212 | + //线路编码和名称对照 (写入localStorage,线调用) | |
| 213 | + var lineIds = {}; | |
| 214 | + | |
| 215 | + var storage = window.localStorage; | |
| 216 | + | |
| 217 | + $get('/line/all', {destroy_eq: 0}, function (allLine) { | |
| 218 | + $('#searchLineInput').focus(); | |
| 219 | + //按公司分组 | |
| 220 | + var companyJson = groupData(allLine, 'company'); | |
| 221 | + //按分公司分组 | |
| 222 | + for (var company in companyJson) { | |
| 223 | + companyJson[company] = groupData(companyJson[company], 'brancheCompany'); | |
| 224 | + } | |
| 225 | + | |
| 226 | + var htmlStr = template('line_select_cont_temp', {data: companyJson}); | |
| 227 | + $('.line-select-body').html(htmlStr) | |
| 228 | + .slimscroll({//滚动条 | |
| 229 | + height: '270px' | |
| 230 | + }); | |
| 231 | + | |
| 232 | + //替换公司编码 | |
| 233 | + /* var gsmap = {}; | |
| 234 | + $get('/business/all', null, function(array){ | |
| 235 | + $.each(array, function(i, gs){ | |
| 236 | + var k = gs.upCode + '_' + gs.businessCode; | |
| 237 | + if(gs.upCode === '88'){ | |
| 238 | + k = gs.businessCode; | |
| 239 | + } | |
| 240 | + gsmap[k] = gs.businessName; | |
| 241 | + }); | |
| 242 | + | |
| 243 | + $.each($('.company,.sub-company'), function(j , e){ | |
| 244 | + var k = $(e).text(); | |
| 245 | + gsmap[k] && $(e).text(gsmap[k]); | |
| 246 | + }) | |
| 247 | + }); */ | |
| 248 | + | |
| 249 | + //映射 | |
| 250 | + $.each(allLine, function (s, line) { | |
| 251 | + camelChars[pinyin.getCamelChars(line.name)] = line.lineCode; | |
| 252 | + fullChars[pinyin.getFullChars(line.name).toUpperCase()] = line.lineCode; | |
| 253 | + zhChars[line.name] = line.lineCode; | |
| 254 | + lineIdMap[line.lineCode] = line; | |
| 255 | + | |
| 256 | + lineIds[line.lineCode] = line.name; | |
| 257 | + }); | |
| 258 | + //合并映射 | |
| 259 | + $.extend(allChars, camelChars, fullChars, zhChars); | |
| 260 | + | |
| 261 | + //线路选中事件 | |
| 262 | + $('.line-select-body .line').on('click', function () { | |
| 263 | + if ($(this).hasClass('active')) { | |
| 264 | + $(this).removeClass('active'); | |
| 265 | + $('.selected-body .line[name=' + $(this).attr('name') + ']').remove(); | |
| 266 | + } | |
| 267 | + else { | |
| 268 | + $(this).addClass('active'); | |
| 269 | + $('.selected-body').append($(this).clone()); | |
| 270 | + } | |
| 271 | + }); | |
| 272 | + | |
| 273 | + storage.setItem('lineIds', JSON.stringify(lineIds)); | |
| 274 | + }); | |
| 275 | + | |
| 276 | + //搜索框事件 | |
| 277 | + $('#searchLineInput').on('keyup', filterLines); | |
| 278 | + | |
| 279 | + $('.line-select .input-icon i').on('click', function () { | |
| 280 | + if ($(this).hasClass('fa-plus-circle')) { | |
| 281 | + $('#searchLineInput').val(''); | |
| 282 | + filterLines(); | |
| 283 | + } | |
| 284 | + }); | |
| 285 | + | |
| 286 | + $('.selected-body').on('click', '.line', function () { | |
| 287 | + $('.line-select-body .line[name=' + $(this).attr('name') + ']').removeClass('active'); | |
| 288 | + $(this).remove(); | |
| 289 | + }); | |
| 290 | + | |
| 291 | + //确定 | |
| 292 | + $('.gotoControl').on('click', function () { | |
| 293 | + var lines = $('.selected-body .line'); | |
| 294 | + if (lines.length == 0) { | |
| 295 | + layer.alert('你还没有选择线路!', {icon: 3}); | |
| 296 | + return; | |
| 297 | + } | |
| 298 | + | |
| 299 | + showLoad('更新缓存信息...'); | |
| 300 | + //将选择的线路写入localstorage | |
| 301 | + var lsData = []; | |
| 302 | + $.each(lines, function (i, e) { | |
| 303 | + lsData.push(lineIdMap[$(e).data('id')]); | |
| 304 | + }); | |
| 305 | + storage.setItem('lineControlItems', JSON.stringify(lsData)); | |
| 306 | + | |
| 307 | + var operationMode = $(this).data('status'); | |
| 308 | + //监控模式还是主调模式 | |
| 309 | + storage.setItem('operationMode', operationMode); | |
| 310 | + | |
| 311 | + var ep = new EventProxy(); | |
| 312 | + //缓存车辆自编号和设备号对照 | |
| 313 | + cacheCar2DeviceId(function () { | |
| 314 | + delayEmit(ep, 'cacheRoute'); | |
| 315 | + }); | |
| 316 | + | |
| 317 | + //缓存线路路由 | |
| 318 | + ep.tail('cacheRoute', function () { | |
| 319 | + cacheRoute(lsData, function (cacheData) { | |
| 320 | + delayEmit(ep, 'checkLineConfig'); | |
| 321 | + }); | |
| 322 | + }); | |
| 323 | + | |
| 324 | + //检查线路配置信息 | |
| 325 | + ep.tail('checkLineConfig', function () { | |
| 326 | + checkLineConfig(lsData, function (rs) { | |
| 327 | + if (rs.status == 0) | |
| 328 | + delayEmit(ep, 'gotoControl', rs); | |
| 329 | + else if (rs.status == 1) | |
| 330 | + delayEmit(ep, 'initLineConfig', rs); | |
| 331 | + }); | |
| 332 | + }); | |
| 333 | + | |
| 334 | + //初始化没有 线路配置信息 的线路 | |
| 335 | + ep.tail('initLineConfig', function (rs) { | |
| 336 | + initLineConfig(rs.not, function () { | |
| 337 | + delayEmit(ep, 'gotoControl', rs); | |
| 338 | + }); | |
| 339 | + }); | |
| 340 | + | |
| 341 | + //进入线调 | |
| 342 | + ep.tail('gotoControl', function () { | |
| 343 | + //alert('进入线调'); | |
| 344 | + layer.closeAll(); | |
| 345 | + //loadPage('/pages/control/line/index.html'); | |
| 346 | + window.location.href = "/real_control/v2"; | |
| 347 | + }); | |
| 348 | + }); | |
| 349 | + | |
| 350 | + function checkLineConfig(lsData, cb) { | |
| 351 | + showLoad('检查线路配置信息...'); | |
| 352 | + var lineCodeArray = []; | |
| 353 | + $.each(lsData, function () { | |
| 354 | + lineCodeArray.push(this.lineCode); | |
| 355 | + }); | |
| 356 | + | |
| 357 | + $.ajax({ | |
| 358 | + url: '/lineConfig/check', | |
| 359 | + traditional: true, | |
| 360 | + data: {codeArray: lineCodeArray}, | |
| 361 | + method: 'POST', | |
| 362 | + success: cb | |
| 363 | + }); | |
| 364 | + } | |
| 365 | + | |
| 366 | + function initLineConfig(arr, cb) { | |
| 367 | + var i = 0; | |
| 368 | + (function () { | |
| 369 | + if (i >= arr.length) { | |
| 370 | + cb && cb(); | |
| 371 | + return; | |
| 372 | + } | |
| 373 | + var f = arguments.callee | |
| 374 | + , lineCode = arr[i]; | |
| 375 | + | |
| 376 | + showLoad('初始化' + lineIds[lineCode] + '配置信息...'); | |
| 377 | + $.post('/lineConfig/init/' + lineCode, function (rs) { | |
| 378 | + if (rs == 1) { | |
| 379 | + i++; | |
| 380 | + f(); | |
| 381 | + } | |
| 382 | + }); | |
| 383 | + })(); | |
| 384 | + } | |
| 385 | + | |
| 386 | + function cacheCar2DeviceId(cb) { | |
| 387 | + //showLoad('缓存基础对照信息...'); | |
| 388 | + $.get('/gps/Car2DeviceId', function (rs) { | |
| 389 | + storage.setItem('car2DeviceId', JSON.stringify(rs)); | |
| 390 | + cb && cb(); | |
| 391 | + }); | |
| 392 | + } | |
| 393 | + | |
| 394 | + function cacheRoute(lsData, cb) { | |
| 395 | + //showLoad('缓存线路路由信息...'); | |
| 396 | + var i = 0, cacheData = {}; | |
| 397 | + (function () { | |
| 398 | + if (i >= lsData.length) { | |
| 399 | + //写入localStorage | |
| 400 | + for (var lineCode in cacheData) | |
| 401 | + storage.setItem(lineCode + '_route', JSON.stringify(cacheData[lineCode])); | |
| 402 | + | |
| 403 | + cb && cb(); | |
| 404 | + return; | |
| 405 | + } | |
| 406 | + var f = arguments.callee | |
| 407 | + , item = lsData[i]; | |
| 408 | + | |
| 409 | + $.get('/realMap/findRouteByLine', {lineCode: item.lineCode}, function (rs) { | |
| 410 | + //$.get('/realSchedule/findRouteByLine', {lineCode: item.lineCode}, function(rs){ | |
| 411 | + if (rs && rs.lineId) { | |
| 412 | + cacheData[item.lineCode] = rs; | |
| 413 | + i++; | |
| 414 | + f(); | |
| 415 | + } | |
| 416 | + }); | |
| 417 | + })(); | |
| 418 | + } | |
| 419 | + | |
| 420 | + //历史纪录 | |
| 421 | + $('#historyBtn').on('click', function () { | |
| 422 | + var lineControlItems = window.localStorage.getItem('lineControlItems'); | |
| 423 | + if (!lineControlItems) { | |
| 424 | + layer.alert('没有在当前电脑找到历史纪录!', {icon: 3}); | |
| 425 | + return; | |
| 426 | + } | |
| 427 | + else { | |
| 428 | + var array = JSON.parse(lineControlItems); | |
| 429 | + clear(); | |
| 430 | + $.each(array, function (i, line) { | |
| 431 | + $('.line-select-body .line[name=line_' + line.lineCode + ']').click(); | |
| 432 | + }); | |
| 433 | + } | |
| 434 | + }); | |
| 435 | + | |
| 436 | + //重置 | |
| 437 | + $('#resetBtn').on('click', clear); | |
| 438 | + | |
| 439 | + function clear() { | |
| 440 | + $('.line-select-body .line.active').removeClass('active'); | |
| 441 | + $('.selected-body .line').remove(); | |
| 442 | + | |
| 443 | + $('.line-select .input-icon i.fa-plus-circle').click(); | |
| 444 | + filterLines(); | |
| 445 | + } | |
| 446 | + | |
| 447 | + function filterLines() { | |
| 448 | + var t = $('#searchLineInput').val().toUpperCase() | |
| 449 | + , es = [] | |
| 450 | + , bs = $('.line-select-body .line, .line-select-body .company, .line-select-body .sub-company') | |
| 451 | + , icon = $('.line-select .input-icon i'); | |
| 452 | + | |
| 453 | + if (!t) { | |
| 454 | + bs.show(); | |
| 455 | + icon.removeClass('fa-plus-circle').addClass('fa-search'); | |
| 456 | + return; | |
| 457 | + } | |
| 458 | + else | |
| 459 | + icon.removeClass('fa-search').addClass('fa-plus-circle'); | |
| 460 | + | |
| 461 | + for (var c in allChars) { | |
| 462 | + if (c.indexOf(t) != -1) | |
| 463 | + es.push('.line-select-body .line[name=line_' + allChars[c] + ']'); | |
| 464 | + } | |
| 465 | + | |
| 466 | + bs.hide(); | |
| 467 | + $.each(es, function (i, e) { | |
| 468 | + $(e).show(); | |
| 469 | + }); | |
| 470 | + } | |
| 471 | + | |
| 472 | + function groupData(array, g) { | |
| 473 | + var groups = {}, key; | |
| 474 | + | |
| 475 | + $.each(array, function (i, item) { | |
| 476 | + key = item[g]; | |
| 477 | + if (!groups[key]) | |
| 478 | + groups[key] = []; | |
| 479 | + | |
| 480 | + groups[key].push(item); | |
| 481 | + }); | |
| 482 | + | |
| 483 | + return groups; | |
| 484 | + } | |
| 485 | + | |
| 486 | + function showLoad(text) { | |
| 487 | + layer.msg(text, {icon: 16, time: 0, shade: 0.3}); | |
| 488 | + } | |
| 489 | + | |
| 490 | + function delayEmit(ep, t, p) { | |
| 491 | + setTimeout(function () { | |
| 492 | + ep.emit(t, p); | |
| 493 | + }, 300); | |
| 494 | + } | |
| 495 | + }); | |
| 494 | 496 | </script> |
| 495 | 497 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/permission/user/changePWD.html
| ... | ... | @@ -3,7 +3,7 @@ |
| 3 | 3 | <!-- BEGIN VALIDATION STATES--> |
| 4 | 4 | <div class="portlet light portlet-fit portlet-form bordered"> |
| 5 | 5 | <div class="portlet-body"> |
| 6 | - <form action="/user/changePWD" class="form-horizontal" id="changePWD"> | |
| 6 | + <form class="form-horizontal" id="changePWDForm"> | |
| 7 | 7 | <div class="form-group" style="margin-top: 60px"> |
| 8 | 8 | <label class="control-label col-md-5">原始密码: |
| 9 | 9 | </label> |
| ... | ... | @@ -48,7 +48,8 @@ |
| 48 | 48 | <script> |
| 49 | 49 | $(function(){ |
| 50 | 50 | $("#confirm").on("click",function(){ |
| 51 | - $.get('/user/changePWD',null,function(){ | |
| 51 | + var data = $('#changePWDForm').serializeJSON(); | |
| 52 | + $.post('/user/changePWD',data,function(){ | |
| 52 | 53 | |
| 53 | 54 | }); |
| 54 | 55 | }); | ... | ... |
src/main/resources/static/real_control_v2/css/main.css
| ... | ... | @@ -711,6 +711,7 @@ li.map-panel { |
| 711 | 711 | width: 33%; |
| 712 | 712 | } |
| 713 | 713 | |
| 714 | +/* | |
| 714 | 715 | #schedule-lp_change-modal .sch-list { |
| 715 | 716 | margin-top: 25px; |
| 716 | 717 | } |
| ... | ... | @@ -762,4 +763,52 @@ li.map-panel { |
| 762 | 763 | #schedule-lp_change-modal .sch-list .sch-item.reverse dl dd:nth-of-type(4) { |
| 763 | 764 | width: 33%; |
| 764 | 765 | border-right:0; |
| 765 | -} | |
| 766 | 766 | \ No newline at end of file |
| 767 | +}*/ | |
| 768 | + | |
| 769 | + | |
| 770 | +#schedule-lp_change-modal .sch-list dl dd { | |
| 771 | + font-size: 14px; | |
| 772 | +} | |
| 773 | + | |
| 774 | +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(1) { | |
| 775 | + width: 9%; | |
| 776 | + border-left: 1px solid #dedede; | |
| 777 | +} | |
| 778 | + | |
| 779 | +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(2) { | |
| 780 | + width: 30%; | |
| 781 | +} | |
| 782 | + | |
| 783 | +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(3) { | |
| 784 | + width: 28%; | |
| 785 | +} | |
| 786 | + | |
| 787 | +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) { | |
| 788 | + width: 17%; | |
| 789 | +} | |
| 790 | + | |
| 791 | +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) { | |
| 792 | + width: 15%; | |
| 793 | +} | |
| 794 | + | |
| 795 | + | |
| 796 | +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) { | |
| 797 | + width: 9%; | |
| 798 | + border-left: 1px solid #dedede; | |
| 799 | +} | |
| 800 | + | |
| 801 | +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(2) { | |
| 802 | + width: 15%; | |
| 803 | +} | |
| 804 | + | |
| 805 | +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(3) { | |
| 806 | + width: 17%; | |
| 807 | +} | |
| 808 | + | |
| 809 | +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(4) { | |
| 810 | + width: 28%; | |
| 811 | +} | |
| 812 | + | |
| 813 | +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(5) { | |
| 814 | + width: 30%; | |
| 815 | +} | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lp_change.html
| ... | ... | @@ -6,139 +6,131 @@ |
| 6 | 6 | |
| 7 | 7 | <div class="uk-grid uk-grid-divider"> |
| 8 | 8 | <div class="uk-width-1-2"> |
| 9 | - <form class="uk-form"> | |
| 9 | + <form class="uk-form uk-form-horizontal"> | |
| 10 | 10 | <fieldset> |
| 11 | 11 | 线路 |
| 12 | - <select name="lineSelect" style="width: 140px;"></select> | |
| 12 | + <select name="lineSelect" data-order="0" style="width: 140px;"></select> | |
| 13 | 13 |   |
| 14 | 14 | 路牌 |
| 15 | - <select name="lpName" style="width: 90px;"></select> | |
| 15 | + <select name="lpName" data-order="0" style="width: 90px;"></select> | |
| 16 | 16 | </fieldset> |
| 17 | - </form> | |
| 18 | - <div class="sch-list"> | |
| 19 | - <div class="sch-item"> | |
| 20 | - <dl> | |
| 21 | - <dd>S0568/钱存哗</dd> | |
| 22 | - <dd>S0J-046</dd> | |
| 23 | - <dd>5</dd> | |
| 24 | - <dd>07:58</dd> | |
| 25 | - </dl> | |
| 26 | - <dl> | |
| 27 | - <dd>S0568/钱存哗</dd> | |
| 28 | - <dd>S0J-046</dd> | |
| 29 | - <dd>5</dd> | |
| 30 | - <dd>07:58</dd> | |
| 31 | - </dl> | |
| 32 | - <dl> | |
| 33 | - <dd>S0568/钱存哗</dd> | |
| 34 | - <dd>S0J-046</dd> | |
| 35 | - <dd>5</dd> | |
| 36 | - <dd>07:58</dd> | |
| 37 | - </dl> | |
| 38 | - <dl> | |
| 39 | - <dd>S0568/钱存哗</dd> | |
| 40 | - <dd>S0J-046</dd> | |
| 41 | - <dd>5</dd> | |
| 42 | - <dd>07:58</dd> | |
| 43 | - </dl> | |
| 44 | - <dl> | |
| 45 | - <dd>S0568/钱存哗</dd> | |
| 46 | - <dd>S0J-046</dd> | |
| 47 | - <dd>5</dd> | |
| 48 | - <dd>07:58</dd> | |
| 49 | - </dl> | |
| 50 | - <dl> | |
| 51 | - <dd>S0568/钱存哗</dd> | |
| 52 | - <dd>S0J-046</dd> | |
| 53 | - <dd>5</dd> | |
| 54 | - <dd>07:58</dd> | |
| 55 | - </dl> | |
| 56 | - <dl> | |
| 57 | - <dd>S0568/钱存哗</dd> | |
| 58 | - <dd>S0J-046</dd> | |
| 59 | - <dd>5</dd> | |
| 60 | - <dd>07:58</dd> | |
| 61 | - </dl> | |
| 17 | + | |
| 18 | + <div class="ct_table sch-list" style="margin-top: 14px;"> | |
| 19 | + <div class="ct_table_head"> | |
| 20 | + <dl> | |
| 21 | + <dt><input type="checkbox"></dt> | |
| 22 | + <dt>驾驶员</dt> | |
| 23 | + <dt>车辆</dt> | |
| 24 | + <dt>路牌</dt> | |
| 25 | + <dt>时间</dt> | |
| 26 | + </dl> | |
| 27 | + </div> | |
| 28 | + <div class="ct_table_body"> | |
| 29 | + </div> | |
| 62 | 30 | </div> |
| 63 | - </div> | |
| 31 | + </form> | |
| 64 | 32 | </div> |
| 65 | 33 | <div class="uk-width-1-2"> |
| 66 | 34 | <form class="uk-form uk-form-horizontal"> |
| 67 | 35 | <fieldset> |
| 68 | 36 | 线路 |
| 69 | - <select name="lineSelect" style="width: 140px;"></select> | |
| 37 | + <select name="lineSelect" data-order="1" style="width: 140px;"></select> | |
| 70 | 38 |   |
| 71 | 39 | 路牌 |
| 72 | - <select name="lpName" style="width: 90px;"></select> | |
| 40 | + <select name="lpName" data-order="1" style="width: 90px;"></select> | |
| 73 | 41 | </fieldset> |
| 74 | - </form> | |
| 75 | - <div class="sch-list"> | |
| 76 | - <div class="sch-item reverse"> | |
| 77 | - <dl> | |
| 78 | - <dd>07:58</dd> | |
| 79 | - <dd>5</dd> | |
| 80 | - <dd>S0J-046</dd> | |
| 81 | - <dd>S0568/钱存哗</dd> | |
| 82 | - </dl> | |
| 83 | - <dl> | |
| 84 | - <dd>07:58</dd> | |
| 85 | - <dd>5</dd> | |
| 86 | - <dd>S0J-046</dd> | |
| 87 | - <dd>S0568/钱存哗</dd> | |
| 88 | - </dl> | |
| 89 | - <dl> | |
| 90 | - <dd>07:58</dd> | |
| 91 | - <dd>5</dd> | |
| 92 | - <dd>S0J-046</dd> | |
| 93 | - <dd>S0568/钱存哗</dd> | |
| 94 | - </dl> | |
| 95 | - <dl> | |
| 96 | - <dd>07:58</dd> | |
| 97 | - <dd>5</dd> | |
| 98 | - <dd>S0J-046</dd> | |
| 99 | - <dd>S0568/钱存哗</dd> | |
| 100 | - </dl> | |
| 101 | - <dl> | |
| 102 | - <dd>07:58</dd> | |
| 103 | - <dd>5</dd> | |
| 104 | - <dd>S0J-046</dd> | |
| 105 | - <dd>S0568/钱存哗</dd> | |
| 106 | - </dl> | |
| 107 | - <dl> | |
| 108 | - <dd>07:58</dd> | |
| 109 | - <dd>5</dd> | |
| 110 | - <dd>S0J-046</dd> | |
| 111 | - <dd>S0568/钱存哗</dd> | |
| 112 | - </dl> | |
| 113 | - <dl> | |
| 114 | - <dd>07:58</dd> | |
| 115 | - <dd>5</dd> | |
| 116 | - <dd>S0J-046</dd> | |
| 117 | - <dd>S0568/钱存哗</dd> | |
| 118 | - </dl> | |
| 42 | + | |
| 43 | + <div class="ct_table sch-list reverse" style="margin-top: 14px;"> | |
| 44 | + <div class="ct_table_head"> | |
| 45 | + <dl> | |
| 46 | + <dt><input type="checkbox"></dt> | |
| 47 | + <dt>时间</dt> | |
| 48 | + <dt>路牌</dt> | |
| 49 | + <dt>车辆</dt> | |
| 50 | + <dt>驾驶员</dt> | |
| 51 | + </dl> | |
| 52 | + </div> | |
| 53 | + <div class="ct_table_body "> | |
| 54 | + </div> | |
| 119 | 55 | </div> |
| 120 | - </div> | |
| 56 | + </form> | |
| 121 | 57 | </div> |
| 122 | 58 | </div> |
| 123 | 59 | |
| 124 | - <div class="uk-modal-footer uk-text-right" > | |
| 60 | + <div class="uk-modal-footer uk-text-right"> | |
| 61 | + <div style="float: left;font-size: 13px;"> | |
| 62 | + <a> 清除未勾选班次</a> | |
| 63 | + </div> | |
| 125 | 64 | <button type="button" class="uk-button uk-modal-close">取消</button> |
| 126 | 65 | <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 提交</button> |
| 127 | 66 | </div> |
| 128 | 67 | </div> |
| 129 | 68 | |
| 130 | - <script id="schedule-lp_change-form-temp" type="text/html"> | |
| 131 | - | |
| 69 | + <script id="schedule-lp_change-list-temp" type="text/html"> | |
| 70 | + {{if order == 0}} | |
| 71 | + {{each array as sch i}} | |
| 72 | + <dl> | |
| 73 | + <dd><input type="checkbox"></dd> | |
| 74 | + <dd>{{sch.jGh}}/{{sch.jName}}</dd> | |
| 75 | + <dd>{{sch.clZbh}}</dd> | |
| 76 | + <dd>{{sch.lpName}}</dd> | |
| 77 | + <dd>{{sch.dfsj}}</dd> | |
| 78 | + </dl> | |
| 79 | + {{/each}} | |
| 80 | + {{else if order == 1}} | |
| 81 | + {{each array as sch i}} | |
| 82 | + <dl> | |
| 83 | + <dd><input type="checkbox"></dd> | |
| 84 | + <dd>{{sch.dfsj}}</dd> | |
| 85 | + <dd>{{sch.lpName}}</dd> | |
| 86 | + <dd>{{sch.clZbh}}</dd> | |
| 87 | + <dd>{{sch.jGh}}/{{sch.jName}}</dd> | |
| 88 | + </dl> | |
| 89 | + {{/each}} | |
| 90 | + {{/if}} | |
| 132 | 91 | </script> |
| 133 | 92 | |
| 134 | 93 | <script> |
| 135 | 94 | (function () { |
| 136 | 95 | var modal = '#schedule-lp_change-modal' |
| 137 | - , sch; | |
| 96 | + , sch, list = [{}, {}]; | |
| 138 | 97 | $(modal).on('init', function (e, data) { |
| 139 | 98 | e.stopPropagation(); |
| 140 | 99 | sch = data.sch; |
| 141 | 100 | |
| 101 | + | |
| 102 | + //线路切换事件 | |
| 103 | + $('[name=lineSelect]', modal).on('change', function () { | |
| 104 | + var order = $(this).data('order') | |
| 105 | + ,lineCode = $(this).val(); | |
| 106 | + | |
| 107 | + var array = gb_common.get_vals(gb_schedule_table.findScheduleByLine(lineCode)); | |
| 108 | + //按路牌分组 | |
| 109 | + list[order] = gb_common.groupBy(array, 'lpName'); | |
| 110 | + //设置路牌下拉框 | |
| 111 | + var lpSelect = $(this).next('select'), ops=''; | |
| 112 | + $.each(gb_common.get_keys(list[order]), function (i, lp) { | |
| 113 | + ops += '<option value="'+lp+'">'+lp+'</option>'; | |
| 114 | + }); | |
| 115 | + lpSelect.html(ops); | |
| 116 | + }); | |
| 117 | + | |
| 118 | + //路牌切换事件 | |
| 119 | + $('[name=lpName]', modal).on('change', function () { | |
| 120 | + var order = $(this).data('order') | |
| 121 | + ,lp = $(this).val(); | |
| 122 | + | |
| 123 | + var htmlStr = template('schedule-lp_change-list-temp', {array: list[order][lp], order: order}); | |
| 124 | + $('.sch-list .ct_table_body', modal).eq(order).html(htmlStr); | |
| 125 | + }); | |
| 126 | + | |
| 127 | + | |
| 128 | + //线路下拉框 | |
| 129 | + var lineOps = ''; | |
| 130 | + $.each(gb_data_basic.activeLines, function () { | |
| 131 | + lineOps += '<option value="' + this.lineCode + '">' + this.name + '</option>'; | |
| 132 | + }); | |
| 133 | + $('[name=lineSelect]', modal).html(lineOps); | |
| 142 | 134 | }); |
| 143 | 135 | })(); |
| 144 | 136 | </script> | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_range_turn.html
| ... | ... | @@ -345,7 +345,7 @@ |
| 345 | 345 | * 为班次添加备注 |
| 346 | 346 | */ |
| 347 | 347 | var remarks = '调头' + $('[name=endDate]', csf).val() + ' 因 ' + $('#turnReason', modal).val() + '在' + $('[name=endStation] option:selected', csf).text() + '调头'; |
| 348 | - gb_schedule_table.addRemarks([sch, nextSch], remarks); | |
| 348 | + gb_schedule_table.addRemarks([sch, nextSch], gb_common.trim(remarks, 'g')); | |
| 349 | 349 | UIkit.modal(modal).hide(); |
| 350 | 350 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 351 | 351 | return; | ... | ... |
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
| ... | ... | @@ -154,7 +154,7 @@ |
| 154 | 154 | if (resetPagination) |
| 155 | 155 | pagination(rs.totalPages + 1, rs.page); |
| 156 | 156 | }) |
| 157 | - } | |
| 157 | + }; | |
| 158 | 158 | |
| 159 | 159 | var resetPagination = true; |
| 160 | 160 | var pagination = function(pages, currentPage) { |
| ... | ... | @@ -172,7 +172,7 @@ |
| 172 | 172 | }); |
| 173 | 173 | |
| 174 | 174 | resetPagination = false; |
| 175 | - } | |
| 175 | + }; | |
| 176 | 176 | |
| 177 | 177 | var callbackHandler={ |
| 178 | 178 | change_line: function(device){ | ... | ... |
src/main/resources/static/real_control_v2/js/common.js
| ... | ... | @@ -131,9 +131,9 @@ var gb_common = (function () { |
| 131 | 131 | var data = groupBy(get_vals(allGps), 'lineId'); |
| 132 | 132 | var name; |
| 133 | 133 | for (var code in data) { |
| 134 | - try{ | |
| 134 | + try { | |
| 135 | 135 | name = gb_data_basic.codeToLine[code].name; |
| 136 | - }catch(e) { | |
| 136 | + } catch (e) { | |
| 137 | 137 | continue; |
| 138 | 138 | } |
| 139 | 139 | |
| ... | ... | @@ -286,7 +286,7 @@ var gb_common = (function () { |
| 286 | 286 | // } |
| 287 | 287 | // } |
| 288 | 288 | |
| 289 | - var accAdd = function(a, b) { | |
| 289 | + var accAdd = function (a, b) { | |
| 290 | 290 | var c, d, e; |
| 291 | 291 | try { |
| 292 | 292 | c = a.toString().split(".")[1].length; |
| ... | ... | @@ -307,10 +307,12 @@ var gb_common = (function () { |
| 307 | 307 | e = b.toString(); |
| 308 | 308 | try { |
| 309 | 309 | c += d.split(".")[1].length; |
| 310 | - } catch (f) {} | |
| 310 | + } catch (f) { | |
| 311 | + } | |
| 311 | 312 | try { |
| 312 | 313 | c += e.split(".")[1].length; |
| 313 | - } catch (f) {} | |
| 314 | + } catch (f) { | |
| 315 | + } | |
| 314 | 316 | return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c); |
| 315 | 317 | } |
| 316 | 318 | |
| ... | ... | @@ -329,6 +331,15 @@ var gb_common = (function () { |
| 329 | 331 | return e = Math.pow(10, Math.max(c, d)), (a * e - b * e) / e; |
| 330 | 332 | }; |
| 331 | 333 | |
| 334 | + var trim = function (str, is_global) { | |
| 335 | + var result; | |
| 336 | + result = str.replace(/(^\s+)|(\s+$)/g, ""); | |
| 337 | + if (is_global.toLowerCase() == "g") { | |
| 338 | + result = result.replace(/\s/g, ""); | |
| 339 | + } | |
| 340 | + return result; | |
| 341 | + }; | |
| 342 | + | |
| 332 | 343 | return { |
| 333 | 344 | reqCode80: reqCode80, |
| 334 | 345 | groupBy: groupBy, |
| ... | ... | @@ -344,8 +355,10 @@ var gb_common = (function () { |
| 344 | 355 | personAutocomplete: personAutocomplete, |
| 345 | 356 | carAutocomplete: carAutocomplete, |
| 346 | 357 | init_autocomplete: init_autocomplete, |
| 347 | - accAdd : accAdd, | |
| 348 | - numSubtr: numSubtr | |
| 358 | + init_autocom_pinyin: init_autocom_pinyin, | |
| 359 | + accAdd: accAdd, | |
| 360 | + numSubtr: numSubtr, | |
| 361 | + trim: trim | |
| 349 | 362 | |
| 350 | 363 | //whichTransitionEvent:whichTransitionEvent |
| 351 | 364 | }; | ... | ... |
src/main/resources/static/real_control_v2/js/main.js
| ... | ... | @@ -142,7 +142,7 @@ var enable_submit_btn = function (form) { |
| 142 | 142 | if (subBtn) { |
| 143 | 143 | subBtn.removeClass('disabled').removeAttr('disabled'); |
| 144 | 144 | } |
| 145 | -} | |
| 145 | +}; | |
| 146 | 146 | |
| 147 | 147 | var disabled_submit_btn = function (form) { |
| 148 | 148 | var subBtn = $('button[type=submit]', form); | ... | ... |
src/main/resources/static/real_control_v2/sch_manage/sch_imitate.html
0 → 100644
| 1 | +<!DOCTYPE html> | |
| 2 | +<html lang="zh-cn" style="height: 100%;"> | |
| 3 | + | |
| 4 | +<head> | |
| 5 | + <meta charset="UTF-8"> | |
| 6 | + <title>班次管理</title> | |
| 7 | + <!-- uikit core style--> | |
| 8 | + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/> | |
| 9 | + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css"/> | |
| 10 | + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css"/> | |
| 11 | + <link rel="stylesheet" | |
| 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"/> | |
| 14 | + <!-- jquery contextMenu style --> | |
| 15 | + <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css"/> | |
| 16 | + <!-- formvalidation style --> | |
| 17 | + <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css"/> | |
| 18 | + | |
| 19 | + <link rel="stylesheet" href="/real_control_v2/css/pace.css"/> | |
| 20 | + | |
| 21 | + <style> | |
| 22 | + /** 图例 */ | |
| 23 | + | |
| 24 | + .tl-yzx { | |
| 25 | + background: #c1ddf0; | |
| 26 | + border-top: 1px solid #ebebeb !important; | |
| 27 | + color: #444; | |
| 28 | + } | |
| 29 | + | |
| 30 | + .tl-xxfc { | |
| 31 | + background: #ff7878; | |
| 32 | + color: #f1f1f1; | |
| 33 | + } | |
| 34 | + | |
| 35 | + .tl-wd { | |
| 36 | + background: rgb(255, 255, 0); | |
| 37 | + color: #444; | |
| 38 | + } | |
| 39 | + | |
| 40 | + .tl-xxsd { | |
| 41 | + background: #e2de94; | |
| 42 | + color: #444; | |
| 43 | + } | |
| 44 | + | |
| 45 | + .tl-xxrd { | |
| 46 | + background: #c1ddf0; | |
| 47 | + border-top: 1px solid #ebebeb !important; | |
| 48 | + color: #444; | |
| 49 | + } | |
| 50 | + | |
| 51 | + .tl-qrlb { | |
| 52 | + background: #7B6B24; | |
| 53 | + color: #EAEBEC; | |
| 54 | + font-size: 13px; | |
| 55 | + } | |
| 56 | + | |
| 57 | + .tl-qrlb::before { | |
| 58 | + content: '烂班'; | |
| 59 | + } | |
| 60 | + | |
| 61 | + .tl-zzzx { | |
| 62 | + background: #96F396; | |
| 63 | + color: #444; | |
| 64 | + } | |
| 65 | + | |
| 66 | + ::-webkit-scrollbar { | |
| 67 | + width: 15px; | |
| 68 | + height: 16px; | |
| 69 | + } | |
| 70 | + | |
| 71 | + ::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb { | |
| 72 | + border-radius: 999px; | |
| 73 | + border: 5px solid transparent; | |
| 74 | + } | |
| 75 | + | |
| 76 | + ::-webkit-scrollbar-track { | |
| 77 | + box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset; | |
| 78 | + } | |
| 79 | + | |
| 80 | + ::-webkit-scrollbar-thumb { | |
| 81 | + min-height: 20px; | |
| 82 | + background-clip: content-box; | |
| 83 | + box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset; | |
| 84 | + } | |
| 85 | + | |
| 86 | + ::-webkit-scrollbar-corner { | |
| 87 | + background: transparent; | |
| 88 | + } | |
| 89 | + | |
| 90 | + .search-box { | |
| 91 | + width: calc(100% - 70px); | |
| 92 | + margin: auto; | |
| 93 | + margin-top: 20px; | |
| 94 | + border-radius: 5px; | |
| 95 | + border: 1px solid lightgrey; | |
| 96 | + } | |
| 97 | + | |
| 98 | + .uk-panel-box { | |
| 99 | + box-shadow: 0px 1px 4px 0 rgba(125, 122, 122, 0.2), 0px 1px 7px 0 rgba(96, 95, 95, 0.19); | |
| 100 | + } | |
| 101 | + | |
| 102 | + .table-wrap.up { | |
| 103 | + border: 1px solid #5E96D2; | |
| 104 | + box-shadow: 3px 3px 12px 0 rgba(94, 150, 210, 0.28), 3px 3px 12px 0 rgba(94, 150, 210, 0.28); | |
| 105 | + border-radius: 5px; | |
| 106 | + height: 100%; | |
| 107 | + } | |
| 108 | + | |
| 109 | + .table-wrap.down { | |
| 110 | + border: 1px solid #e33c3c; | |
| 111 | + box-shadow: -3px 3px 11px 0 rgba(201, 33, 33, 0.22), -3px 3px 12px 0 rgba(201, 33, 33, 0.17); | |
| 112 | + border-radius: 5px; | |
| 113 | + height: 100%; | |
| 114 | + } | |
| 115 | + | |
| 116 | + table { | |
| 117 | + table-layout: fixed; | |
| 118 | + } | |
| 119 | + | |
| 120 | + table tr td { | |
| 121 | + white-space: nowrap; | |
| 122 | + overflow: hidden; | |
| 123 | + text-overflow: ellipsis; | |
| 124 | + } | |
| 125 | + | |
| 126 | + .context-menu-active { | |
| 127 | + background: #9afe9a !important; | |
| 128 | + } | |
| 129 | + | |
| 130 | + .shade-loading{ | |
| 131 | + position: absolute; | |
| 132 | + top: 0; | |
| 133 | + left: 0; | |
| 134 | + z-index: 999; | |
| 135 | + width: 100%; | |
| 136 | + height: 100%; | |
| 137 | + background: rgb(255, 255, 255); | |
| 138 | + opacity: .5; | |
| 139 | + display: none; | |
| 140 | + } | |
| 141 | + | |
| 142 | + .shade-loading .center{ | |
| 143 | + position: absolute; | |
| 144 | + margin: auto; | |
| 145 | + top: 50%; | |
| 146 | + left: 50%; | |
| 147 | + top: calc(50% - 50px); | |
| 148 | + left: calc(50% - 50px); | |
| 149 | + background: #2600ff; | |
| 150 | + color: #fff; | |
| 151 | + padding: 2px 5px; | |
| 152 | + border-radius: 3px; | |
| 153 | + } | |
| 154 | + .sch-lock-icon{ | |
| 155 | + color: red; | |
| 156 | + font-size: 18px; | |
| 157 | + } | |
| 158 | + </style> | |
| 159 | +</head> | |
| 160 | + | |
| 161 | +<body style="height: 100%;overflow: hidden;"> | |
| 162 | +<div class="north uk-width-1-1 uk-panel-box" style="background: #000;"> | |
| 163 | + <div class="uk-grid uk-grid-match"> | |
| 164 | + <div class="uk-width-4-10"> | |
| 165 | + <div class="uk-panel"> | |
| 166 | + <h2 class="north-logo" style="color: #f1f1f1;"> | |
| 167 | + <i class="uk-icon-life-ring"></i> 闵行公交线路调度班次管理 | |
| 168 | + </h2> | |
| 169 | + </div> | |
| 170 | + </div> | |
| 171 | + </div> | |
| 172 | +</div> | |
| 173 | + | |
| 174 | +<div class="main-container" style="height: calc(100% - 62px);"> | |
| 175 | + <div style="height: 90px"> | |
| 176 | + <div class="uk-panel uk-panel-box search-box"> | |
| 177 | + <form class="uk-form search-form"> | |
| 178 | + <fieldset data-uk-margin> | |
| 179 | + <span class="horizontal-field">日期</span> | |
| 180 | + <input type="date" name="scheduleDateStr_eq" disabled> | |
| 181 | +   | |
| 182 | + <span class="horizontal-field">线路</span> | |
| 183 | + <select name="xlBm_eq"></select> | |
| 184 | +   | |
| 185 | + <span class="horizontal-field">车辆</span> | |
| 186 | + <div class="uk-autocomplete uk-form autocomplete-cars"> | |
| 187 | + <input type="text" name="clZbh_eq" placeholder="车辆自编号"> | |
| 188 | + </div> | |
| 189 | +   | |
| 190 | + <span class="horizontal-field">驾驶员工号</span> | |
| 191 | + <div class="uk-autocomplete uk-form autocomplete-persion"> | |
| 192 | + <input type="text" name="jGh_eq" placeholder="驾驶员工号"> | |
| 193 | + </div> | |
| 194 | +   | |
| 195 | + <button class="uk-button" id="searchSchBtn">检索</button> | |
| 196 | + </fieldset> | |
| 197 | + </form> | |
| 198 | + </div> | |
| 199 | + </div> | |
| 200 | + <div class="uk-grid uk-grid-small uk-grid-divider " style="height: calc(100% - 120px)"> | |
| 201 | + <div class="uk-width-1-2" style="padding-left: 45px;height: 100%;"> | |
| 202 | + <div class="uk-overflow-container table-wrap up"> | |
| 203 | + <table class="uk-table uk-table-striped uk-table-hover"> | |
| 204 | + <thead> | |
| 205 | + <tr> | |
| 206 | + <th width="10%">序号</th> | |
| 207 | + <th width="10%">路牌</th> | |
| 208 | + <th width="15%">车辆</th> | |
| 209 | + <th width="10%">应到</th> | |
| 210 | + <th width="10%">实到</th> | |
| 211 | + <th width="15%">计发</th> | |
| 212 | + <th width="10%">待发</th> | |
| 213 | + <th width="10%">实发</th> | |
| 214 | + <th width="10%">备注</th> | |
| 215 | + </tr> | |
| 216 | + </thead> | |
| 217 | + <tbody></tbody> | |
| 218 | + </table> | |
| 219 | + </div> | |
| 220 | + | |
| 221 | + </div> | |
| 222 | + <div class="uk-width-1-2 " style="padding-right: 45px;height: 100%;"> | |
| 223 | + <div class="uk-overflow-container table-wrap down"> | |
| 224 | + <table class="uk-table uk-table-striped uk-table-hover"> | |
| 225 | + <thead> | |
| 226 | + <tr> | |
| 227 | + <th width="10%">序号</th> | |
| 228 | + <th width="10%">路牌</th> | |
| 229 | + <th width="15%">车辆</th> | |
| 230 | + <th width="10%">应到</th> | |
| 231 | + <th width="10%">实到</th> | |
| 232 | + <th width="15%">计发</th> | |
| 233 | + <th width="10%">待发</th> | |
| 234 | + <th width="10%">实发</th> | |
| 235 | + <th width="10%">备注</th> | |
| 236 | + </tr> | |
| 237 | + </thead> | |
| 238 | + <tbody> | |
| 239 | + </tbody> | |
| 240 | + </table> | |
| 241 | + </div> | |
| 242 | + </div> | |
| 243 | + </div> | |
| 244 | +</div> | |
| 245 | + | |
| 246 | +<div class="shade-loading"> | |
| 247 | + <div class="center"> | |
| 248 | + <i class="uk-icon-spinner uk-icon-spin"></i> 请稍等... | |
| 249 | + </div> | |
| 250 | +</div> | |
| 251 | + | |
| 252 | +<script id="sch-imitate-list-temp" type="text/html"> | |
| 253 | + {{each list as sch i}} | |
| 254 | + <tr data-id="{{sch.id}}"> | |
| 255 | + <td>{{i + 1}}</td> | |
| 256 | + <td>{{sch.lpName}}</td> | |
| 257 | + <td>{{sch.clZbh}}</td> | |
| 258 | + <td>{{sch.qdzArrDateJH}}</td> | |
| 259 | + <td>{{sch.qdzArrDateSJ}}</td> | |
| 260 | + <td>{{sch.fcsj}} | |
| 261 | + {{if sch.bcType == "out"}} | |
| 262 | + <span class="uk-badge uk-badge-success">出场</span> | |
| 263 | + {{else if sch.bcType == "in"}} | |
| 264 | + <span class="uk-badge uk-badge-warning">进场</span> | |
| 265 | + {{else if sch.bcType == "venting"}} | |
| 266 | + <span class="uk-badge uk-badge-danger">直放</span> | |
| 267 | + {{else if sch.bcType == "major"}} | |
| 268 | + <span class="uk-badge uk-badge-danger">放站</span> | |
| 269 | + {{/if}} | |
| 270 | + {{if sch.sflj}} | |
| 271 | + <span class="uk-badge uk-badge-danger">临加</span> | |
| 272 | + {{/if}} | |
| 273 | + {{if sch.cTasks.length > 0}} | |
| 274 | + <span class="uk-badge uk-badge-notification">{{sch.cTasks.length}}</span> | |
| 275 | + {{/if}} | |
| 276 | + </td> | |
| 277 | + <td>{{sch.dfsj}}</td> | |
| 278 | + <td class="{{if sch.status==-1}} | |
| 279 | + tl-qrlb | |
| 280 | + {{else if sch.status==2}} | |
| 281 | + tl-yzx | |
| 282 | + {{else if sch.status==1}} | |
| 283 | + tl-zzzx | |
| 284 | + {{/if}}{{if reissue}}tl-reissue-success{{/if}}"> | |
| 285 | + {{sch.fcsjActual}} | |
| 286 | + </td> | |
| 287 | + <td> | |
| 288 | + {{if sch.reissue}} | |
| 289 | + <i class="uk-icon-lock sch-lock-icon" ></i> | |
| 290 | + {{/if}} | |
| 291 | + {{sch.remarks}} | |
| 292 | + </td> | |
| 293 | + </tr> | |
| 294 | + {{/each}} | |
| 295 | +</script> | |
| 296 | + | |
| 297 | +<!-- jquery --> | |
| 298 | +<script src="/real_control_v2/assets/js/jquery.min.js"></script> | |
| 299 | +<!-- jquery.serializejson JSON序列化插件 --> | |
| 300 | +<script src="/assets/plugins/jquery.serializejson.js"></script> | |
| 301 | +<!-- moment.js 日期处理类库 --> | |
| 302 | +<script src="/assets/plugins/moment-with-locales.js"></script> | |
| 303 | +<!-- common js --> | |
| 304 | +<script src="/real_control_v2/js/common.js"></script> | |
| 305 | +<!-- art-template 模版引擎 --> | |
| 306 | +<script src="/assets/plugins/template.js"></script> | |
| 307 | +<!-- EventProxy --> | |
| 308 | +<script src="/assets/js/eventproxy.js"></script> | |
| 309 | +<!-- uikit core --> | |
| 310 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js"></script> | |
| 311 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js"></script> | |
| 312 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js"></script> | |
| 313 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js"></script> | |
| 314 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js"></script> | |
| 315 | +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js"></script> | |
| 316 | + | |
| 317 | +<!-- jquery contextMenu --> | |
| 318 | +<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js"></script> | |
| 319 | +<script src="/real_control_v2/assets/js/jquery.ui.position.min.js"></script> | |
| 320 | +<!-- simple pinyin --> | |
| 321 | +<script src="/assets/plugins/pinyin.js"></script> | |
| 322 | +<script> | |
| 323 | + | |
| 324 | + $(document).ajaxComplete(function (event, jqxhr, settings, thrownError) { | |
| 325 | + try { | |
| 326 | + if (JSON.parse(jqxhr.responseText).status == 407) { | |
| 327 | + window.location.href = '/'; | |
| 328 | + } | |
| 329 | + } catch (e) { | |
| 330 | + | |
| 331 | + } | |
| 332 | + }); | |
| 333 | + | |
| 334 | + (function () { | |
| 335 | + var dateStr = moment().format('YYYY-MM-DD') | |
| 336 | + , dateInput = $('[name=scheduleDateStr_eq]'); | |
| 337 | + dateInput.val(dateStr); | |
| 338 | + | |
| 339 | + var codeToName, schArray = {}; | |
| 340 | + //线路 autocomplete | |
| 341 | + $.get('/basic/lineCode2Name', function (rs) { | |
| 342 | + var opts = ''; | |
| 343 | + for (var code in rs) { | |
| 344 | + opts += '<option value="' + code + '">' + rs[code] + '</option>'; | |
| 345 | + } | |
| 346 | + $('[name=xlBm_eq]').html(opts); | |
| 347 | + }); | |
| 348 | + | |
| 349 | + //检索 | |
| 350 | + $('.search-form').on('submit', function () { | |
| 351 | + var data = $(this).serializeJSON(); | |
| 352 | + data['scheduleDateStr_eq'] = dateInput.val(); | |
| 353 | + | |
| 354 | + gb_common.$get('/realSchedule/all', data, function (list) { | |
| 355 | + $.each(list, function () { | |
| 356 | + schArray[this.id] = this; | |
| 357 | + }); | |
| 358 | + //计算起点应到时间 | |
| 359 | + calcYDSDDate(list); | |
| 360 | + var geoupData = gb_common.groupBy(list.sort(schSort), 'xlDir'); | |
| 361 | + //上行 | |
| 362 | + var htmlStr = template('sch-imitate-list-temp', {list: geoupData[0]}); | |
| 363 | + $('.table-wrap.up table tbody').html(htmlStr); | |
| 364 | + //下行 | |
| 365 | + var htmlStr = template('sch-imitate-list-temp', {list: geoupData[1]}); | |
| 366 | + $('.table-wrap.down table tbody').html(htmlStr); | |
| 367 | + }); | |
| 368 | + return false; | |
| 369 | + }); | |
| 370 | + | |
| 371 | + //模拟轨迹 | |
| 372 | + var gps_imitate = function (schId) { | |
| 373 | + var sch = schArray[schId]; | |
| 374 | + if(sch.reissue){ | |
| 375 | + UIkit.notify("<i class='uk-icon-times'></i> 你不能对一个班次重复操作!", { | |
| 376 | + status: 'danger' | |
| 377 | + }); | |
| 378 | + return; | |
| 379 | + } | |
| 380 | + alt_confirm('确定班次信息? ' + sch.xlName + '、起点 ' + sch.qdzName + ' , 终点 ' + sch.zdzName + ' 、待发 ' + sch.dfsj, function () { | |
| 381 | + $('.shade-loading').show(); | |
| 382 | + gb_common.$post('/gps/gpsCompletion', {schId: schId}, function (rs) { | |
| 383 | + $('.shade-loading').hide(); | |
| 384 | + $('.search-form').trigger('submit'); | |
| 385 | + }); | |
| 386 | + }, '我确定是这个班次'); | |
| 387 | + }; | |
| 388 | + | |
| 389 | + var callbackHandler = { | |
| 390 | + gps_imitate: gps_imitate | |
| 391 | + } | |
| 392 | + | |
| 393 | + $.contextMenu({ | |
| 394 | + selector: '.table-wrap table tbody tr', | |
| 395 | + //className: 'schedule-ct-menu', | |
| 396 | + callback: function (key, options) { | |
| 397 | + var schId = $('.table-wrap tr.context-menu-active').data('id'); | |
| 398 | + callbackHandler[key] && callbackHandler[key](schId); | |
| 399 | + }, | |
| 400 | + items: { | |
| 401 | + 'gps_imitate': { | |
| 402 | + name: '模拟轨迹' | |
| 403 | + } | |
| 404 | + } | |
| 405 | + }); | |
| 406 | + | |
| 407 | + | |
| 408 | + var alt_confirm = function (content, succ, okBtn) { | |
| 409 | + var modalEl = UIkit.modal.confirm(content, function () { | |
| 410 | + succ && succ(); | |
| 411 | + modalEl.hide(); | |
| 412 | + }, { | |
| 413 | + labels: { | |
| 414 | + Ok: okBtn, | |
| 415 | + Cancel: '取消' | |
| 416 | + } | |
| 417 | + , center: true | |
| 418 | + }); | |
| 419 | + }; | |
| 420 | + | |
| 421 | + | |
| 422 | + /* 计算应到实到时间 */ | |
| 423 | + var calcYDSDDate = function (list) { | |
| 424 | + var clGroupData = gb_common.groupBy(list, 'clZbh'), array, len; | |
| 425 | + for(var nbbm in clGroupData){ | |
| 426 | + array = clGroupData[nbbm]; | |
| 427 | + array.sort(schSort); | |
| 428 | + | |
| 429 | + len = array.length - 1; | |
| 430 | + for(var i = 0; i < len; i ++){ | |
| 431 | + if(array[i].zdzName == array[i + 1].qdzName){ | |
| 432 | + array[i + 1].qdzArrDateJH = array[i].zdsj; | |
| 433 | + array[i + 1].qdzArrDateSJ = array[i].zdsjActual; | |
| 434 | + } | |
| 435 | + } | |
| 436 | + } | |
| 437 | + }; | |
| 438 | + | |
| 439 | + var schSort = function (a, b) { | |
| 440 | + return a.dfsj.localeCompare(b.dfsj); | |
| 441 | + } | |
| 442 | + })(); | |
| 443 | +</script> | |
| 444 | +</body> | |
| 445 | + | |
| 446 | +</html> | ... | ... |