098bac9cc4c1b62a8ea97c6b404e4ffc5c1fa3fb.svn-base 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381
  1. package org.jeecg.modules.system.controller;
  2. import cn.hutool.core.util.RandomUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.apache.shiro.SecurityUtils;
  14. import org.apache.shiro.authz.annotation.RequiresPermissions;
  15. import org.apache.shiro.authz.annotation.RequiresRoles;
  16. import org.jeecg.common.api.vo.Result;
  17. import org.jeecg.common.aspect.annotation.PermissionData;
  18. import org.jeecg.common.constant.CommonConstant;
  19. import org.jeecg.common.system.api.ISysBaseAPI;
  20. import org.jeecg.modules.base.service.BaseCommonService;
  21. import org.jeecg.common.system.query.QueryGenerator;
  22. import org.jeecg.common.system.util.JwtUtil;
  23. import org.jeecg.common.system.vo.LoginUser;
  24. import org.jeecg.common.util.*;
  25. import org.jeecg.modules.system.entity.*;
  26. import org.jeecg.modules.system.model.DepartIdModel;
  27. import org.jeecg.modules.system.model.SysUserSysDepartModel;
  28. import org.jeecg.modules.system.service.*;
  29. import org.jeecg.modules.system.vo.SysDepartUsersVO;
  30. import org.jeecg.modules.system.vo.SysUserRoleVO;
  31. import org.jeecgframework.poi.excel.ExcelImportUtil;
  32. import org.jeecgframework.poi.excel.def.NormalExcelConstants;
  33. import org.jeecgframework.poi.excel.entity.ExportParams;
  34. import org.jeecgframework.poi.excel.entity.ImportParams;
  35. import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.beans.factory.annotation.Value;
  38. import org.springframework.web.bind.annotation.*;
  39. import org.springframework.web.multipart.MultipartFile;
  40. import org.springframework.web.multipart.MultipartHttpServletRequest;
  41. import org.springframework.web.servlet.ModelAndView;
  42. import javax.annotation.Resource;
  43. import javax.servlet.http.HttpServletRequest;
  44. import javax.servlet.http.HttpServletResponse;
  45. import java.io.IOException;
  46. import java.util.*;
  47. import java.util.stream.Collectors;
  48. /**
  49. * <p>
  50. * 用户表 前端控制器
  51. * </p>
  52. *
  53. * @Author scott
  54. * @since 2018-12-20
  55. */
  56. @Slf4j
  57. @RestController
  58. @RequestMapping("/sys/user")
  59. public class SysUserController {
  60. @Autowired
  61. private ISysBaseAPI sysBaseAPI;
  62. @Autowired
  63. private ISysUserService sysUserService;
  64. @Autowired
  65. private ISysDepartService sysDepartService;
  66. @Autowired
  67. private ISysUserRoleService sysUserRoleService;
  68. @Autowired
  69. private ISysUserDepartService sysUserDepartService;
  70. @Autowired
  71. private ISysUserRoleService userRoleService;
  72. @Autowired
  73. private ISysDepartRoleUserService departRoleUserService;
  74. @Autowired
  75. private ISysDepartRoleService departRoleService;
  76. @Autowired
  77. private RedisUtil redisUtil;
  78. @Value("${jeecg.path.upload}")
  79. private String upLoadPath;
  80. @Resource
  81. private BaseCommonService baseCommonService;
  82. /**
  83. * 获取用户列表数据
  84. * @param user
  85. * @param pageNo
  86. * @param pageSize
  87. * @param req
  88. * @return
  89. */
  90. @PermissionData(pageComponent = "system/UserList")
  91. @RequestMapping(value = "/list", method = RequestMethod.GET)
  92. public Result<IPage<SysUser>> queryPageList(SysUser user,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  93. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  94. Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
  95. QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
  96. //TODO 外部模拟登陆临时账号,列表不显示
  97. queryWrapper.ne("username","_reserve_user_external");
  98. Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
  99. IPage<SysUser> pageList = sysUserService.page(page, queryWrapper);
  100. //批量查询用户的所属部门
  101. //step.1 先拿到全部的 useids
  102. //step.2 通过 useids,一次性查询用户的所属部门名字
  103. List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
  104. if(userIds!=null && userIds.size()>0){
  105. Map<String,String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
  106. pageList.getRecords().forEach(item->{
  107. item.setOrgCodeTxt(useDepNames.get(item.getId()));
  108. });
  109. }
  110. result.setSuccess(true);
  111. result.setResult(pageList);
  112. log.info(pageList.toString());
  113. return result;
  114. }
  115. //@RequiresRoles({"admin"})
  116. //@RequiresPermissions("user:add")
  117. @RequestMapping(value = "/add", method = RequestMethod.POST)
  118. public Result<SysUser> add(@RequestBody JSONObject jsonObject) {
  119. Result<SysUser> result = new Result<SysUser>();
  120. String selectedRoles = jsonObject.getString("selectedroles");
  121. String selectedDeparts = jsonObject.getString("selecteddeparts");
  122. try {
  123. SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
  124. user.setCreateTime(new Date());//设置创建时间
  125. String salt = oConvertUtils.randomGen(8);
  126. user.setSalt(salt);
  127. String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), salt);
  128. user.setPassword(passwordEncode);
  129. user.setStatus(1);
  130. user.setDelFlag(CommonConstant.DEL_FLAG_0);
  131. // 保存用户走一个service 保证事务
  132. sysUserService.saveUser(user, selectedRoles, selectedDeparts);
  133. result.success("添加成功!");
  134. } catch (Exception e) {
  135. log.error(e.getMessage(), e);
  136. result.error500("操作失败");
  137. }
  138. return result;
  139. }
  140. //@RequiresRoles({"admin"})
  141. //@RequiresPermissions("user:edit")
  142. @RequestMapping(value = "/edit", method = RequestMethod.POST)
  143. public Result<SysUser> edit(@RequestBody JSONObject jsonObject) {
  144. Result<SysUser> result = new Result<SysUser>();
  145. try {
  146. SysUser sysUser = sysUserService.getById(jsonObject.getString("id"));
  147. baseCommonService.addLog("编辑用户,id: " +jsonObject.getString("id") ,CommonConstant.LOG_TYPE_2, 2);
  148. if(sysUser==null) {
  149. result.error500("未找到对应实体");
  150. }else {
  151. SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
  152. user.setUpdateTime(new Date());
  153. //String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt());
  154. user.setPassword(sysUser.getPassword());
  155. String roles = jsonObject.getString("selectedroles");
  156. String departs = jsonObject.getString("selecteddeparts");
  157. // 修改用户走一个service 保证事务
  158. sysUserService.editUser(user, roles, departs);
  159. result.success("修改成功!");
  160. }
  161. } catch (Exception e) {
  162. log.error(e.getMessage(), e);
  163. result.error500("操作失败");
  164. }
  165. return result;
  166. }
  167. /**
  168. * 删除用户
  169. */
  170. //@RequiresRoles({"admin"})
  171. @RequestMapping(value = "/delete", method = RequestMethod.POST)
  172. public Result<?> delete(@RequestParam(name="id",required=true) String id) {
  173. baseCommonService.addLog("删除用户,id: " +id ,CommonConstant.LOG_TYPE_2, 3);
  174. this.sysUserService.deleteUser(id);
  175. return Result.ok("删除用户成功");
  176. }
  177. /**
  178. * 批量删除用户
  179. */
  180. //@RequiresRoles({"admin"})
  181. @RequestMapping(value = "/deleteBatch", method = RequestMethod.POST)
  182. public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
  183. baseCommonService.addLog("批量删除用户, ids: " +ids ,CommonConstant.LOG_TYPE_2, 3);
  184. this.sysUserService.deleteBatchUsers(ids);
  185. return Result.ok("批量删除用户成功");
  186. }
  187. /**
  188. * 冻结&解冻用户
  189. * @param jsonObject
  190. * @return
  191. */
  192. //@RequiresRoles({"admin"})
  193. @RequestMapping(value = "/frozenBatch", method = RequestMethod.POST)
  194. public Result<SysUser> frozenBatch(@RequestBody JSONObject jsonObject) {
  195. Result<SysUser> result = new Result<SysUser>();
  196. try {
  197. String ids = jsonObject.getString("ids");
  198. String status = jsonObject.getString("status");
  199. String[] arr = ids.split(",");
  200. for (String id : arr) {
  201. if(oConvertUtils.isNotEmpty(id)) {
  202. this.sysUserService.update(new SysUser().setStatus(Integer.parseInt(status)),
  203. new UpdateWrapper<SysUser>().lambda().eq(SysUser::getId,id));
  204. }
  205. }
  206. } catch (Exception e) {
  207. log.error(e.getMessage(), e);
  208. result.error500("操作失败"+e.getMessage());
  209. }
  210. result.success("操作成功!");
  211. return result;
  212. }
  213. @RequestMapping(value = "/queryById", method = RequestMethod.GET)
  214. public Result<SysUser> queryById(@RequestParam(name = "id", required = true) String id) {
  215. Result<SysUser> result = new Result<SysUser>();
  216. SysUser sysUser = sysUserService.getById(id);
  217. if (sysUser == null) {
  218. result.error500("未找到对应实体");
  219. } else {
  220. result.setResult(sysUser);
  221. result.setSuccess(true);
  222. }
  223. return result;
  224. }
  225. @RequestMapping(value = "/queryUserRole", method = RequestMethod.GET)
  226. public Result<List<String>> queryUserRole(@RequestParam(name = "userid", required = true) String userid) {
  227. Result<List<String>> result = new Result<>();
  228. List<String> list = new ArrayList<String>();
  229. List<SysUserRole> userRole = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, userid));
  230. if (userRole == null || userRole.size() <= 0) {
  231. result.error500("未找到用户相关角色信息");
  232. } else {
  233. for (SysUserRole sysUserRole : userRole) {
  234. list.add(sysUserRole.getRoleId());
  235. }
  236. result.setSuccess(true);
  237. result.setResult(list);
  238. }
  239. return result;
  240. }
  241. /**
  242. * 校验用户账号是否唯一<br>
  243. * 可以校验其他 需要检验什么就传什么。。。
  244. *
  245. * @param sysUser
  246. * @return
  247. */
  248. @RequestMapping(value = "/checkOnlyUser", method = RequestMethod.GET)
  249. public Result<Boolean> checkOnlyUser(SysUser sysUser) {
  250. Result<Boolean> result = new Result<>();
  251. //如果此参数为false则程序发生异常
  252. result.setResult(true);
  253. try {
  254. //通过传入信息查询新的用户信息
  255. sysUser.setPassword(null);
  256. SysUser user = sysUserService.getOne(new QueryWrapper<SysUser>(sysUser));
  257. if (user != null) {
  258. result.setSuccess(false);
  259. result.setMessage("用户账号已存在");
  260. return result;
  261. }
  262. } catch (Exception e) {
  263. result.setSuccess(false);
  264. result.setMessage(e.getMessage());
  265. return result;
  266. }
  267. result.setSuccess(true);
  268. return result;
  269. }
  270. /**
  271. * 修改密码
  272. */
  273. //@RequiresRoles({"admin"})
  274. @RequestMapping(value = "/changePassword", method = RequestMethod.POST)
  275. public Result<?> changePassword(@RequestBody SysUser sysUser) {
  276. SysUser u = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, sysUser.getUsername()));
  277. if (u == null) {
  278. return Result.error("用户不存在!");
  279. }
  280. sysUser.setId(u.getId());
  281. return sysUserService.changePassword(sysUser);
  282. }
  283. /**
  284. * 查询指定用户和部门关联的数据
  285. *
  286. * @param userId
  287. * @return
  288. */
  289. @RequestMapping(value = "/userDepartList", method = RequestMethod.GET)
  290. public Result<List<DepartIdModel>> getUserDepartsList(@RequestParam(name = "userId", required = true) String userId) {
  291. Result<List<DepartIdModel>> result = new Result<>();
  292. try {
  293. List<DepartIdModel> depIdModelList = this.sysUserDepartService.queryDepartIdsOfUser(userId);
  294. if (depIdModelList != null && depIdModelList.size() > 0) {
  295. result.setSuccess(true);
  296. result.setMessage("查找成功");
  297. result.setResult(depIdModelList);
  298. } else {
  299. result.setSuccess(false);
  300. result.setMessage("查找失败");
  301. }
  302. return result;
  303. } catch (Exception e) {
  304. log.error(e.getMessage(), e);
  305. result.setSuccess(false);
  306. result.setMessage("查找过程中出现了异常: " + e.getMessage());
  307. return result;
  308. }
  309. }
  310. /**
  311. * 生成在添加用户情况下没有主键的问题,返回给前端,根据该id绑定部门数据
  312. *
  313. * @return
  314. */
  315. @RequestMapping(value = "/generateUserId", method = RequestMethod.GET)
  316. public Result<String> generateUserId() {
  317. Result<String> result = new Result<>();
  318. System.out.println("我执行了,生成用户ID==============================");
  319. String userId = UUID.randomUUID().toString().replace("-", "");
  320. result.setSuccess(true);
  321. result.setResult(userId);
  322. return result;
  323. }
  324. /**
  325. * 根据部门id查询用户信息
  326. *
  327. * @param id
  328. * @return
  329. */
  330. @RequestMapping(value = "/queryUserByDepId", method = RequestMethod.GET)
  331. public Result<List<SysUser>> queryUserByDepId(@RequestParam(name = "id", required = true) String id,@RequestParam(name="realname",required=false) String realname) {
  332. Result<List<SysUser>> result = new Result<>();
  333. //List<SysUser> userList = sysUserDepartService.queryUserByDepId(id);
  334. SysDepart sysDepart = sysDepartService.getById(id);
  335. List<SysUser> userList = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode(),realname);
  336. //批量查询用户的所属部门
  337. //step.1 先拿到全部的 useids
  338. //step.2 通过 useids,一次性查询用户的所属部门名字
  339. List<String> userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList());
  340. if(userIds!=null && userIds.size()>0){
  341. Map<String,String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
  342. userList.forEach(item->{
  343. //TODO 临时借用这个字段用于页面展示
  344. item.setOrgCodeTxt(useDepNames.get(item.getId()));
  345. });
  346. }
  347. try {
  348. result.setSuccess(true);
  349. result.setResult(userList);
  350. return result;
  351. } catch (Exception e) {
  352. log.error(e.getMessage(), e);
  353. result.setSuccess(false);
  354. return result;
  355. }
  356. }
  357. /**
  358. * 用户选择组件 专用 根据用户账号或部门分页查询
  359. * @param departId
  360. * @param username
  361. * @return
  362. */
  363. @RequestMapping(value = "/queryUserComponentData", method = RequestMethod.GET)
  364. public Result<IPage<SysUser>> queryUserComponentData(
  365. @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  366. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
  367. @RequestParam(name = "departId", required = false) String departId,
  368. @RequestParam(name="realname",required=false) String realname,
  369. @RequestParam(name="username",required=false) String username) {
  370. IPage<SysUser> pageList = sysUserDepartService.queryDepartUserPageList(departId, username, realname, pageSize, pageNo);
  371. return Result.OK(pageList);
  372. }
  373. /**
  374. * 导出excel
  375. *
  376. * @param request
  377. * @param sysUser
  378. */
  379. @RequestMapping(value = "/exportXls")
  380. public ModelAndView exportXls(SysUser sysUser,HttpServletRequest request) {
  381. // Step.1 组装查询条件
  382. QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(sysUser, request.getParameterMap());
  383. //Step.2 AutoPoi 导出Excel
  384. ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
  385. //update-begin--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据--------------------
  386. String selections = request.getParameter("selections");
  387. if(!oConvertUtils.isEmpty(selections)){
  388. queryWrapper.in("id",selections.split(","));
  389. }
  390. //update-end--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据----------------------
  391. List<SysUser> pageList = sysUserService.list(queryWrapper);
  392. //导出文件名称
  393. mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表");
  394. mv.addObject(NormalExcelConstants.CLASS, SysUser.class);
  395. LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
  396. ExportParams exportParams = new ExportParams("用户列表数据", "导出人:"+user.getRealname(), "导出信息");
  397. exportParams.setImageBasePath(upLoadPath);
  398. mv.addObject(NormalExcelConstants.PARAMS, exportParams);
  399. mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
  400. return mv;
  401. }
  402. /**
  403. * 通过excel导入数据
  404. *
  405. * @param request
  406. * @param response
  407. * @return
  408. */
  409. //@RequiresRoles({"admin"})
  410. //@RequiresPermissions("user:import")
  411. @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
  412. public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException {
  413. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  414. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  415. // 错误信息
  416. List<String> errorMessage = new ArrayList<>();
  417. int successLines = 0, errorLines = 0;
  418. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  419. MultipartFile file = entity.getValue();// 获取上传文件对象
  420. ImportParams params = new ImportParams();
  421. params.setTitleRows(2);
  422. params.setHeadRows(1);
  423. params.setNeedSave(true);
  424. try {
  425. List<SysUser> listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), SysUser.class, params);
  426. for (int i = 0; i < listSysUsers.size(); i++) {
  427. SysUser sysUserExcel = listSysUsers.get(i);
  428. if (StringUtils.isBlank(sysUserExcel.getPassword())) {
  429. // 密码默认为 “123456”
  430. sysUserExcel.setPassword("123456");
  431. }
  432. // 密码加密加盐
  433. String salt = oConvertUtils.randomGen(8);
  434. sysUserExcel.setSalt(salt);
  435. String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt);
  436. sysUserExcel.setPassword(passwordEncode);
  437. try {
  438. sysUserService.save(sysUserExcel);
  439. successLines++;
  440. } catch (Exception e) {
  441. errorLines++;
  442. String message = e.getMessage().toLowerCase();
  443. int lineNumber = i + 1;
  444. // 通过索引名判断出错信息
  445. if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) {
  446. errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。");
  447. } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) {
  448. errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。");
  449. } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) {
  450. errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。");
  451. } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) {
  452. errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。");
  453. } else {
  454. errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入");
  455. log.error(e.getMessage(), e);
  456. }
  457. }
  458. // 批量将部门和用户信息建立关联关系
  459. String departIds = sysUserExcel.getDepartIds();
  460. if (StringUtils.isNotBlank(departIds)) {
  461. String userId = sysUserExcel.getId();
  462. String[] departIdArray = departIds.split(",");
  463. List<SysUserDepart> userDepartList = new ArrayList<>(departIdArray.length);
  464. for (String departId : departIdArray) {
  465. userDepartList.add(new SysUserDepart(userId, departId));
  466. }
  467. sysUserDepartService.saveBatch(userDepartList);
  468. }
  469. }
  470. } catch (Exception e) {
  471. errorMessage.add("发生异常:" + e.getMessage());
  472. log.error(e.getMessage(), e);
  473. } finally {
  474. try {
  475. file.getInputStream().close();
  476. } catch (IOException e) {
  477. log.error(e.getMessage(), e);
  478. }
  479. }
  480. }
  481. return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
  482. }
  483. /**
  484. * @功能:根据id 批量查询
  485. * @param userIds
  486. * @return
  487. */
  488. @RequestMapping(value = "/queryByIds", method = RequestMethod.GET)
  489. public Result<Collection<SysUser>> queryByIds(@RequestParam String userIds) {
  490. Result<Collection<SysUser>> result = new Result<>();
  491. String[] userId = userIds.split(",");
  492. Collection<String> idList = Arrays.asList(userId);
  493. Collection<SysUser> userRole = sysUserService.listByIds(idList);
  494. result.setSuccess(true);
  495. result.setResult(userRole);
  496. return result;
  497. }
  498. /**
  499. * 首页用户重置密码
  500. */
  501. //@RequiresRoles({"admin"})
  502. @RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
  503. public Result<?> updatePassword(@RequestBody JSONObject json) {
  504. String username = json.getString("username");
  505. String oldpassword = json.getString("oldpassword");
  506. String password = json.getString("password");
  507. String confirmpassword = json.getString("confirmpassword");
  508. LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
  509. if(!sysUser.getUsername().equals(username)){
  510. return Result.error("只允许修改自己的密码!");
  511. }
  512. SysUser user = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username));
  513. if(user==null) {
  514. return Result.error("用户不存在!");
  515. }
  516. return sysUserService.resetPassword(username,oldpassword,password,confirmpassword);
  517. }
  518. @RequestMapping(value = "/userRoleList", method = RequestMethod.GET)
  519. public Result<IPage<SysUser>> userRoleList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  520. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
  521. Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
  522. Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
  523. String roleId = req.getParameter("roleId");
  524. String username = req.getParameter("username");
  525. IPage<SysUser> pageList = sysUserService.getUserByRoleId(page,roleId,username);
  526. result.setSuccess(true);
  527. result.setResult(pageList);
  528. return result;
  529. }
  530. /**
  531. * 给指定角色添加用户
  532. *
  533. * @param
  534. * @return
  535. */
  536. //@RequiresRoles({"admin"})
  537. @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST)
  538. public Result<String> addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) {
  539. Result<String> result = new Result<String>();
  540. try {
  541. String sysRoleId = sysUserRoleVO.getRoleId();
  542. for(String sysUserId:sysUserRoleVO.getUserIdList()) {
  543. SysUserRole sysUserRole = new SysUserRole(sysUserId,sysRoleId);
  544. QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper<SysUserRole>();
  545. queryWrapper.eq("role_id", sysRoleId).eq("user_id",sysUserId);
  546. SysUserRole one = sysUserRoleService.getOne(queryWrapper);
  547. if(one==null){
  548. sysUserRoleService.save(sysUserRole);
  549. }
  550. }
  551. result.setMessage("添加成功!");
  552. result.setSuccess(true);
  553. return result;
  554. }catch(Exception e) {
  555. log.error(e.getMessage(), e);
  556. result.setSuccess(false);
  557. result.setMessage("出错了: " + e.getMessage());
  558. return result;
  559. }
  560. }
  561. /**
  562. * 删除指定角色的用户关系
  563. * @param
  564. * @return
  565. */
  566. //@RequiresRoles({"admin"})
  567. @RequestMapping(value = "/deleteUserRole", method = RequestMethod.POST)
  568. public Result<SysUserRole> deleteUserRole(@RequestParam(name="roleId") String roleId,
  569. @RequestParam(name="userId",required=true) String userId
  570. ) {
  571. Result<SysUserRole> result = new Result<SysUserRole>();
  572. try {
  573. QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper<SysUserRole>();
  574. queryWrapper.eq("role_id", roleId).eq("user_id",userId);
  575. sysUserRoleService.remove(queryWrapper);
  576. result.success("删除成功!");
  577. }catch(Exception e) {
  578. log.error(e.getMessage(), e);
  579. result.error500("删除失败!");
  580. }
  581. return result;
  582. }
  583. /**
  584. * 批量删除指定角色的用户关系
  585. *
  586. * @param
  587. * @return
  588. */
  589. //@RequiresRoles({"admin"})
  590. @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.POST)
  591. public Result<SysUserRole> deleteUserRoleBatch(
  592. @RequestParam(name="roleId") String roleId,
  593. @RequestParam(name="userIds",required=true) String userIds) {
  594. Result<SysUserRole> result = new Result<SysUserRole>();
  595. try {
  596. QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper<SysUserRole>();
  597. queryWrapper.eq("role_id", roleId).in("user_id",Arrays.asList(userIds.split(",")));
  598. sysUserRoleService.remove(queryWrapper);
  599. result.success("删除成功!");
  600. }catch(Exception e) {
  601. log.error(e.getMessage(), e);
  602. result.error500("删除失败!");
  603. }
  604. return result;
  605. }
  606. /**
  607. * 部门用户列表
  608. */
  609. @RequestMapping(value = "/departUserList", method = RequestMethod.GET)
  610. public Result<IPage<SysUser>> departUserList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  611. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
  612. Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
  613. Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
  614. String depId = req.getParameter("depId");
  615. String username = req.getParameter("username");
  616. //根据部门ID查询,当前和下级所有的部门IDS
  617. List<String> subDepids = new ArrayList<>();
  618. //部门id为空时,查询我的部门下所有用户
  619. if(oConvertUtils.isEmpty(depId)){
  620. LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
  621. int userIdentity = user.getUserIdentity() != null?user.getUserIdentity():CommonConstant.USER_IDENTITY_1;
  622. if(oConvertUtils.isNotEmpty(userIdentity) && userIdentity == CommonConstant.USER_IDENTITY_2 ){
  623. subDepids = sysDepartService.getMySubDepIdsByDepId(user.getDepartIds());
  624. }
  625. }else{
  626. subDepids = sysDepartService.getSubDepIdsByDepId(depId);
  627. }
  628. if(subDepids != null && subDepids.size()>0){
  629. IPage<SysUser> pageList = sysUserService.getUserByDepIds(page,subDepids,username);
  630. //批量查询用户的所属部门
  631. //step.1 先拿到全部的 useids
  632. //step.2 通过 useids,一次性查询用户的所属部门名字
  633. List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
  634. if(userIds!=null && userIds.size()>0){
  635. Map<String, String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
  636. pageList.getRecords().forEach(item -> {
  637. //批量查询用户的所属部门
  638. item.setOrgCode(useDepNames.get(item.getId()));
  639. });
  640. }
  641. result.setSuccess(true);
  642. result.setResult(pageList);
  643. }else{
  644. result.setSuccess(true);
  645. result.setResult(null);
  646. }
  647. return result;
  648. }
  649. /**
  650. * 根据 orgCode 查询用户,包括子部门下的用户
  651. * 若某个用户包含多个部门,则会显示多条记录,可自行处理成单条记录
  652. */
  653. @GetMapping("/queryByOrgCode")
  654. public Result<?> queryByDepartId(
  655. @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
  656. @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
  657. @RequestParam(name = "orgCode") String orgCode,
  658. SysUser userParams
  659. ) {
  660. IPage<SysUserSysDepartModel> pageList = sysUserService.queryUserByOrgCode(orgCode, userParams, new Page(pageNo, pageSize));
  661. return Result.ok(pageList);
  662. }
  663. /**
  664. * 根据 orgCode 查询用户,包括子部门下的用户
  665. * 针对通讯录模块做的接口,将多个部门的用户合并成一条记录,并转成对前端友好的格式
  666. */
  667. @GetMapping("/queryByOrgCodeForAddressList")
  668. public Result<?> queryByOrgCodeForAddressList(
  669. @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
  670. @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
  671. @RequestParam(name = "orgCode",required = false) String orgCode,
  672. SysUser userParams
  673. ) {
  674. IPage page = new Page(pageNo, pageSize);
  675. IPage<SysUserSysDepartModel> pageList = sysUserService.queryUserByOrgCode(orgCode, userParams, page);
  676. List<SysUserSysDepartModel> list = pageList.getRecords();
  677. // 记录所有出现过的 user, key = userId
  678. Map<String, JSONObject> hasUser = new HashMap<>(list.size());
  679. JSONArray resultJson = new JSONArray(list.size());
  680. for (SysUserSysDepartModel item : list) {
  681. String userId = item.getId();
  682. // userId
  683. JSONObject getModel = hasUser.get(userId);
  684. // 之前已存在过该用户,直接合并数据
  685. if (getModel != null) {
  686. String departName = getModel.get("departName").toString();
  687. getModel.put("departName", (departName + " | " + item.getDepartName()));
  688. } else {
  689. // 将用户对象转换为json格式,并将部门信息合并到 json 中
  690. JSONObject json = JSON.parseObject(JSON.toJSONString(item));
  691. json.remove("id");
  692. json.put("userId", userId);
  693. json.put("departId", item.getDepartId());
  694. json.put("departName", item.getDepartName());
  695. // json.put("avatar", item.getSysUser().getAvatar());
  696. resultJson.add(json);
  697. hasUser.put(userId, json);
  698. }
  699. }
  700. IPage<JSONObject> result = new Page<>(pageNo, pageSize, pageList.getTotal());
  701. result.setRecords(resultJson.toJavaList(JSONObject.class));
  702. return Result.ok(result);
  703. }
  704. /**
  705. * 给指定部门添加对应的用户
  706. */
  707. //@RequiresRoles({"admin"})
  708. @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST)
  709. public Result<String> editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) {
  710. Result<String> result = new Result<String>();
  711. try {
  712. String sysDepId = sysDepartUsersVO.getDepId();
  713. for(String sysUserId:sysDepartUsersVO.getUserIdList()) {
  714. SysUserDepart sysUserDepart = new SysUserDepart(null,sysUserId,sysDepId);
  715. QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
  716. queryWrapper.eq("dep_id", sysDepId).eq("user_id",sysUserId);
  717. SysUserDepart one = sysUserDepartService.getOne(queryWrapper);
  718. if(one==null){
  719. sysUserDepartService.save(sysUserDepart);
  720. }
  721. }
  722. result.setMessage("添加成功!");
  723. result.setSuccess(true);
  724. return result;
  725. }catch(Exception e) {
  726. log.error(e.getMessage(), e);
  727. result.setSuccess(false);
  728. result.setMessage("出错了: " + e.getMessage());
  729. return result;
  730. }
  731. }
  732. /**
  733. * 删除指定机构的用户关系
  734. */
  735. //@RequiresRoles({"admin"})
  736. @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.POST)
  737. public Result<SysUserDepart> deleteUserInDepart(@RequestParam(name="depId") String depId,
  738. @RequestParam(name="userId",required=true) String userId
  739. ) {
  740. Result<SysUserDepart> result = new Result<SysUserDepart>();
  741. try {
  742. QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
  743. queryWrapper.eq("dep_id", depId).eq("user_id",userId);
  744. boolean b = sysUserDepartService.remove(queryWrapper);
  745. if(b){
  746. List<SysDepartRole> sysDepartRoleList = departRoleService.list(new QueryWrapper<SysDepartRole>().eq("depart_id",depId));
  747. List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
  748. if(roleIds != null && roleIds.size()>0){
  749. QueryWrapper<SysDepartRoleUser> query = new QueryWrapper<>();
  750. query.eq("user_id",userId).in("drole_id",roleIds);
  751. departRoleUserService.remove(query);
  752. }
  753. result.success("删除成功!");
  754. }else{
  755. result.error500("当前选中部门与用户无关联关系!");
  756. }
  757. }catch(Exception e) {
  758. log.error(e.getMessage(), e);
  759. result.error500("删除失败!");
  760. }
  761. return result;
  762. }
  763. /**
  764. * 批量删除指定机构的用户关系
  765. */
  766. //@RequiresRoles({"admin"})
  767. @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.POST)
  768. public Result<SysUserDepart> deleteUserInDepartBatch(
  769. @RequestParam(name="depId") String depId,
  770. @RequestParam(name="userIds",required=true) String userIds) {
  771. Result<SysUserDepart> result = new Result<SysUserDepart>();
  772. try {
  773. QueryWrapper<SysUserDepart> queryWrapper = new QueryWrapper<SysUserDepart>();
  774. queryWrapper.eq("dep_id", depId).in("user_id",Arrays.asList(userIds.split(",")));
  775. boolean b = sysUserDepartService.remove(queryWrapper);
  776. if(b){
  777. departRoleUserService.removeDeptRoleUser(Arrays.asList(userIds.split(",")),depId);
  778. }
  779. result.success("删除成功!");
  780. }catch(Exception e) {
  781. log.error(e.getMessage(), e);
  782. result.error500("删除失败!");
  783. }
  784. return result;
  785. }
  786. /**
  787. * 查询当前用户的所有部门/当前部门编码
  788. * @return
  789. */
  790. @RequestMapping(value = "/getCurrentUserDeparts", method = RequestMethod.GET)
  791. public Result<Map<String,Object>> getCurrentUserDeparts() {
  792. Result<Map<String,Object>> result = new Result<Map<String,Object>>();
  793. try {
  794. LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
  795. List<SysDepart> list = this.sysDepartService.queryUserDeparts(sysUser.getId());
  796. Map<String,Object> map = new HashMap<String,Object>();
  797. map.put("list", list);
  798. map.put("orgCode", sysUser.getOrgCode());
  799. result.setSuccess(true);
  800. result.setResult(map);
  801. }catch(Exception e) {
  802. log.error(e.getMessage(), e);
  803. result.error500("查询失败!");
  804. }
  805. return result;
  806. }
  807. /**
  808. * 用户注册接口
  809. *
  810. * @param jsonObject
  811. * @param user
  812. * @return
  813. */
  814. @PostMapping("/register")
  815. public Result<JSONObject> userRegister(@RequestBody JSONObject jsonObject, SysUser user) {
  816. Result<JSONObject> result = new Result<JSONObject>();
  817. String phone = jsonObject.getString("phone");
  818. String smscode = jsonObject.getString("smscode");
  819. Object code = redisUtil.get(phone);
  820. String username = jsonObject.getString("username");
  821. //未设置用户名,则用手机号作为用户名
  822. if(oConvertUtils.isEmpty(username)){
  823. username = phone;
  824. }
  825. //未设置密码,则随机生成一个密码
  826. String password = jsonObject.getString("password");
  827. if(oConvertUtils.isEmpty(password)){
  828. password = RandomUtil.randomString(8);
  829. }
  830. String email = jsonObject.getString("email");
  831. SysUser sysUser1 = sysUserService.getUserByName(username);
  832. if (sysUser1 != null) {
  833. result.setMessage("用户名已注册");
  834. result.setSuccess(false);
  835. return result;
  836. }
  837. SysUser sysUser2 = sysUserService.getUserByPhone(phone);
  838. if (sysUser2 != null) {
  839. result.setMessage("该手机号已注册");
  840. result.setSuccess(false);
  841. return result;
  842. }
  843. if(oConvertUtils.isNotEmpty(email)){
  844. SysUser sysUser3 = sysUserService.getUserByEmail(email);
  845. if (sysUser3 != null) {
  846. result.setMessage("邮箱已被注册");
  847. result.setSuccess(false);
  848. return result;
  849. }
  850. }
  851. if(null == code){
  852. result.setMessage("手机验证码失效,请重新获取");
  853. result.setSuccess(false);
  854. return result;
  855. }
  856. if (!smscode.equals(code.toString())) {
  857. result.setMessage("手机验证码错误");
  858. result.setSuccess(false);
  859. return result;
  860. }
  861. try {
  862. user.setCreateTime(new Date());// 设置创建时间
  863. String salt = oConvertUtils.randomGen(8);
  864. String passwordEncode = PasswordUtil.encrypt(username, password, salt);
  865. user.setSalt(salt);
  866. user.setUsername(username);
  867. user.setRealname(username);
  868. user.setPassword(passwordEncode);
  869. user.setEmail(email);
  870. user.setPhone(phone);
  871. user.setStatus(CommonConstant.USER_UNFREEZE);
  872. user.setDelFlag(CommonConstant.DEL_FLAG_0);
  873. user.setActivitiSync(CommonConstant.ACT_SYNC_0);
  874. sysUserService.addUserWithRole(user,"ee8626f80f7c2619917b6236f3a7f02b");//默认临时角色 test
  875. result.success("注册成功");
  876. } catch (Exception e) {
  877. result.error500("注册失败");
  878. }
  879. return result;
  880. }
  881. // /**
  882. // * 根据用户名或手机号查询用户信息
  883. // * @param
  884. // * @return
  885. // */
  886. // @GetMapping("/querySysUser")
  887. // public Result<Map<String, Object>> querySysUser(SysUser sysUser) {
  888. // String phone = sysUser.getPhone();
  889. // String username = sysUser.getUsername();
  890. // Result<Map<String, Object>> result = new Result<Map<String, Object>>();
  891. // Map<String, Object> map = new HashMap<String, Object>();
  892. // if (oConvertUtils.isNotEmpty(phone)) {
  893. // SysUser user = sysUserService.getUserByPhone(phone);
  894. // if(user!=null) {
  895. // map.put("username",user.getUsername());
  896. // map.put("phone",user.getPhone());
  897. // result.setSuccess(true);
  898. // result.setResult(map);
  899. // return result;
  900. // }
  901. // }
  902. // if (oConvertUtils.isNotEmpty(username)) {
  903. // SysUser user = sysUserService.getUserByName(username);
  904. // if(user!=null) {
  905. // map.put("username",user.getUsername());
  906. // map.put("phone",user.getPhone());
  907. // result.setSuccess(true);
  908. // result.setResult(map);
  909. // return result;
  910. // }
  911. // }
  912. // result.setSuccess(false);
  913. // result.setMessage("验证失败");
  914. // return result;
  915. // }
  916. /**
  917. * 用户手机号验证
  918. */
  919. @PostMapping("/phoneVerification")
  920. public Result<Map<String,String>> phoneVerification(@RequestBody JSONObject jsonObject) {
  921. Result<Map<String,String>> result = new Result<Map<String,String>>();
  922. String phone = jsonObject.getString("phone");
  923. String smscode = jsonObject.getString("smscode");
  924. Object code = redisUtil.get(phone);
  925. if (!smscode.equals(code)) {
  926. result.setMessage("手机验证码错误");
  927. result.setSuccess(false);
  928. return result;
  929. }
  930. //设置有效时间
  931. redisUtil.set(phone, smscode,600);
  932. //新增查询用户名
  933. LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
  934. query.eq(SysUser::getPhone,phone);
  935. SysUser user = sysUserService.getOne(query);
  936. Map<String,String> map = new HashMap<>();
  937. map.put("smscode",smscode);
  938. map.put("username",user.getUsername());
  939. result.setResult(map);
  940. result.setSuccess(true);
  941. return result;
  942. }
  943. /**
  944. * 用户更改密码
  945. */
  946. @GetMapping("/passwordChange")
  947. public Result<SysUser> passwordChange(@RequestParam(name="username")String username,
  948. @RequestParam(name="password")String password,
  949. @RequestParam(name="smscode")String smscode,
  950. @RequestParam(name="phone") String phone) {
  951. Result<SysUser> result = new Result<SysUser>();
  952. if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(password) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone) ) {
  953. result.setMessage("重置密码失败!");
  954. result.setSuccess(false);
  955. return result;
  956. }
  957. SysUser sysUser=new SysUser();
  958. Object object= redisUtil.get(phone);
  959. if(null==object) {
  960. result.setMessage("短信验证码失效!");
  961. result.setSuccess(false);
  962. return result;
  963. }
  964. if(!smscode.equals(object.toString())) {
  965. result.setMessage("短信验证码不匹配!");
  966. result.setSuccess(false);
  967. return result;
  968. }
  969. sysUser = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername,username).eq(SysUser::getPhone,phone));
  970. if (sysUser == null) {
  971. result.setMessage("未找到用户!");
  972. result.setSuccess(false);
  973. return result;
  974. } else {
  975. String salt = oConvertUtils.randomGen(8);
  976. sysUser.setSalt(salt);
  977. String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
  978. sysUser.setPassword(passwordEncode);
  979. this.sysUserService.updateById(sysUser);
  980. result.setSuccess(true);
  981. result.setMessage("密码重置完成!");
  982. return result;
  983. }
  984. }
  985. /**
  986. * 根据TOKEN获取用户的部分信息(返回的数据是可供表单设计器使用的数据)
  987. *
  988. * @return
  989. */
  990. @GetMapping("/getUserSectionInfoByToken")
  991. public Result<?> getUserSectionInfoByToken(HttpServletRequest request, @RequestParam(name = "token", required = false) String token) {
  992. try {
  993. String username = null;
  994. // 如果没有传递token,就从header中获取token并获取用户信息
  995. if (oConvertUtils.isEmpty(token)) {
  996. username = JwtUtil.getUserNameByToken(request);
  997. } else {
  998. username = JwtUtil.getUsername(token);
  999. }
  1000. log.debug(" ------ 通过令牌获取部分用户信息,当前用户: " + username);
  1001. // 根据用户名查询用户信息
  1002. SysUser sysUser = sysUserService.getUserByName(username);
  1003. Map<String, Object> map = new HashMap<String, Object>();
  1004. map.put("sysUserId", sysUser.getId());
  1005. map.put("sysUserCode", sysUser.getUsername()); // 当前登录用户登录账号
  1006. map.put("sysUserName", sysUser.getRealname()); // 当前登录用户真实名称
  1007. map.put("sysOrgCode", sysUser.getOrgCode()); // 当前登录用户部门编号
  1008. log.debug(" ------ 通过令牌获取部分用户信息,已获取的用户信息: " + map);
  1009. return Result.ok(map);
  1010. } catch (Exception e) {
  1011. log.error(e.getMessage(), e);
  1012. return Result.error(500, "查询失败:" + e.getMessage());
  1013. }
  1014. }
  1015. /**
  1016. * 【APP端接口】获取用户列表 根据用户名和真实名 模糊匹配
  1017. * @param keyword
  1018. * @param pageNo
  1019. * @param pageSize
  1020. * @return
  1021. */
  1022. @GetMapping("/appUserList")
  1023. public Result<?> appUserList(@RequestParam(name = "keyword", required = false) String keyword,
  1024. @RequestParam(name = "username", required = false) String username,
  1025. @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  1026. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
  1027. @RequestParam(name = "syncFlow", required = false) String syncFlow) {
  1028. try {
  1029. //TODO 从查询效率上将不要用mp的封装的page分页查询 建议自己写分页语句
  1030. LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>();
  1031. if(oConvertUtils.isNotEmpty(syncFlow)){
  1032. query.eq(SysUser::getActivitiSync, CommonConstant.ACT_SYNC_1);
  1033. }
  1034. query.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0);
  1035. if(oConvertUtils.isNotEmpty(username)){
  1036. if(username.contains(",")){
  1037. query.in(SysUser::getUsername,username.split(","));
  1038. }else{
  1039. query.eq(SysUser::getUsername,username);
  1040. }
  1041. }else{
  1042. query.and(i -> i.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword));
  1043. }
  1044. Page<SysUser> page = new Page<>(pageNo, pageSize);
  1045. IPage<SysUser> res = this.sysUserService.page(page, query);
  1046. return Result.ok(res);
  1047. } catch (Exception e) {
  1048. log.error(e.getMessage(), e);
  1049. return Result.error(500, "查询失败:" + e.getMessage());
  1050. }
  1051. }
  1052. /**
  1053. * 获取被逻辑删除的用户列表,无分页
  1054. *
  1055. * @return logicDeletedUserList
  1056. */
  1057. @GetMapping("/recycleBin")
  1058. public Result getRecycleBin() {
  1059. List<SysUser> logicDeletedUserList = sysUserService.queryLogicDeleted();
  1060. if (logicDeletedUserList.size() > 0) {
  1061. // 批量查询用户的所属部门
  1062. // step.1 先拿到全部的 userIds
  1063. List<String> userIds = logicDeletedUserList.stream().map(SysUser::getId).collect(Collectors.toList());
  1064. // step.2 通过 userIds,一次性查询用户的所属部门名字
  1065. Map<String, String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
  1066. logicDeletedUserList.forEach(item -> item.setOrgCode(useDepNames.get(item.getId())));
  1067. }
  1068. return Result.ok(logicDeletedUserList);
  1069. }
  1070. /**
  1071. * 还原被逻辑删除的用户
  1072. *
  1073. * @param jsonObject
  1074. * @return
  1075. */
  1076. @RequestMapping(value = "/putRecycleBin", method = RequestMethod.POST)
  1077. public Result putRecycleBin(@RequestBody JSONObject jsonObject, HttpServletRequest request) {
  1078. String userIds = jsonObject.getString("userIds");
  1079. if (StringUtils.isNotBlank(userIds)) {
  1080. SysUser updateUser = new SysUser();
  1081. updateUser.setUpdateBy(JwtUtil.getUserNameByToken(request));
  1082. updateUser.setUpdateTime(new Date());
  1083. sysUserService.revertLogicDeleted(Arrays.asList(userIds.split(",")), updateUser);
  1084. }
  1085. return Result.ok("还原成功");
  1086. }
  1087. /**
  1088. * 彻底删除用户
  1089. *
  1090. * @param userIds 被删除的用户ID,多个id用半角逗号分割
  1091. * @return
  1092. */
  1093. //@RequiresRoles({"admin"})
  1094. @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.POST)
  1095. public Result deleteRecycleBin(@RequestParam("userIds") String userIds) {
  1096. if (StringUtils.isNotBlank(userIds)) {
  1097. sysUserService.removeLogicDeleted(Arrays.asList(userIds.split(",")));
  1098. }
  1099. return Result.ok("删除成功");
  1100. }
  1101. /**
  1102. * 移动端修改用户信息
  1103. * @param jsonObject
  1104. * @return
  1105. */
  1106. @RequestMapping(value = "/appEdit", method = RequestMethod.POST)
  1107. public Result<SysUser> appEdit(HttpServletRequest request,@RequestBody JSONObject jsonObject) {
  1108. Result<SysUser> result = new Result<SysUser>();
  1109. try {
  1110. String username = JwtUtil.getUserNameByToken(request);
  1111. SysUser sysUser = sysUserService.getUserByName(username);
  1112. baseCommonService.addLog("移动端编辑用户,id: " +jsonObject.getString("id") ,CommonConstant.LOG_TYPE_2, 2);
  1113. String realname=jsonObject.getString("realname");
  1114. String avatar=jsonObject.getString("avatar");
  1115. String sex=jsonObject.getString("sex");
  1116. String phone=jsonObject.getString("phone");
  1117. String email=jsonObject.getString("email");
  1118. Date birthday=jsonObject.getDate("birthday");
  1119. SysUser userPhone = sysUserService.getUserByPhone(phone);
  1120. if(sysUser==null) {
  1121. result.error500("未找到对应用户!");
  1122. }else {
  1123. if(userPhone!=null){
  1124. String userPhonename = userPhone.getUsername();
  1125. if(!userPhonename.equals(username)){
  1126. result.error500("手机号已存在!");
  1127. return result;
  1128. }
  1129. }
  1130. if(StringUtils.isNotBlank(realname)){
  1131. sysUser.setRealname(realname);
  1132. }
  1133. if(StringUtils.isNotBlank(avatar)){
  1134. sysUser.setAvatar(avatar);
  1135. }
  1136. if(StringUtils.isNotBlank(sex)){
  1137. sysUser.setSex(Integer.parseInt(sex));
  1138. }
  1139. if(StringUtils.isNotBlank(phone)){
  1140. sysUser.setPhone(phone);
  1141. }
  1142. if(StringUtils.isNotBlank(email)){
  1143. sysUser.setEmail(email);
  1144. }
  1145. if(null != birthday){
  1146. sysUser.setBirthday(birthday);
  1147. }
  1148. sysUser.setUpdateTime(new Date());
  1149. sysUserService.updateById(sysUser);
  1150. }
  1151. } catch (Exception e) {
  1152. log.error(e.getMessage(), e);
  1153. result.error500("操作失败!");
  1154. }
  1155. return result;
  1156. }
  1157. /**
  1158. * 移动端保存设备信息
  1159. * @param clientId
  1160. * @return
  1161. */
  1162. @RequestMapping(value = "/saveClientId", method = RequestMethod.GET)
  1163. public Result<SysUser> saveClientId(HttpServletRequest request,@RequestParam("clientId")String clientId) {
  1164. Result<SysUser> result = new Result<SysUser>();
  1165. try {
  1166. String username = JwtUtil.getUserNameByToken(request);
  1167. SysUser sysUser = sysUserService.getUserByName(username);
  1168. if(sysUser==null) {
  1169. result.error500("未找到对应用户!");
  1170. }else {
  1171. sysUser.setClientId(clientId);
  1172. sysUserService.updateById(sysUser);
  1173. }
  1174. } catch (Exception e) {
  1175. log.error(e.getMessage(), e);
  1176. result.error500("操作失败!");
  1177. }
  1178. return result;
  1179. }
  1180. /**
  1181. * 根据userid获取用户信息和部门员工信息
  1182. *
  1183. * @return Result
  1184. */
  1185. @GetMapping("/queryChildrenByUsername")
  1186. public Result queryChildrenByUsername(@RequestParam("userId") String userId) {
  1187. //获取用户信息
  1188. Map<String,Object> map=new HashMap<String,Object>();
  1189. SysUser sysUser = sysUserService.getById(userId);
  1190. String username = sysUser.getUsername();
  1191. Integer identity = sysUser.getUserIdentity();
  1192. map.put("sysUser",sysUser);
  1193. if(identity!=null && identity==2){
  1194. //获取部门用户信息
  1195. String departIds = sysUser.getDepartIds();
  1196. if(StringUtils.isNotBlank(departIds)){
  1197. List<String> departIdList = Arrays.asList(departIds.split(","));
  1198. List<SysUser> childrenUser = sysUserService.queryByDepIds(departIdList,username);
  1199. map.put("children",childrenUser);
  1200. }
  1201. }
  1202. return Result.ok(map);
  1203. }
  1204. /**
  1205. * 移动端查询部门用户信息
  1206. * @param departId
  1207. * @return
  1208. */
  1209. @GetMapping("/appQueryByDepartId")
  1210. public Result<List<SysUser>> appQueryByDepartId(@RequestParam(name="departId", required = false) String departId) {
  1211. Result<List<SysUser>> result = new Result<List<SysUser>>();
  1212. List<String> list=new ArrayList<String> ();
  1213. list.add(departId);
  1214. List<SysUser> childrenUser = sysUserService.queryByDepIds(list,null);
  1215. result.setResult(childrenUser);
  1216. return result;
  1217. }
  1218. /**
  1219. * 移动端查询用户信息(通过用户名模糊查询)
  1220. * @param keyword
  1221. * @return
  1222. */
  1223. @GetMapping("/appQueryUser")
  1224. public Result<List<SysUser>> appQueryUser(@RequestParam(name = "keyword", required = false) String keyword) {
  1225. Result<List<SysUser>> result = new Result<List<SysUser>>();
  1226. LambdaQueryWrapper<SysUser> queryWrapper =new LambdaQueryWrapper<SysUser>();
  1227. //TODO 外部模拟登陆临时账号,列表不显示
  1228. queryWrapper.ne(SysUser::getUsername,"_reserve_user_external");
  1229. if(StringUtils.isNotBlank(keyword)){
  1230. queryWrapper.and(i -> i.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword));
  1231. }
  1232. List<SysUser> list = sysUserService.list(queryWrapper);
  1233. //批量查询用户的所属部门
  1234. //step.1 先拿到全部的 useids
  1235. //step.2 通过 useids,一次性查询用户的所属部门名字
  1236. List<String> userIds = list.stream().map(SysUser::getId).collect(Collectors.toList());
  1237. if(userIds!=null && userIds.size()>0){
  1238. Map<String,String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
  1239. list.forEach(item->{
  1240. item.setOrgCodeTxt(useDepNames.get(item.getId()));
  1241. });
  1242. }
  1243. result.setResult(list);
  1244. return result;
  1245. }
  1246. /**
  1247. * 根据用户名修改手机号
  1248. * @param json
  1249. * @return
  1250. */
  1251. @RequestMapping(value = "/updateMobile", method = RequestMethod.POST)
  1252. public Result<?> changMobile(@RequestBody JSONObject json,HttpServletRequest request) {
  1253. String smscode = json.getString("smscode");
  1254. String phone = json.getString("phone");
  1255. Result<SysUser> result = new Result<SysUser>();
  1256. //获取登录用户名
  1257. String username = JwtUtil.getUserNameByToken(request);
  1258. if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone)) {
  1259. result.setMessage("修改手机号失败!");
  1260. result.setSuccess(false);
  1261. return result;
  1262. }
  1263. Object object= redisUtil.get(phone);
  1264. if(null==object) {
  1265. result.setMessage("短信验证码失效!");
  1266. result.setSuccess(false);
  1267. return result;
  1268. }
  1269. if(!smscode.equals(object.toString())) {
  1270. result.setMessage("短信验证码不匹配!");
  1271. result.setSuccess(false);
  1272. return result;
  1273. }
  1274. SysUser user = sysUserService.getUserByName(username);
  1275. if(user==null) {
  1276. return Result.error("用户不存在!");
  1277. }
  1278. user.setPhone(phone);
  1279. sysUserService.updateById(user);
  1280. return Result.ok("手机号设置成功!");
  1281. }
  1282. /**
  1283. * 根据对象里面的属性值作in查询 属性可能会变 用户组件用到
  1284. * @param sysUser
  1285. * @return
  1286. */
  1287. @GetMapping("/getMultiUser")
  1288. public List<SysUser> getMultiUser(SysUser sysUser){
  1289. QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(sysUser, null);
  1290. List<SysUser> ls = this.sysUserService.list(queryWrapper);
  1291. for(SysUser user: ls){
  1292. user.setPassword(null);
  1293. user.setSalt(null);
  1294. }
  1295. return ls;
  1296. }
  1297. }