From 663dbe4ddca1fa409e6acbc1f77d924c161b0c39 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 09 六月 2025 17:04:50 +0800
Subject: [PATCH] 提交一把订单
---
server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 201 insertions(+), 18 deletions(-)
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index b41579c..056421e 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,20 +1,31 @@
package com.doumee.service.system.impl;
-import com.baomidou.mybatisplus.extension.api.R;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.config.shiro.ShiroToken;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.WxMiniConfig;
+import com.doumee.dao.business.SmsEmailMapper;
+import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.LoginDTO;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
+import com.doumee.dao.system.dto.WxMiniLoginDTO;
import com.doumee.dao.system.model.SystemLoginLog;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.impl.SmsEmailServiceImpl;
import com.doumee.service.common.CaptchaService;
import com.doumee.service.system.SystemLoginLogService;
import com.doumee.service.system.SystemLoginService;
import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -30,17 +41,102 @@
@Value("${project.version}")
private String systemVersion;
- @Value("${captcha_check}")
- private boolean captchaCheck;
-
+ @Value("${debug_model}")
+ private Boolean debugModel;
+ @Autowired
+ private SmsEmailMapper smsEmailMapper;
@Autowired
private CaptchaService captchaService;
@Autowired
private SystemLoginLogService systemLoginLogService;
+ @Autowired
+ private SystemUserMapper systemUserMapper;
+
+
+// /**
+// * 寰俊鎺堟潈锛堢櫥褰曞悗锛�
+// * @param code
+// */
+// @Override
+// public String wxEmpower(String code,Integer userId){
+// try {
+// //鑾峰彇寰俊鏁忔劅鏁版嵁
+// WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
+// String openId = session.getOpenid();
+// if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
+// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
+// }
+// if(Objects.nonNull(userId)){
+// systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
+// .lambda()
+// .set(SystemUser::getOpenid,null)
+// .eq(SystemUser::getOpenid,openId)
+// .ne(SystemUser::getId,userId));
+//
+// systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
+// .lambda()
+// .set(SystemUser::getOpenid,openId)
+// .eq(SystemUser::getId,userId));
+// }
+// return openId;
+// } catch (WxErrorException e) {
+// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
+// }
+// }
+
@Override
- public String loginByPassword(LoginDTO dto, int type,HttpServletRequest request) {
+ public void cleaOpenid(){
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(StringUtils.isNotBlank(loginUserInfo.getOpenid())){
+ systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+ .set(SystemUser::getOpenid,null)
+ .eq(SystemUser::getId,loginUserInfo.getId()));
+ }
+ }
+
+
+ @Override
+ public String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request){
+ LoginDTO dto = new LoginDTO();
+ if(StringUtils.isNotBlank(wxMiniLoginDTO.getCode())){
+ try{
+ WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(wxMiniLoginDTO.getCode());
+ String openId = session.getOpenid();
+ if (StringUtils.isNotBlank(openId)&&StringUtils.isBlank(wxMiniLoginDTO.getUsername())) {
+ SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>()
+ .lambda().eq(SystemUser::getOpenid,openId)
+ .eq(SystemUser::getDeleted,Constants.ZERO)
+ .eq(SystemUser::getType,Constants.UserType.COMPANY.getKey())
+ .orderByDesc(SystemUser::getCreateTime)
+ .last(" limit 1")
+ );
+ if(Objects.nonNull(systemUser)){
+ LoginPhoneDTO loginPhoneDTO = new LoginPhoneDTO();
+ loginPhoneDTO.setPhone(systemUser.getMobile());
+ return this.loginByPhone(loginPhoneDTO,Constants.ONE,false,request);
+ }else{
+ return null;
+ }
+ }else{
+ dto.setOpenid(openId);
+ }
+ } catch (WxErrorException e) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
+ }
+ }
+ if(StringUtils.isBlank(wxMiniLoginDTO.getUsername())
+ || StringUtils.isBlank(wxMiniLoginDTO.getPassword())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ dto.setUsername(wxMiniLoginDTO.getUsername());
+ dto.setPassword(wxMiniLoginDTO.getPassword());
+ return this.loginByPassword(dto,Constants.ONE,false,request);
+ }
+
+ @Override
+ public String loginByPassword(LoginDTO dto, int type,Boolean checkCaptcha,HttpServletRequest request) {
SystemLoginLog loginLog = new SystemLoginLog();
loginLog.setLoginUsername(dto.getUsername());
loginLog.setLoginTime(new Date());
@@ -52,22 +148,73 @@
loginLog.setOsInfo(Utils.User_Client.getOS(request));
loginLog.setServerIp(Utils.Server.getIP());
// 鏍¢獙楠岃瘉鐮�
- if(type!= Constants.TWO){
- try {
- if(captchaCheck){
- captchaService.check(dto.getUuid(), dto.getCode());
- }
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
- loginLog.setSuccess(Boolean.FALSE);
- systemLoginLogService.create(loginLog);
- throw e;
+ try {
+ if(!debugModel&&checkCaptcha){
+ captchaService.check(dto.getUuid(), dto.getCode());
}
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ loginLog.setSuccess(Boolean.FALSE);
+ systemLoginLogService.create(loginLog);
+ throw e;
}
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
- UsernamePasswordToken token = new UsernamePasswordToken(dto.getUsername(), dto.getPassword());
+ ShiroToken token = new ShiroToken(dto.getUsername(), dto.getPassword(),true,type,null);
+ try {
+ subject.login(token);
+ loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
+ loginLog.setSuccess(Boolean.TRUE);
+ systemLoginLogService.create(loginLog);
+
+ //鏇存柊openid鎵�灞炵敤鎴蜂俊鎭�
+ if(StringUtils.isNotBlank(dto.getOpenid())){
+ systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+ .set(SystemUser::getOpenid,null)
+ .eq(SystemUser::getOpenid,dto.getOpenid())
+ .ne(SystemUser::getId,loginLog.getUserId()));
+ systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+ .set(SystemUser::getOpenid,dto.getOpenid())
+ .eq(SystemUser::getId,loginLog.getUserId()));
+ }
+ return (String)subject.getSession().getId();
+ } catch (AuthenticationException e) {
+ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ loginLog.setSuccess(Boolean.FALSE);
+ systemLoginLogService.create(loginLog);
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
+ }
+ }
+
+ @Override
+ public String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request) {
+ SystemLoginLog loginLog = new SystemLoginLog();
+ loginLog.setLoginUsername(dto.getPhone());
+ loginLog.setLoginTime(new Date());
+ loginLog.setSystemVersion(systemVersion);
+ loginLog.setIp(Utils.User_Client.getIP(request));
+ loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+ loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+ loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+ loginLog.setOsInfo(Utils.User_Client.getOS(request));
+ loginLog.setServerIp(Utils.Server.getIP());
+ // 鏍¢獙楠岃瘉鐮�
+ try {
+ if(!debugModel&& checkSmsCode){
+ SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode());
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ loginLog.setSuccess(Boolean.FALSE);
+ systemLoginLogService.create(loginLog);
+ throw e;
+ }
+ // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+ Subject subject = SecurityUtils.getSubject();
+ ShiroToken token = new ShiroToken(dto.getPhone(), null,false,type,null);
try {
subject.login(token);
loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
@@ -82,4 +229,40 @@
throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
}
}
+
+
+
+
+ @Override
+ public String switchCompany (LoginUserInfo loginUserInfo,Integer companyId, HttpServletRequest request) {
+ SystemLoginLog loginLog = new SystemLoginLog();
+ loginLog.setLoginUsername(loginUserInfo.getMobile());
+ loginLog.setLoginTime(new Date());
+ loginLog.setSystemVersion(systemVersion);
+ loginLog.setIp(Utils.User_Client.getIP(request));
+ loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+ loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+ loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+ loginLog.setOsInfo(Utils.User_Client.getOS(request));
+ loginLog.setServerIp(Utils.Server.getIP());
+
+ // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+ Subject subject = SecurityUtils.getSubject();
+ ShiroToken token = new ShiroToken(loginUserInfo.getMobile(), null,false,loginUserInfo.getType(),companyId);
+ try {
+ subject.login(token);
+ loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
+ loginLog.setSuccess(Boolean.TRUE);
+ systemLoginLogService.create(loginLog);
+ return (String)subject.getSession().getId();
+ } catch (AuthenticationException e) {
+ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ loginLog.setSuccess(Boolean.FALSE);
+ systemLoginLogService.create(loginLog);
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
+ }
+ }
+
+
}
--
Gitblit v1.9.3