371 lines
17 KiB
Java
371 lines
17 KiB
Java
package com.ruoyi.xq.manager;
|
||
|
||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||
import com.ruoyi.common.exception.ServiceException;
|
||
import com.ruoyi.common.helper.LoginHelper;
|
||
import com.ruoyi.common.utils.BeanConvertUtil;
|
||
import com.ruoyi.common.utils.StringUtils;
|
||
import com.ruoyi.xq.domain.*;
|
||
import com.ruoyi.xq.dto.app.common.UserPicturesDTO;
|
||
import com.ruoyi.xq.dto.app.user.AddPicturesReq;
|
||
import com.ruoyi.xq.dto.app.user.UpdateBaseInfoReq;
|
||
import com.ruoyi.xq.dto.app.user.UpdateUserAuthInfoReq;
|
||
import com.ruoyi.xq.dto.app.user.UpdateUserFullInfoReq;
|
||
import com.ruoyi.xq.dto.app.user.vo.*;
|
||
import com.ruoyi.xq.enums.common.AuditEnum;
|
||
import com.ruoyi.xq.enums.common.SystemConfigEnum;
|
||
import com.ruoyi.xq.enums.user.UserAuthTypeEnum;
|
||
import com.ruoyi.xq.enums.user.UserInfoAuditTypeEnum;
|
||
import com.ruoyi.xq.enums.userauth.UserAuthJobAuthTypeEnum;
|
||
import com.ruoyi.xq.enums.userinfo.UserGenderEnum;
|
||
import com.ruoyi.xq.lock.LockKey;
|
||
import com.ruoyi.xq.service.*;
|
||
import com.ruoyi.xq.util.AgeUtil;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.apache.commons.lang3.BooleanUtils;
|
||
import org.redisson.api.RLock;
|
||
import org.redisson.api.RedissonClient;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.stereotype.Component;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import java.time.LocalDateTime;
|
||
import java.util.List;
|
||
import java.util.concurrent.TimeUnit;
|
||
|
||
@Component
|
||
@Slf4j
|
||
public class CurrentUserManager {
|
||
@Autowired
|
||
private UserService userService;
|
||
@Autowired
|
||
private UserPicturesService userPicturesService;
|
||
@Autowired
|
||
private UserInfoService userInfoService;
|
||
@Autowired
|
||
private UserAuthService userAuthService;
|
||
@Autowired
|
||
private UserAuthAuditService userAuthAuditService;
|
||
@Autowired
|
||
private UserInfoAuditService userInfoAuditService;
|
||
@Autowired
|
||
private SystemConfigManager systemConfigManager;
|
||
@Autowired
|
||
private AreaCodeService areaCodeService;
|
||
@Autowired
|
||
private UserVipService userVipService;
|
||
@Autowired
|
||
private UserExtendService userExtendService;
|
||
|
||
|
||
public CurrentUserFullInfoVo currentFullInfo(){
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
UserInfo userInfo = userInfoService.getByUserId(userId);
|
||
CurrentUserFullInfoVo result = new CurrentUserFullInfoVo();
|
||
BeanConvertUtil.copyProperties(userInfo,result);
|
||
BeanConvertUtil.copyProperties(user,result);
|
||
UserInfoAudit avatarAudit = userInfoAuditService.getAuditingDataByUserIdAndType(userId, UserInfoAuditTypeEnum.AVATAR);
|
||
AvatarMinAuditDTO avatarAuditInfo = new AvatarMinAuditDTO();
|
||
avatarAuditInfo.setAvatar(user.getAvatar());
|
||
avatarAuditInfo.setAuditStatus(AuditEnum.NO.getCode());
|
||
if(avatarAudit != null){
|
||
avatarAuditInfo.setAvatar(avatarAudit.getAuditContent());
|
||
avatarAuditInfo.setAuditStatus(avatarAudit.getAuditStatus());
|
||
}
|
||
result.setAvatarAudit(avatarAuditInfo);
|
||
|
||
UserInfoAudit remarkAudit = userInfoAuditService.getAuditingDataByUserIdAndType(userId, UserInfoAuditTypeEnum.REMARK);
|
||
RemarkMinAuditDTO remarkAuditInfo = new RemarkMinAuditDTO();
|
||
remarkAuditInfo.setRemark(user.getRemark());
|
||
remarkAuditInfo.setAuditStatus(AuditEnum.NO.getCode());
|
||
if(remarkAudit != null){
|
||
remarkAuditInfo.setRemark(remarkAudit.getAuditContent());
|
||
remarkAuditInfo.setAuditStatus(remarkAudit.getAuditStatus());
|
||
}
|
||
result.setRemarkAudit(remarkAuditInfo);
|
||
|
||
List<UserPictures> userPictures = userPicturesService.listByUserIdAuditingAndSuccess(user.getId());
|
||
result.setUserPicturesList(BeanConvertUtil.convertListTo(userPictures, UserPicturesDTO::new));
|
||
return result;
|
||
}
|
||
public CurrentUserInfoVo currentBaseInfo() {
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
CurrentUserInfoVo vo = new CurrentUserInfoVo();
|
||
vo.setUserId(user.getId());
|
||
vo.setUsercode(user.getUsercode());
|
||
vo.setType(user.getType());
|
||
vo.setNickname(user.getNickname());
|
||
vo.setMobile(user.getMobile());
|
||
vo.setAvatar(user.getAvatar());
|
||
vo.setGender(user.getGender());
|
||
vo.setBirthday(user.getBirthday());
|
||
vo.setAge(AgeUtil.getAge(user.getBirthday()));
|
||
vo.setResidenceCityName(user.getResidenceCityName());
|
||
vo.setResidenceCode(user.getResidenceCode());
|
||
vo.setResidenceName(user.getResidenceName());
|
||
vo.setAddressCode(user.getAddressCode());
|
||
vo.setAddressName(user.getAddressName());
|
||
vo.setStatus(user.getStatus());
|
||
vo.setFinishBaseStatus(user.getFinishBaseStatus());
|
||
vo.setBaseStep(user.getBaseStep());
|
||
vo.setImToken(user.getImToken());
|
||
List<UserPictures> userPictures = userPicturesService.listByUserIdAuditingAndSuccess(user.getId());
|
||
vo.setUserPicturesList(BeanConvertUtil.convertListTo(userPictures, UserPicturesDTO::new));
|
||
UserVip userVip = userVipService.getByUserVipMaster(userId);
|
||
if(userVip != null){
|
||
vo.setOpenVip(true);
|
||
vo.setVipType(userVip.getVipType());
|
||
vo.setVipTimeout(userVip.getVipTimeout());
|
||
}
|
||
UserExtend userExtend = userExtendService.getByUserId(userId);
|
||
vo.setIncomeCoin(userExtend.getIncomeCoin());
|
||
vo.setWxTransNum(userExtend.getWxTransNum());
|
||
return vo;
|
||
}
|
||
|
||
/**
|
||
* 更新基础信息
|
||
* @param req
|
||
*/
|
||
public void updateBaseInfo(UpdateBaseInfoReq req) {
|
||
Long userId = LoginHelper.getUserId();
|
||
User updateUser = BeanConvertUtil.convertTo(req, User::new);
|
||
UserGenderEnum userGenderEnum = UserGenderEnum.getByCode(req.getGender());
|
||
if(userGenderEnum != null){
|
||
String cos = systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN);
|
||
updateUser.setAvatar(cos + userGenderEnum.getDefaultAvatar());
|
||
}
|
||
if(StringUtils.isNotEmpty(req.getAddressCode())){
|
||
AreaCode areaCode = areaCodeService.getById(req.getAddressCode());
|
||
updateUser.setAddressName(areaCode.getName());
|
||
}
|
||
if(StringUtils.isNotEmpty(req.getResidenceCode())){
|
||
AreaCode areaCode = areaCodeService.getById(req.getResidenceCode());
|
||
updateUser.setResidenceName(areaCode.getName());
|
||
updateUser.setResidenceCityName(areaCode.getPname());
|
||
}
|
||
updateUser.setUpdateTime(LocalDateTime.now());
|
||
updateUser.setId(userId);
|
||
userService.updateById(updateUser);
|
||
|
||
UserInfo updateUserInfo = BeanConvertUtil.convertTo(req, UserInfo::new);
|
||
UserInfo userInfo = userInfoService.getByUserId(userId);
|
||
updateUserInfo.setUpdateTime(LocalDateTime.now());
|
||
updateUserInfo.setId(userInfo.getId());
|
||
userInfoService.updateById(updateUserInfo);
|
||
|
||
// 检查finishStatus
|
||
boolean finishBaseStatus = true;
|
||
User user = userService.getById(userId);
|
||
if(user.getForPersonals() == null || user.getGender() == 0
|
||
|| user.getBirthday() == null || user.getHeight() == null
|
||
|| user.getWeight() == null || user.getResidenceCode() == null
|
||
|| user.getAddressCode() == null || user.getEducation() == null
|
||
|| user.getMarriage() == null || user.getProfession() == null
|
||
|| user.getAnnualIncome() == null || user.getUsercode() == null){
|
||
finishBaseStatus = false;
|
||
}
|
||
userInfo = userInfoService.getById(userInfo.getId());
|
||
if(userInfo.getCarStatus() == null || userInfo.getHousingStatus() == null){
|
||
finishBaseStatus = false;
|
||
}
|
||
if(finishBaseStatus){
|
||
userService.update(Wrappers.lambdaUpdate(User.class)
|
||
.eq(User::getId,user.getId())
|
||
.set(User::getFinishBaseStatus, 1));
|
||
}
|
||
}
|
||
|
||
@Autowired
|
||
private RedissonClient redissonClient;
|
||
|
||
/**
|
||
* 更新备注信息
|
||
*/
|
||
public void updateRemark(String remark){
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
RLock lock = redissonClient.getLock(LockKey.getUserInfoAuditLock(userId));
|
||
try {
|
||
if(lock.isLocked()){
|
||
log.warn("点击太快了,等一等,dealInviteId");
|
||
return;
|
||
}
|
||
lock.lock(5,TimeUnit.SECONDS);
|
||
UserInfoAudit audit = userInfoAuditService.getAuditingDataByUserIdAndType(userId, UserInfoAuditTypeEnum.REMARK);
|
||
if(audit == null){
|
||
audit = new UserInfoAudit();
|
||
audit.setUserId(userId);
|
||
audit.setUsercode(user.getUsercode());
|
||
audit.setInfoType(UserInfoAuditTypeEnum.REMARK.getCode());
|
||
audit.setAuditBeforeContent(user.getRemark());
|
||
audit.setAuditContent(remark);
|
||
audit.setAuditStatus(AuditEnum.AUDITING.getCode());
|
||
userInfoAuditService.save(audit);
|
||
}else{
|
||
userInfoAuditService.update(Wrappers.lambdaUpdate(UserInfoAudit.class)
|
||
.set(UserInfoAudit::getAuditContent, remark)
|
||
.set(UserInfoAudit::getAuditBeforeContent, user.getRemark())
|
||
.eq(UserInfoAudit::getId, audit.getId()));
|
||
}
|
||
} finally {
|
||
lock.unlockAsync();
|
||
}
|
||
}
|
||
|
||
public void updateAvatar(String avatar){
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
RLock lock = redissonClient.getLock(LockKey.getUserInfoAuditLock(userId));
|
||
try {
|
||
if(lock.isLocked()){
|
||
log.warn("点击太快了,等一等,dealInviteId");
|
||
return;
|
||
}
|
||
lock.lock(5,TimeUnit.SECONDS);
|
||
UserInfoAudit audit = userInfoAuditService.getAuditingDataByUserIdAndType(userId, UserInfoAuditTypeEnum.AVATAR);
|
||
if(audit == null){
|
||
audit = new UserInfoAudit();
|
||
audit.setUserId(userId);
|
||
audit.setUsercode(user.getUsercode());
|
||
audit.setInfoType(UserInfoAuditTypeEnum.AVATAR.getCode());
|
||
audit.setAuditBeforeContent(user.getAvatar());
|
||
audit.setAuditContent(avatar);
|
||
audit.setAuditStatus(AuditEnum.AUDITING.getCode());
|
||
userInfoAuditService.save(audit);
|
||
}else{
|
||
userInfoAuditService.update(Wrappers.lambdaUpdate(UserInfoAudit.class)
|
||
.set(UserInfoAudit::getAuditContent, avatar)
|
||
.set(UserInfoAudit::getAuditBeforeContent, user.getAvatar())
|
||
.eq(UserInfoAudit::getId, audit.getId()));
|
||
}
|
||
} finally {
|
||
lock.unlockAsync();
|
||
}
|
||
}
|
||
|
||
public void updateInfo(UpdateUserFullInfoReq req) {
|
||
Long userId = LoginHelper.getUserId();
|
||
User updateUser = BeanConvertUtil.convertTo(req, User::new);
|
||
if(StringUtils.isNotEmpty(req.getAddressCode())){
|
||
AreaCode areaCode = areaCodeService.getById(req.getAddressCode());
|
||
updateUser.setAddressName(areaCode.getName());
|
||
}
|
||
if(StringUtils.isNotEmpty(req.getResidenceCode())){
|
||
AreaCode areaCode = areaCodeService.getById(req.getResidenceCode());
|
||
updateUser.setResidenceName(areaCode.getName());
|
||
updateUser.setResidenceCityName(areaCode.getPname());
|
||
}
|
||
updateUser.setId(userId);
|
||
userService.updateById(updateUser);
|
||
|
||
UserInfo updateUserInfo = BeanConvertUtil.convertTo(req, UserInfo::new);
|
||
UserInfo userInfo = userInfoService.getByUserId(userId);
|
||
updateUserInfo.setId(userInfo.getId());
|
||
userInfoService.updateById(updateUserInfo);
|
||
}
|
||
|
||
public UserAuthInfoVo currentAuthInfo() {
|
||
Long userId = LoginHelper.getUserId();
|
||
UserAuth userAuth = userAuthService.getByUserId(userId);
|
||
return BeanConvertUtil.convertTo(userAuth, UserAuthInfoVo::new);
|
||
}
|
||
|
||
@Transactional(rollbackFor = Exception.class)
|
||
public void updateInfoAuth(UpdateUserAuthInfoReq req) {
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
if(BooleanUtils.isTrue(req.getPushCarAuth())){ // 车辆认证
|
||
if(req.getCarPic() == null){
|
||
throw new ServiceException("请上传车辆认证照片");
|
||
}
|
||
boolean update = userAuthService.update(Wrappers.lambdaUpdate(UserAuth.class)
|
||
.eq(UserAuth::getUserId, userId)
|
||
.in(UserAuth::getCarAuth, AuditEnum.NO.getCode(), AuditEnum.FAIL.getCode())
|
||
.set(UserAuth::getCarAuth, AuditEnum.AUDITING.getCode()));
|
||
if(!update){
|
||
throw new ServiceException("车辆认证正在审核中,请勿重复提交");
|
||
}
|
||
userAuthAuditService.saveAuthAudit(user,UserAuthTypeEnum.CAR,req.getCarPic());
|
||
}
|
||
if(BooleanUtils.isTrue(req.getPushHouseAuth())){ // 房子认证
|
||
if(req.getHousePic() == null){
|
||
throw new ServiceException("请上传房产认证照片");
|
||
}
|
||
boolean update = userAuthService.update(Wrappers.lambdaUpdate(UserAuth.class)
|
||
.eq(UserAuth::getUserId, userId)
|
||
.in(UserAuth::getHouseAuth, AuditEnum.NO.getCode(), AuditEnum.FAIL.getCode())
|
||
.set(UserAuth::getHouseAuth, AuditEnum.AUDITING.getCode()));
|
||
if(!update){
|
||
throw new ServiceException("房产认证正在审核中,请勿重复提交");
|
||
}
|
||
userAuthAuditService.saveAuthAudit(user,UserAuthTypeEnum.HOUSE,req.getHousePic());
|
||
}
|
||
if(BooleanUtils.isTrue(req.getPushEducationAuth())){ // 学历认证
|
||
if(req.getEducationPic() == null){
|
||
throw new ServiceException("请上传最高学历认证照片");
|
||
}
|
||
boolean update = userAuthService.update(Wrappers.lambdaUpdate(UserAuth.class)
|
||
.eq(UserAuth::getUserId, userId)
|
||
.in(UserAuth::getEducationAuth, AuditEnum.NO.getCode(), AuditEnum.FAIL.getCode())
|
||
.set(UserAuth::getEducationAuth, AuditEnum.AUDITING.getCode()));
|
||
if(!update){
|
||
throw new ServiceException("房产认证正在审核中,请勿重复提交");
|
||
}
|
||
userAuthAuditService.saveAuthAudit(user,UserAuthTypeEnum.EDUCATION,req.getEducationPic());
|
||
}
|
||
if(BooleanUtils.isTrue(req.getPushMarriageAuth())){ // 婚况认证
|
||
if(req.getMarriagePic() == null){
|
||
throw new ServiceException("请上传婚况认证照片");
|
||
}
|
||
boolean update = userAuthService.update(Wrappers.lambdaUpdate(UserAuth.class)
|
||
.eq(UserAuth::getUserId, userId)
|
||
.in(UserAuth::getMarriageAuth, AuditEnum.NO.getCode(), AuditEnum.FAIL.getCode())
|
||
.set(UserAuth::getMarriageAuth, AuditEnum.AUDITING.getCode()));
|
||
if(!update){
|
||
throw new ServiceException("房产认证正在审核中,请勿重复提交");
|
||
}
|
||
userAuthAuditService.saveAuthAudit(user,UserAuthTypeEnum.MARRIAGE,req.getMarriagePic());
|
||
}
|
||
if(BooleanUtils.isTrue(req.getPushJobAuthBoo())){ // 工作认证
|
||
UserAuthJobAuthTypeEnum userAuthJobAuthTypeEnum = UserAuthJobAuthTypeEnum.getByCode(req.getJobAuthType());
|
||
if(userAuthJobAuthTypeEnum == null){
|
||
throw new ServiceException("请选择工作认证方式");
|
||
}
|
||
if(req.getJobPic() == null){
|
||
throw new ServiceException("请上传工作认证照片");
|
||
}
|
||
boolean update = userAuthService.update(Wrappers.lambdaUpdate(UserAuth.class)
|
||
.eq(UserAuth::getUserId, userId)
|
||
.in(UserAuth::getJobAuth, AuditEnum.NO.getCode(), AuditEnum.FAIL.getCode())
|
||
.set(UserAuth::getJobAuth, AuditEnum.AUDITING.getCode()));
|
||
if(!update){
|
||
throw new ServiceException("房产认证正在审核中,请勿重复提交");
|
||
}
|
||
String authRemark = String.format("【%s】工作认证", userAuthJobAuthTypeEnum.getText());
|
||
userAuthAuditService.saveAuthAudit(user,UserAuthTypeEnum.JOB,req.getJobPic(),authRemark);
|
||
}
|
||
}
|
||
|
||
|
||
public void addUserPicture(AddPicturesReq req) {
|
||
Long userId = LoginHelper.getUserId();
|
||
User user = userService.getById(userId);
|
||
UserPictures userPictures = new UserPictures();
|
||
userPictures.setUserId(user.getId());
|
||
userPictures.setUsercode(user.getUsercode());
|
||
userPictures.setPicture(req.getPicture());
|
||
userPictures.setAuditStatus(AuditEnum.AUDITING.getCode());
|
||
userPicturesService.save(userPictures);
|
||
}
|
||
|
||
public void removeUserPictures(List<Long> ids) {
|
||
Long userId = LoginHelper.getUserId();
|
||
userPicturesService.remove(Wrappers.lambdaQuery(UserPictures.class)
|
||
.eq(UserPictures::getUserId,userId)
|
||
.in(UserPictures::getId, ids));
|
||
}
|
||
}
|