SysUserFacade.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.diagbot.client.AuthServiceClient;
  6. import com.diagbot.dto.BasDeptInfoDTO;
  7. import com.diagbot.dto.BasHospitalInfoDTO;
  8. import com.diagbot.dto.JwtDTO;
  9. import com.diagbot.dto.LoginDTO;
  10. import com.diagbot.dto.SysRoleDTO;
  11. import com.diagbot.dto.SysUserDeptDTO;
  12. import com.diagbot.dto.SysUserPermissionDTO;
  13. import com.diagbot.dto.SysUserQueryDTO;
  14. import com.diagbot.dto.SysUserRoleDTO;
  15. import com.diagbot.dto.UserLoginDTO;
  16. import com.diagbot.entity.BasHospitalInfo;
  17. import com.diagbot.entity.JWT;
  18. import com.diagbot.entity.JwtStore;
  19. import com.diagbot.entity.SysUser;
  20. import com.diagbot.entity.SysUserDept;
  21. import com.diagbot.entity.SysUserHospital;
  22. import com.diagbot.entity.SysUserRole;
  23. import com.diagbot.entity.wrapper.SysMenuWrapper;
  24. import com.diagbot.enums.ConstantEnum;
  25. import com.diagbot.enums.IsDeleteEnum;
  26. import com.diagbot.enums.StatusEnum;
  27. import com.diagbot.exception.CommonErrorCode;
  28. import com.diagbot.exception.CommonException;
  29. import com.diagbot.exception.ServiceErrorCode;
  30. import com.diagbot.service.impl.SysUserDeptServiceImpl;
  31. import com.diagbot.service.impl.SysUserRoleServiceImpl;
  32. import com.diagbot.service.impl.SysUserServiceImpl;
  33. import com.diagbot.util.BeanUtil;
  34. import com.diagbot.util.DateUtil;
  35. import com.diagbot.util.EntityUtil;
  36. import com.diagbot.util.ListUtil;
  37. import com.diagbot.util.StringUtil;
  38. import com.diagbot.util.SysUserUtils;
  39. import com.diagbot.vo.BasDeptInfoVO;
  40. import com.diagbot.vo.SysUserBaseVO;
  41. import com.diagbot.vo.SysUserDeptVO;
  42. import com.diagbot.vo.SysUserQueryVO;
  43. import com.diagbot.vo.SysUserRoleVO;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.beans.factory.annotation.Qualifier;
  46. import org.springframework.security.crypto.factory.PasswordEncoderFactories;
  47. import org.springframework.security.crypto.password.PasswordEncoder;
  48. import org.springframework.security.oauth2.common.OAuth2AccessToken;
  49. import org.springframework.stereotype.Component;
  50. import java.util.*;
  51. import java.util.stream.Collectors;
  52. /**
  53. * @Description: 用户业务层
  54. * @author: gaodm
  55. * @time: 2018/8/6 9:00
  56. */
  57. @Component
  58. public class SysUserFacade extends SysUserServiceImpl {
  59. @Autowired
  60. private TokenFacade tokenFacade;
  61. @Autowired
  62. private AuthServiceClient authServiceClient;
  63. @Autowired
  64. private SysMenuFacade sysMenuFacade;
  65. @Autowired
  66. private BasHospitalInfoFacade basHospitalInfoFacade;
  67. @Autowired
  68. @Qualifier("sysUserRoleServiceImpl")
  69. private SysUserRoleServiceImpl sysUserRoleService;
  70. @Autowired
  71. @Qualifier("sysUserDeptServiceImpl")
  72. private SysUserDeptServiceImpl sysUserDeptService;
  73. @Autowired
  74. private BasDeptInfoFacade basDeptInfoFacade;
  75. @Autowired
  76. private SysRoleFacade sysRoleFacade;
  77. @Autowired
  78. private SysUserHospitalFacade sysUserHospitalFacade;
  79. @Autowired
  80. private SysUserRoleFacade sysUserRoleFacade;
  81. /**
  82. * 获取jwt
  83. *
  84. * @param username 用户名
  85. * @param password 密码
  86. * @return jwt
  87. */
  88. public JwtDTO getJwt(String username, String password) {
  89. JwtDTO data = new JwtDTO();
  90. if (StringUtil.isBlank(username)) {
  91. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  92. "请输入用户名");
  93. }
  94. if (StringUtil.isBlank(password)) {
  95. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  96. "请输入密码");
  97. }
  98. QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
  99. userQueryWrapper.eq("username", username)
  100. .eq("status", StatusEnum.Enable.getKey())
  101. .eq("is_deleted", IsDeleteEnum.N.getKey());
  102. SysUser user = this.getOne(userQueryWrapper, false);
  103. if (null == user) {
  104. throw new CommonException(ServiceErrorCode.USER_NOT_FOUND);
  105. }
  106. PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
  107. if (!passwordEncoder.matches(password, user.getPassword())) {
  108. throw new CommonException(ServiceErrorCode.USER_PASSWORD_ERROR);
  109. }
  110. JWT jwt = authServiceClient.getToken("Basic dWFhLXNlcnZpY2U6MTIzNDU2",
  111. "password", username, password);
  112. if (null == jwt) {
  113. throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL);
  114. }
  115. data.setAccessToken(jwt.getAccess_token());
  116. data.setRefreshToken(jwt.getRefresh_token());
  117. data.setType(user.getType());
  118. data.setTypeCn(ConstantEnum.getName(user.getType()));//返回中文
  119. //获取用户角色
  120. try {
  121. SysUserBaseVO sysUserBaseVO = new SysUserBaseVO();
  122. sysUserBaseVO.setUserId(user.getId());
  123. List<SysRoleDTO> selRoles =getlocalUserRoles(sysUserBaseVO);
  124. if(selRoles!=null&&!selRoles.isEmpty())
  125. {
  126. data.setSelRoles(selRoles);
  127. }
  128. }
  129. catch (Exception e)
  130. {
  131. e.printStackTrace();
  132. }
  133. //token存入redis
  134. JwtStore jwtStore = new JwtStore();
  135. jwtStore.setAccessToken(jwt.getAccess_token());
  136. jwtStore.setRefreshToken(jwt.getRefresh_token());
  137. tokenFacade.createToken(jwtStore);
  138. /***
  139. * 未加密密码复杂度判断
  140. */
  141. /* Boolean passwordRegular = passwordRegular(password);
  142. if(!passwordRegular){
  143. data.setPasswordComplexity("密码复杂度过低,请及时修改密码");
  144. }*/
  145. return data;
  146. }
  147. /**
  148. * 外部获取jwt
  149. *
  150. * @param username 用户名
  151. * @return jwt
  152. */
  153. public JwtDTO getJwtNoPass(String username) {
  154. JwtDTO data = new JwtDTO();
  155. if (StringUtil.isBlank(username)) {
  156. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  157. "请输入用户名");
  158. }
  159. QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
  160. userQueryWrapper.eq("username", username)
  161. .eq("status", StatusEnum.Enable.getKey())
  162. .eq("is_deleted", IsDeleteEnum.N.getKey());
  163. SysUser user = this.getOne(userQueryWrapper, false);
  164. if (null == user) {
  165. throw new CommonException(ServiceErrorCode.USER_NOT_FOUND);
  166. }
  167. JwtStore jwt = tokenFacade.getToken(user.getId().toString());
  168. if (null == jwt) {
  169. throw new CommonException(CommonErrorCode.NOT_EXISTS, "Token不存在,请重新登录");
  170. }
  171. data.setAccessToken(jwt.getAccessToken());
  172. data.setRefreshToken(jwt.getRefreshToken());
  173. data.setType(user.getType());
  174. data.setTypeCn(ConstantEnum.getName(user.getType()));//返回中文
  175. return data;
  176. }
  177. /**
  178. * 刷新jwt
  179. *
  180. * @param refreshToken
  181. * @return jwt
  182. */
  183. public JwtDTO refreshJwt(String refreshToken) {
  184. JwtDTO data = new JwtDTO();
  185. if (StringUtil.isBlank(refreshToken)) {
  186. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  187. "刷新令牌不能为空");
  188. }
  189. //验证刷新令牌有效性
  190. if (!tokenFacade.verifyToken(refreshToken, 2)) {
  191. throw new CommonException(CommonErrorCode.TOKEN_PAST);
  192. }
  193. JWT jwt = authServiceClient.refreshToken("Basic dWFhLXNlcnZpY2U6MTIzNDU2",
  194. "refresh_token", refreshToken);
  195. if (null == jwt) {
  196. throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL);
  197. }
  198. data.setAccessToken(jwt.getAccess_token());
  199. data.setRefreshToken(jwt.getRefresh_token());
  200. //token存入redis
  201. JwtStore jwtStore = new JwtStore();
  202. jwtStore.setAccessToken(jwt.getAccess_token());
  203. jwtStore.setRefreshToken(jwt.getRefresh_token());
  204. tokenFacade.createToken(jwtStore);
  205. return data;
  206. }
  207. /**
  208. * 验证jwt
  209. *
  210. * @param token
  211. * @return jwt
  212. */
  213. public OAuth2AccessToken checkToken(String token) {
  214. if (StringUtil.isBlank(token)) {
  215. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  216. "令牌不能为空");
  217. }
  218. OAuth2AccessToken jwt
  219. = authServiceClient.checkToken("Basic dWFhLXNlcnZpY2U6MTIzNDU2", token);
  220. if (null == jwt) {
  221. throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL, "该Token不正确!");
  222. }
  223. return jwt;
  224. }
  225. /**
  226. * 修改密码
  227. *
  228. * @param password 原密码
  229. * @param modifyPassword 新密码
  230. * @return 修改密码是否成功
  231. */
  232. public Boolean modifyPassword(String password, String modifyPassword) {
  233. if (StringUtil.isBlank(password)) {
  234. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  235. "请输入密码");
  236. }
  237. if (StringUtil.isBlank(modifyPassword)) {
  238. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  239. "请输入新密码");
  240. }
  241. if (password.equals(modifyPassword)) {
  242. throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
  243. "原密码和新密码不能相同");
  244. }
  245. /* Boolean regularBoolean = passwordRegular(modifyPassword);
  246. if(!regularBoolean){
  247. throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "请输入正确格式的新密码");
  248. }*/
  249. String userId = SysUserUtils.getCurrentPrincipleID();
  250. SysUser user = this.getOne(new QueryWrapper<SysUser>()
  251. .eq("is_deleted", IsDeleteEnum.N.getKey())
  252. .eq("status", StatusEnum.Enable.getKey())
  253. .eq("id", userId), false);
  254. if (null == user) {
  255. throw new CommonException(ServiceErrorCode.USER_NOT_FOUND);
  256. }
  257. PasswordEncoder passwordEncoder
  258. = PasswordEncoderFactories.createDelegatingPasswordEncoder();
  259. if (!passwordEncoder.matches(password, user.getPassword())) {
  260. throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "原密码错误");
  261. }
  262. String entryPassword = passwordEncoder.encode(modifyPassword);
  263. user.setPassword(entryPassword);
  264. user.setGmtModified(DateUtil.now());
  265. user.setModifier(userId);
  266. this.updateById(user);
  267. return true;
  268. }
  269. /**
  270. * 未加密密文正则表达式 至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
  271. * @param password
  272. * @return
  273. */
  274. public Boolean passwordRegular(String password){
  275. String regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}";
  276. boolean check=password.matches(regex);
  277. return check;
  278. }
  279. /**
  280. * 登录
  281. *
  282. * @return 登录相关信息
  283. */
  284. public LoginDTO getUserOrgMenu() {
  285. LoginDTO data = new LoginDTO();
  286. Set<String> roleSet = new HashSet<>();
  287. Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
  288. SysUser user = this.getOne(new QueryWrapper<SysUser>()
  289. .eq("is_deleted", IsDeleteEnum.N.getKey())
  290. .eq("status", StatusEnum.Enable.getKey())
  291. .eq("id", userId), false);
  292. QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
  293. sysUserRoleQueryWrapper.eq("user_id",userId);
  294. sysUserRoleQueryWrapper .eq("is_deleted", IsDeleteEnum.N.getKey());
  295. List<SysUserRole> sysUserRoleList = sysUserRoleFacade.list(sysUserRoleQueryWrapper);
  296. if(ListUtil.isNotEmpty(sysUserRoleList)){
  297. sysUserRoleList.forEach(sysUserRole ->{
  298. roleSet.add(sysUserRole.getRoleId()+"");
  299. } );
  300. }
  301. if (user == null) {
  302. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
  303. "用户不存在【" + userId + "】");
  304. }
  305. //添加用户
  306. UserLoginDTO userLoginDTO = new UserLoginDTO();
  307. BeanUtil.copyProperties(user, userLoginDTO);
  308. data.setUserLoginDTO(userLoginDTO);
  309. //添加医院信息
  310. if (user.getType().equals(ConstantEnum.OUTER_USER.getKey())) {
  311. QueryWrapper<BasHospitalInfo> queryWrapper = new QueryWrapper<>();
  312. queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  313. .eq("id", SysUserUtils.getCurrentHospitalID());
  314. BasHospitalInfo basHospitalInfo = basHospitalInfoFacade.getOne(queryWrapper, false);
  315. BasHospitalInfoDTO basHospitalInfoDTO = new BasHospitalInfoDTO();
  316. BeanUtil.copyProperties(basHospitalInfo, basHospitalInfoDTO);
  317. data.setBasHospitalInfoDTO(basHospitalInfoDTO);
  318. }
  319. //添加菜单信息
  320. List<SysMenuWrapper> menuList = sysMenuFacade.getByRole(user.getId(),roleSet);
  321. List<SysUserPermissionDTO> sysUserPermissionDTOList = sysMenuFacade.getByRolePermission(user.getId(),roleSet);
  322. Map<Long, List<SysMenuWrapper>> menuMap = EntityUtil.makeEntityListMap(menuList, "parentId");
  323. Map<Long, List<SysUserPermissionDTO>> menuPermissionMap = EntityUtil.makeEntityListMap(sysUserPermissionDTOList, "menuId");
  324. List<SysMenuWrapper> menuRes = menuMap.get(-1L);
  325. for (SysMenuWrapper bean : menuRes) {
  326. getSonMenu(bean, menuMap, menuPermissionMap);
  327. }
  328. data.setMenuWrappers(menuRes);
  329. return data;
  330. }
  331. /**
  332. * 递归获取菜单结构
  333. *
  334. * @param menu 当前菜单
  335. * @param menuMap 菜单集
  336. * @return 菜单结构
  337. */
  338. public List<SysMenuWrapper> getSonMenu(SysMenuWrapper menu,
  339. Map<Long, List<SysMenuWrapper>> menuMap,
  340. Map<Long, List<SysUserPermissionDTO>> menuPermissionMap) {
  341. List<SysMenuWrapper> res = new ArrayList<>();
  342. List<SysMenuWrapper> list = menuMap.get(menu.getId());
  343. List<SysUserPermissionDTO> listPermission = menuPermissionMap.get(menu.getId());
  344. if (ListUtil.isNotEmpty(listPermission)) {
  345. menu.setSysUserPermissionDTOList(listPermission);
  346. }
  347. if (ListUtil.isNotEmpty(list)) {
  348. menu.setSubMenuList(list);
  349. for (SysMenuWrapper bean : list) {
  350. getSonMenu(bean, menuMap, menuPermissionMap);
  351. }
  352. }
  353. return res;
  354. }
  355. /**
  356. * 递归获取菜单结构
  357. *
  358. * @param menuList 菜单参数
  359. */
  360. public void getMenuStruct(List<SysMenuWrapper> menuList) {
  361. for (SysMenuWrapper m : menuList) {
  362. m.setSubMenuList(recursion(m));
  363. }
  364. }
  365. /**
  366. * 递归查询菜单信息
  367. *
  368. * @param m 参数
  369. * @return 菜单信息
  370. */
  371. public List<SysMenuWrapper> recursion(SysMenuWrapper m) {
  372. List<SysMenuWrapper> subMenu = sysMenuFacade.getSubMenuById(m.getId());
  373. for (SysMenuWrapper sub : subMenu) {
  374. sub.setSubMenuList(recursion(sub));
  375. }
  376. return subMenu;
  377. }
  378. //-------------用户维护BEGAIN------------------------
  379. /**
  380. * 用户列表翻页信息查询
  381. *
  382. * @param sysUserQueryVO 用户列表翻页信息入参
  383. * @return 用户列表翻页信息
  384. */
  385. public IPage<SysUserQueryDTO> userPageFac(SysUserQueryVO sysUserQueryVO) {
  386. sysUserQueryVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
  387. return this.userPage(sysUserQueryVO);
  388. }
  389. /**
  390. * 获取用户科室
  391. *
  392. * @param sysUserBaseVO 获取用户科室入参
  393. * @return 用户科室信息
  394. */
  395. public SysUserDeptDTO getUserDepts(SysUserBaseVO sysUserBaseVO) {
  396. checkUser(sysUserBaseVO.getUserId());
  397. SysUserDeptDTO sysUserDeptDTO = new SysUserDeptDTO();
  398. sysUserDeptDTO.setUserId(sysUserBaseVO.getUserId());
  399. BasDeptInfoVO basDeptInfoVO = new BasDeptInfoVO();
  400. List<BasDeptInfoDTO> basDeptInfoDTOList = basDeptInfoFacade.listForUser(basDeptInfoVO);
  401. List<SysUserDept> sysUserDeptList
  402. = sysUserDeptService.list(new QueryWrapper<SysUserDept>()
  403. .eq("is_deleted", IsDeleteEnum.N.getKey())
  404. .eq("user_id", sysUserBaseVO.getUserId())
  405. );
  406. if (ListUtil.isNotEmpty(sysUserDeptList)) {
  407. List<BasDeptInfoDTO> notSelDepts = new ArrayList<>();
  408. List<BasDeptInfoDTO> selDepts = new ArrayList<>();
  409. Set<String> selDeptIds = sysUserDeptList.stream()
  410. .map(SysUserDept::getDeptId)
  411. .collect(Collectors.toSet());
  412. for (BasDeptInfoDTO basDeptInfoDTO : basDeptInfoDTOList) {
  413. if (selDeptIds.contains(basDeptInfoDTO.getDeptId())) {
  414. selDepts.add(basDeptInfoDTO);
  415. } else {
  416. notSelDepts.add(basDeptInfoDTO);
  417. }
  418. }
  419. sysUserDeptDTO.setNotSelDepts(notSelDepts);
  420. sysUserDeptDTO.setSelDepts(selDepts);
  421. } else {
  422. sysUserDeptDTO.setNotSelDepts(basDeptInfoDTOList);
  423. }
  424. return sysUserDeptDTO;
  425. }
  426. /**
  427. * 获取用户角色
  428. *
  429. * @param sysUserBaseVO 获取用户角色入参
  430. * @return 用户角色信息
  431. */
  432. public SysUserRoleDTO getUserRoles(SysUserBaseVO sysUserBaseVO) {
  433. checkUser(sysUserBaseVO.getUserId());
  434. SysUserRoleDTO sysUserRoleDTO = new SysUserRoleDTO();
  435. sysUserRoleDTO.setUserId(sysUserBaseVO.getUserId());
  436. List<SysRoleDTO> sysRoleDTOList = sysRoleFacade.listFac();
  437. List<SysUserRole> sysUserRoleList
  438. = sysUserRoleService.list(new QueryWrapper<SysUserRole>()
  439. .eq("is_deleted", IsDeleteEnum.N.getKey())
  440. .eq("user_id", sysUserBaseVO.getUserId())
  441. );
  442. if (ListUtil.isNotEmpty(sysUserRoleList)) {
  443. List<SysRoleDTO> notSelRoles = new ArrayList<>();
  444. List<SysRoleDTO> selRoles = new ArrayList<>();
  445. Set<Long> selRoleIds = sysUserRoleList.stream()
  446. .map(SysUserRole::getRoleId)
  447. .collect(Collectors.toSet());
  448. for (SysRoleDTO sysRoleDTO : sysRoleDTOList) {
  449. if (selRoleIds.contains(sysRoleDTO.getId())) {
  450. selRoles.add(sysRoleDTO);
  451. } else {
  452. notSelRoles.add(sysRoleDTO);
  453. }
  454. }
  455. sysUserRoleDTO.setNotSelRoles(notSelRoles);
  456. sysUserRoleDTO.setSelRoles(selRoles);
  457. } else {
  458. sysUserRoleDTO.setNotSelRoles(sysRoleDTOList);
  459. }
  460. return sysUserRoleDTO;
  461. }
  462. /**
  463. * 获取用户角色
  464. *
  465. * @param sysUserBaseVO 获取用户角色入参
  466. * @return 用户角色信息
  467. */
  468. private List<SysRoleDTO> getlocalUserRoles(SysUserBaseVO sysUserBaseVO) {
  469. SysUserRoleDTO sysUserRoleDTO = new SysUserRoleDTO();
  470. sysUserRoleDTO.setUserId(sysUserBaseVO.getUserId());
  471. List<SysRoleDTO> sysRoleDTOList = sysRoleFacade.listFac();
  472. List<SysUserRole> sysUserRoleList
  473. = sysUserRoleService.list(new QueryWrapper<SysUserRole>()
  474. .eq("is_deleted", IsDeleteEnum.N.getKey())
  475. .eq("user_id", sysUserBaseVO.getUserId())
  476. );
  477. List<SysRoleDTO> selRoles = new ArrayList<>();
  478. if (ListUtil.isNotEmpty(sysUserRoleList)) {
  479. Set<Long> selRoleIds = sysUserRoleList.stream()
  480. .map(SysUserRole::getRoleId)
  481. .collect(Collectors.toSet());
  482. for (SysRoleDTO sysRoleDTO : sysRoleDTOList) {
  483. if (selRoleIds.contains(sysRoleDTO.getId())) {
  484. selRoles.add(sysRoleDTO);
  485. }
  486. }
  487. sysUserRoleDTO.setSelRoles(selRoles);
  488. }
  489. return selRoles;
  490. }
  491. /**
  492. * 用户启用
  493. *
  494. * @param sysUserBaseVO 用户启用入参
  495. * @return 是否成功
  496. */
  497. public Boolean enable(SysUserBaseVO sysUserBaseVO) {
  498. checkUser(sysUserBaseVO.getUserId());
  499. Date now = DateUtil.now();
  500. String userId = SysUserUtils.getCurrentPrincipleID();
  501. return this.update(new UpdateWrapper<SysUser>()
  502. .eq("is_deleted", IsDeleteEnum.N.getKey())
  503. .eq("id", sysUserBaseVO.getUserId())
  504. .eq("status", StatusEnum.Disable.getKey())
  505. .set("modifier", userId)
  506. .set("gmt_modified", now)
  507. .set("status", StatusEnum.Enable.getKey())
  508. );
  509. }
  510. /**
  511. * 用户停用
  512. *
  513. * @param sysUserBaseVO 用户停用入参
  514. * @return 是否成功
  515. */
  516. public Boolean disable(SysUserBaseVO sysUserBaseVO) {
  517. checkUser(sysUserBaseVO.getUserId());
  518. Date now = DateUtil.now();
  519. String userId = SysUserUtils.getCurrentPrincipleID();
  520. Boolean res = this.update(new UpdateWrapper<SysUser>()
  521. .eq("is_deleted", IsDeleteEnum.N.getKey())
  522. .eq("id", sysUserBaseVO.getUserId())
  523. .eq("status", StatusEnum.Enable.getKey())
  524. .set("modifier", userId)
  525. .set("gmt_modified", now)
  526. .set("status", StatusEnum.Disable.getKey())
  527. );
  528. //删除Token
  529. if (res) {
  530. tokenFacade.deleteToken(sysUserBaseVO.getUserId().toString());
  531. }
  532. return res;
  533. }
  534. /**
  535. * 编辑用户科室
  536. *
  537. * @param sysUserDeptVO 编辑用户科室入参
  538. * @return 是否成功
  539. */
  540. public Boolean editUserDepts(SysUserDeptVO sysUserDeptVO) {
  541. checkUser(sysUserDeptVO.getUserId());
  542. Date now = DateUtil.now();
  543. String userId = SysUserUtils.getCurrentPrincipleID();
  544. //删除原科室
  545. sysUserDeptService.update(new UpdateWrapper<SysUserDept>()
  546. .eq("is_deleted", IsDeleteEnum.N.getKey())
  547. .eq("user_id", sysUserDeptVO.getUserId())
  548. .set("is_deleted", IsDeleteEnum.Y.getKey())
  549. .set("modifier", userId)
  550. .set("gmt_modified", now)
  551. );
  552. //新增新科室
  553. if (ListUtil.isNotEmpty(sysUserDeptVO.getDeptIds())) {
  554. List<SysUserDept> sysUserDeptList = new ArrayList<>();
  555. for (String deptId : sysUserDeptVO.getDeptIds()) {
  556. SysUserDept sysUserDept = new SysUserDept();
  557. sysUserDept.setUserId(sysUserDeptVO.getUserId());
  558. sysUserDept.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
  559. sysUserDept.setDeptId(deptId);
  560. sysUserDept.setCreator(userId);
  561. sysUserDept.setModifier(userId);
  562. sysUserDept.setGmtCreate(now);
  563. sysUserDept.setGmtModified(now);
  564. sysUserDeptList.add(sysUserDept);
  565. }
  566. sysUserDeptService.saveBatch(sysUserDeptList);
  567. }
  568. //更新用户表
  569. return this.update(new UpdateWrapper<SysUser>()
  570. .eq("is_deleted", IsDeleteEnum.N.getKey())
  571. .eq("id", sysUserDeptVO.getUserId())
  572. .set("modifier", userId)
  573. .set("gmt_modified", now)
  574. );
  575. }
  576. /**
  577. * 编辑用户角色
  578. *
  579. * @param sysUserRoleVO 编辑用户角色入参
  580. * @return 是否成功
  581. */
  582. public Boolean editUserRoles(SysUserRoleVO sysUserRoleVO) {
  583. checkUser(sysUserRoleVO.getUserId());
  584. Date now = DateUtil.now();
  585. String userId = SysUserUtils.getCurrentPrincipleID();
  586. //删除原角色
  587. sysUserRoleService.update(new UpdateWrapper<SysUserRole>()
  588. .eq("is_deleted", IsDeleteEnum.N.getKey())
  589. .eq("user_id", sysUserRoleVO.getUserId())
  590. .set("is_deleted", IsDeleteEnum.Y.getKey())
  591. .set("modifier", userId)
  592. .set("gmt_modified", now)
  593. );
  594. //新增角色
  595. if (ListUtil.isNotEmpty(sysUserRoleVO.getRoleIds())) {
  596. List<SysUserRole> sysUserRoleList = new ArrayList<>();
  597. for (Long roleId : sysUserRoleVO.getRoleIds()) {
  598. SysUserRole sysUserRole = new SysUserRole();
  599. sysUserRole.setUserId(sysUserRoleVO.getUserId());
  600. sysUserRole.setRoleId(roleId);
  601. sysUserRole.setCreator(userId);
  602. sysUserRole.setModifier(userId);
  603. sysUserRole.setGmtCreate(now);
  604. sysUserRole.setGmtModified(now);
  605. sysUserRoleList.add(sysUserRole);
  606. }
  607. sysUserRoleService.saveBatch(sysUserRoleList);
  608. }
  609. //更新用户表
  610. this.update(new UpdateWrapper<SysUser>()
  611. .eq("is_deleted", IsDeleteEnum.N.getKey())
  612. .eq("id", sysUserRoleVO.getUserId())
  613. .set("modifier", userId)
  614. .set("gmt_modified", now)
  615. );
  616. //删除Token
  617. tokenFacade.deleteToken(sysUserRoleVO.getUserId().toString());
  618. return true;
  619. }
  620. /**
  621. * 确认用户是否是管理员下的用户
  622. *
  623. * @param userId 用户Id
  624. */
  625. private void checkUser(Long userId) {
  626. //确认用户是否是管理员统一医院下的用户
  627. Integer cnt = sysUserHospitalFacade.count(new QueryWrapper<SysUserHospital>()
  628. .eq("is_deleted", IsDeleteEnum.N.getKey())
  629. .eq("user_id", userId)
  630. .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
  631. );
  632. if (cnt < 1) {
  633. throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "该医院下无该用户");
  634. }
  635. }
  636. //-------------用户维护END---------------------------
  637. }