jiangping
2024-12-30 43c7cf553e5c78d81b8f23a043901926c45eb0cf
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -9,8 +10,10 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.SmsEmail;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.LoginByOpenidDTO;
@@ -21,6 +24,7 @@
import com.doumee.service.system.*;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
@@ -31,6 +35,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -49,8 +54,15 @@
    @Lazy
    @Autowired
    private SystemUserService systemUserService;
    @Lazy
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Lazy
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Lazy
    @Autowired
    private SmsEmailMapper smsEmailMapper;
@@ -65,9 +77,10 @@
    @Lazy
    @Autowired
    private SystemPermissionService systemPermissionService;
    @Lazy
    @Autowired
    private CaptchaService captchaService;
    @Lazy
    @Autowired
    private SystemLoginLogService systemLoginLogService;
@@ -376,6 +389,94 @@
        LoginUserInfo userInfo = LoginUserInfo.from(user, null, null,company,null);
        return  userInfo;
    }
    public   void isCaptcheValide(  String phone, String captche) {
        SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                .eq(SmsEmail::getType, Constants.ZERO)
                .eq(SmsEmail::getPhone, phone)
                .eq(SmsEmail::getRemark, captche)
                .eq(SmsEmail::getIsdeleted, Constants.ZERO)
        );
        if(model == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码不正确,请重新发送再试!");
        }
        if(!Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试!");
        }
        if(model.getCreateDate() !=null &&
                System.currentTimeMillis() - model.getCreateDate().getTime() > 3*60*1000){
            model.setStatus(Constants.ONE);
            model.setEditDate(new Date());
            smsEmailMapper.updateById(model);
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试~");
        }
        model.setStatus(Constants.ONE);
        model.setEditDate(new Date());
        smsEmailMapper.updateById(model);
    }
    @Override
    @Transactional
    public LoginUserInfo loginDriverWithCode(LoginPhoneDTO param, ServerHttpRequest request) {
        isCaptcheValide(param.getPhone(),param.getCode());//检查验证码
        SystemLoginLog loginLog = new SystemLoginLog();
        loginLog.setLoginUsername(param.getPhone());
        loginLog.setLoginTime(new Date());
        loginLog.setReason("【公众号】司机端验证码登陆:openid="+param.getOpenid());
        loginLog.setSystemVersion(systemVersion);
//        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
        if(request!=null&&request.getHeaders()!=null && request.getHeaders().size()>0){
            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());
        // 根据用户名查询用户对象
        SystemUser queryDto = new SystemUser();
        queryDto.setUsername(param.getPhone());
        queryDto.setDeleted(Boolean.FALSE);
        SystemUser systemUser = systemUserService.findOne(queryDto);
        if (systemUser == null) {
            String salt = RandomStringUtils.randomAlphabetic(6);
            Member member = new Member();
            member.setCreateDate(new Date());
            member.setIsdeleted(Constants.ZERO);
            member.setType(Constants.memberType.driver);
            member.setPhone(param.getPhone());
            member.setStatus(Constants.ZERO);
            member.setOpenid(param.getOpenid());
            member.setPassward(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
            memberMapper.insert(member);
            systemUser = new SystemUser();
            systemUser.setCreateTime(new Date());
            systemUser.setDeleted(Boolean.FALSE);
            systemUser.setUsername(param.getPhone());
            systemUser.setRealname(null);
            systemUser.setMemberId(member.getId());
            systemUser.setMobile(param.getPhone());
            systemUser.setSalt(salt);
            systemUser.setPassword(member.getPassward());
            systemUser.setStatus(Constants.ZERO);
            systemUser.setType(Constants.memberType.driver);
            systemUser.setSource(Constants.TWO);
            systemUser.setOpenid(param.getOpenid());
            systemUserMapper.insert(systemUser);
        }else{
            if(!Constants.equalsInteger(systemUser.getType(),Constants.memberType.driver)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,请使用正确的司机账号登陆!");
            }
        }
        dealOpenIdBiz(systemUser,param.getOpenid());
        Company company = new Company();
        if(Objects.nonNull(systemUser.getCompanyId())){
            company = companyMapper.selectById(systemUser.getCompanyId());
        }
        LoginUserInfo userInfo = LoginUserInfo.from(systemUser, null, null,company,null);
        return  userInfo;
    }
    /**