doum
2025-09-08 fa7ac16021db8d9a6a5bc214f50600420876325e
server/services/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.system.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
@@ -7,6 +8,9 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.WebLoginDTO;
import com.doumee.dao.system.model.SystemLoginLog;
@@ -28,6 +32,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Objects;
@Slf4j
@Service
@@ -36,8 +41,13 @@
    @Value("${project.version}")
    private String systemVersion;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private CaptchaService captchaService;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private SystemUserService systemUserService;
@@ -67,7 +77,65 @@
        return doLogin(d,false,request);
    }
    @Override
    public   void logoutWx(String memberId){
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .set(Member::getSysuserId,null)
                .eq(Member::getId,memberId));//解除绑定前端用户openId关系
    }
    @Override
    public SystemUser loginByPasswordWx(WebLoginDTO dto, HttpServletRequest request) {
        if(StringUtils.isBlank(dto.getUsername())
                ||StringUtils.isBlank(dto.getPassword())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemLoginLog loginLog = new SystemLoginLog();
        loginLog.setLoginUsername(dto.getUsername());
        loginLog.setLoginTime(new Date());
        loginLog.setSystemVersion(systemVersion);
        loginLog.setIp(Utils.User_Client.getIP(request));
        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 {
            SystemUser s = new SystemUser();
            s.setUsername(dto.getUsername());
            SystemUser systemUser =systemUserService.findOne(s);
            if(systemUser ==null){
                throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "对不起,账号或密码错误!");
            }
            if (!StringUtils.equals(systemUser.getPassword(),Utils.Secure.encryptPassword(dto.getPassword(), systemUser.getSalt()))) {
                throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "对不起,账号或密码错误");
            }
            if(Objects.equals(s.getStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"登录账号已禁用,请联系管理员!");
            }
            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                    .set(Member::getSysuserId,systemUser.getId())
                    .eq(Member::getId,dto.getMemberId()));//绑定前端用户openId关系
            return systemUser;
/*            SystemUser u =  new SystemUser();
            u.setLastLogin(DateUtil.getCurrentDate());
            u.setId(systemUser.getId());
            systemUserService.updateById(u);//更新最后登录时间
            loginLog.setUserId(u.getId());
            loginLog.setSuccess(Constants.ZERO);
            systemLoginLogService.create(loginLog);//登录日志*/
        } catch (Exception e) {
            e.printStackTrace();
            log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
            loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
            loginLog.setSuccess(Constants.ONE);
            systemLoginLogService.create(loginLog);
            if (e.getCause() instanceof BusinessException) {
                throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), e.getCause().getMessage());
            }
            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "对不起,账号或密码错误!");
        }
    }
    public String doLogin(LoginDTO dto,boolean needCheckCode, HttpServletRequest request) {
        if(StringUtils.isBlank(dto.getUsername())
                ||StringUtils.isBlank(dto.getPassword())