SysUserFacade.java 27 KB

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