This commit is contained in:
张良(004796)
2024-04-19 18:33:45 +08:00
parent 115eebac8e
commit 10486e593a
19 changed files with 225 additions and 23 deletions

View File

@@ -13,6 +13,8 @@ import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.xq.domain.AreaCode;
import com.ruoyi.xq.dto.admin.areacode.AreaCodeAdminTree;
import com.ruoyi.xq.dto.app.areacode.AreaCodeTree;
import com.ruoyi.xq.service.AreaCodeService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 行政区划
@@ -58,6 +61,12 @@ public class AreaCodeController extends BaseController {
return R.ok(areaCodeService.getById(code));
}
@GetMapping("/tree")
public R<List<AreaCodeAdminTree>> areaCodeTree(){
List<AreaCodeAdminTree> node = areaCodeService.treeAdmin();
return R.ok(node);
}
/**
* 新增行政区划
*/

View File

@@ -15,8 +15,10 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.user.FullUserVo;
import com.ruoyi.xq.dto.admin.user.UserAdminVo;
import com.ruoyi.xq.dto.admin.user.req.AddUserReq;
import com.ruoyi.xq.dto.admin.user.req.ResetPasswordAdminReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateMobileAdminReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateUserReq;
import com.ruoyi.xq.dto.app.common.IdReq;
import com.ruoyi.xq.service.UserInviteService;
import com.ruoyi.xq.service.UserService;
@@ -169,8 +171,9 @@ public class UserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody User bo) {
return toAjax(userService.save(bo));
public R<Void> add(@RequestBody AddUserReq bo) {
userService.saveUser(bo);
return R.ok();
}
/**
@@ -180,8 +183,9 @@ public class UserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody User bo) {
return toAjax(userService.updateById(bo));
public R<Void> edit(@RequestBody UpdateUserReq bo) {
userService.updateBaseUser(bo);
return R.ok();
}
/**

View File

@@ -12,7 +12,6 @@ import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.xq.domain.UserInfo;
import com.ruoyi.xq.dto.admin.user.UserInfoDetailAdminVo;
import com.ruoyi.xq.dto.admin.user.UserInfoListAdminVo;
import com.ruoyi.xq.service.UserInfoService;
import lombok.RequiredArgsConstructor;
@@ -47,13 +46,6 @@ public class UserInfoController extends BaseController {
return TableDataInfo.build(page);
}
@SaCheckPermission("xq:userInfo:query")
@GetMapping("/fullUserInfo/{id}")
public R<UserInfoDetailAdminVo> fullUserInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
UserInfoDetailAdminVo vo = userInfoService.fullUserInfo(id);
return R.ok(vo);
}
/**
* 获取用户信息详细信息
*

View File

@@ -106,7 +106,7 @@ public class User implements Serializable {
/**
* 户籍地代码
*/
private String addressCode;
private Integer addressCode;
/**
* 学历

View File

@@ -0,0 +1,18 @@
package com.ruoyi.xq.dto.admin.areacode;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class AreaCodeAdminTree {
private Integer id;
private String label;
private Integer parentId;
private List<AreaCodeAdminTree> children = new ArrayList<>();
public void addChild(AreaCodeAdminTree node) {
children.add(node);
}
}

View File

@@ -11,5 +11,6 @@ public class FullUserVo {
private UserInfo userInfo;
private UserAuth userAuth;
private UserLogin userLogin;
private UserExtend account;
private List<UserPictures> userPicturesList;
}

View File

@@ -0,0 +1,23 @@
package com.ruoyi.xq.dto.admin.user.req;
import lombok.Data;
import java.time.LocalDate;
@Data
public class AddUserReq {
private String mobile;
private Integer userType;
private String nickname;
private String avatar;
private Integer gender;
private LocalDate birthday;
private Integer height;
private Integer weight;
private Integer residenceCode;
private Integer addressCode;
private Integer education;
private Integer marriage;
private String profession;
private Integer annualIncome;
}

View File

@@ -0,0 +1,23 @@
package com.ruoyi.xq.dto.admin.user.req;
import lombok.Data;
import java.time.LocalDate;
@Data
public class UpdateUserReq {
private Long userId;
private Integer userType;
private String nickname;
private String avatar;
private Integer gender;
private LocalDate birthday;
private Integer height;
private Integer weight;
private Integer residenceCode;
private Integer addressCode;
private Integer education;
private Integer marriage;
private String profession;
private Integer annualIncome;
}

View File

@@ -67,7 +67,7 @@ public class HomePageReq extends PageQuery {
@Schema(description = "购车情况")
private Integer carStatus;
@Schema(description = "户籍地")
private String addressCode;
private Integer addressCode;
}
public void initBirthdayByAge(){

View File

@@ -34,7 +34,7 @@ public class UpdateBaseInfoReq {
* 户籍地
*/
@Schema(description = "户籍地")
private String addressCode;
private Integer addressCode;
/**
* 学历
*/

View File

@@ -32,7 +32,7 @@ public class UpdateUserFullInfoReq {
@Schema(description = "居住地")
private Integer residenceCode;
@Schema(description = "户籍地")
private String addressCode;
private Integer addressCode;
@Schema(description = "学历")
private Integer education;
@Schema(description = "婚况")

View File

@@ -76,7 +76,7 @@ public class CurrentUserFullInfoVo {
* 户籍地
*/
@Schema(description = "户籍地")
private String addressCode;
private Integer addressCode;
@Schema(description = "户籍地名称")
private String addressName;
/**

View File

@@ -51,7 +51,7 @@ public class CurrentUserInfoVo {
@Schema(description = "户籍地名称")
private String addressName;
@Schema(description = "户籍地编码")
private String addressCode;
private Integer addressCode;
/**
* 状态 0 可用 1 不可用
*/

View File

@@ -69,7 +69,7 @@ public class HomeUserVo {
@Schema(description = "户籍地名称")
private String addressName;
@Schema(description = "户籍地编码")
private String addressCode;
private Integer addressCode;
/**
* 学历
*/

View File

@@ -140,7 +140,7 @@ public class CurrentUserManager {
String cos = systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN);
updateUser.setAvatar(cos + userGenderEnum.getDefaultAvatar());
}
if(StringUtils.isNotEmpty(req.getAddressCode())){
if(req.getAddressCode() != null){
AreaCode areaCode = areaCodeService.getById(req.getAddressCode());
updateUser.setAddressCode(req.getAddressCode());
updateUser.setAddressName(areaCode.getName());
@@ -261,7 +261,7 @@ public class CurrentUserManager {
public void updateInfo(UpdateUserFullInfoReq req) {
Long userId = LoginHelper.getUserId();
User updateUser = BeanConvertUtil.convertTo(req, User::new);
if(StringUtils.isNotEmpty(req.getAddressCode())){
if(req.getAddressCode() != null){
AreaCode areaCode = areaCodeService.getById(req.getAddressCode());
updateUser.setAddressCode(req.getAddressCode());
updateUser.setAddressName(areaCode.getFullname());

View File

@@ -2,6 +2,7 @@ package com.ruoyi.xq.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.xq.domain.AreaCode;
import com.ruoyi.xq.dto.admin.areacode.AreaCodeAdminTree;
import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery;
import com.ruoyi.xq.dto.app.areacode.AreaCodeTree;
@@ -17,6 +18,8 @@ public interface AreaCodeService extends IService<AreaCode> {
List<AreaCode> listAreaCode(AreaCodeQuery query);
List<AreaCodeAdminTree> treeAdmin();
List<AreaCodeTree> tree();
}

View File

@@ -6,11 +6,14 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.user.FullUserVo;
import com.ruoyi.xq.dto.admin.user.UserAdminVo;
import com.ruoyi.xq.dto.admin.user.req.AddUserReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateMobileAdminReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateUserReq;
import com.ruoyi.xq.dto.app.user.HomePageReq;
import com.ruoyi.xq.dto.app.user.vo.HomeUserListVo;
import com.ruoyi.xq.dto.app.user.vo.HomeUserVo;
import com.ruoyi.xq.dto.common.user.MinUser;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -49,4 +52,11 @@ public interface UserService extends IService<User> {
boolean unlock(Long id);
FullUserVo fullUserAdmin(Long userId);
User getByMobile(String mobile);
void saveUser(AddUserReq bo);
@Transactional(rollbackFor = Exception.class)
void updateBaseUser(UpdateUserReq updateUserReq);
}

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.xq.domain.AreaCode;
import com.ruoyi.xq.dto.admin.areacode.AreaCodeAdminTree;
import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery;
import com.ruoyi.xq.dto.app.areacode.AreaCodeTree;
import com.ruoyi.xq.mapper.AreaCodeMapper;
@@ -12,7 +13,6 @@ import com.ruoyi.xq.service.AreaCodeService;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -32,6 +32,35 @@ public class AreaCodeServiceImpl extends ServiceImpl<AreaCodeMapper,AreaCode> im
return list;
}
@Override
public List<AreaCodeAdminTree> treeAdmin() {
List<AreaCode> list = this.list();
List<AreaCodeAdminTree> nodeList = list.stream().map(i -> {
AreaCodeAdminTree areaCodeAdminTree = new AreaCodeAdminTree();
areaCodeAdminTree.setId(i.getCode());
areaCodeAdminTree.setLabel(i.getName());
areaCodeAdminTree.setParentId(i.getPcode());
return areaCodeAdminTree;
}).collect(Collectors.toList());
Map<Integer, AreaCodeAdminTree> nodeMap = new HashMap<>();
Set<AreaCodeAdminTree> roots = new HashSet<>();
// 遍历列表构建节点映射表
for (AreaCodeAdminTree node : nodeList) {
nodeMap.put(node.getId(), node);
if (node.getParentId() == 0 || !nodeMap.containsKey(node.getParentId())) {
roots.add(node);
}
}
// 建立父子关系
for (AreaCodeAdminTree node : nodeList) {
if (nodeMap.containsKey(node.getParentId())) {
AreaCodeAdminTree parentNode = nodeMap.get(node.getParentId());
parentNode.addChild(node);
}
}
return new ArrayList<>(roots);
}
@Override
public List<AreaCodeTree> tree() {
List<AreaCode> list = this.list();

View File

@@ -2,6 +2,7 @@ package com.ruoyi.xq.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,7 +15,9 @@ import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.xq.domain.*;
import com.ruoyi.xq.dto.admin.user.FullUserVo;
import com.ruoyi.xq.dto.admin.user.UserAdminVo;
import com.ruoyi.xq.dto.admin.user.req.AddUserReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateMobileAdminReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateUserReq;
import com.ruoyi.xq.dto.app.user.HomePageReq;
import com.ruoyi.xq.dto.app.user.vo.HomeUserListVo;
import com.ruoyi.xq.dto.app.user.vo.HomeUserVo;
@@ -22,6 +25,8 @@ import com.ruoyi.xq.dto.common.user.MinUser;
import com.ruoyi.xq.enums.ErrorEnum;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.enums.userinfo.UserGenderEnum;
import com.ruoyi.xq.lock.LockKey;
import com.ruoyi.xq.manager.LoginManager;
import com.ruoyi.xq.manager.SystemConfigManager;
import com.ruoyi.xq.mapper.UserMapper;
import com.ruoyi.xq.service.*;
@@ -32,8 +37,11 @@ import com.ruoyi.yunxin.req.UpdateUinfoReq;
import com.ruoyi.yunxin.resp.YxCommonR;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
@@ -68,6 +76,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements Use
private UserAuthService userAuthService;
@Autowired
private UserStatusService userStatusService;
@Autowired
private UserExtendService userExtendService;
@Autowired
private RedissonClient redissonClient;
@Autowired
private AreaCodeService areaCodeService;
@Override
public MinUser getMinUserById(Long userId){
@@ -223,7 +237,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements Use
if(StringUtils.isNotEmpty(vipQuery.getProfession()) ||
vipQuery.getAnnualIncome() != null || vipQuery.getZodiac() != null ||
vipQuery.getSign() != null || vipQuery.getChildStatus() != null || vipQuery.getHousingStatus() != null ||
vipQuery.getCarStatus() != null || StringUtils.isNotEmpty(vipQuery.getAddressCode())){
vipQuery.getCarStatus() != null || vipQuery.getAddressCode() != null){
if(userId == null){
throw new ServiceException(ErrorEnum.VIP_AUTH);
}
@@ -290,6 +304,82 @@ public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements Use
vo.setUserLogin(userLogin);
List<UserPictures> userPicturesList = userPicturesService.listByUserIdSuccess(userId);
vo.setUserPicturesList(userPicturesList);
UserExtend userExtend = userExtendService.getByUserId(userId);
vo.setAccount(userExtend);
return vo;
}
@Override
public User getByMobile(String mobile){
return this.getOne(Wrappers.lambdaQuery(User.class).eq(User::getMobile, mobile)
.last("limit 1"));
}
@Autowired
private LoginManager loginManager;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveUser(AddUserReq bo) {
User user = this.getByMobile(bo.getMobile());
if(user != null){
throw new ServiceException("手机号已存在!");
}
String lockKey = LockKey.getRegisterLockKey(bo.getMobile());
RLock lock = redissonClient.getLock(lockKey);
if(lock.isLocked()){
throw new ServiceException("您点击太快了");
}
lock.lock();
try {
user = this.getByMobile(bo.getMobile());
if(user != null){
throw new ServiceException("手机号已存在!");
}
user = loginManager.registerUser(bo.getMobile(), null);
UpdateUserReq updateUser = BeanConvertUtil.convertTo(bo, UpdateUserReq::new);
updateUser.setUserId(user.getId());
UserService userService = SpringUtil.getBean(UserService.class);
userService.updateBaseUser(updateUser);
}finally {
lock.unlock();
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateBaseUser(UpdateUserReq updateUserReq){
User user = this.getById(updateUserReq.getUserId());
if(user == null){
throw new ServiceException("用户不存在!");
}
User updateUser = new User();
updateUser.setId(user.getId());
updateUser.setType(updateUserReq.getUserType());
updateUser.setNickname(updateUserReq.getNickname());
updateUser.setAvatar(updateUserReq.getAvatar());
updateUser.setGender(updateUserReq.getGender());
updateUser.setHeight(updateUserReq.getHeight());
updateUser.setWeight(updateUserReq.getWeight());
updateUser.setBirthday(updateUserReq.getBirthday());
if(updateUserReq.getResidenceCode() != null){
updateUser.setResidenceCode(updateUserReq.getResidenceCode());
AreaCode areaCode = areaCodeService.getById(updateUserReq.getResidenceCode());
updateUser.setResidenceCode(updateUserReq.getResidenceCode());
updateUser.setResidenceName(areaCode.getName());
updateUser.setResidenceCityCode(areaCode.getPcode());
updateUser.setResidenceCityName(areaCode.getPname());
}
if(updateUserReq.getAddressCode() != null){
AreaCode areaCode = areaCodeService.getById(updateUserReq.getAddressCode());
updateUser.setAddressCode(updateUserReq.getAddressCode());
updateUser.setAddressName(areaCode.getFullname());
}
updateUser.setEducation(updateUserReq.getEducation());
updateUser.setMarriage(updateUserReq.getMarriage());
updateUser.setProfession(updateUserReq.getProfession());
updateUser.setAnnualIncome(updateUserReq.getAnnualIncome());
this.updateById(updateUser);
}
}