数字人管理平台
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

197 rader
8.6 KiB

  1. package com.xueyi.auth.service;
  2. import com.xueyi.auth.form.RegisterBody;
  3. import com.xueyi.common.core.constant.basic.BaseConstants;
  4. import com.xueyi.common.core.constant.basic.Constants;
  5. import com.xueyi.common.core.constant.basic.DictConstants;
  6. import com.xueyi.common.core.constant.basic.SecurityConstants;
  7. import com.xueyi.common.core.constant.basic.TenantConstants;
  8. import com.xueyi.common.core.constant.system.OrganizeConstants;
  9. import com.xueyi.common.core.utils.core.ObjectUtil;
  10. import com.xueyi.common.core.utils.core.StrUtil;
  11. import com.xueyi.common.core.utils.ip.IpUtil;
  12. import com.xueyi.common.core.web.result.AjaxResult;
  13. import com.xueyi.common.core.web.result.R;
  14. import com.xueyi.system.api.authority.feign.RemoteLoginService;
  15. import com.xueyi.system.api.log.domain.dto.SysLoginLogDto;
  16. import com.xueyi.system.api.log.feign.RemoteLogService;
  17. import com.xueyi.system.api.model.LoginUser;
  18. import com.xueyi.system.api.organize.domain.dto.SysUserDto;
  19. import com.xueyi.tenant.api.tenant.feign.RemoteTenantService;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Component;
  24. /**
  25. * 登录校验方法
  26. *
  27. * @author xueyi
  28. */
  29. @Component
  30. public class SysLoginService {
  31. private final Logger logger = LoggerFactory.getLogger(SysLoginService.class);
  32. @Autowired
  33. private RemoteLogService remoteLogService;
  34. @Autowired
  35. private RemoteLoginService remoteLoginService;
  36. @Autowired
  37. private RemoteTenantService remoteTenantService;
  38. /**
  39. * 登录
  40. */
  41. public LoginUser login(String enterpriseName, String userName, String password) {
  42. // 企业账号||员工账号||密码为空 错误
  43. if (StrUtil.hasBlank(enterpriseName, userName, password)) {
  44. recordLoginInfo(enterpriseName, userName, Constants.LOGIN_FAIL, "企业账号/员工账号/密码必须填写");
  45. AjaxResult.warn("企业账号/员工账号/密码必须填写");
  46. }
  47. // 企业账号不在指定范围内 错误
  48. if (enterpriseName.length() < OrganizeConstants.ENTERPRISE_NAME_MIN_LENGTH
  49. || enterpriseName.length() > OrganizeConstants.ENTERPRISE_NAME_MAX_LENGTH) {
  50. recordLoginInfo(enterpriseName, userName, Constants.LOGIN_FAIL, "企业账号不在指定范围");
  51. AjaxResult.warn("企业账号不在指定范围");
  52. }
  53. // 员工账号不在指定范围内 错误
  54. if (userName.length() < OrganizeConstants.USERNAME_MIN_LENGTH
  55. || userName.length() > OrganizeConstants.USERNAME_MAX_LENGTH) {
  56. recordLoginInfo(enterpriseName, userName, Constants.LOGIN_FAIL, "员工账号不在指定范围");
  57. AjaxResult.warn("员工账号不在指定范围");
  58. }
  59. // 密码如果不在指定范围内 错误
  60. if (password.length() < OrganizeConstants.PASSWORD_MIN_LENGTH
  61. || password.length() > OrganizeConstants.PASSWORD_MAX_LENGTH) {
  62. recordLoginInfo(enterpriseName, userName, Constants.LOGIN_FAIL, "用户密码不在指定范围");
  63. AjaxResult.warn("用户密码不在指定范围");
  64. }
  65. // 查询登录信息
  66. R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInner(enterpriseName, userName, password, SecurityConstants.INNER);
  67. if (loginInfoResult.isFail()) {
  68. AjaxResult.warn("当前访问人数过多,请稍后再试!");
  69. } else if (ObjectUtil.isNull(loginInfoResult.getData())) {
  70. recordLoginInfo(enterpriseName, userName, Constants.LOGIN_FAIL, loginInfoResult.getMsg());
  71. AjaxResult.warn("企业账号/员工账号/密码错误,请检查!");
  72. }
  73. LoginUser loginUser = loginInfoResult.getData();
  74. Long enterpriseId = loginUser.getEnterpriseId();
  75. String sourceName = loginUser.getSourceName();
  76. SysUserDto user = loginUser.getUser();
  77. Long userId = user.getId();
  78. String userNick = user.getNickName();
  79. if (BaseConstants.Status.DISABLE.getCode().equals(loginUser.getUser().getStatus())) {
  80. recordLoginInfo(sourceName, enterpriseId, enterpriseName, userId, userName, userNick, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
  81. AjaxResult.warn("对不起,您的账号:" + userName + " 已停用!");
  82. }
  83. recordLoginInfo(sourceName, enterpriseId, enterpriseName, userId, userName, userNick, Constants.LOGIN_SUCCESS, "登录成功");
  84. return loginUser;
  85. }
  86. /**
  87. * 退出
  88. */
  89. public void logout(String sourceName, Long enterpriseId, String enterpriseName, Long userId, String userName, String userNick) {
  90. recordLoginInfo(sourceName, enterpriseId, enterpriseName, userId, userName, userNick, Constants.LOGOUT, "退出成功");
  91. }
  92. /**
  93. * 注册
  94. */
  95. public void register(RegisterBody registerBody) {
  96. // 注册租户信息
  97. R<?> registerResult = remoteTenantService.registerTenantInfo(registerBody.buildJson(), SecurityConstants.INNER);
  98. if (R.FAIL == registerResult.getCode()) {
  99. AjaxResult.warn(registerResult.getMsg());
  100. }
  101. // 注册逻辑补充完整后再增加日志
  102. // recordLoginInfo(TenantConstants.Source.SLAVE.getCode(), SecurityConstants.EMPTY_TENANT_ID, registerBody.getTenant().getName(), SecurityConstants.EMPTY_USER_ID, registerBody.getUser().getUserName(), Constants.REGISTER, "注册成功");
  103. }
  104. /**
  105. * 记录登录信息 | 无企业信息
  106. *
  107. * @param enterpriseName 企业名称
  108. * @param userName 用户名
  109. * @param status 状态
  110. * @param message 消息内容
  111. */
  112. public void recordLoginInfo(String enterpriseName, String userName, String status, String message) {
  113. recordLoginInfo(TenantConstants.Source.SLAVE.getCode(), SecurityConstants.EMPTY_TENANT_ID, enterpriseName, SecurityConstants.EMPTY_USER_ID, userName, StrUtil.EMPTY, status, message);
  114. }
  115. /**
  116. * 记录登录信息 | 无用户信息
  117. *
  118. * @param sourceName 索引数据源源
  119. * @param enterpriseId 企业Id
  120. * @param enterpriseName 企业名称
  121. * @param userName 用户名
  122. * @param status 状态
  123. * @param message 消息内容
  124. */
  125. public void recordLoginInfo(String sourceName, Long enterpriseId, String enterpriseName, String userName, String status, String message) {
  126. recordLoginInfo(sourceName, enterpriseId, enterpriseName, SecurityConstants.EMPTY_USER_ID, userName, StrUtil.EMPTY, status, message);
  127. }
  128. /**
  129. * 记录登录信息
  130. *
  131. * @param sourceName 索引数据源源
  132. * @param enterpriseId 企业Id
  133. * @param enterpriseName 企业名称
  134. * @param userId 用户Id
  135. * @param userName 用户名
  136. * @param status 状态
  137. * @param message 消息内容
  138. */
  139. public void recordLoginInfo(String sourceName, Long enterpriseId, String enterpriseName, Long userId, String userName, String userNick, String status, String message) {
  140. SysLoginLogDto loginInfo = new SysLoginLogDto();
  141. loginInfo.setEnterpriseId(enterpriseId);
  142. loginInfo.setEnterpriseName(enterpriseName);
  143. loginInfo.setUserId(userId);
  144. loginInfo.setUserName(userName);
  145. loginInfo.setUserNick(userNick);
  146. loginInfo.setIpaddr(IpUtil.getIpAddr());
  147. loginInfo.setMsg(message);
  148. // 日志状态
  149. if (StrUtil.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
  150. loginInfo.setStatus(DictConstants.DicStatus.NORMAL.getCode());
  151. } else if (Constants.LOGIN_FAIL.equals(status)) {
  152. loginInfo.setStatus(DictConstants.DicStatus.FAIL.getCode());
  153. }
  154. remoteLogService.saveLoginInfo(loginInfo, enterpriseId, sourceName, SecurityConstants.INNER);
  155. }
  156. public LoginUser loginByPhone(String phone) {
  157. logger.info("phone:{}", phone);
  158. R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInnerByPhone(phone, SecurityConstants.INNER);
  159. if (ObjectUtil.isNull(loginInfoResult.getData())) {
  160. AjaxResult.warn("手机号可能输错,请查证后重试!");
  161. }
  162. return loginInfoResult.getData();
  163. }
  164. public LoginUser loginByTenant(Long tenantId) {
  165. logger.info("tenantId:{}", tenantId);
  166. R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInnerByTenant(tenantId, SecurityConstants.INNER);
  167. if (ObjectUtil.isNull(loginInfoResult.getData())) {
  168. AjaxResult.warn("租户号错误,请查证后重试!");
  169. }
  170. return loginInfoResult.getData();
  171. }
  172. }