|
|
@@ -0,0 +1,126 @@
|
|
|
+package com.ydtech.modules.admin.service.impl;
|
|
|
+
|
|
|
+import cn.dev33.satoken.session.SaSession;
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.ydtech.constants.SysConstants;
|
|
|
+import com.ydtech.constants.sys.SysPasswordEnum;
|
|
|
+import com.ydtech.core.page.HttpResult;
|
|
|
+import com.ydtech.exception.SystemException;
|
|
|
+import com.ydtech.modules.admin.constants.UserWorkStatus;
|
|
|
+import com.ydtech.modules.admin.model.SysPassword;
|
|
|
+import com.ydtech.modules.admin.model.SysRole;
|
|
|
+import com.ydtech.modules.admin.model.SysUser;
|
|
|
+import com.ydtech.modules.admin.model.po.SysUserLinkSys;
|
|
|
+import com.ydtech.modules.admin.model.vo.LoginBean;
|
|
|
+import com.ydtech.modules.admin.service.*;
|
|
|
+import com.ydtech.security.utils.PasswordUtils;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class SysLoginServiceImpl implements SysLoginService {
|
|
|
+
|
|
|
+ private final StringRedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ private final SysUserService sysUserService;
|
|
|
+
|
|
|
+ private final SysUserLinkSysService sysUserLinkSysService;
|
|
|
+
|
|
|
+ private final SysPasswordService sysPasswordService;
|
|
|
+
|
|
|
+ private final SysUserRoleService sysUserRoleService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<String> loginApp(LoginBean loginBean) {
|
|
|
+ this.verifyTheVerificationCode(loginBean);
|
|
|
+ String username = loginBean.getAccount();
|
|
|
+ String password = loginBean.getPassword();
|
|
|
+ // 用户信息
|
|
|
+ SysUser user = sysUserService.getById(username);
|
|
|
+ return getHttpResult(loginBean, username, user, password);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<String> loginPC(LoginBean loginBean) {
|
|
|
+ this.verifyTheVerificationCode(loginBean);
|
|
|
+ String username = loginBean.getAccount();
|
|
|
+ String password = loginBean.getPassword();
|
|
|
+ // 用户信息
|
|
|
+ SysUser user = sysUserService.judgmentIncumbency(username);
|
|
|
+ return getHttpResult(loginBean, username, user, password);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void verifyTheVerificationCode(LoginBean loginBean) {
|
|
|
+ String captcha = loginBean.getCaptcha();
|
|
|
+ String captchaId = loginBean.getCaptchaId();
|
|
|
+ if (StringUtils.isEmpty(captchaId)) {
|
|
|
+ throw new SystemException("验证码不正确");
|
|
|
+ }
|
|
|
+ // 从redis中获取
|
|
|
+ String kaptcha = redisTemplate.opsForValue().get(captchaId);
|
|
|
+ log.info("登录校验验证码,redis取出的信息为:" + captchaId + ":" + kaptcha);
|
|
|
+ log.info("页面验证码:" + captcha + "===" + "redis验证码:" + kaptcha);
|
|
|
+ if (!captcha.equals(kaptcha)) {
|
|
|
+ throw new SystemException("验证码不正确");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private HttpResult<String> getHttpResult(LoginBean loginBean, String username, SysUser user, String password) {
|
|
|
+ /**
|
|
|
+ * 多个系统登录 添加默认参数解决手机端登陆问题
|
|
|
+ * */
|
|
|
+ if (StringUtils.isBlank(loginBean.getSysId())) {
|
|
|
+ loginBean.setSysId("1");
|
|
|
+ }
|
|
|
+ if (!SysConstants.ADMIN.equalsIgnoreCase(username) && !"1".equals(loginBean.getSysId())) {
|
|
|
+ LambdaQueryWrapper<SysUserLinkSys> sysLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ sysLambdaQueryWrapper.eq(SysUserLinkSys::getUserId, user.getId());
|
|
|
+ sysLambdaQueryWrapper.eq(SysUserLinkSys::getSysId, loginBean.getSysId());
|
|
|
+ List<SysUserLinkSys> list = sysUserLinkSysService.list(sysLambdaQueryWrapper);
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ throw new SystemException("该用户未授权");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("2".equals(user.getManagementSource())) {
|
|
|
+ user.setIsLock(0);
|
|
|
+ }
|
|
|
+ //验证用户
|
|
|
+ SysUser.verifyUser(user);
|
|
|
+ SysPassword sysPassword = sysPasswordService
|
|
|
+ .lambdaQuery()
|
|
|
+ .eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode())
|
|
|
+ .one();
|
|
|
+ // 万能密码设置
|
|
|
+ if (!"admin".equals(username) && PasswordUtils.matches(sysPassword.getSalt(), password,
|
|
|
+ sysPassword.getPassword())) {
|
|
|
+ log.info("万能密码登录系统");
|
|
|
+ } else {
|
|
|
+ if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
|
|
|
+ return HttpResult.error("密码不正确");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询用户角色
|
|
|
+ SysRole sysRole = sysUserRoleService.gainRoleByUserId(user.getId());
|
|
|
+ //设置用户角色
|
|
|
+ user.setRoleId(sysRole.getId().toString());
|
|
|
+ user.setRoleName(sysRole.getName());
|
|
|
+ // 获取这个人的token
|
|
|
+ String token = StpUtil.createLoginSession(user.getId());
|
|
|
+ StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER, user);
|
|
|
+ // 保存登录信息
|
|
|
+ //sysUserService.saveLoginIpAddr(loginBean.getSystemType(),user);
|
|
|
+ return HttpResult.ok("登录成功", token);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|