LoginService.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package thyyxxk.webserver.service;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.dynamic.datasource.annotation.DS;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import thyyxxk.webserver.config.exception.ExceptionEnum;
  8. import thyyxxk.webserver.dao.his.LoginDao;
  9. import thyyxxk.webserver.entity.ResultVo;
  10. import thyyxxk.webserver.entity.dictionary.CodeName;
  11. import thyyxxk.webserver.entity.login.UserInfo;
  12. import thyyxxk.webserver.entity.login.VueMenu;
  13. import thyyxxk.webserver.service.externalhttp.CorpWxSrvc;
  14. import thyyxxk.webserver.service.redislike.RedisLikeService;
  15. import thyyxxk.webserver.utils.*;
  16. import java.util.*;
  17. /**
  18. * @author dj
  19. */
  20. @Slf4j
  21. @Service
  22. public class LoginService {
  23. private final LoginDao dao;
  24. private final TokenService tokenService;
  25. private final RedisLikeService redisLikeService;
  26. private final CorpWxSrvc srvc;
  27. private final PublicServer publicServer;
  28. @Autowired
  29. public LoginService(LoginDao dao, TokenService tokenService,
  30. RedisLikeService redisLikeService,
  31. CorpWxSrvc srvc, PublicServer publicServer) {
  32. this.dao = dao;
  33. this.tokenService = tokenService;
  34. this.redisLikeService = redisLikeService;
  35. this.srvc = srvc;
  36. this.publicServer = publicServer;
  37. }
  38. public ResultVo<UserInfo> login(UserInfo userInfo) {
  39. UserInfo tempUserInfo = dao.findUserByCodeRsFromDjUserBase(userInfo.getCodeRs());
  40. if (null == tempUserInfo) {
  41. tempUserInfo = dao.findUserByCodeRsFromEmployeeMi(userInfo.getCodeRs());
  42. if (null == tempUserInfo) {
  43. return ResultVoUtil.fail(ExceptionEnum.USER_NOT_EXIST);
  44. }
  45. dao.insertNewUserToDjUserBase(tempUserInfo);
  46. }
  47. if (!Objects.equals("fromTriageScreen", userInfo.getSid()) && !userInfo.getPassword().equals(tempUserInfo.getPassword())) {
  48. return ResultVoUtil.fail(ExceptionEnum.INVALID_PASSWORD);
  49. }
  50. String token = tokenService.getToken(tempUserInfo);
  51. try {
  52. JSONObject json = srvc.getUserinfo(tokenService.getWeComAddressBookToken(), tempUserInfo.getCodeRs());
  53. tempUserInfo.setAvatar(json.getString("avatar"));
  54. } catch (Exception ignored) {
  55. }
  56. Set<String> deptList = publicServer.getChildDeptByUserCode(tempUserInfo.getCode());
  57. if (deptList != null && !deptList.isEmpty()) {
  58. Map<String, String> tempMap = new HashMap<>(deptList.size());
  59. deptList.forEach(item -> {
  60. tempMap.put(item, redisLikeService.getDeptName(item));
  61. });
  62. tempUserInfo.setPartTimeDeptMap(tempMap);
  63. }
  64. tempUserInfo.setToken(token);
  65. tempUserInfo.setSid(makeSid(tempUserInfo.getCode(), token, userInfo.getSid()));
  66. tempUserInfo.setRoles(dao.getUserRoles(tempUserInfo.getCode()));
  67. tempUserInfo.setDeptName(dao.getDeptName(tempUserInfo.getDeptCode()));
  68. tempUserInfo.setHzDay(dao.getDeptHzDayByCode(tempUserInfo.getDeptCode()));
  69. redisLikeService.handleUserLogin(tempUserInfo.getCode());
  70. return ResultVoUtil.success(tempUserInfo);
  71. }
  72. public ResultVo<JSONObject> simpleLogin(String code) {
  73. UserInfo us = dao.getUserInfoByCode(code);
  74. if (us == null) {
  75. return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, "用户不存在");
  76. }
  77. JSONObject js = new JSONObject();
  78. ResultVo<UserInfo> userInfoResultVo = login(us);
  79. if (userInfoResultVo.getCode() == 200) {
  80. js.put("userInfo", userInfoResultVo.getData());
  81. } else {
  82. return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, userInfoResultVo.getMessage());
  83. }
  84. ResultVo<Map<String, Object>> f = fetchVueMenus(us.getCode());
  85. if (f.getCode() == 200) {
  86. js.put("fetchVueMenus", f.getData());
  87. } else {
  88. return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, f.getMessage());
  89. }
  90. return ResultVoUtil.success(js);
  91. }
  92. @DS("his")
  93. public ResultVo<Map<String, Object>> fetchVueMenus(String code) {
  94. // 63 只有个人中心的权限
  95. List<Integer> roles = dao.getUserRoles(code == null ? TokenUtil.getInstance().getTokenUserId() : code);
  96. if (null == roles || roles.isEmpty()) {
  97. roles = Collections.singletonList(63);
  98. } else {
  99. roles.add(63);
  100. }
  101. List<VueMenu> temp = dao.selectVueMenusByRoles(roles);
  102. Map<String, Object> map = new HashMap<>();
  103. List<VueMenu> list = TreeUtil.getVueMenuTree(temp);
  104. map.put("routes", list);
  105. map.put("flatRoutes", dao.selectRoutesByRoles(roles));
  106. map.put("paths", dao.selectVueMenusPathByRoles(roles));
  107. return ResultVoUtil.success(map);
  108. }
  109. public ResultVo<List<CodeName>> getWards() {
  110. String code = TokenUtil.getInstance().getTokenUserId();
  111. if (publicServer.needRule(2, 8, 52)) {
  112. return ResultVoUtil.success(dao.getAllWards());
  113. } else {
  114. return ResultVoUtil.success(dao.getUserWards(code));
  115. }
  116. }
  117. public UserInfo findUserByCode(String code) {
  118. return dao.findUserByCode(code);
  119. }
  120. private String makeSid(String code, String token, String sid) {
  121. String tempToken = token.replaceAll("\\.", "").replaceAll("_", "").replaceAll("-", "");
  122. String flakeIdSub = "-" + SnowFlakeId.instance().nextId() + "-";
  123. int random = new Random().nextInt(80);
  124. String tokenSub = tempToken.substring(random, random + 18);
  125. if (StringUtil.notBlank(sid) && "fromTriageScreen".equals(sid)) {
  126. tokenSub += "-triageFloorScreen";
  127. }
  128. return code + flakeIdSub + tokenSub;
  129. }
  130. }