Commit 66e8a7cf950624f63799a57bb9d6eb21e8ede13d

Authored by 游瑞烽
2 parents 27edb22b 5aff71c2

重置密码,添加用户和修改密码是前端加密

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&lt;Role, Integer&gt;{
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&lt;SysUser, Integer&gt; {
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&lt;SysUser, Integer&gt; {
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&lt;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&lt;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&lt;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&lt;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&lt;Role, Integer&gt;{
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&lt;SysUser, Integer&gt;{
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&lt;Role, Integer&gt; 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&lt;Role, Integer&gt; 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&lt;SysUser, Integer&gt; 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&lt;SysUser, Integer&gt; 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(){
... ...