SysUserFacade.java 27 KB

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