SysUserFacade.java 27 KB

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