package org.jeecg.modules.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.extern.slf4j.Slf4j;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.util.DateUtils;
|
import org.jeecg.common.util.PasswordUtil;
|
import org.jeecg.common.util.UUIDGenerator;
|
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.modules.system.entity.SysRole;
|
import org.jeecg.modules.system.entity.SysThirdAccount;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.jeecg.modules.system.entity.SysUserRole;
|
import org.jeecg.modules.system.mapper.SysRoleMapper;
|
import org.jeecg.modules.system.mapper.SysThirdAccountMapper;
|
import org.jeecg.modules.system.mapper.SysUserMapper;
|
import org.jeecg.modules.system.mapper.SysUserRoleMapper;
|
import org.jeecg.modules.system.model.ThirdLoginModel;
|
import org.jeecg.modules.system.service.ISysThirdAccountService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @Description: 第三方登录账号表
|
* @Author: jeecg-boot
|
* @Date: 2020-11-17
|
* @Version: V1.0
|
*/
|
@Service
|
@Slf4j
|
public class SysThirdAccountServiceImpl extends ServiceImpl<SysThirdAccountMapper, SysThirdAccount> implements ISysThirdAccountService {
|
|
@Autowired
|
private SysThirdAccountMapper sysThirdAccountMapper;
|
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
@Autowired
|
private SysRoleMapper sysRoleMapper;
|
@Autowired
|
private SysUserRoleMapper sysUserRoleMapper;
|
|
@Override
|
public void updateThirdUserId(SysUser sysUser,String thirdUserUuid) {
|
//修改第三方登录账户表使其进行添加用户id
|
LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>();
|
query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid);
|
SysThirdAccount account = sysThirdAccountMapper.selectOne(query);
|
SysThirdAccount sysThirdAccount = new SysThirdAccount();
|
sysThirdAccount.setSysUserId(sysUser.getId());
|
//根据当前用户id和登录方式查询第三方登录表
|
LambdaQueryWrapper<SysThirdAccount> thirdQuery = new LambdaQueryWrapper<>();
|
thirdQuery.eq(SysThirdAccount::getSysUserId,sysUser.getId());
|
thirdQuery.eq(SysThirdAccount::getThirdType,account.getThirdType());
|
SysThirdAccount sysThirdAccounts = sysThirdAccountMapper.selectOne(thirdQuery);
|
if(sysThirdAccounts!=null){
|
sysThirdAccount.setThirdUserId(sysThirdAccounts.getThirdUserId());
|
sysThirdAccountMapper.deleteById(sysThirdAccounts.getId());
|
}
|
//更新用户账户表sys_user_id
|
sysThirdAccountMapper.update(sysThirdAccount,query);
|
}
|
|
@Override
|
public SysUser createUser(String phone, String thirdUserUuid) {
|
//先查询第三方,获取登录方式
|
LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>();
|
query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid);
|
SysThirdAccount account = sysThirdAccountMapper.selectOne(query);
|
//通过用户名查询数据库是否已存在
|
SysUser userByName = sysUserMapper.getUserByName(thirdUserUuid.substring(2));
|
if(null!=userByName){
|
//如果账号存在的话,则自动加上一个时间戳
|
String format = DateUtils.yyyymmddhhmmss.get().format(new Date());
|
thirdUserUuid = thirdUserUuid + format;
|
}
|
//添加用户
|
SysUser user = new SysUser();
|
user.setActivitiSync(CommonConstant.ACT_SYNC_0);
|
user.setDelFlag(CommonConstant.DEL_FLAG_0);
|
user.setStatus(1);
|
//用户名取工号去除前两位字母后面的值
|
user.setUsername(thirdUserUuid.substring(2));
|
user.setPhone(phone);
|
//设置初始密码
|
String salt = oConvertUtils.randomGen(8);
|
user.setSalt(salt);
|
String passwordEncode = PasswordUtil.encrypt(user.getUsername(), "123456", salt);
|
user.setPassword(passwordEncode);
|
user.setRealname(account.getRealname());
|
user.setAvatar(account.getAvatar());
|
user.setWorkNo(thirdUserUuid);//沃克现场sys_user表对工号字段设置了唯一索引(企业微信拿到的用户数据thirdUserUuid就是工号),该字段必须给值
|
String s = this.saveThirdUser(user);
|
//更新用户第三方账户表的userId
|
SysThirdAccount sysThirdAccount = new SysThirdAccount();
|
sysThirdAccount.setSysUserId(s);
|
sysThirdAccountMapper.update(sysThirdAccount,query);
|
return user;
|
}
|
|
public String saveThirdUser(SysUser sysUser) {
|
//保存用户
|
String userid = UUIDGenerator.generate();
|
sysUser.setId(userid);
|
sysUserMapper.insert(sysUser);
|
//获取第三方角色
|
SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
|
//保存用户角色
|
SysUserRole userRole = new SysUserRole();
|
userRole.setRoleId(sysRole.getId());
|
userRole.setUserId(userid);
|
sysUserRoleMapper.insert(userRole);
|
return userid;
|
}
|
|
@Override
|
public SysThirdAccount getOneBySysUserId(String sysUserId, String thirdType) {
|
LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>();
|
log.info("getSysUserId: {} ,getThirdType: {}",sysUserId,thirdType);
|
queryWrapper.eq(SysThirdAccount::getSysUserId, sysUserId);
|
queryWrapper.eq(SysThirdAccount::getThirdType, thirdType);
|
return super.getOne(queryWrapper);
|
}
|
|
@Override
|
public SysThirdAccount getOneByThirdUserId(String thirdUserId, String thirdType) {
|
LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SysThirdAccount::getThirdUserId, thirdUserId);
|
queryWrapper.eq(SysThirdAccount::getThirdType, thirdType);
|
return super.getOne(queryWrapper);
|
}
|
|
@Override
|
public List<SysThirdAccount> listThirdUserIdByUsername(String[] sysUsernameArr, String thirdType) {
|
return sysThirdAccountMapper.selectThirdIdsByUsername(sysUsernameArr, thirdType);
|
}
|
|
@Override
|
public SysThirdAccount saveThirdUser(ThirdLoginModel tlm) {
|
SysThirdAccount user = new SysThirdAccount();
|
user.setDelFlag(CommonConstant.DEL_FLAG_0);
|
user.setStatus(1);
|
user.setThirdType(tlm.getSource());
|
user.setAvatar(tlm.getAvatar());
|
user.setRealname(tlm.getUsername());
|
user.setThirdUserUuid(tlm.getUuid());
|
user.setThirdUserId(tlm.getUuid());
|
user.setPhone(tlm.getPhone());
|
super.save(user);
|
return user;
|
}
|
|
}
|