Commit 66e8a7cf950624f63799a57bb9d6eb21e8ede13d
重置密码,添加用户和修改密码是前端加密
Showing
26 changed files
with
491 additions
and
146 deletions
src/main/java/com/bsth/controller/calc/CalcExportController.java
| @@ -158,10 +158,14 @@ public class CalcExportController { | @@ -158,10 +158,14 @@ public class CalcExportController { | ||
| 158 | if(map.get("fgsdmSing")!=null){ | 158 | if(map.get("fgsdmSing")!=null){ |
| 159 | fgsdmSing=map.get("fgsdmSing").toString().trim(); | 159 | fgsdmSing=map.get("fgsdmSing").toString().trim(); |
| 160 | } | 160 | } |
| 161 | + String sfdc=""; | ||
| 162 | + if(map.get("sfdc")!=null){ | ||
| 163 | + sfdc=map.get("sfdc").toString().trim(); | ||
| 164 | + } | ||
| 161 | 165 | ||
| 162 | Map<String, Object> resMap = new HashMap<String, Object>(); | 166 | Map<String, Object> resMap = new HashMap<String, Object>(); |
| 163 | List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); | 167 | List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); |
| 164 | - List<Map<String, Object>> list = clacMixService.singledatatj(line, startDate, endDate, tjtype, cont, gsdmSing, fgsdmSing); | 168 | + List<Map<String, Object>> list = clacMixService.singledatatj(line, startDate, endDate, tjtype, cont, gsdmSing, fgsdmSing, sfdc); |
| 165 | 169 | ||
| 166 | Map<String, Object> temp = new HashMap<String, Object>(); | 170 | Map<String, Object> temp = new HashMap<String, Object>(); |
| 167 | temp.put("i", "序号"); | 171 | temp.put("i", "序号"); |
src/main/java/com/bsth/controller/calc/CalcMixController.java
| @@ -81,7 +81,11 @@ public class CalcMixController { | @@ -81,7 +81,11 @@ public class CalcMixController { | ||
| 81 | if(map.get("fgsdmSing")!=null){ | 81 | if(map.get("fgsdmSing")!=null){ |
| 82 | fgsdmSing=map.get("fgsdmSing").toString().trim(); | 82 | fgsdmSing=map.get("fgsdmSing").toString().trim(); |
| 83 | } | 83 | } |
| 84 | - return service.singledatatj(line, startDate, endDate, tjtype, cont, gsdmSing, fgsdmSing); | 84 | + String sfdc=""; |
| 85 | + if(map.get("sfdc")!=null){ | ||
| 86 | + sfdc=map.get("sfdc").toString().trim(); | ||
| 87 | + } | ||
| 88 | + return service.singledatatj(line, startDate, endDate, tjtype, cont, gsdmSing, fgsdmSing, sfdc); | ||
| 85 | } | 89 | } |
| 86 | 90 | ||
| 87 | } | 91 | } |
src/main/java/com/bsth/controller/sys/RoleController.java
| @@ -68,4 +68,14 @@ public class RoleController extends BaseController<Role, Integer>{ | @@ -68,4 +68,14 @@ public class RoleController extends BaseController<Role, Integer>{ | ||
| 68 | public Map<String, Object> roleInfo(@RequestParam Integer id){ | 68 | public Map<String, Object> roleInfo(@RequestParam Integer id){ |
| 69 | return roleService.roleInfo(id); | 69 | return roleService.roleInfo(id); |
| 70 | } | 70 | } |
| 71 | + | ||
| 72 | + /** | ||
| 73 | + * 检查操作合法性 操作的是否是下级角色 | ||
| 74 | + * @param operationRoleId 下级角色Id | ||
| 75 | + * @return | ||
| 76 | + */ | ||
| 77 | + @RequestMapping(value = "/checkOperationLegality") | ||
| 78 | + public boolean checkOperationLegality(@RequestParam Integer operationRoleId){ | ||
| 79 | + return roleService.checkOperationLegality(operationRoleId); | ||
| 80 | + } | ||
| 71 | } | 81 | } |
src/main/java/com/bsth/controller/sys/UserController.java
| @@ -260,6 +260,15 @@ public class UserController extends BaseController<SysUser, Integer> { | @@ -260,6 +260,15 @@ public class UserController extends BaseController<SysUser, Integer> { | ||
| 260 | public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) { | 260 | public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) { |
| 261 | SysUser sysUser = SecurityUtils.getCurrentUser(); | 261 | SysUser sysUser = SecurityUtils.getCurrentUser(); |
| 262 | String msg = ""; | 262 | String msg = ""; |
| 263 | + | ||
| 264 | + //解密RSA | ||
| 265 | + try{ | ||
| 266 | + oldPWD = (RSAUtils.decryptBase64(oldPWD)); | ||
| 267 | + newPWD = (RSAUtils.decryptBase64(newPWD)); | ||
| 268 | + cnewPWD = (RSAUtils.decryptBase64(cnewPWD)); | ||
| 269 | + }catch (RuntimeException e) { | ||
| 270 | + return "网络延迟,解密失败,请重新添加!"; | ||
| 271 | + } | ||
| 263 | if (new BCryptPasswordEncoder(4).matches(oldPWD, sysUser.getPassword())) { | 272 | if (new BCryptPasswordEncoder(4).matches(oldPWD, sysUser.getPassword())) { |
| 264 | if (oldPWD.equals(newPWD)) { | 273 | if (oldPWD.equals(newPWD)) { |
| 265 | msg = "新密码不能跟原始密码一样!"; | 274 | msg = "新密码不能跟原始密码一样!"; |
| @@ -282,8 +291,16 @@ public class UserController extends BaseController<SysUser, Integer> { | @@ -282,8 +291,16 @@ public class UserController extends BaseController<SysUser, Integer> { | ||
| 282 | return sysUserService.register(u); | 291 | return sysUserService.register(u); |
| 283 | } | 292 | } |
| 284 | 293 | ||
| 294 | + // 查询用户下所有下级角色 | ||
| 285 | @RequestMapping(value = "/all_distinct") | 295 | @RequestMapping(value = "/all_distinct") |
| 286 | public List<SysUser> findAll_distinct() { | 296 | public List<SysUser> findAll_distinct() { |
| 287 | return sysUserService.findAll_distinct(); | 297 | return sysUserService.findAll_distinct(); |
| 288 | } | 298 | } |
| 299 | + | ||
| 300 | + // 重置密码 | ||
| 301 | + @RequestMapping(value = "/resetPassword", method = RequestMethod.POST) | ||
| 302 | + public Map<String, Object> resetPassword(@RequestParam Integer id) { | ||
| 303 | + return sysUserService.resetPassword(id); | ||
| 304 | + } | ||
| 305 | + | ||
| 289 | } | 306 | } |
src/main/java/com/bsth/data/ThreadMonotor.java
| @@ -2,6 +2,9 @@ package com.bsth.data; | @@ -2,6 +2,9 @@ package com.bsth.data; | ||
| 2 | 2 | ||
| 3 | import com.bsth.data.gpsdata_v2.DataHandleProcess; | 3 | import com.bsth.data.gpsdata_v2.DataHandleProcess; |
| 4 | import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread; | 4 | import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread; |
| 5 | + | ||
| 6 | +import org.slf4j.Logger; | ||
| 7 | +import org.slf4j.LoggerFactory; | ||
| 5 | import org.springframework.stereotype.Component; | 8 | import org.springframework.stereotype.Component; |
| 6 | 9 | ||
| 7 | /** | 10 | /** |
| @@ -9,11 +12,15 @@ import org.springframework.stereotype.Component; | @@ -9,11 +12,15 @@ import org.springframework.stereotype.Component; | ||
| 9 | */ | 12 | */ |
| 10 | @Component | 13 | @Component |
| 11 | public class ThreadMonotor extends Thread{ | 14 | public class ThreadMonotor extends Thread{ |
| 15 | + | ||
| 16 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | ||
| 12 | 17 | ||
| 13 | @Override | 18 | @Override |
| 14 | public void run() { | 19 | public void run() { |
| 15 | //切换到备用的网关实时GPS对照数据 | 20 | //切换到备用的网关实时GPS对照数据 |
| 16 | - if(DataHandleProcess.isBlock()) | ||
| 17 | - GpsDataLoaderThread.setFlag(-1); | 21 | + if(DataHandleProcess.isBlock()) { |
| 22 | + GpsDataLoaderThread.setFlag(-1); | ||
| 23 | + logger.error("切换到备用GPS数据源"); | ||
| 24 | + } | ||
| 18 | } | 25 | } |
| 19 | } | 26 | } |
| 20 | \ No newline at end of file | 27 | \ No newline at end of file |
src/main/java/com/bsth/data/gpsdata_v2/DataHandleProcess.java
| @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; | @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; | ||
| 4 | import com.bsth.data.gpsdata_v2.cache.GpsCacheData; | 4 | import com.bsth.data.gpsdata_v2.cache.GpsCacheData; |
| 5 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; | 5 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; |
| 6 | import com.bsth.data.gpsdata_v2.handlers.*; | 6 | import com.bsth.data.gpsdata_v2.handlers.*; |
| 7 | +import com.bsth.email.SendEmailController; | ||
| 8 | +import com.bsth.email.entity.EmailBean; | ||
| 7 | import com.google.common.collect.ArrayListMultimap; | 9 | import com.google.common.collect.ArrayListMultimap; |
| 8 | import org.apache.commons.lang3.StringUtils; | 10 | import org.apache.commons.lang3.StringUtils; |
| 9 | import org.slf4j.Logger; | 11 | import org.slf4j.Logger; |
| @@ -15,6 +17,8 @@ import java.util.*; | @@ -15,6 +17,8 @@ import java.util.*; | ||
| 15 | import java.util.concurrent.CountDownLatch; | 17 | import java.util.concurrent.CountDownLatch; |
| 16 | import java.util.concurrent.ExecutorService; | 18 | import java.util.concurrent.ExecutorService; |
| 17 | import java.util.concurrent.Executors; | 19 | import java.util.concurrent.Executors; |
| 20 | +import java.util.concurrent.ThreadFactory; | ||
| 21 | +import java.util.concurrent.TimeUnit; | ||
| 18 | 22 | ||
| 19 | /** | 23 | /** |
| 20 | * 实时信号数据处理 | 24 | * 实时信号数据处理 |
| @@ -37,13 +41,27 @@ public class DataHandleProcess { | @@ -37,13 +41,27 @@ public class DataHandleProcess { | ||
| 37 | ReverseRouteProcess reverseRouteProcess; | 41 | ReverseRouteProcess reverseRouteProcess; |
| 38 | @Autowired | 42 | @Autowired |
| 39 | GpsRealData gpsRealData; | 43 | GpsRealData gpsRealData; |
| 44 | + // 发送邮件 | ||
| 45 | + @Autowired | ||
| 46 | + private SendEmailController sendEmailController; | ||
| 40 | 47 | ||
| 41 | 48 | ||
| 42 | static Logger logger = LoggerFactory.getLogger(DataHandleProcess.class); | 49 | static Logger logger = LoggerFactory.getLogger(DataHandleProcess.class); |
| 43 | 50 | ||
| 44 | final static int POOL_SIZE = 20; | 51 | final static int POOL_SIZE = 20; |
| 45 | 52 | ||
| 46 | - static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1); | 53 | + static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1, new ThreadFactory() { |
| 54 | + | ||
| 55 | + @Override | ||
| 56 | + public Thread newThread(Runnable r) { | ||
| 57 | + // TODO Auto-generated method stub | ||
| 58 | + Thread t = new Thread(r); | ||
| 59 | + t.setName("GPSProcessor"); | ||
| 60 | + | ||
| 61 | + return t; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + }); | ||
| 47 | public static CountDownLatch count; | 65 | public static CountDownLatch count; |
| 48 | 66 | ||
| 49 | static long lastTime; | 67 | static long lastTime; |
| @@ -51,7 +69,22 @@ public class DataHandleProcess { | @@ -51,7 +69,22 @@ public class DataHandleProcess { | ||
| 51 | public static boolean isBlock() { | 69 | public static boolean isBlock() { |
| 52 | return System.currentTimeMillis() - lastTime > 1000 * 30; | 70 | return System.currentTimeMillis() - lastTime > 1000 * 30; |
| 53 | } | 71 | } |
| 54 | - | 72 | + |
| 73 | + private void shutdownAndAwaitTermination(ExecutorService pool) { | ||
| 74 | + pool.shutdown(); | ||
| 75 | + try { | ||
| 76 | + if (!pool.awaitTermination(500, TimeUnit.MILLISECONDS)) { | ||
| 77 | + pool.shutdownNow(); | ||
| 78 | + } | ||
| 79 | + if (!pool.awaitTermination(500, TimeUnit.MILLISECONDS)) { | ||
| 80 | + logger.error("线程池无法正常终止"); | ||
| 81 | + } | ||
| 82 | + } catch (InterruptedException e) { | ||
| 83 | + pool.shutdown(); | ||
| 84 | + Thread.currentThread().interrupt(); | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + | ||
| 55 | public void handle(List<GpsEntity> list) { | 88 | public void handle(List<GpsEntity> list) { |
| 56 | try { | 89 | try { |
| 57 | if (list.size() == 0) | 90 | if (list.size() == 0) |
| @@ -85,7 +118,32 @@ public class DataHandleProcess { | @@ -85,7 +118,32 @@ public class DataHandleProcess { | ||
| 85 | 118 | ||
| 86 | 119 | ||
| 87 | //等待子线程结束 | 120 | //等待子线程结束 |
| 88 | - count.await(); | 121 | + boolean isNormal = count.await(5, TimeUnit.SECONDS); |
| 122 | + if (!isNormal) { | ||
| 123 | + try { | ||
| 124 | + shutdownAndAwaitTermination(threadPool); | ||
| 125 | + threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1, new ThreadFactory() { | ||
| 126 | + | ||
| 127 | + @Override | ||
| 128 | + public Thread newThread(Runnable r) { | ||
| 129 | + // TODO Auto-generated method stub | ||
| 130 | + Thread t = new Thread(r); | ||
| 131 | + t.setName("GPSProcessor"); | ||
| 132 | + | ||
| 133 | + return t; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + }); | ||
| 137 | + //发送邮件 | ||
| 138 | + EmailBean mail = new EmailBean(); | ||
| 139 | + mail.setSubject("线调GPS处理"); | ||
| 140 | + mail.setContent("GPS处理超时,检查线程栈文件信息<br/>"); | ||
| 141 | + sendEmailController.sendMail("113252620@qq.com", mail); | ||
| 142 | + logger.info("DataHandlerProcess:邮件发送成功!"); | ||
| 143 | + } catch (Exception e){ | ||
| 144 | + logger.error("DataHandlerProcess:邮件发送失败!",e); | ||
| 145 | + } | ||
| 146 | + } | ||
| 89 | 147 | ||
| 90 | //加入实时gps对照 | 148 | //加入实时gps对照 |
| 91 | for (GpsEntity gps : list) | 149 | for (GpsEntity gps : list) |
| @@ -115,6 +173,7 @@ public class DataHandleProcess { | @@ -115,6 +173,7 @@ public class DataHandleProcess { | ||
| 115 | Collections.sort(list, comp); | 173 | Collections.sort(list, comp); |
| 116 | GpsEntity gps; | 174 | GpsEntity gps; |
| 117 | for(int i = 0,len = list.size(); i< len ;i ++){ | 175 | for(int i = 0,len = list.size(); i< len ;i ++){ |
| 176 | + if (Thread.currentThread().isInterrupted()) break; | ||
| 118 | gps = list.get(i); | 177 | gps = list.get(i); |
| 119 | 178 | ||
| 120 | try { | 179 | try { |
src/main/java/com/bsth/data/gpsdata_v2/load/GatewayHttpLoader.java
| @@ -75,7 +75,7 @@ public class GatewayHttpLoader implements ApplicationContextAware{ | @@ -75,7 +75,7 @@ public class GatewayHttpLoader implements ApplicationContextAware{ | ||
| 75 | while ((str = br.readLine()) != null) | 75 | while ((str = br.readLine()) != null) |
| 76 | sb.append(str); | 76 | sb.append(str); |
| 77 | 77 | ||
| 78 | - logger.info("gps:" + sb.toString()); | 78 | + logger.debug("gps:" + sb.toString()); |
| 79 | list = JSON.parseArray(JSON.parseObject(sb.toString()).getString("data"), GpsEntity.class); | 79 | list = JSON.parseArray(JSON.parseObject(sb.toString()).getString("data"), GpsEntity.class); |
| 80 | //过滤掉无效的点位 | 80 | //过滤掉无效的点位 |
| 81 | list = GpsDataUtils.clearInvalid(list); | 81 | list = GpsDataUtils.clearInvalid(list); |
src/main/java/com/bsth/repository/calc/CalcWaybillRepository.java
| @@ -66,7 +66,10 @@ public interface CalcWaybillRepository extends BaseRepository<CalcWaybill, Integ | @@ -66,7 +66,10 @@ public interface CalcWaybillRepository extends BaseRepository<CalcWaybill, Integ | ||
| 66 | @Query(value="select DISTINCT c from CalcWaybill c where c.xl like %?1% and c.rqStr between ?2 and ?3 and c.gsdm like %?4% and c.fgsdm like %?5% and CONCAT(sGh,'/',sName) like %?6% order by c.xl") | 66 | @Query(value="select DISTINCT c from CalcWaybill c where c.xl like %?1% and c.rqStr between ?2 and ?3 and c.gsdm like %?4% and c.fgsdm like %?5% and CONCAT(sGh,'/',sName) like %?6% order by c.xl") |
| 67 | List<CalcWaybill> scheduleBySpy(String line,String date,String date2,String gsdm,String fgsdm,String spy); | 67 | List<CalcWaybill> scheduleBySpy(String line,String date,String date2,String gsdm,String fgsdm,String spy); |
| 68 | //按照时间段统计,公司下线路 (车辆自编号) | 68 | //按照时间段统计,公司下线路 (车辆自编号) |
| 69 | - @Query(value="select DISTINCT c from CalcWaybill c where c.xl like %?1% and c.rqStr between ?2 and ?3 and c.gsdm like %?4% and c.fgsdm like %?5% and cl like %?6% order by c.xl") | 69 | + @Query(value="select DISTINCT c from CalcWaybill c where c.xl like %?1% and c.rqStr between ?2 and ?3 and c.gsdm like %?4% and c.fgsdm like %?5% and c.cl like %?6% order by c.xl") |
| 70 | List<CalcWaybill> scheduleByZbh(String line,String date,String date2,String gsdm,String fgsdm,String zbh); | 70 | List<CalcWaybill> scheduleByZbh(String line,String date,String date2,String gsdm,String fgsdm,String zbh); |
| 71 | + @Query(value="select DISTINCT c from CalcWaybill c where c.xl like %?1% and c.rqStr between ?2 and ?3 and c.gsdm like %?4% and c.fgsdm like %?5% and c.cl like %?6%" | ||
| 72 | + + " and c.cl in (select s.carCode from Cars s where s.sfdc = ?7) order by c.xl") | ||
| 73 | + List<CalcWaybill> scheduleByZbh(String line,String date,String date2,String gsdm,String fgsdm,String zbh,Boolean sfdc); | ||
| 71 | 74 | ||
| 72 | } | 75 | } |
src/main/java/com/bsth/service/calc/CalcMixService.java
| @@ -10,6 +10,6 @@ public interface CalcMixService { | @@ -10,6 +10,6 @@ public interface CalcMixService { | ||
| 10 | 10 | ||
| 11 | List<Map<String, Object>> calcjsyspy(String line, String startDate, String endDate, String cont, String empnames, String gsdmManth, String fgsdmManth); | 11 | List<Map<String, Object>> calcjsyspy(String line, String startDate, String endDate, String cont, String empnames, String gsdmManth, String fgsdmManth); |
| 12 | 12 | ||
| 13 | - List<Map<String, Object>> singledatatj(String line, String startDate, String endDate, String tjtype, String cont, String gsdmSing, String fgsdmSing); | 13 | + List<Map<String, Object>> singledatatj(String line, String startDate, String endDate, String tjtype, String cont, String gsdmSing, String fgsdmSing, String sfdc); |
| 14 | 14 | ||
| 15 | } | 15 | } |
src/main/java/com/bsth/service/calc/impl/CalcIntervalServiceImpl.java
| @@ -123,9 +123,11 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | @@ -123,9 +123,11 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | ||
| 123 | } | 123 | } |
| 124 | }); | 124 | }); |
| 125 | }else{ | 125 | }else{ |
| 126 | + //统计信息中需要查询所有班次 | ||
| 127 | +// and djg_all >0 | ||
| 126 | String sql="select gsbm,fgsbm,xl_bm,xl_name,SUM(bcs) as bcs,MAX(id) as id,SUM(djg_all) as djgAll,SUM(djg_gf) as djgGf," | 128 | String sql="select gsbm,fgsbm,xl_bm,xl_name,SUM(bcs) as bcs,MAX(id) as id,SUM(djg_all) as djgAll,SUM(djg_gf) as djgGf," |
| 127 | + "SUM(djg_dg) as djgDg,SUM(djg_zgf) as djgZgf,SUM(djg_wgf) as djgWgf,MAX(djg_time) as djgTime " | 129 | + "SUM(djg_dg) as djgDg,SUM(djg_zgf) as djgZgf,SUM(djg_wgf) as djgWgf,MAX(djg_time) as djgTime " |
| 128 | - + "from bsth_c_calc_interval where date>= '"+sDate+"' and date<='"+eDate+"' and level <> 'D' and djg_all >0 "; | 130 | + + "from bsth_c_calc_interval where date>= '"+sDate+"' and date<='"+eDate+"' and level <> 'D' "; |
| 129 | if(line.equals("")){ | 131 | if(line.equals("")){ |
| 130 | if(fgs.equals("")){ | 132 | if(fgs.equals("")){ |
| 131 | sql +=" and gsbm = '"+gs+"'"; | 133 | sql +=" and gsbm = '"+gs+"'"; |
| @@ -150,12 +152,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | @@ -150,12 +152,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | ||
| 150 | m.put("id", rs.getInt("id")); | 152 | m.put("id", rs.getInt("id")); |
| 151 | int djgAll=rs.getInt("djgAll"); | 153 | int djgAll=rs.getInt("djgAll"); |
| 152 | int bcs=rs.getInt("bcs"); | 154 | int bcs=rs.getInt("bcs"); |
| 153 | - //全日发生率 (大间隔次数/全日班次数) | 155 | + //万班次发生率 (大间隔次数/全日班次数*10000) |
| 154 | if(bcs>0){ | 156 | if(bcs>0){ |
| 155 | - double fsl=(djgAll*1.0)/(bcs*1.0)*100; | ||
| 156 | - m.put("fsl", df.format(fsl)+"%"); | 157 | + double fsl=(djgAll*1.0)/(bcs*1.0)*10000; |
| 158 | + m.put("fsl", df.format(fsl)); | ||
| 157 | }else{ | 159 | }else{ |
| 158 | - m.put("fsl", "0.0%"); | 160 | + m.put("fsl", "0.0"); |
| 159 | } | 161 | } |
| 160 | m.put("djgAll", rs.getString("djgAll")); | 162 | m.put("djgAll", rs.getString("djgAll")); |
| 161 | m.put("djgGf", rs.getString("djgGf")); | 163 | m.put("djgGf", rs.getString("djgGf")); |
| @@ -243,12 +245,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | @@ -243,12 +245,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege | ||
| 243 | m.put("djgDg", t.getDjgDg()); | 245 | m.put("djgDg", t.getDjgDg()); |
| 244 | int djgAll=t.getDjgAll(); | 246 | int djgAll=t.getDjgAll(); |
| 245 | int bcs=t.getBcs(); | 247 | int bcs=t.getBcs(); |
| 246 | - //全日发生率 (大间隔次数/全日班次数) | 248 | + //全日发生率 (大间隔次数/全日班次数*10000) 万班次发生率 |
| 247 | if(bcs>0){ | 249 | if(bcs>0){ |
| 248 | - double fsl=(djgAll*1.0)/(bcs*1.0)*100; | ||
| 249 | - m.put("fsl", df.format(fsl)+"%"); | 250 | + double fsl=(djgAll*1.0)/(bcs*1.0)*10000; |
| 251 | + m.put("fsl", df.format(fsl)); | ||
| 250 | }else{ | 252 | }else{ |
| 251 | - m.put("fsl", "0.0%"); | 253 | + m.put("fsl", "0.0"); |
| 252 | } | 254 | } |
| 253 | m.put("bcs", t.getBcs()); | 255 | m.put("bcs", t.getBcs()); |
| 254 | m.put("djgTime", t.getDjgTime()); | 256 | m.put("djgTime", t.getDjgTime()); |
src/main/java/com/bsth/service/calc/impl/CalcMixServiceImpl.java
| @@ -160,7 +160,7 @@ public class CalcMixServiceImpl implements CalcMixService { | @@ -160,7 +160,7 @@ public class CalcMixServiceImpl implements CalcMixService { | ||
| 160 | public List<Map<String, Object>> singledatatj(String line, | 160 | public List<Map<String, Object>> singledatatj(String line, |
| 161 | String date, String date2, | 161 | String date, String date2, |
| 162 | String tjtype, String cont, | 162 | String tjtype, String cont, |
| 163 | - String gsdm, String fgsdm) { | 163 | + String gsdm, String fgsdm, String sfdc) { |
| 164 | 164 | ||
| 165 | List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); | 165 | List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); |
| 166 | List<CalcWaybill> list = null; | 166 | List<CalcWaybill> list = null; |
| @@ -174,7 +174,13 @@ public class CalcMixServiceImpl implements CalcMixService { | @@ -174,7 +174,13 @@ public class CalcMixServiceImpl implements CalcMixService { | ||
| 174 | list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont); | 174 | list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont); |
| 175 | } else if("车辆自编号".equals(tjtype)){ | 175 | } else if("车辆自编号".equals(tjtype)){ |
| 176 | flag = 3; | 176 | flag = 3; |
| 177 | - list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont); | 177 | + if("1".equals(sfdc)){ |
| 178 | + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, true); | ||
| 179 | + } else if("0".equals(sfdc)){ | ||
| 180 | + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, false); | ||
| 181 | + } else { | ||
| 182 | + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont); | ||
| 183 | + } | ||
| 178 | } | 184 | } |
| 179 | 185 | ||
| 180 | List<CalcWaybill> calcList = new ArrayList<CalcWaybill>(); | 186 | List<CalcWaybill> calcList = new ArrayList<CalcWaybill>(); |
| @@ -267,7 +273,7 @@ public class CalcMixServiceImpl implements CalcMixService { | @@ -267,7 +273,7 @@ public class CalcMixServiceImpl implements CalcMixService { | ||
| 267 | + linesql | 273 | + linesql |
| 268 | + " union" | 274 | + " union" |
| 269 | + " SELECT id,xlbm,nbbm,jsy,cdl as jzl,hd as yh,sh as sh,fgsdm FROM bsth_c_dlb" | 275 | + " SELECT id,xlbm,nbbm,jsy,cdl as jzl,hd as yh,sh as sh,fgsdm FROM bsth_c_dlb" |
| 270 | - + " WHERE rq >= '"+date2+"' and rq <= '"+date2+"'" | 276 | + + " WHERE rq >= '"+date+"' and rq <= '"+date2+"'" |
| 271 | + linesql; | 277 | + linesql; |
| 272 | List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() { | 278 | List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() { |
| 273 | @Override | 279 | @Override |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| @@ -13,6 +13,7 @@ import java.text.DecimalFormat; | @@ -13,6 +13,7 @@ import java.text.DecimalFormat; | ||
| 13 | import java.text.ParseException; | 13 | import java.text.ParseException; |
| 14 | import java.text.SimpleDateFormat; | 14 | import java.text.SimpleDateFormat; |
| 15 | import java.util.ArrayList; | 15 | import java.util.ArrayList; |
| 16 | +import java.util.Arrays; | ||
| 16 | import java.util.Calendar; | 17 | import java.util.Calendar; |
| 17 | import java.util.Collections; | 18 | import java.util.Collections; |
| 18 | import java.util.Comparator; | 19 | import java.util.Comparator; |
| @@ -1173,7 +1174,7 @@ public class GpsServiceImpl implements GpsService { | @@ -1173,7 +1174,7 @@ public class GpsServiceImpl implements GpsService { | ||
| 1173 | } | 1174 | } |
| 1174 | //过滤数据 | 1175 | //过滤数据 |
| 1175 | for (SafeDriv sd : list) { | 1176 | for (SafeDriv sd : list) { |
| 1176 | - if (fieldEquals(fs, sd, map)) | 1177 | + if (isSpecialLines(sd, map) && fieldEquals(fs, sd, map)) |
| 1177 | rs.add(sd); | 1178 | rs.add(sd); |
| 1178 | } | 1179 | } |
| 1179 | 1180 | ||
| @@ -1294,6 +1295,20 @@ public class GpsServiceImpl implements GpsService { | @@ -1294,6 +1295,20 @@ public class GpsServiceImpl implements GpsService { | ||
| 1294 | } | 1295 | } |
| 1295 | }); | 1296 | }); |
| 1296 | } | 1297 | } |
| 1298 | + | ||
| 1299 | + /** | ||
| 1300 | + * | ||
| 1301 | + * @param sd | ||
| 1302 | + * @param map | ||
| 1303 | + * @return | ||
| 1304 | + */ | ||
| 1305 | + public boolean isSpecialLines(SafeDriv sd, Map<String, Object> map) { | ||
| 1306 | + String lines = (String)map.get("lines"); | ||
| 1307 | + if (lines == null) lines = ""; | ||
| 1308 | + | ||
| 1309 | + if (Arrays.asList(lines.split(",")).contains(sd.getXlbm())) return true; | ||
| 1310 | + return false; | ||
| 1311 | + } | ||
| 1297 | 1312 | ||
| 1298 | public boolean fieldEquals(List<Field> fs, Object obj, Map<String, Object> map) { | 1313 | public boolean fieldEquals(List<Field> fs, Object obj, Map<String, Object> map) { |
| 1299 | try { | 1314 | try { |
src/main/java/com/bsth/service/sys/RoleService.java
| 1 | package com.bsth.service.sys; | 1 | package com.bsth.service.sys; |
| 2 | 2 | ||
| 3 | -import java.util.List; | ||
| 4 | -import java.util.Map; | ||
| 5 | - | ||
| 6 | import com.bsth.entity.sys.Role; | 3 | import com.bsth.entity.sys.Role; |
| 7 | -import com.bsth.entity.sys.SysUser; | ||
| 8 | import com.bsth.service.BaseService; | 4 | import com.bsth.service.BaseService; |
| 9 | 5 | ||
| 6 | +import java.util.List; | ||
| 7 | +import java.util.Map; | ||
| 8 | + | ||
| 10 | public interface RoleService extends BaseService<Role, Integer>{ | 9 | public interface RoleService extends BaseService<Role, Integer>{ |
| 11 | 10 | ||
| 12 | Map<String, Object> findSubordinate(); | 11 | Map<String, Object> findSubordinate(); |
| @@ -18,4 +17,6 @@ public interface RoleService extends BaseService<Role, Integer>{ | @@ -18,4 +17,6 @@ public interface RoleService extends BaseService<Role, Integer>{ | ||
| 18 | Map<String, Object> roleInfo(Integer id); | 17 | Map<String, Object> roleInfo(Integer id); |
| 19 | 18 | ||
| 20 | List<Role> findAllByIds(String ids); | 19 | List<Role> findAllByIds(String ids); |
| 20 | + | ||
| 21 | + boolean checkOperationLegality(Integer operationRoleId); | ||
| 21 | } | 22 | } |
src/main/java/com/bsth/service/sys/SysUserService.java
| @@ -2,6 +2,7 @@ package com.bsth.service.sys; | @@ -2,6 +2,7 @@ package com.bsth.service.sys; | ||
| 2 | 2 | ||
| 3 | import com.bsth.entity.sys.SysUser; | 3 | import com.bsth.entity.sys.SysUser; |
| 4 | import com.bsth.service.BaseService; | 4 | import com.bsth.service.BaseService; |
| 5 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 5 | 6 | ||
| 6 | import java.util.List; | 7 | import java.util.List; |
| 7 | import java.util.Map; | 8 | import java.util.Map; |
| @@ -17,4 +18,6 @@ public interface SysUserService extends BaseService<SysUser, Integer>{ | @@ -17,4 +18,6 @@ public interface SysUserService extends BaseService<SysUser, Integer>{ | ||
| 17 | Map<String,Object> register(SysUser u); | 18 | Map<String,Object> register(SysUser u); |
| 18 | 19 | ||
| 19 | List<SysUser> findAll_distinct(); | 20 | List<SysUser> findAll_distinct(); |
| 21 | + | ||
| 22 | + Map<String, Object> resetPassword(@RequestParam Integer id); | ||
| 20 | } | 23 | } |
src/main/java/com/bsth/service/sys/impl/RoleServiceImpl.java
| @@ -96,8 +96,10 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements | @@ -96,8 +96,10 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements | ||
| 96 | // ComparatorSysrole(rootlist); | 96 | // ComparatorSysrole(rootlist); |
| 97 | map.put("list", rsRoleList); | 97 | map.put("list", rsRoleList); |
| 98 | map.put("status", ResponseCode.SUCCESS); | 98 | map.put("status", ResponseCode.SUCCESS); |
| 99 | + map.put("msg", "成功"); | ||
| 99 | } catch (Exception e) { | 100 | } catch (Exception e) { |
| 100 | map.put("status", ResponseCode.ERROR); | 101 | map.put("status", ResponseCode.ERROR); |
| 102 | + map.put("msg", e); | ||
| 101 | logger.error("error",e); | 103 | logger.error("error",e); |
| 102 | } | 104 | } |
| 103 | return map; | 105 | return map; |
| @@ -282,4 +284,12 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements | @@ -282,4 +284,12 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements | ||
| 282 | public List<Role> findAllByIds(String ids) { | 284 | public List<Role> findAllByIds(String ids) { |
| 283 | return roleRepository.findAllById(ids); | 285 | return roleRepository.findAllById(ids); |
| 284 | } | 286 | } |
| 287 | + | ||
| 288 | + @Override | ||
| 289 | + public boolean checkOperationLegality(Integer operationRoleId){ | ||
| 290 | + boolean isLegality = false; | ||
| 291 | + Map<String, Object> roleMap = findSubordinate(); | ||
| 292 | + isLegality = (roleMap.get(operationRoleId) == null ? true:false ); | ||
| 293 | + return isLegality; | ||
| 294 | + } | ||
| 285 | } | 295 | } |
src/main/java/com/bsth/service/sys/impl/SysUserServiceImpl.java
| 1 | package com.bsth.service.sys.impl; | 1 | package com.bsth.service.sys.impl; |
| 2 | 2 | ||
| 3 | -import com.alibaba.fastjson.JSONArray; | ||
| 4 | import com.bsth.common.ResponseCode; | 3 | import com.bsth.common.ResponseCode; |
| 4 | +import com.bsth.controller.sys.util.RSAUtils; | ||
| 5 | import com.bsth.entity.sys.Role; | 5 | import com.bsth.entity.sys.Role; |
| 6 | import com.bsth.entity.sys.SysUser; | 6 | import com.bsth.entity.sys.SysUser; |
| 7 | import com.bsth.repository.sys.SysUserRepository; | 7 | import com.bsth.repository.sys.SysUserRepository; |
| @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; | @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; | ||
| 16 | import org.springframework.beans.factory.annotation.Autowired; | 16 | import org.springframework.beans.factory.annotation.Autowired; |
| 17 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | 17 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| 18 | import org.springframework.stereotype.Service; | 18 | import org.springframework.stereotype.Service; |
| 19 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 19 | 20 | ||
| 20 | import java.util.ArrayList; | 21 | import java.util.ArrayList; |
| 21 | import java.util.HashMap; | 22 | import java.util.HashMap; |
| @@ -65,20 +66,45 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem | @@ -65,20 +66,45 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem | ||
| 65 | @Override | 66 | @Override |
| 66 | public Map<String, Object> register(SysUser u) { | 67 | public Map<String, Object> register(SysUser u) { |
| 67 | Map<String, Object> rs = new HashMap(); | 68 | Map<String, Object> rs = new HashMap(); |
| 68 | - try{ | ||
| 69 | - //检查用户名是否存在 | ||
| 70 | - if(findByUserName(u.getUserName()) != null){ | 69 | + boolean isLegality = false; |
| 70 | + Iterator<Role> itRole = u.getRoles().iterator(); | ||
| 71 | + Role ro = new Role(); | ||
| 72 | + while(itRole.hasNext()){//判断是否有下一个 | ||
| 73 | + ro = itRole.next(); | ||
| 74 | + if(roleService.checkOperationLegality(ro.getId())){ | ||
| 75 | + isLegality = true; | ||
| 76 | + } else { | ||
| 71 | rs.put("status", ResponseCode.ERROR); | 77 | rs.put("status", ResponseCode.ERROR); |
| 72 | - rs.put("msg", "用户名" + u.getUserName() + "已存在!"); | 78 | + rs.put("msg", "用户权限不够,请联系管理员!"); |
| 79 | + return rs; | ||
| 73 | } | 80 | } |
| 74 | - else{ | ||
| 75 | - u.setPassword(new BCryptPasswordEncoder(4).encode(u.getPassword())); | ||
| 76 | - rs = super.save(u); | 81 | + } |
| 82 | + if(isLegality){ | ||
| 83 | + try{ | ||
| 84 | + //解密RSA | ||
| 85 | + try{ | ||
| 86 | + u.setUserName(RSAUtils.decryptBase64(u.getUserName())); | ||
| 87 | + u.setPassword(RSAUtils.decryptBase64(u.getPassword())); | ||
| 88 | + }catch (RuntimeException e) { | ||
| 89 | + rs.put("msg", "网络延迟,解密失败,请重新添加!"); | ||
| 90 | + } | ||
| 91 | + //检查用户名是否存在 | ||
| 92 | + if(findByUserName(u.getUserName()) != null){ | ||
| 93 | + rs.put("status", ResponseCode.ERROR); | ||
| 94 | + rs.put("msg", "用户名" + u.getUserName() + "已存在!"); | ||
| 95 | + } | ||
| 96 | + else{ | ||
| 97 | + u.setPassword(new BCryptPasswordEncoder(4).encode(u.getPassword())); | ||
| 98 | + rs = super.save(u); | ||
| 99 | + } | ||
| 100 | + }catch (Exception e){ | ||
| 101 | + logger.error("", e); | ||
| 102 | + rs.put("status", ResponseCode.ERROR); | ||
| 103 | + rs.put("msg", e.getMessage()); | ||
| 77 | } | 104 | } |
| 78 | - }catch (Exception e){ | ||
| 79 | - logger.error("", e); | 105 | + }else { |
| 80 | rs.put("status", ResponseCode.ERROR); | 106 | rs.put("status", ResponseCode.ERROR); |
| 81 | - rs.put("msg", e.getMessage()); | 107 | + rs.put("msg", "用户权限不够,请联系管理员!"); |
| 82 | } | 108 | } |
| 83 | return rs; | 109 | return rs; |
| 84 | } | 110 | } |
| @@ -122,8 +148,36 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem | @@ -122,8 +148,36 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem | ||
| 122 | } catch (Exception e){ | 148 | } catch (Exception e){ |
| 123 | logger.error("error", e); | 149 | logger.error("error", e); |
| 124 | } | 150 | } |
| 125 | - | ||
| 126 | - | ||
| 127 | return rsList; | 151 | return rsList; |
| 128 | } | 152 | } |
| 153 | + | ||
| 154 | + @Override | ||
| 155 | + public Map<String, Object> resetPassword(@RequestParam Integer id){ | ||
| 156 | + Map<String, Object> rs = new HashMap(); | ||
| 157 | + try{ | ||
| 158 | + // 获取当前用户 | ||
| 159 | + SysUser user = SecurityUtils.getCurrentUser(); | ||
| 160 | + Iterator<Role> itRole = user.getRoles().iterator(); | ||
| 161 | + Role ro = new Role(); | ||
| 162 | + boolean Legality = false; | ||
| 163 | + while(itRole.hasNext()){//判断是否有下一个 | ||
| 164 | + ro = itRole.next(); | ||
| 165 | + if(ro.getLevel() == 1) | ||
| 166 | + Legality = true; | ||
| 167 | + } | ||
| 168 | + if(Legality){ | ||
| 169 | + sysUserRepository.changePWD(id,new BCryptPasswordEncoder(4).encode("123456")); | ||
| 170 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 171 | + rs.put("msg", "密码重置成功!"); | ||
| 172 | + }else { | ||
| 173 | + rs.put("status", ResponseCode.ERROR); | ||
| 174 | + rs.put("msg", "您不是超级管理员无权限重置其他用户密码"); | ||
| 175 | + } | ||
| 176 | + }catch (Exception e){ | ||
| 177 | + logger.error("", e); | ||
| 178 | + rs.put("status", ResponseCode.ERROR); | ||
| 179 | + rs.put("msg", e.getMessage()); | ||
| 180 | + } | ||
| 181 | + return rs; | ||
| 182 | + } | ||
| 129 | } | 183 | } |
src/main/resources/static/index.html
| @@ -630,9 +630,11 @@ | @@ -630,9 +630,11 @@ | ||
| 630 | <script | 630 | <script |
| 631 | src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda" | 631 | src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda" |
| 632 | data-exclude=1></script> | 632 | data-exclude=1></script> |
| 633 | -<!-- echarts4 误删 --> | 633 | +<!-- echarts4 --> |
| 634 | <script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script> | 634 | <script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script> |
| 635 | <script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script> | 635 | <script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script> |
| 636 | +<!-- RSA加密 --> | ||
| 637 | +<script src="/assets/plugins/jsencrypt.min.js"></script> | ||
| 636 | 638 | ||
| 637 | </body> | 639 | </body> |
| 638 | </html> | 640 | </html> |
| 639 | \ No newline at end of file | 641 | \ No newline at end of file |
src/main/resources/static/pages/forms/calc/calcsingledata.html
| @@ -40,6 +40,14 @@ | @@ -40,6 +40,14 @@ | ||
| 40 | <span class="item-label" style="width: 80px;">线路: </span> | 40 | <span class="item-label" style="width: 80px;">线路: </span> |
| 41 | <select class="form-control" name="line" id="line" style="width: 140px;"></select> | 41 | <select class="form-control" name="line" id="line" style="width: 140px;"></select> |
| 42 | </div> | 42 | </div> |
| 43 | + <div style="display: inline-block; margin-left: 18px;" id="sfdcDiv"> | ||
| 44 | + <span class="item-label" style="width: 80px;">是否电车: </span> | ||
| 45 | + <select class="form-control form-filter " name="sfdc" id="sfdc"> | ||
| 46 | + <option value="">请选择...</option> | ||
| 47 | + <option value="0">否</option> | ||
| 48 | + <option value="1">是</option> | ||
| 49 | + </select> | ||
| 50 | + </div> | ||
| 43 | <div style="margin-top: 10px"></div> | 51 | <div style="margin-top: 10px"></div> |
| 44 | <div style="display: inline-block;margin-left: 3px;"> | 52 | <div style="display: inline-block;margin-left: 3px;"> |
| 45 | <span class="item-label" style="width: 140px;">开始时间: </span> | 53 | <span class="item-label" style="width: 140px;">开始时间: </span> |
| @@ -99,13 +107,10 @@ | @@ -99,13 +107,10 @@ | ||
| 99 | // 关闭左侧栏 | 107 | // 关闭左侧栏 |
| 100 | if (!$('body').hasClass('page-sidebar-closed')) | 108 | if (!$('body').hasClass('page-sidebar-closed')) |
| 101 | $('.menu-toggler.sidebar-toggler').click(); | 109 | $('.menu-toggler.sidebar-toggler').click(); |
| 102 | - | ||
| 103 | - $("#startDate,#endDate").datetimepicker({ | ||
| 104 | - format : 'YYYY-MM-DD', | ||
| 105 | - locale : 'zh-cn' | ||
| 106 | - }); | 110 | + |
| 107 | 111 | ||
| 108 | var d = new Date(); | 112 | var d = new Date(); |
| 113 | + d.setTime(d.getTime() - 4*1000*60*60*24); | ||
| 109 | var year = d.getFullYear(); | 114 | var year = d.getFullYear(); |
| 110 | var month = d.getMonth() + 1; | 115 | var month = d.getMonth() + 1; |
| 111 | var day = d.getDate(); | 116 | var day = d.getDate(); |
| @@ -113,7 +118,20 @@ | @@ -113,7 +118,20 @@ | ||
| 113 | month = "0" + month; | 118 | month = "0" + month; |
| 114 | if(day < 10) | 119 | if(day < 10) |
| 115 | day = "0" + day; | 120 | day = "0" + day; |
| 116 | - $("#startDate,#endDate").val(year + "-" + month + "-" + day); | 121 | + var dateTime = year + "-" + month + "-" + day; |
| 122 | + $("#startDate").datetimepicker({ | ||
| 123 | + format : 'YYYY-MM-DD', | ||
| 124 | + locale : 'zh-cn', | ||
| 125 | + maxDate : dateTime | ||
| 126 | + }); | ||
| 127 | + $("#endDate").datetimepicker({ | ||
| 128 | + format : 'YYYY-MM-DD', | ||
| 129 | + locale : 'zh-cn', | ||
| 130 | + maxDate : dateTime | ||
| 131 | + }); | ||
| 132 | + $("#startDate").val(dateTime); | ||
| 133 | + $("#endDate").val(dateTime); | ||
| 134 | + | ||
| 117 | 135 | ||
| 118 | var fage=false; | 136 | var fage=false; |
| 119 | var xlList; | 137 | var xlList; |
| @@ -193,6 +211,8 @@ | @@ -193,6 +211,8 @@ | ||
| 193 | } | 211 | } |
| 194 | }); | 212 | }); |
| 195 | 213 | ||
| 214 | + $("#sfdcDiv").hide(); | ||
| 215 | + | ||
| 196 | var cont = "驾驶员", cont1 = "", cont2 = "", cont3 = ""; | 216 | var cont = "驾驶员", cont1 = "", cont2 = "", cont3 = ""; |
| 197 | $("#tjtype").on("change",function(){ | 217 | $("#tjtype").on("change",function(){ |
| 198 | if(cont == "驾驶员"){ | 218 | if(cont == "驾驶员"){ |
| @@ -205,10 +225,13 @@ | @@ -205,10 +225,13 @@ | ||
| 205 | cont = $("#tjtype").val(); | 225 | cont = $("#tjtype").val(); |
| 206 | if($("#tjtype").val() == "驾驶员"){ | 226 | if($("#tjtype").val() == "驾驶员"){ |
| 207 | $("#cont").val(cont1); | 227 | $("#cont").val(cont1); |
| 228 | + $("#sfdcDiv").hide(); | ||
| 208 | } else if($("#tjtype").val() == "售票员"){ | 229 | } else if($("#tjtype").val() == "售票员"){ |
| 209 | $("#cont").val(cont2); | 230 | $("#cont").val(cont2); |
| 231 | + $("#sfdcDiv").hide(); | ||
| 210 | } else if($("#tjtype").val() == "车辆自编号"){ | 232 | } else if($("#tjtype").val() == "车辆自编号"){ |
| 211 | $("#cont").val(cont3); | 233 | $("#cont").val(cont3); |
| 234 | + $("#sfdcDiv").show(); | ||
| 212 | } | 235 | } |
| 213 | }); | 236 | }); |
| 214 | 237 | ||
| @@ -229,9 +252,10 @@ | @@ -229,9 +252,10 @@ | ||
| 229 | var fgsdmSing = $("#fgsdmSing").val(); | 252 | var fgsdmSing = $("#fgsdmSing").val(); |
| 230 | var tjtype=$("#tjtype").val(); | 253 | var tjtype=$("#tjtype").val(); |
| 231 | var cont=$("#cont").val(); | 254 | var cont=$("#cont").val(); |
| 255 | + var sfdc=$("#sfdc").val(); | ||
| 232 | var params = {}; | 256 | var params = {}; |
| 233 | var i = layer.load(2); | 257 | var i = layer.load(2); |
| 234 | - $get("/calc_mix/singledatatj",{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont},function(result){ | 258 | + $get("/calc_mix/singledatatj",{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,sfdc:sfdc},function(result){ |
| 235 | layer.close(i); | 259 | layer.close(i); |
| 236 | var singledata = template('singledata',{list:result}); | 260 | var singledata = template('singledata',{list:result}); |
| 237 | // 把渲染好的模版html文本追加到表格中 | 261 | // 把渲染好的模版html文本追加到表格中 |
| @@ -247,11 +271,12 @@ | @@ -247,11 +271,12 @@ | ||
| 247 | var fgsdmSing = $("#fgsdmSing").val(); | 271 | var fgsdmSing = $("#fgsdmSing").val(); |
| 248 | var tjtype=$("#tjtype").val(); | 272 | var tjtype=$("#tjtype").val(); |
| 249 | var cont=$("#cont").val(); | 273 | var cont=$("#cont").val(); |
| 274 | + var sfdc=$("#sfdc").val(); | ||
| 250 | var lineName = $('#line option:selected').text(); | 275 | var lineName = $('#line option:selected').text(); |
| 251 | if(lineName == "全部线路") | 276 | if(lineName == "全部线路") |
| 252 | lineName = $('#fgsdmSing option:selected').text(); | 277 | lineName = $('#fgsdmSing option:selected').text(); |
| 253 | var i = layer.load(2); | 278 | var i = layer.load(2); |
| 254 | - $get('/calc_export/singledataExportTj',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,type:'export',lineName:lineName},function(result){ | 279 | + $get('/calc_export/singledataExportTj',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,sfdc:sfdc,type:'export',lineName:lineName},function(result){ |
| 255 | var dateTime = ""; | 280 | var dateTime = ""; |
| 256 | if(startDate == endDate){ | 281 | if(startDate == endDate){ |
| 257 | dateTime = moment(startDate).format("YYYYMMDD"); | 282 | dateTime = moment(startDate).format("YYYYMMDD"); |
src/main/resources/static/pages/forms/mould/calcIntervalCount.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/calcIntervalList1.xls
No preview for this file type
src/main/resources/static/pages/home.html
| @@ -59,41 +59,13 @@ | @@ -59,41 +59,13 @@ | ||
| 59 | } | 59 | } |
| 60 | </style> | 60 | </style> |
| 61 | <div class="system_change_log"> | 61 | <div class="system_change_log"> |
| 62 | - <h2 style="text-indent: 35px;margin: 10px 0 5px;">2019-04-11 更新说明 Changelog</h2> | 62 | + <h2 style="text-indent: 35px;margin: 10px 0 5px;">2020-03-12 更新说明 Changelog</h2> |
| 63 | <br><br> | 63 | <br><br> |
| 64 | <ul > | 64 | <ul > |
| 65 | <li class="sub_title"><h6>权限管理</h6></li> | 65 | <li class="sub_title"><h6>权限管理</h6></li> |
| 66 | - <li><span class="label s_c_change">修复</span>1、编辑某一个员工,用户、角色和授权管理设置在同一界面。</li> | ||
| 67 | - <li><span class="label s_c_change">新增</span>2、用户增加一项状态,显示主调、监控和作废。</li> | 66 | + <li><span class="label s_c_change">修改</span>1、密码修改加入密码复杂度校验机制</li> |
| 68 | <li class="sub_title"><h6>线调</h6></li> | 67 | <li class="sub_title"><h6>线调</h6></li> |
| 69 | - <li><span class="label s_c_change">新增</span>1、少量班次对换完成用颜色标记为已换。</li> | ||
| 70 | - <li><span class="label s_c_change">新增</span>2、子任务可最小化。</li> | ||
| 71 | - <li><span class="label s_c_change">修复</span>3、修正子任务一个备注栏原因选择后其他子任务都会同步备注此原因。</li> | ||
| 72 | - <li><span class="label s_c_change">修复</span>4、轨迹回放只显示当前一段时间内的gps走向,已轨迹回放的走向自动不显示(只显示当前上下行的gps走向)。</li> | ||
| 73 | - <li><span class="label s_c_change">修复</span>5、轨迹回放播放速度添加更多倍速播放可选。</li> | ||
| 74 | - <li><span class="label s_c_change">新增</span>6、"线路配置"分割成"线路配置"、"翻班与自动执行",可独立授权。</li> | ||
| 75 | - <li><span class="label s_c_change">新增</span>7、添加设置,选择是否显示应到实到误差时间。</li> | ||
| 76 | - <li><span class="label s_c_change">修复</span>8、无发有到时间 为紫色完成状态,改为显眼颜色区分,用橙色区分。</li> | ||
| 77 | - <li><span class="label s_c_change">修复</span>9、轨迹回放中根据时间点切换线路版本信息。</li> | ||
| 78 | - <li><span class="label s_c_change">修复</span>10、路牌对调连续请求造成数据不一致,翻班时无法清楚前日的排班数据。</li> | ||
| 79 | - <li class="sub_title"><h6>计划调度</h6></li> | ||
| 80 | - <li><span class="label s_c_change">修复</span>1、车辆报废,释放设备编号后在设备管理里添加一条设备替换记录。</li> | ||
| 81 | - <li><span class="label s_c_change">修复</span>2、线路值勤日报,修改班次时,跨线路修改班次车提示报警。</li> | ||
| 82 | - <li><span class="label s_c_change">修复</span>3、增加公司,分公司查询条件,公司,分公司,线路都是跟登录用户权限的,导出的数据和查询条件一致。</li> | ||
| 83 | - <li><span class="label s_c_change">修复</span>4、排班时,页面添加规则逻辑判定。</li> | ||
| 84 | - <li><span class="label s_c_change">修复</span>5、车辆导出修正,导出内容和权限匹配,和搜索条件匹配。</li> | ||
| 85 | - <li><span class="label s_c_change">新增</span>6、所有的页面搜索添加排序选项功能。</li> | ||
| 86 | - <li><span class="label s_c_change">新增</span>7、新增计划排班预览功能。</li> | ||
| 87 | - <li class="sub_title"><h6>统计报表</h6></li> | ||
| 88 | - <li><span class="label s_c_change">新增</span>1、新增早高峰出车报表。</li> | ||
| 89 | - <li><span class="label s_c_change">新增</span>2、新增调度日报(待发对比) 报表。</li> | ||
| 90 | - <li><span class="label s_c_change">新增</span>3、新增路单数据统计报表。</li> | ||
| 91 | - <li><span class="label s_c_change">修复</span>4、修正班次车辆人员日报表中的售票员统计。</li> | ||
| 92 | - <li class="sub_title"><h6>基础信息</h6></li> | ||
| 93 | - <li><span class="label s_c_change">修复</span>1、线路版本:待更新状态增加删除功能,历史版本取消修改功能。</li> | ||
| 94 | - <li><span class="label s_c_change">修复</span>2、线路信息-站点详情列-详情页面-站点修改功能:站点修改多边形功能修改,站点中心点可以移动。</li> | ||
| 95 | - <li class="sub_title"><h6>用油管理</h6></li> | ||
| 96 | - <li><span class="label s_c_change">修复</span>1、修正加油人员不符保存后不在显示。</li> | 68 | + <li><span class="label s_c_change">新增</span>1、线调页面新增维修上报功能</li> |
| 97 | </ul> | 69 | </ul> |
| 98 | 70 | ||
| 99 | </div> | 71 | </div> |
src/main/resources/static/pages/permission/user/add.html
| @@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
| 42 | <label class="col-md-3 control-label">密码</label> | 42 | <label class="col-md-3 control-label">密码</label> |
| 43 | <div class="col-md-4"> | 43 | <div class="col-md-4"> |
| 44 | <input type="password" class="form-control" id="password" name="password" > | 44 | <input type="password" class="form-control" id="password" name="password" > |
| 45 | - <span class="help-block"> 请输入6位以上密码</span> | 45 | + <!--<span class="help-block"> 请输入6位以上密码</span>--> |
| 46 | </div> | 46 | </div> |
| 47 | </div> | 47 | </div> |
| 48 | <div class="form-group"> | 48 | <div class="form-group"> |
| @@ -100,18 +100,46 @@ | @@ -100,18 +100,46 @@ | ||
| 100 | }); | 100 | }); |
| 101 | });*/ | 101 | });*/ |
| 102 | 102 | ||
| 103 | - // 查询下级角色 | 103 | + // 查询下级角色 |
| 104 | $.get('/role/findSubordinate', function (rs) { | 104 | $.get('/role/findSubordinate', function (rs) { |
| 105 | if(rs.status == "SUCCESS"){ | 105 | if(rs.status == "SUCCESS"){ |
| 106 | + if(rs.list.length < 1){ | ||
| 107 | + loadPage('/pages/permission/role/add.html'); | ||
| 108 | + layer.open({ | ||
| 109 | + // type: 2, | ||
| 110 | + content: '用户需要有下级角色才能添加用户!', | ||
| 111 | + title: '请添加下级角色', | ||
| 112 | + shift: 5, | ||
| 113 | + scrollbar: false | ||
| 114 | + }); | ||
| 115 | + return; | ||
| 116 | + } | ||
| 117 | + | ||
| 106 | $.each(rs.list,function(i,obj){ | 118 | $.each(rs.list,function(i,obj){ |
| 107 | $("#role").append("<option value='"+obj.id+"'>"+obj.roleName+"</option>"); | 119 | $("#role").append("<option value='"+obj.id+"'>"+obj.roleName+"</option>"); |
| 108 | }); | 120 | }); |
| 121 | + }else { | ||
| 122 | + loadPage('/pages/permission/role/list.html'); | ||
| 123 | + layer.open({ | ||
| 124 | + // type: 2, | ||
| 125 | + content: rs.msg, | ||
| 126 | + title: "用户的下级角色有问题", | ||
| 127 | + shift: 5, | ||
| 128 | + scrollbar: false | ||
| 129 | + }); | ||
| 109 | } | 130 | } |
| 110 | }); | 131 | }); |
| 132 | + | ||
| 111 | 133 | ||
| 112 | var form = $('#user_add_form'); | 134 | var form = $('#user_add_form'); |
| 113 | var error = $('.alert-danger', form); | 135 | var error = $('.alert-danger', form); |
| 114 | - | 136 | + |
| 137 | + $.validator.addMethod("passwordrule", function(value, element) { | ||
| 138 | + //var userblank = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{8,16}$/; | ||
| 139 | + var userblank = /^(?=.*[a-zA-Z])(?=.*\d).{8,16}$/; | ||
| 140 | + return this.optional(element) ||(userblank.test(value)); | ||
| 141 | + }, "需包含字母、数字的8-16位字符"); | ||
| 142 | + | ||
| 115 | //表单 validate | 143 | //表单 validate |
| 116 | form.validate({ | 144 | form.validate({ |
| 117 | errorElement : 'span', | 145 | errorElement : 'span', |
| @@ -128,13 +156,14 @@ | @@ -128,13 +156,14 @@ | ||
| 128 | }, | 156 | }, |
| 129 | 'password' : { | 157 | 'password' : { |
| 130 | required : true, | 158 | required : true, |
| 131 | - minlength: 6, | ||
| 132 | - maxlength: 25 | 159 | + minlength: 8, |
| 160 | + maxlength: 16, | ||
| 161 | + passwordrule: true | ||
| 133 | }, | 162 | }, |
| 134 | 'cfmPassword' : { | 163 | 'cfmPassword' : { |
| 135 | - equalTo: '#password' | 164 | + equalTo: '#password', |
| 136 | }, | 165 | }, |
| 137 | - 'role' : { | 166 | + 'roles' : { |
| 138 | required : true, | 167 | required : true, |
| 139 | minlength: 1 | 168 | minlength: 1 |
| 140 | } | 169 | } |
| @@ -160,6 +189,21 @@ | @@ -160,6 +189,21 @@ | ||
| 160 | var params = form.serializeJSON(); | 189 | var params = form.serializeJSON(); |
| 161 | error.hide(); | 190 | error.hide(); |
| 162 | 191 | ||
| 192 | + var keys; | ||
| 193 | + $.ajax({ | ||
| 194 | + url: "/user/login/jCryptionKey?t="+Math.random(), | ||
| 195 | + type: "Get", | ||
| 196 | + async:false, | ||
| 197 | + data: null, | ||
| 198 | + success: function(data) { | ||
| 199 | + keys = data.publickey; | ||
| 200 | + } | ||
| 201 | + }); | ||
| 202 | + //RSA加密 | ||
| 203 | + var encrypt = new JSEncrypt(); | ||
| 204 | + encrypt.setPublicKey(keys); | ||
| 205 | + params.userName = encrypt.encrypt(params.userName); | ||
| 206 | + params.password = encrypt.encrypt(params.password); | ||
| 163 | $.ajax({ | 207 | $.ajax({ |
| 164 | url: '/user/register', | 208 | url: '/user/register', |
| 165 | type: 'POST', | 209 | type: 'POST', |
| @@ -178,27 +222,6 @@ | @@ -178,27 +222,6 @@ | ||
| 178 | } | 222 | } |
| 179 | } | 223 | } |
| 180 | }); | 224 | }); |
| 181 | - /*$get('/user/all', {userName_eq: params.userName}, function(list){ | ||
| 182 | - if(!list || list.length == 0){ | ||
| 183 | - console.log(params); | ||
| 184 | - $.ajax({ | ||
| 185 | - url: '/user', | ||
| 186 | - type: 'POST', | ||
| 187 | - traditional: true, | ||
| 188 | - data: params, | ||
| 189 | - success: function(res){ | ||
| 190 | - layer.msg('添加用户成功.'); | ||
| 191 | - loadPage('list.html'); | ||
| 192 | - } | ||
| 193 | - }); | ||
| 194 | - /!* $post('/user', params, function(res){ | ||
| 195 | - layer.msg('添加用户成功.'); | ||
| 196 | - loadPage('list.html'); | ||
| 197 | - }); *!/ | ||
| 198 | - } | ||
| 199 | - else | ||
| 200 | - layer.alert('用户【' + params.userName + '】已存在', {icon: 2, title: '提交被拒绝'}); | ||
| 201 | - });*/ | ||
| 202 | } | 225 | } |
| 203 | }); | 226 | }); |
| 204 | }); | 227 | }); |
src/main/resources/static/pages/permission/user/changePWD.html
| @@ -4,6 +4,9 @@ | @@ -4,6 +4,9 @@ | ||
| 4 | <div class="portlet light portlet-fit portlet-form bordered"> | 4 | <div class="portlet light portlet-fit portlet-form bordered"> |
| 5 | <div class="portlet-body"> | 5 | <div class="portlet-body"> |
| 6 | <form class="form-horizontal" id="changePWDForm"> | 6 | <form class="form-horizontal" id="changePWDForm"> |
| 7 | + <div class="alert alert-danger display-hide"> | ||
| 8 | + <button class="close" data-close="alert"></button>您的输入有误,请检查下面的输入项 | ||
| 9 | + </div> | ||
| 7 | <div class="form-group" style="margin-top: 60px"> | 10 | <div class="form-group" style="margin-top: 60px"> |
| 8 | <label class="control-label col-md-5">原始密码: | 11 | <label class="control-label col-md-5">原始密码: |
| 9 | </label> | 12 | </label> |
| @@ -19,7 +22,7 @@ | @@ -19,7 +22,7 @@ | ||
| 19 | <div class="col-md-4"> | 22 | <div class="col-md-4"> |
| 20 | <div class="input-icon right"> | 23 | <div class="input-icon right"> |
| 21 | <i class="fa"></i> | 24 | <i class="fa"></i> |
| 22 | - <input type="password" class="form-control" name="newPWD" /> </div> | 25 | + <input type="password" class="form-control" name="newPWD" id="newPWD"/> </div> |
| 23 | </div> | 26 | </div> |
| 24 | </div> | 27 | </div> |
| 25 | <div class="form-group"> | 28 | <div class="form-group"> |
| @@ -34,7 +37,7 @@ | @@ -34,7 +37,7 @@ | ||
| 34 | <div class="form-actions"> | 37 | <div class="form-actions"> |
| 35 | <div class="row"> | 38 | <div class="row"> |
| 36 | <div class="col-md-offset-5 col-md-7"> | 39 | <div class="col-md-offset-5 col-md-7"> |
| 37 | - <button type="button" id="confirm" class="btn green">确定</button> | 40 | + <button type="submit" id="confirm" class="btn green">确定</button> |
| 38 | <button type="reset" class="btn default">取消</button> | 41 | <button type="reset" class="btn default">取消</button> |
| 39 | </div> | 42 | </div> |
| 40 | </div> | 43 | </div> |
| @@ -47,11 +50,79 @@ | @@ -47,11 +50,79 @@ | ||
| 47 | 50 | ||
| 48 | <script> | 51 | <script> |
| 49 | $(function(){ | 52 | $(function(){ |
| 50 | - $("#confirm").on("click",function(){ | ||
| 51 | - var data = $('#changePWDForm').serializeJSON(); | ||
| 52 | - $.post('/user/changePWD',data,function(msg){ | ||
| 53 | - layer.alert(msg); | ||
| 54 | - }); | ||
| 55 | - }); | 53 | + var form = $('#changePWDForm'); |
| 54 | + //表单 validate | ||
| 55 | + var error = $('.alert-danger', form); | ||
| 56 | + | ||
| 57 | + $.validator.addMethod("passwordrule", function(value, element) { | ||
| 58 | + //var userblank = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{8,16}$/; | ||
| 59 | + var userblank = /^(?=.*[a-zA-Z])(?=.*\d).{8,16}$/; | ||
| 60 | + return this.optional(element) ||(userblank.test(value)); | ||
| 61 | + }, "需包含字母、数字的8-16位字符"); | ||
| 62 | + | ||
| 63 | + //表单 validate | ||
| 64 | + form.validate({ | ||
| 65 | + errorElement : 'span', | ||
| 66 | + errorClass : 'help-block help-block-error', | ||
| 67 | + focusInvalid : false, | ||
| 68 | + rules : { | ||
| 69 | + 'newPWD' : { | ||
| 70 | + required : true, | ||
| 71 | + minlength: 8, | ||
| 72 | + maxlength: 16, | ||
| 73 | + passwordrule:true | ||
| 74 | + }, | ||
| 75 | + 'cnewPWD' : { | ||
| 76 | + equalTo: '#newPWD' | ||
| 77 | + } | ||
| 78 | + }, | ||
| 79 | + invalidHandler : function(event, validator) { | ||
| 80 | + error.show(); | ||
| 81 | + App.scrollTo(error, -200); | ||
| 82 | + }, | ||
| 83 | + | ||
| 84 | + highlight : function(element) { | ||
| 85 | + $(element).closest('.form-group').addClass('has-error'); | ||
| 86 | + }, | ||
| 87 | + | ||
| 88 | + unhighlight : function(element) { | ||
| 89 | + $(element).closest('.form-group').removeClass('has-error'); | ||
| 90 | + }, | ||
| 91 | + | ||
| 92 | + success : function(label) { | ||
| 93 | + label.closest('.form-group').removeClass('has-error'); | ||
| 94 | + }, | ||
| 95 | + | ||
| 96 | + submitHandler : function(f) { | ||
| 97 | + var params = form.serializeJSON(); | ||
| 98 | + error.hide(); | ||
| 99 | + | ||
| 100 | + var keys; | ||
| 101 | + $.ajax({ | ||
| 102 | + url: "/user/login/jCryptionKey?t="+Math.random(), | ||
| 103 | + type: "Get", | ||
| 104 | + async:false, | ||
| 105 | + data: null, | ||
| 106 | + success: function(data) { | ||
| 107 | + keys = data.publickey; | ||
| 108 | + } | ||
| 109 | + }); | ||
| 110 | + //RSA加密 | ||
| 111 | + var encrypt = new JSEncrypt(); | ||
| 112 | + encrypt.setPublicKey(keys); | ||
| 113 | + params.oldPWD = encrypt.encrypt(params.oldPWD); | ||
| 114 | + params.newPWD = encrypt.encrypt(params.newPWD); | ||
| 115 | + params.cnewPWD = encrypt.encrypt(params.cnewPWD); | ||
| 116 | + $.ajax({ | ||
| 117 | + url: '/user/changePWD', | ||
| 118 | + type: 'POST', | ||
| 119 | + traditional: true, | ||
| 120 | + data: params, | ||
| 121 | + success: function(msg){ | ||
| 122 | + layer.alert(msg); | ||
| 123 | + } | ||
| 124 | + }); | ||
| 125 | + } | ||
| 126 | + }); | ||
| 56 | }); | 127 | }); |
| 57 | </script> | 128 | </script> |
| 58 | \ No newline at end of file | 129 | \ No newline at end of file |
src/main/resources/static/pages/permission/user/list.html
| @@ -64,7 +64,7 @@ | @@ -64,7 +64,7 @@ | ||
| 64 | <td> | 64 | <td> |
| 65 | <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > | 65 | <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > |
| 66 | <i class="fa fa-search"></i> 搜索</button> | 66 | <i class="fa fa-search"></i> 搜索</button> |
| 67 | - | 67 | + |
| 68 | <button class="btn btn-sm red btn-outline filter-cancel"> | 68 | <button class="btn btn-sm red btn-outline filter-cancel"> |
| 69 | <i class="fa fa-times"></i> 重置</button> | 69 | <i class="fa fa-times"></i> 重置</button> |
| 70 | </td> | 70 | </td> |
| @@ -117,6 +117,9 @@ | @@ -117,6 +117,9 @@ | ||
| 117 | <a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a> | 117 | <a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a> |
| 118 | <!--<button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>--> | 118 | <!--<button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>--> |
| 119 | {{/if}} | 119 | {{/if}} |
| 120 | + {{if obj.isAdmin}} | ||
| 121 | + <a class="btn btn-sm red btn-outline reset_password" data-id="{{obj.id}}" data-name="{{obj.userName}}" data-pjax><i class="fa fa-undo"></i> 重置密码</a> | ||
| 122 | + {{/if}} | ||
| 120 | </td> | 123 | </td> |
| 121 | </tr> | 124 | </tr> |
| 122 | {{/each}} | 125 | {{/each}} |
| @@ -130,15 +133,49 @@ | @@ -130,15 +133,49 @@ | ||
| 130 | <script> | 133 | <script> |
| 131 | $(function(){ | 134 | $(function(){ |
| 132 | var page = 0, initPagination; | 135 | var page = 0, initPagination; |
| 133 | - var user; | 136 | + var user,isAdmin = false; |
| 134 | var icheckOptions = { | 137 | var icheckOptions = { |
| 135 | checkboxClass: 'icheckbox_flat-blue', | 138 | checkboxClass: 'icheckbox_flat-blue', |
| 136 | increaseArea: '20%' | 139 | increaseArea: '20%' |
| 137 | }; | 140 | }; |
| 138 | $.get('/user/getCurrentUser', function(data) { | 141 | $.get('/user/getCurrentUser', function(data) { |
| 139 | user = data; | 142 | user = data; |
| 143 | + var roles = user.roles; | ||
| 144 | + $.each(roles,function () { | ||
| 145 | + if(this.level == 1) | ||
| 146 | + isAdmin = true; | ||
| 147 | + }) | ||
| 148 | + | ||
| 140 | }); | 149 | }); |
| 150 | + | ||
| 141 | setTimeout(function () { | 151 | setTimeout(function () { |
| 152 | + $(document).on('click', 'a.reset_password', function () { | ||
| 153 | + var id = $(this).data('id'); | ||
| 154 | + var name = $(this).data('name'); | ||
| 155 | + swal({ | ||
| 156 | + title: "重装密码", | ||
| 157 | + text: "将登录名为"+name+"的用户,密码重置为默认密码!", | ||
| 158 | + type: "warning", | ||
| 159 | + showCancelButton: true, | ||
| 160 | + confirmButtonColor: "#DD6B55", | ||
| 161 | + confirmButtonText: "重置", | ||
| 162 | + cancelButtonText: "取消", | ||
| 163 | + closeOnConfirm: false }, | ||
| 164 | + function(){ | ||
| 165 | + $.post('/user/resetPassword',{'id':id},function(result){ | ||
| 166 | + if(result.status=='SUCCESS') { | ||
| 167 | + // 弹出添加成功提示消息 | ||
| 168 | + swal("登录名为"+name+"的用户密码重置成功!", "success"); | ||
| 169 | + } else if(result.status=='ERROR') { | ||
| 170 | + // 弹出添加失败提示消息 | ||
| 171 | + swal("重置失败!", result.msg+",请联系开发人员!", "ERROR"); | ||
| 172 | + } | ||
| 173 | + // loadPage('list.html'); | ||
| 174 | + // 发布后刷新页面 | ||
| 175 | + jsDoQuery(getParams(), true); | ||
| 176 | + }); | ||
| 177 | + }); | ||
| 178 | + }); | ||
| 142 | jsDoQuery(null,true); | 179 | jsDoQuery(null,true); |
| 143 | 180 | ||
| 144 | //重置 | 181 | //重置 |
| @@ -147,45 +184,63 @@ $(function(){ | @@ -147,45 +184,63 @@ $(function(){ | ||
| 147 | jsDoQuery(null, true); | 184 | jsDoQuery(null, true); |
| 148 | }); | 185 | }); |
| 149 | 186 | ||
| 187 | + function getParams() { | ||
| 188 | + var cells = $('tr.filter')[0].cells | ||
| 189 | + ,params = {} | ||
| 190 | + ,name; | ||
| 191 | + $.each(cells, function(i, cell){ | ||
| 192 | + var items = $('input,select', cell); | ||
| 193 | + for(var j = 0, item; item = items[j++];){ | ||
| 194 | + name = $(item).attr('name'); | ||
| 195 | + if(name){ | ||
| 196 | + params[name] = $(item).val(); | ||
| 197 | + } | ||
| 198 | + } | ||
| 199 | + }); | ||
| 200 | + return params; | ||
| 201 | + } | ||
| 202 | + | ||
| 150 | //提交 | 203 | //提交 |
| 151 | $('tr.filter .filter-submit').on('click', function(){ | 204 | $('tr.filter .filter-submit').on('click', function(){ |
| 152 | - var cells = $('tr.filter')[0].cells | ||
| 153 | - ,params = {} | ||
| 154 | - ,name; | ||
| 155 | - $.each(cells, function(i, cell){ | ||
| 156 | - var items = $('input,select', cell); | ||
| 157 | - for(var j = 0, item; item = items[j++];){ | ||
| 158 | - name = $(item).attr('name'); | ||
| 159 | - if(name){ | ||
| 160 | - params[name] = $(item).val(); | ||
| 161 | - } | ||
| 162 | - } | ||
| 163 | - }); | ||
| 164 | - page = 0; | ||
| 165 | - jsDoQuery(params, true); | 205 | + jsDoQuery(getParams(), true); |
| 166 | }); | 206 | }); |
| 167 | 207 | ||
| 168 | /* | 208 | /* |
| 169 | * 获取数据 p: 要提交的参数, pagination: 是否重新分页 | 209 | * 获取数据 p: 要提交的参数, pagination: 是否重新分页 |
| 170 | */ | 210 | */ |
| 171 | function jsDoQuery(p, pagination){ | 211 | function jsDoQuery(p, pagination){ |
| 212 | + var roles = new Map(); | ||
| 213 | + // 查询下级角色 | ||
| 214 | + $.ajax({ | ||
| 215 | + url: "/role/findSubordinate", | ||
| 216 | + type: "Get", | ||
| 217 | + async:false, | ||
| 218 | + data: null, | ||
| 219 | + success: function (rs) { | ||
| 220 | + if(rs.status == "SUCCESS"){ | ||
| 221 | + $.each(rs.list,function(i,obj){ | ||
| 222 | + roles[obj.id] = obj; | ||
| 223 | + }); | ||
| 224 | + } | ||
| 225 | + } | ||
| 226 | + }); | ||
| 172 | var params = {}; | 227 | var params = {}; |
| 173 | if(p) | 228 | if(p) |
| 174 | params = p; | 229 | params = p; |
| 175 | //更新时间排序 | 230 | //更新时间排序 |
| 176 | params['order'] = 'lastLoginDate'; | 231 | params['order'] = 'lastLoginDate'; |
| 177 | params['page'] = page; | 232 | params['page'] = page; |
| 178 | - params['roles[0].pic_ne'] = 1; | 233 | + // params['id_eq'] = "1"; |
| 179 | var i = layer.load(2); | 234 | var i = layer.load(2); |
| 180 | $get('/user' ,params, function(data){ | 235 | $get('/user' ,params, function(data){ |
| 181 | var list = data.content; | 236 | var list = data.content; |
| 182 | - var errorList=[]; | ||
| 183 | $.each(list, function(i, obj) { | 237 | $.each(list, function(i, obj) { |
| 184 | - if(obj.roles[0].level > user.roles[0].level){ | 238 | + if(roles[obj.roles[0].id] != null && roles[obj.roles[0].id] != undefined){ |
| 185 | obj.isEdit = 0; | 239 | obj.isEdit = 0; |
| 186 | } else{ | 240 | } else{ |
| 187 | obj.isEdit = 1; | 241 | obj.isEdit = 1; |
| 188 | } | 242 | } |
| 243 | + obj.isAdmin = isAdmin; | ||
| 189 | obj.lastLoginDate = moment(obj.lastLoginDate).format("YYYY-MM-DD HH:mm:ss"); | 244 | obj.lastLoginDate = moment(obj.lastLoginDate).format("YYYY-MM-DD HH:mm:ss"); |
| 190 | }); | 245 | }); |
| 191 | 246 |
src/main/resources/static/pages/report/sheet/intervalCount.html
| @@ -79,7 +79,7 @@ | @@ -79,7 +79,7 @@ | ||
| 79 | <td>晚高峰次数</td> | 79 | <td>晚高峰次数</td> |
| 80 | <td>低谷次数</td> | 80 | <td>低谷次数</td> |
| 81 | <td>全日班次数</td> | 81 | <td>全日班次数</td> |
| 82 | - <td>全日发生率</td> | 82 | + <td>万班次发生率</td> |
| 83 | <td>最大间隔时间</td> | 83 | <td>最大间隔时间</td> |
| 84 | <td>查看</td> | 84 | <td>查看</td> |
| 85 | </tr> | 85 | </tr> |
| @@ -125,7 +125,7 @@ | @@ -125,7 +125,7 @@ | ||
| 125 | <td>晚高峰次数</td> | 125 | <td>晚高峰次数</td> |
| 126 | <td>低谷次数</td> | 126 | <td>低谷次数</td> |
| 127 | <td>全日班次数</td> | 127 | <td>全日班次数</td> |
| 128 | - <td>全日发生率</td> | 128 | + <td>万班次发生率</td> |
| 129 | <td>最大间隔</td> | 129 | <td>最大间隔</td> |
| 130 | <td>查看</td> | 130 | <td>查看</td> |
| 131 | </tr> | 131 | </tr> |
| @@ -467,7 +467,7 @@ | @@ -467,7 +467,7 @@ | ||
| 467 | {{/each}} | 467 | {{/each}} |
| 468 | {{if list.length == 0}} | 468 | {{if list.length == 0}} |
| 469 | <tr> | 469 | <tr> |
| 470 | - <td colspan="10"><h6 class="muted">没有找到相关数据</h6></td> | 470 | + <td colspan="12"><h6 class="muted">没有找到相关数据</h6></td> |
| 471 | </tr> | 471 | </tr> |
| 472 | {{/if}} | 472 | {{/if}} |
| 473 | </script> | 473 | </script> |
| @@ -521,7 +521,7 @@ | @@ -521,7 +521,7 @@ | ||
| 521 | {{/each}} | 521 | {{/each}} |
| 522 | {{if list.length == 0}} | 522 | {{if list.length == 0}} |
| 523 | <tr> | 523 | <tr> |
| 524 | - <td colspan="11"><h6 class="muted">没有找到相关数据</h6></td> | 524 | + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td> |
| 525 | </tr> | 525 | </tr> |
| 526 | {{/if}} | 526 | {{/if}} |
| 527 | </script> | 527 | </script> |
| @@ -550,13 +550,9 @@ | @@ -550,13 +550,9 @@ | ||
| 550 | {{/each}} | 550 | {{/each}} |
| 551 | {{if list.length == 0}} | 551 | {{if list.length == 0}} |
| 552 | <tr> | 552 | <tr> |
| 553 | - <td colspan="7"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 554 | - </tr> | ||
| 555 | - {{/if}} | ||
| 556 | - {{if list.length == 0}} | ||
| 557 | - <tr> | ||
| 558 | - <td colspan="7"><h6 class="muted">没有找到相关数据</h6></td> | 553 | + <td colspan="11"><h6 class="muted">没有找到相关数据</h6></td> |
| 559 | </tr> | 554 | </tr> |
| 560 | {{/if}} | 555 | {{/if}} |
| 556 | + | ||
| 561 | </script> | 557 | </script> |
| 562 | 558 |
src/main/resources/static/real_control_v2/fragments/north/nav/safeDriving.html
| @@ -117,10 +117,16 @@ | @@ -117,10 +117,16 @@ | ||
| 117 | var query = function() { | 117 | var query = function() { |
| 118 | scanFlag = false; | 118 | scanFlag = false; |
| 119 | var data = form.serializeJSON(); | 119 | var data = form.serializeJSON(); |
| 120 | + debugger; | ||
| 121 | + var lines = new Array(); | ||
| 122 | + for (var i = 0;i < gb_data_basic.activeLines.length;i++) { | ||
| 123 | + lines.push(gb_data_basic.activeLines[i].lineCode); | ||
| 124 | + } | ||
| 125 | + data.lines = lines.join(','); | ||
| 120 | data.page = page; | 126 | data.page = page; |
| 121 | data.size = pageSize; | 127 | data.size = pageSize; |
| 122 | 128 | ||
| 123 | - gb_common.$get('/gps/safeDriv', data, function (rs) { | 129 | + gb_common.$post('/gps/safeDriv', data, function (rs) { |
| 124 | //数据转换 | 130 | //数据转换 |
| 125 | var code2Name=gb_data_basic.lineCode2NameAll(), url,stm, p; | 131 | var code2Name=gb_data_basic.lineCode2NameAll(), url,stm, p; |
| 126 | $.each(rs.list, function(){ | 132 | $.each(rs.list, function(){ |