|
@@ -17,16 +17,20 @@ import com.xjrsoft.common.exception.MyException;
|
|
|
import com.xjrsoft.common.utils.FixedArithmeticCaptcha;
|
|
|
import com.xjrsoft.common.utils.RSAUtil;
|
|
|
import com.xjrsoft.common.utils.RedisUtil;
|
|
|
+import com.xjrsoft.common.utils.WeChatUtil;
|
|
|
import com.xjrsoft.config.LicenseConfig;
|
|
|
import com.xjrsoft.module.organization.entity.*;
|
|
|
import com.xjrsoft.module.organization.service.*;
|
|
|
import com.xjrsoft.module.system.dto.CreateTokenDto;
|
|
|
+import com.xjrsoft.module.system.dto.LoginByCodeDto;
|
|
|
import com.xjrsoft.module.system.dto.LoginDto;
|
|
|
import com.xjrsoft.module.system.service.ILoginService;
|
|
|
import com.xjrsoft.module.system.vo.CreateTokenVo;
|
|
|
import com.xjrsoft.module.system.vo.ImgCaptchaVo;
|
|
|
+import com.xjrsoft.module.system.vo.LoginByCodeVo;
|
|
|
import com.xjrsoft.module.system.vo.LoginVo;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.List;
|
|
@@ -56,10 +60,10 @@ public class LoginServiceImpl implements ILoginService {
|
|
|
|
|
|
private final LicenseConfig licenseConfig;
|
|
|
|
|
|
+ private final WeChatUtil weChatUtil;
|
|
|
+
|
|
|
@Override
|
|
|
public LoginVo login(LoginDto dto) throws Exception {
|
|
|
- LoginVo result = new LoginVo();
|
|
|
-
|
|
|
if (licenseConfig.getEnabled()) {
|
|
|
//查出所有在线用户
|
|
|
List<String> onlineUser = StpUtil.searchSessionId("", 0, Integer.MAX_VALUE);
|
|
@@ -93,12 +97,67 @@ public class LoginServiceImpl implements ILoginService {
|
|
|
throw new MyException("账号或密码不正确");
|
|
|
}
|
|
|
|
|
|
+ return getLoginInfo(loginUser, "PC");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public LoginByCodeVo loginByCode(LoginByCodeDto dto) throws Exception {
|
|
|
+ LoginByCodeVo result = new LoginByCodeVo();
|
|
|
+ String openId = weChatUtil.getOpenid(dto.getCode());
|
|
|
+ if (openId == null) throw new MyException("code无效");
|
|
|
+
|
|
|
+ LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(User::getOpenId, openId);
|
|
|
+ User loginUser = userService.getOne(queryWrapper);
|
|
|
+
|
|
|
+ result.setOpenid(openId);
|
|
|
+ if (loginUser == null) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ LoginVo loginVo = getLoginInfo(loginUser, "WX-MP");
|
|
|
+ result.setToken(loginVo.getToken());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CreateTokenVo createToken(CreateTokenDto dto) {
|
|
|
+ CreateTokenVo vo = new CreateTokenVo();
|
|
|
+
|
|
|
+ if (dto.getExpire() == -1) {
|
|
|
+ String token = SaTempUtil.createToken(IdUtil.fastSimpleUUID() + StringPool.UNDERSCORE + GlobalConstant.SECRET_KEY, Integer.MAX_VALUE);
|
|
|
+ vo.setToken(token);
|
|
|
+ return vo;
|
|
|
+ } else {
|
|
|
+ String token = SaTempUtil.createToken(IdUtil.fastSimpleUUID() + StringPool.UNDERSCORE + GlobalConstant.SECRET_KEY, dto.getExpire());
|
|
|
+ vo.setToken(token);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 图形验证码
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ImgCaptchaVo imgCaptcha() {
|
|
|
+ // 算术类型
|
|
|
+ FixedArithmeticCaptcha captcha = new FixedArithmeticCaptcha(130, 48);
|
|
|
+
|
|
|
+ String rKey = GlobalConstant.LOGIN_IMG_CAPTCHA + UUID.randomUUID().toString();
|
|
|
+
|
|
|
+ // 存入redis并设置过期时间为30分钟
|
|
|
+ redisUtil.set(rKey, captcha.text(), 30 * 60);
|
|
|
+
|
|
|
+ return new ImgCaptchaVo(rKey, captcha.toBase64());
|
|
|
+ }
|
|
|
+
|
|
|
+ private LoginVo getLoginInfo(User loginUser, String loginType) throws Exception {
|
|
|
+ LoginVo result = new LoginVo();
|
|
|
if (loginUser.getEnabledMark() == EnabledMark.DISABLED.getCode()) {
|
|
|
throw new MyException("账户未启用");
|
|
|
}
|
|
|
-
|
|
|
//此登录接口登录web端
|
|
|
- StpUtil.login(loginUser.getId(), "PC");
|
|
|
+ StpUtil.login(loginUser.getId(), loginType);
|
|
|
|
|
|
SaSession tokenSession = StpUtil.getTokenSession();
|
|
|
|
|
@@ -159,37 +218,4 @@ public class LoginServiceImpl implements ILoginService {
|
|
|
result.setToken(StpUtil.getTokenValue());
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
- @Override
|
|
|
- public CreateTokenVo createToken(CreateTokenDto dto) {
|
|
|
- CreateTokenVo vo = new CreateTokenVo();
|
|
|
-
|
|
|
- if (dto.getExpire() == -1) {
|
|
|
- String token = SaTempUtil.createToken(IdUtil.fastSimpleUUID() + StringPool.UNDERSCORE + GlobalConstant.SECRET_KEY, Integer.MAX_VALUE);
|
|
|
- vo.setToken(token);
|
|
|
- return vo;
|
|
|
- } else {
|
|
|
- String token = SaTempUtil.createToken(IdUtil.fastSimpleUUID() + StringPool.UNDERSCORE + GlobalConstant.SECRET_KEY, dto.getExpire());
|
|
|
- vo.setToken(token);
|
|
|
- return vo;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 图形验证码
|
|
|
- */
|
|
|
- @Override
|
|
|
- public ImgCaptchaVo imgCaptcha() {
|
|
|
- // 算术类型
|
|
|
- FixedArithmeticCaptcha captcha = new FixedArithmeticCaptcha(130, 48);
|
|
|
-
|
|
|
- String rKey = GlobalConstant.LOGIN_IMG_CAPTCHA + UUID.randomUUID().toString();
|
|
|
-
|
|
|
- // 存入redis并设置过期时间为30分钟
|
|
|
- redisUtil.set(rKey, captcha.text(), 30 * 60);
|
|
|
-
|
|
|
- return new ImgCaptchaVo(rKey, captcha.toBase64());
|
|
|
- }
|
|
|
-
|
|
|
}
|