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 | 158 | if(map.get("fgsdmSing")!=null){ |
| 159 | 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 | 166 | Map<String, Object> resMap = new HashMap<String, Object>(); |
| 163 | 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 | 170 | Map<String, Object> temp = new HashMap<String, Object>(); |
| 167 | 171 | temp.put("i", "序号"); | ... | ... |
src/main/java/com/bsth/controller/calc/CalcMixController.java
| ... | ... | @@ -81,7 +81,11 @@ public class CalcMixController { |
| 81 | 81 | if(map.get("fgsdmSing")!=null){ |
| 82 | 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 | 68 | public Map<String, Object> roleInfo(@RequestParam Integer id){ |
| 69 | 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 | 260 | public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) { |
| 261 | 261 | SysUser sysUser = SecurityUtils.getCurrentUser(); |
| 262 | 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 | 272 | if (new BCryptPasswordEncoder(4).matches(oldPWD, sysUser.getPassword())) { |
| 264 | 273 | if (oldPWD.equals(newPWD)) { |
| 265 | 274 | msg = "新密码不能跟原始密码一样!"; |
| ... | ... | @@ -282,8 +291,16 @@ public class UserController extends BaseController<SysUser, Integer> { |
| 282 | 291 | return sysUserService.register(u); |
| 283 | 292 | } |
| 284 | 293 | |
| 294 | + // 查询用户下所有下级角色 | |
| 285 | 295 | @RequestMapping(value = "/all_distinct") |
| 286 | 296 | public List<SysUser> findAll_distinct() { |
| 287 | 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 | 2 | |
| 3 | 3 | import com.bsth.data.gpsdata_v2.DataHandleProcess; |
| 4 | 4 | import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread; |
| 5 | + | |
| 6 | +import org.slf4j.Logger; | |
| 7 | +import org.slf4j.LoggerFactory; | |
| 5 | 8 | import org.springframework.stereotype.Component; |
| 6 | 9 | |
| 7 | 10 | /** |
| ... | ... | @@ -9,11 +12,15 @@ import org.springframework.stereotype.Component; |
| 9 | 12 | */ |
| 10 | 13 | @Component |
| 11 | 14 | public class ThreadMonotor extends Thread{ |
| 15 | + | |
| 16 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | |
| 12 | 17 | |
| 13 | 18 | @Override |
| 14 | 19 | public void run() { |
| 15 | 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 | 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 | 4 | import com.bsth.data.gpsdata_v2.cache.GpsCacheData; |
| 5 | 5 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; |
| 6 | 6 | import com.bsth.data.gpsdata_v2.handlers.*; |
| 7 | +import com.bsth.email.SendEmailController; | |
| 8 | +import com.bsth.email.entity.EmailBean; | |
| 7 | 9 | import com.google.common.collect.ArrayListMultimap; |
| 8 | 10 | import org.apache.commons.lang3.StringUtils; |
| 9 | 11 | import org.slf4j.Logger; |
| ... | ... | @@ -15,6 +17,8 @@ import java.util.*; |
| 15 | 17 | import java.util.concurrent.CountDownLatch; |
| 16 | 18 | import java.util.concurrent.ExecutorService; |
| 17 | 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 | 41 | ReverseRouteProcess reverseRouteProcess; |
| 38 | 42 | @Autowired |
| 39 | 43 | GpsRealData gpsRealData; |
| 44 | + // 发送邮件 | |
| 45 | + @Autowired | |
| 46 | + private SendEmailController sendEmailController; | |
| 40 | 47 | |
| 41 | 48 | |
| 42 | 49 | static Logger logger = LoggerFactory.getLogger(DataHandleProcess.class); |
| 43 | 50 | |
| 44 | 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 | 65 | public static CountDownLatch count; |
| 48 | 66 | |
| 49 | 67 | static long lastTime; |
| ... | ... | @@ -51,7 +69,22 @@ public class DataHandleProcess { |
| 51 | 69 | public static boolean isBlock() { |
| 52 | 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 | 88 | public void handle(List<GpsEntity> list) { |
| 56 | 89 | try { |
| 57 | 90 | if (list.size() == 0) |
| ... | ... | @@ -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 | 148 | //加入实时gps对照 |
| 91 | 149 | for (GpsEntity gps : list) |
| ... | ... | @@ -115,6 +173,7 @@ public class DataHandleProcess { |
| 115 | 173 | Collections.sort(list, comp); |
| 116 | 174 | GpsEntity gps; |
| 117 | 175 | for(int i = 0,len = list.size(); i< len ;i ++){ |
| 176 | + if (Thread.currentThread().isInterrupted()) break; | |
| 118 | 177 | gps = list.get(i); |
| 119 | 178 | |
| 120 | 179 | try { | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/load/GatewayHttpLoader.java
| ... | ... | @@ -75,7 +75,7 @@ public class GatewayHttpLoader implements ApplicationContextAware{ |
| 75 | 75 | while ((str = br.readLine()) != null) |
| 76 | 76 | sb.append(str); |
| 77 | 77 | |
| 78 | - logger.info("gps:" + sb.toString()); | |
| 78 | + logger.debug("gps:" + sb.toString()); | |
| 79 | 79 | list = JSON.parseArray(JSON.parseObject(sb.toString()).getString("data"), GpsEntity.class); |
| 80 | 80 | //过滤掉无效的点位 |
| 81 | 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 | 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 | 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 | 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 | 10 | |
| 11 | 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 | 123 | } |
| 124 | 124 | }); |
| 125 | 125 | }else{ |
| 126 | + //统计信息中需要查询所有班次 | |
| 127 | +// and djg_all >0 | |
| 126 | 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 | 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 | 131 | if(line.equals("")){ |
| 130 | 132 | if(fgs.equals("")){ |
| 131 | 133 | sql +=" and gsbm = '"+gs+"'"; |
| ... | ... | @@ -150,12 +152,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege |
| 150 | 152 | m.put("id", rs.getInt("id")); |
| 151 | 153 | int djgAll=rs.getInt("djgAll"); |
| 152 | 154 | int bcs=rs.getInt("bcs"); |
| 153 | - //全日发生率 (大间隔次数/全日班次数) | |
| 155 | + //万班次发生率 (大间隔次数/全日班次数*10000) | |
| 154 | 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 | 159 | }else{ |
| 158 | - m.put("fsl", "0.0%"); | |
| 160 | + m.put("fsl", "0.0"); | |
| 159 | 161 | } |
| 160 | 162 | m.put("djgAll", rs.getString("djgAll")); |
| 161 | 163 | m.put("djgGf", rs.getString("djgGf")); |
| ... | ... | @@ -243,12 +245,12 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Intege |
| 243 | 245 | m.put("djgDg", t.getDjgDg()); |
| 244 | 246 | int djgAll=t.getDjgAll(); |
| 245 | 247 | int bcs=t.getBcs(); |
| 246 | - //全日发生率 (大间隔次数/全日班次数) | |
| 248 | + //全日发生率 (大间隔次数/全日班次数*10000) 万班次发生率 | |
| 247 | 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 | 252 | }else{ |
| 251 | - m.put("fsl", "0.0%"); | |
| 253 | + m.put("fsl", "0.0"); | |
| 252 | 254 | } |
| 253 | 255 | m.put("bcs", t.getBcs()); |
| 254 | 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 | 160 | public List<Map<String, Object>> singledatatj(String line, |
| 161 | 161 | String date, String date2, |
| 162 | 162 | String tjtype, String cont, |
| 163 | - String gsdm, String fgsdm) { | |
| 163 | + String gsdm, String fgsdm, String sfdc) { | |
| 164 | 164 | |
| 165 | 165 | List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); |
| 166 | 166 | List<CalcWaybill> list = null; |
| ... | ... | @@ -174,7 +174,13 @@ public class CalcMixServiceImpl implements CalcMixService { |
| 174 | 174 | list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont); |
| 175 | 175 | } else if("车辆自编号".equals(tjtype)){ |
| 176 | 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 | 186 | List<CalcWaybill> calcList = new ArrayList<CalcWaybill>(); |
| ... | ... | @@ -267,7 +273,7 @@ public class CalcMixServiceImpl implements CalcMixService { |
| 267 | 273 | + linesql |
| 268 | 274 | + " union" |
| 269 | 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 | 277 | + linesql; |
| 272 | 278 | List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() { |
| 273 | 279 | @Override | ... | ... |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| ... | ... | @@ -13,6 +13,7 @@ import java.text.DecimalFormat; |
| 13 | 13 | import java.text.ParseException; |
| 14 | 14 | import java.text.SimpleDateFormat; |
| 15 | 15 | import java.util.ArrayList; |
| 16 | +import java.util.Arrays; | |
| 16 | 17 | import java.util.Calendar; |
| 17 | 18 | import java.util.Collections; |
| 18 | 19 | import java.util.Comparator; |
| ... | ... | @@ -1173,7 +1174,7 @@ public class GpsServiceImpl implements GpsService { |
| 1173 | 1174 | } |
| 1174 | 1175 | //过滤数据 |
| 1175 | 1176 | for (SafeDriv sd : list) { |
| 1176 | - if (fieldEquals(fs, sd, map)) | |
| 1177 | + if (isSpecialLines(sd, map) && fieldEquals(fs, sd, map)) | |
| 1177 | 1178 | rs.add(sd); |
| 1178 | 1179 | } |
| 1179 | 1180 | |
| ... | ... | @@ -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 | 1313 | public boolean fieldEquals(List<Field> fs, Object obj, Map<String, Object> map) { |
| 1299 | 1314 | try { | ... | ... |
src/main/java/com/bsth/service/sys/RoleService.java
| 1 | 1 | package com.bsth.service.sys; |
| 2 | 2 | |
| 3 | -import java.util.List; | |
| 4 | -import java.util.Map; | |
| 5 | - | |
| 6 | 3 | import com.bsth.entity.sys.Role; |
| 7 | -import com.bsth.entity.sys.SysUser; | |
| 8 | 4 | import com.bsth.service.BaseService; |
| 9 | 5 | |
| 6 | +import java.util.List; | |
| 7 | +import java.util.Map; | |
| 8 | + | |
| 10 | 9 | public interface RoleService extends BaseService<Role, Integer>{ |
| 11 | 10 | |
| 12 | 11 | Map<String, Object> findSubordinate(); |
| ... | ... | @@ -18,4 +17,6 @@ public interface RoleService extends BaseService<Role, Integer>{ |
| 18 | 17 | Map<String, Object> roleInfo(Integer id); |
| 19 | 18 | |
| 20 | 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 | 2 | |
| 3 | 3 | import com.bsth.entity.sys.SysUser; |
| 4 | 4 | import com.bsth.service.BaseService; |
| 5 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 5 | 6 | |
| 6 | 7 | import java.util.List; |
| 7 | 8 | import java.util.Map; |
| ... | ... | @@ -17,4 +18,6 @@ public interface SysUserService extends BaseService<SysUser, Integer>{ |
| 17 | 18 | Map<String,Object> register(SysUser u); |
| 18 | 19 | |
| 19 | 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 | 96 | // ComparatorSysrole(rootlist); |
| 97 | 97 | map.put("list", rsRoleList); |
| 98 | 98 | map.put("status", ResponseCode.SUCCESS); |
| 99 | + map.put("msg", "成功"); | |
| 99 | 100 | } catch (Exception e) { |
| 100 | 101 | map.put("status", ResponseCode.ERROR); |
| 102 | + map.put("msg", e); | |
| 101 | 103 | logger.error("error",e); |
| 102 | 104 | } |
| 103 | 105 | return map; |
| ... | ... | @@ -282,4 +284,12 @@ public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements |
| 282 | 284 | public List<Role> findAllByIds(String ids) { |
| 283 | 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 | 1 | package com.bsth.service.sys.impl; |
| 2 | 2 | |
| 3 | -import com.alibaba.fastjson.JSONArray; | |
| 4 | 3 | import com.bsth.common.ResponseCode; |
| 4 | +import com.bsth.controller.sys.util.RSAUtils; | |
| 5 | 5 | import com.bsth.entity.sys.Role; |
| 6 | 6 | import com.bsth.entity.sys.SysUser; |
| 7 | 7 | import com.bsth.repository.sys.SysUserRepository; |
| ... | ... | @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; |
| 16 | 16 | import org.springframework.beans.factory.annotation.Autowired; |
| 17 | 17 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| 18 | 18 | import org.springframework.stereotype.Service; |
| 19 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 19 | 20 | |
| 20 | 21 | import java.util.ArrayList; |
| 21 | 22 | import java.util.HashMap; |
| ... | ... | @@ -65,20 +66,45 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem |
| 65 | 66 | @Override |
| 66 | 67 | public Map<String, Object> register(SysUser u) { |
| 67 | 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 | 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 | 106 | rs.put("status", ResponseCode.ERROR); |
| 81 | - rs.put("msg", e.getMessage()); | |
| 107 | + rs.put("msg", "用户权限不够,请联系管理员!"); | |
| 82 | 108 | } |
| 83 | 109 | return rs; |
| 84 | 110 | } |
| ... | ... | @@ -122,8 +148,36 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUser, Integer> implem |
| 122 | 148 | } catch (Exception e){ |
| 123 | 149 | logger.error("error", e); |
| 124 | 150 | } |
| 125 | - | |
| 126 | - | |
| 127 | 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 | 630 | <script |
| 631 | 631 | src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda" |
| 632 | 632 | data-exclude=1></script> |
| 633 | -<!-- echarts4 误删 --> | |
| 633 | +<!-- echarts4 --> | |
| 634 | 634 | <script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script> |
| 635 | 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 | 639 | </body> |
| 638 | 640 | </html> |
| 639 | 641 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/forms/calc/calcsingledata.html
| ... | ... | @@ -40,6 +40,14 @@ |
| 40 | 40 | <span class="item-label" style="width: 80px;">线路: </span> |
| 41 | 41 | <select class="form-control" name="line" id="line" style="width: 140px;"></select> |
| 42 | 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 | 51 | <div style="margin-top: 10px"></div> |
| 44 | 52 | <div style="display: inline-block;margin-left: 3px;"> |
| 45 | 53 | <span class="item-label" style="width: 140px;">开始时间: </span> |
| ... | ... | @@ -99,13 +107,10 @@ |
| 99 | 107 | // 关闭左侧栏 |
| 100 | 108 | if (!$('body').hasClass('page-sidebar-closed')) |
| 101 | 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 | 112 | var d = new Date(); |
| 113 | + d.setTime(d.getTime() - 4*1000*60*60*24); | |
| 109 | 114 | var year = d.getFullYear(); |
| 110 | 115 | var month = d.getMonth() + 1; |
| 111 | 116 | var day = d.getDate(); |
| ... | ... | @@ -113,7 +118,20 @@ |
| 113 | 118 | month = "0" + month; |
| 114 | 119 | if(day < 10) |
| 115 | 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 | 136 | var fage=false; |
| 119 | 137 | var xlList; |
| ... | ... | @@ -193,6 +211,8 @@ |
| 193 | 211 | } |
| 194 | 212 | }); |
| 195 | 213 | |
| 214 | + $("#sfdcDiv").hide(); | |
| 215 | + | |
| 196 | 216 | var cont = "驾驶员", cont1 = "", cont2 = "", cont3 = ""; |
| 197 | 217 | $("#tjtype").on("change",function(){ |
| 198 | 218 | if(cont == "驾驶员"){ |
| ... | ... | @@ -205,10 +225,13 @@ |
| 205 | 225 | cont = $("#tjtype").val(); |
| 206 | 226 | if($("#tjtype").val() == "驾驶员"){ |
| 207 | 227 | $("#cont").val(cont1); |
| 228 | + $("#sfdcDiv").hide(); | |
| 208 | 229 | } else if($("#tjtype").val() == "售票员"){ |
| 209 | 230 | $("#cont").val(cont2); |
| 231 | + $("#sfdcDiv").hide(); | |
| 210 | 232 | } else if($("#tjtype").val() == "车辆自编号"){ |
| 211 | 233 | $("#cont").val(cont3); |
| 234 | + $("#sfdcDiv").show(); | |
| 212 | 235 | } |
| 213 | 236 | }); |
| 214 | 237 | |
| ... | ... | @@ -229,9 +252,10 @@ |
| 229 | 252 | var fgsdmSing = $("#fgsdmSing").val(); |
| 230 | 253 | var tjtype=$("#tjtype").val(); |
| 231 | 254 | var cont=$("#cont").val(); |
| 255 | + var sfdc=$("#sfdc").val(); | |
| 232 | 256 | var params = {}; |
| 233 | 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 | 259 | layer.close(i); |
| 236 | 260 | var singledata = template('singledata',{list:result}); |
| 237 | 261 | // 把渲染好的模版html文本追加到表格中 |
| ... | ... | @@ -247,11 +271,12 @@ |
| 247 | 271 | var fgsdmSing = $("#fgsdmSing").val(); |
| 248 | 272 | var tjtype=$("#tjtype").val(); |
| 249 | 273 | var cont=$("#cont").val(); |
| 274 | + var sfdc=$("#sfdc").val(); | |
| 250 | 275 | var lineName = $('#line option:selected').text(); |
| 251 | 276 | if(lineName == "全部线路") |
| 252 | 277 | lineName = $('#fgsdmSing option:selected').text(); |
| 253 | 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 | 280 | var dateTime = ""; |
| 256 | 281 | if(startDate == endDate){ |
| 257 | 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 | 59 | } |
| 60 | 60 | </style> |
| 61 | 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 | 63 | <br><br> |
| 64 | 64 | <ul > |
| 65 | 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 | 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 | 69 | </ul> |
| 98 | 70 | |
| 99 | 71 | </div> | ... | ... |
src/main/resources/static/pages/permission/user/add.html
| ... | ... | @@ -42,7 +42,7 @@ |
| 42 | 42 | <label class="col-md-3 control-label">密码</label> |
| 43 | 43 | <div class="col-md-4"> |
| 44 | 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 | 46 | </div> |
| 47 | 47 | </div> |
| 48 | 48 | <div class="form-group"> |
| ... | ... | @@ -100,18 +100,46 @@ |
| 100 | 100 | }); |
| 101 | 101 | });*/ |
| 102 | 102 | |
| 103 | - // 查询下级角色 | |
| 103 | + // 查询下级角色 | |
| 104 | 104 | $.get('/role/findSubordinate', function (rs) { |
| 105 | 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 | 118 | $.each(rs.list,function(i,obj){ |
| 107 | 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 | 134 | var form = $('#user_add_form'); |
| 113 | 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 | 143 | //表单 validate |
| 116 | 144 | form.validate({ |
| 117 | 145 | errorElement : 'span', |
| ... | ... | @@ -128,13 +156,14 @@ |
| 128 | 156 | }, |
| 129 | 157 | 'password' : { |
| 130 | 158 | required : true, |
| 131 | - minlength: 6, | |
| 132 | - maxlength: 25 | |
| 159 | + minlength: 8, | |
| 160 | + maxlength: 16, | |
| 161 | + passwordrule: true | |
| 133 | 162 | }, |
| 134 | 163 | 'cfmPassword' : { |
| 135 | - equalTo: '#password' | |
| 164 | + equalTo: '#password', | |
| 136 | 165 | }, |
| 137 | - 'role' : { | |
| 166 | + 'roles' : { | |
| 138 | 167 | required : true, |
| 139 | 168 | minlength: 1 |
| 140 | 169 | } |
| ... | ... | @@ -160,6 +189,21 @@ |
| 160 | 189 | var params = form.serializeJSON(); |
| 161 | 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 | 207 | $.ajax({ |
| 164 | 208 | url: '/user/register', |
| 165 | 209 | type: 'POST', |
| ... | ... | @@ -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 | 4 | <div class="portlet light portlet-fit portlet-form bordered"> |
| 5 | 5 | <div class="portlet-body"> |
| 6 | 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 | 10 | <div class="form-group" style="margin-top: 60px"> |
| 8 | 11 | <label class="control-label col-md-5">原始密码: |
| 9 | 12 | </label> |
| ... | ... | @@ -19,7 +22,7 @@ |
| 19 | 22 | <div class="col-md-4"> |
| 20 | 23 | <div class="input-icon right"> |
| 21 | 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 | 26 | </div> |
| 24 | 27 | </div> |
| 25 | 28 | <div class="form-group"> |
| ... | ... | @@ -34,7 +37,7 @@ |
| 34 | 37 | <div class="form-actions"> |
| 35 | 38 | <div class="row"> |
| 36 | 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 | 41 | <button type="reset" class="btn default">取消</button> |
| 39 | 42 | </div> |
| 40 | 43 | </div> |
| ... | ... | @@ -47,11 +50,79 @@ |
| 47 | 50 | |
| 48 | 51 | <script> |
| 49 | 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 | 128 | </script> |
| 58 | 129 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/permission/user/list.html
| ... | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | <td> |
| 65 | 65 | <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > |
| 66 | 66 | <i class="fa fa-search"></i> 搜索</button> |
| 67 | - | |
| 67 | + | |
| 68 | 68 | <button class="btn btn-sm red btn-outline filter-cancel"> |
| 69 | 69 | <i class="fa fa-times"></i> 重置</button> |
| 70 | 70 | </td> |
| ... | ... | @@ -117,6 +117,9 @@ |
| 117 | 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 | 118 | <!--<button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>--> |
| 119 | 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 | 123 | </td> |
| 121 | 124 | </tr> |
| 122 | 125 | {{/each}} |
| ... | ... | @@ -130,15 +133,49 @@ |
| 130 | 133 | <script> |
| 131 | 134 | $(function(){ |
| 132 | 135 | var page = 0, initPagination; |
| 133 | - var user; | |
| 136 | + var user,isAdmin = false; | |
| 134 | 137 | var icheckOptions = { |
| 135 | 138 | checkboxClass: 'icheckbox_flat-blue', |
| 136 | 139 | increaseArea: '20%' |
| 137 | 140 | }; |
| 138 | 141 | $.get('/user/getCurrentUser', function(data) { |
| 139 | 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 | 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 | 179 | jsDoQuery(null,true); |
| 143 | 180 | |
| 144 | 181 | //重置 |
| ... | ... | @@ -147,45 +184,63 @@ $(function(){ |
| 147 | 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 | 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 | 209 | * 获取数据 p: 要提交的参数, pagination: 是否重新分页 |
| 170 | 210 | */ |
| 171 | 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 | 227 | var params = {}; |
| 173 | 228 | if(p) |
| 174 | 229 | params = p; |
| 175 | 230 | //更新时间排序 |
| 176 | 231 | params['order'] = 'lastLoginDate'; |
| 177 | 232 | params['page'] = page; |
| 178 | - params['roles[0].pic_ne'] = 1; | |
| 233 | + // params['id_eq'] = "1"; | |
| 179 | 234 | var i = layer.load(2); |
| 180 | 235 | $get('/user' ,params, function(data){ |
| 181 | 236 | var list = data.content; |
| 182 | - var errorList=[]; | |
| 183 | 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 | 239 | obj.isEdit = 0; |
| 186 | 240 | } else{ |
| 187 | 241 | obj.isEdit = 1; |
| 188 | 242 | } |
| 243 | + obj.isAdmin = isAdmin; | |
| 189 | 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 | 79 | <td>晚高峰次数</td> |
| 80 | 80 | <td>低谷次数</td> |
| 81 | 81 | <td>全日班次数</td> |
| 82 | - <td>全日发生率</td> | |
| 82 | + <td>万班次发生率</td> | |
| 83 | 83 | <td>最大间隔时间</td> |
| 84 | 84 | <td>查看</td> |
| 85 | 85 | </tr> |
| ... | ... | @@ -125,7 +125,7 @@ |
| 125 | 125 | <td>晚高峰次数</td> |
| 126 | 126 | <td>低谷次数</td> |
| 127 | 127 | <td>全日班次数</td> |
| 128 | - <td>全日发生率</td> | |
| 128 | + <td>万班次发生率</td> | |
| 129 | 129 | <td>最大间隔</td> |
| 130 | 130 | <td>查看</td> |
| 131 | 131 | </tr> |
| ... | ... | @@ -467,7 +467,7 @@ |
| 467 | 467 | {{/each}} |
| 468 | 468 | {{if list.length == 0}} |
| 469 | 469 | <tr> |
| 470 | - <td colspan="10"><h6 class="muted">没有找到相关数据</h6></td> | |
| 470 | + <td colspan="12"><h6 class="muted">没有找到相关数据</h6></td> | |
| 471 | 471 | </tr> |
| 472 | 472 | {{/if}} |
| 473 | 473 | </script> |
| ... | ... | @@ -521,7 +521,7 @@ |
| 521 | 521 | {{/each}} |
| 522 | 522 | {{if list.length == 0}} |
| 523 | 523 | <tr> |
| 524 | - <td colspan="11"><h6 class="muted">没有找到相关数据</h6></td> | |
| 524 | + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td> | |
| 525 | 525 | </tr> |
| 526 | 526 | {{/if}} |
| 527 | 527 | </script> |
| ... | ... | @@ -550,13 +550,9 @@ |
| 550 | 550 | {{/each}} |
| 551 | 551 | {{if list.length == 0}} |
| 552 | 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 | 554 | </tr> |
| 560 | 555 | {{/if}} |
| 556 | + | |
| 561 | 557 | </script> |
| 562 | 558 | ... | ... |
src/main/resources/static/real_control_v2/fragments/north/nav/safeDriving.html
| ... | ... | @@ -117,10 +117,16 @@ |
| 117 | 117 | var query = function() { |
| 118 | 118 | scanFlag = false; |
| 119 | 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 | 126 | data.page = page; |
| 121 | 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 | 131 | var code2Name=gb_data_basic.lineCode2NameAll(), url,stm, p; |
| 126 | 132 | $.each(rs.list, function(){ | ... | ... |