zhujie
2025-04-11 52358cd76aee8d5f7edc54e177b6eab0d1f58533
邀请功能
已修改11个文件
已添加2个文件
268 ■■■■ 文件已修改
src/main/java/com/mzl/flower/config/ResourceServerConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/customer/InviteDTO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/customer/InviteRewardDTO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/customer/Customer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/customer/CustomerService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/system/UserService.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/login/CustomerLoginController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/customer/CustomerMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/config/ResourceServerConfig.java
@@ -65,6 +65,7 @@
                .antMatchers("/api/v2/coupon/app/home/alert").permitAll()
                .antMatchers("/v2/config-param/base/info").permitAll()
                .antMatchers("/api/supplier/**").permitAll()
                .antMatchers("/api/customer/center").permitAll()
                .antMatchers("/api/**").authenticated();//配置访问控制,必须认证过后才可以访问
    }
src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java
@@ -12,6 +12,9 @@
    @ApiModelProperty(value = "短信验证码")
    private String smsCode;
    @ApiModelProperty(value = "邀请码")
    private String intevailCode;
    @ApiModelProperty(value = "用户类型")
    private String userType;
src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java
@@ -4,6 +4,7 @@
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
@Data
public class UpdateCustomerDTO {
@@ -41,6 +42,12 @@
    @ApiModelProperty("是否会员")
    private Boolean isMember;
    @ApiModelProperty("会员到期时间")
    private LocalDateTime memberOvertime;
    @ApiModelProperty("注册邀请码")
    private String regesterCode;
}
src/main/java/com/mzl/flower/dto/response/customer/InviteDTO.java
对比新文件
@@ -0,0 +1,12 @@
package com.mzl.flower.dto.response.customer;
import lombok.Data;
@Data
public class InviteDTO {
    private String userId ;
    private String userName ;
    private String reward;
}
src/main/java/com/mzl/flower/dto/response/customer/InviteRewardDTO.java
对比新文件
@@ -0,0 +1,12 @@
package com.mzl.flower.dto.response.customer;
import lombok.Data;
import java.util.List;
@Data
public class InviteRewardDTO {
    private List<InviteDTO> successInvite;
    private List<InviteDTO> myInvite;
}
src/main/java/com/mzl/flower/entity/customer/Customer.java
@@ -52,4 +52,8 @@
    private LocalDateTime memberOvertime;
    @ApiModelProperty("是否会员")
    private Boolean isMember;
    @ApiModelProperty("我的邀请码")
    private String intervialcode;
    @ApiModelProperty("注册邀请码")
    private String reintervialcode;
}
src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.customer.QueryCustomerDTO;
import com.mzl.flower.dto.response.customer.CustomerDTO;
import com.mzl.flower.dto.response.customer.InviteDTO;
import com.mzl.flower.dto.response.supplier.SupplierDTO;
import com.mzl.flower.entity.customer.Customer;
import org.apache.ibatis.annotations.Param;
@@ -42,5 +43,15 @@
    @Select("select * from t_customer_info where  user_id  = ( select id from t_user where tel =#{phone} and type = 'customer')")
    CustomerDTO findCustomerByPhone(String phone);
    @Select("select * from t_customer_info where  intervialcode  =#{code}")
    Customer findCustomerByInvitationCode(@Param("code") String code);
    @Select("select count(1) from t_customer_info where reintervialcode = #{code}")
    Integer getInvitatCountByCode(@Param("code") String code);
    @Select("select user_id as userId,name as userName,t1.reward from t_customer_info c" +
            "inner join (select reintervialcode,count(DISTINCT id) as reward from t_customer_info where reintervialcode is not null and reintervialcode <> '' group by reintervialcode) t1 on c.intervialcode=t1.reintervialcode")
    List<InviteDTO> getReward();
    void checkVipExpireTime();
}
src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java
@@ -1,16 +1,23 @@
package com.mzl.flower.service.customer;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.dto.response.customer.CustomerTjDTO;
import com.mzl.flower.dto.response.customer.InviteDTO;
import com.mzl.flower.dto.response.customer.InviteRewardDTO;
import com.mzl.flower.entity.customer.BrowseHistory;
import com.mzl.flower.entity.customer.Collect;
import com.mzl.flower.entity.customer.Follow;
import com.mzl.flower.mapper.customer.BrowseHistoryMapper;
import com.mzl.flower.mapper.customer.CollectMapper;
import com.mzl.flower.mapper.customer.CustomerMapper;
import com.mzl.flower.mapper.customer.FollowMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Transactional
@@ -20,11 +27,13 @@
    private final FollowMapper followMapper;
    private final CollectMapper collectMapper;
    private final BrowseHistoryMapper browseHistoryMapper;
    private final CustomerMapper customerMapper;
    public CustomerCenterService(FollowMapper followMapper, CollectMapper collectMapper, BrowseHistoryMapper browseHistoryMapper) {
    public CustomerCenterService(FollowMapper followMapper, CollectMapper collectMapper, BrowseHistoryMapper browseHistoryMapper, CustomerMapper customerMapper) {
        this.followMapper = followMapper;
        this.collectMapper = collectMapper;
        this.browseHistoryMapper = browseHistoryMapper;
        this.customerMapper = customerMapper;
    }
@@ -35,4 +44,14 @@
        dto.setBrowseNum(browseHistoryMapper.selectCount(new LambdaQueryWrapper<BrowseHistory>().eq(BrowseHistory::getUserId, userId)));
        return dto;
    }
    //获取所有的邀请记录和当前登陆人的邀请记录
    public InviteRewardDTO customerReward() {
        InviteRewardDTO rewardto = new InviteRewardDTO();
        List<InviteDTO> reward = customerMapper.getReward();
        rewardto.setSuccessInvite(reward);
        List<InviteDTO> myreward = reward.stream().filter(s->s!=null&&s.getUserId()== SecurityUtils.getUserId()).collect(Collectors.toList());;
        rewardto.setMyInvite(myreward);
        return rewardto;
    }
}
src/main/java/com/mzl/flower/service/customer/CustomerService.java
@@ -33,6 +33,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Random;
@Service
@Transactional
@@ -48,6 +49,10 @@
    @Resource
    private BaseService baseService;
    private static final String CHARACTERS = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
    private final Random random = new Random();
    public CustomerService(CustomerMapper customerMapper, PartnerMapper partnerMapper) {
        this.customerMapper = customerMapper;
@@ -88,6 +93,8 @@
            customer.create(SecurityUtils.getUserId());
            customer.setIsEnabled(true);
            customer.setIntervialcode(generateCode());
            customer.setReintervialcode(dto.getRegesterCode());
            customer.setLevelId(Long.valueOf(Constants.DEFAULT_MEMBER_ID));
            customerMapper.insert(customer);
        } else {//重新修改
@@ -133,6 +140,11 @@
    private boolean checkExist(String userId) {
        return customerMapper.selectCount(new LambdaQueryWrapper<Customer>().eq(Customer::getUserId, userId)) > 0;
    }
    //验证邀请码是否有效
    public boolean checkCode(String code) {
        return customerMapper.findCustomerByInvitationCode(code) == null;
    }
    public Page<CustomerDTO> queryCustomer(QueryCustomerDTO dto, Page page) {
@@ -281,4 +293,13 @@
        // 获取当天日期之前,且is_member=1的用户,设置为is_member=0并且将member_overtime设置为null
        customerMapper.checkVipExpireTime();
    }
    //生成邀请码
    private String generateCode() {
        StringBuilder sb = new StringBuilder(4);
        for (int i = 0; i < 4; i++) {
            sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
        }
        return sb.toString();
    }
}
src/main/java/com/mzl/flower/service/system/UserService.java
@@ -13,10 +13,13 @@
import com.mzl.flower.dto.request.customer.UpdateCustomerDTO;
import com.mzl.flower.dto.request.system.*;
import com.mzl.flower.dto.response.current.CurrentUserDTO;
import com.mzl.flower.dto.response.customer.CustomerDTO;
import com.mzl.flower.dto.response.system.*;
import com.mzl.flower.entity.customer.Customer;
import com.mzl.flower.entity.point.CustomerPoint;
import com.mzl.flower.entity.system.*;
import com.mzl.flower.enums.TrueOrFalseEnum;
import com.mzl.flower.mapper.customer.CustomerMapper;
import com.mzl.flower.mapper.point.CustomerPointMapper;
import com.mzl.flower.mapper.system.*;
import com.mzl.flower.service.customer.CustomerService;
@@ -40,6 +43,7 @@
import org.springframework.util.ObjectUtils;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -88,6 +92,10 @@
    @Autowired
    private CustomerPointMapper customerPointMapper;
    @Autowired
    private CustomerMapper customerMapper;
    @Autowired
    private StationService stationService;
@@ -95,14 +103,14 @@
    RedissonClient redissonClient;
    public User findUserByOpenId(String openId, String sessionKey, String unionId
            , String imgUrl, String nickname,String userType){
            , String imgUrl, String nickname, String userType) {
        List<String> userTypes = new ArrayList<>();
        userTypes.add(userType);
        List<User> userList = userMapper.getByOpenID(openId,userTypes);
        if(CollectionUtils.isEmpty(userList)){
        List<User> userList = userMapper.getByOpenID(openId, userTypes);
        if (CollectionUtils.isEmpty(userList)) {
            throw new ValidationException("请注册账号后至\"个人中心-绑定微信\"后再使用微信登录");
        }
        User user=userList.get(0);
        User user = userList.get(0);
//        user.setNickName(nickname);
        user.setNickName(user.getLoginName());
        user.setPicture(imgUrl);
@@ -110,8 +118,8 @@
        userMapper.updateById(user);
        UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>()
                .eq(UserWechat::getOpenId, openId)
                .eq(UserWechat::getUserId,user.getId()));
        if(wechat == null){
                .eq(UserWechat::getUserId, user.getId()));
        if (wechat == null) {
            throw new ValidationException("请至\"个人中心-绑定微信\"后再使用微信登录");
        }
        wechat.setOpenId(openId);
@@ -125,19 +133,19 @@
        // 查看微信是否已经绑定过用户
        User user = userMapper.selectById(userId);
        if(ObjectUtils.isEmpty(user)){
        if (ObjectUtils.isEmpty(user)) {
            throw new ValidationException("当前用户不存在");
        }
        List<User> userList=wechatMapper.selectUserByOpenId(openId,user.getType());
        if(!CollectionUtils.isEmpty(userList)){
        List<User> userList = wechatMapper.selectUserByOpenId(openId, user.getType());
        if (!CollectionUtils.isEmpty(userList)) {
            throw new ValidationException("该微信已绑定其他账号");
        }
        UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>()
                .eq(UserWechat::getUserId,userId));
        if(wechat == null){
                .eq(UserWechat::getUserId, userId));
        if (wechat == null) {
            wechat = new UserWechat();
            wechat.setId(UUIDGenerator.getUUID());
            wechat.setUserId(userId);
@@ -146,7 +154,7 @@
            wechat.setSessionKey(sessionKey);
            wechat.setRealName(dto.getRealName());
            wechatMapper.insert(wechat);
        }else{
        } else {
            wechat.setOpenId(openId);
            wechat.setUnionId(unionId);
            wechat.setSessionKey(sessionKey);
@@ -158,10 +166,9 @@
    }
    public User getUserByThirdId(String thirdId){
    public User getUserByThirdId(String thirdId) {
        User u = userMapper.selectOne(new QueryWrapper<User>().eq("third_id", thirdId));
        if(u == null){
        if (u == null) {
            throw new ValidationException("用户不存在");
        }
@@ -175,7 +182,7 @@
        //获取用户信息
        User user = getUserById(userId);
        if(user == null){
        if (user == null) {
            throw new ValidationException("用户不存在");
        }
        result.setLoginName(user.getLoginName());
@@ -194,16 +201,16 @@
        //根据用户角色获取用户菜单
        List<MenuTreeDTO> menus = null;
        if(Constants.USER_TYPE.admin.name().equals(user.getType())){
        if (Constants.USER_TYPE.admin.name().equals(user.getType())) {
            if (roleIds.contains(Constants.ROLE_SYS_ADMIN)) {
                menus = menuMapper.selectListOrderBySeq();
            } else if (roleIds.size() > 0) {
                menus = menuMapper.selectOperationList(roleIds);
            }
        }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){
        } else if (Constants.USER_TYPE.partner.name().equals(user.getType())) {
            menus = partnerMenuMapper.selectListOrderBySeq();
        }
        if(menus != null) {
        if (menus != null) {
            for (MenuTreeDTO menu : menus) {
                menu.setPath(menu.getMenuHref());
                menu.setName(menu.getMenuName());
@@ -223,22 +230,22 @@
//        result.setMenuList(menuList);
        result.setId(userId);
        if(Constants.USER_TYPE.customer.name().equals(user.getType())){
        if (Constants.USER_TYPE.customer.name().equals(user.getType())) {
            result.setCustomerDTO(customerService.getCurrentCustomer());
            //查询积分
            CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
                    .eq(CustomerPoint::getUserId, userId));
            if(customerPoint == null){
            if (customerPoint == null) {
                result.setCurrentPoint(0);
            }else{
                Integer currentPoint =customerPoint.getTotalPoint()-customerPoint.getUsedPoint()-customerPoint.getExpiredPoint()-customerPoint.getDeductionPoint();
                result.setCurrentPoint(currentPoint>=0?currentPoint:0);
            } else {
                Integer currentPoint = customerPoint.getTotalPoint() - customerPoint.getUsedPoint() - customerPoint.getExpiredPoint() - customerPoint.getDeductionPoint();
                result.setCurrentPoint(currentPoint >= 0 ? currentPoint : 0);
            }
        }else if(Constants.USER_TYPE.supplier.name().equals(user.getType())){
        } else if (Constants.USER_TYPE.supplier.name().equals(user.getType())) {
            result.setSupplierDTO(supplierService.getCurrentSupplier());
        }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){
        } else if (Constants.USER_TYPE.partner.name().equals(user.getType())) {
            result.setPartnerDTO(partnerService.getCurrentPartner());
        }else if (Constants.USER_TYPE.admin.name().equals(user.getType())){
        } else if (Constants.USER_TYPE.admin.name().equals(user.getType())) {
            result.setMainWarehouse(stationService.getMainWarehouse(user.getId()));
        }
        result.setBindWechat(wechatMapper.selectCount(new LambdaQueryWrapper<UserWechat>()
@@ -247,11 +254,11 @@
        return result;
    }
    public User getUserById(String id){
    public User getUserById(String id) {
        return userMapper.selectById(id);
    }
    public User loginUser(String username){
    public User loginUser(String username) {
        return userMapper.loginUser(username);
    }
@@ -259,7 +266,7 @@
        return userMapper.getActiveUser(loginName, userTypes);
    }
    public void updateUserInfo(UserInfoDTO dto){
    public void updateUserInfo(UserInfoDTO dto) {
        String id = SecurityUtils.getUserId();
        User user = getUserById(id);
@@ -269,7 +276,7 @@
        String tel = dto.getTel();
        if (StringUtils.isEmpty(user.getTel()) || !user.getTel().equals(tel)) {
            User u = findByLoginName(tel, userTypes);
            if(u != null){
            if (u != null) {
                throw new ValidationException("手机号已存在");
            }
            user.setTel(dto.getTel());
@@ -283,6 +290,7 @@
    /**
     * 新增用户
     *
     * @param dto
     * @return
     */
@@ -293,13 +301,13 @@
        String tel = dto.getTel();
        User u = findByLoginName(tel, userTypes);
        if(u != null){
        if (u != null) {
            throw new ValidationException("手机号已存在");
        }
        String loginName = dto.getLoginName();
        u = findByLoginName(loginName, userTypes);
        if(u != null){
        if (u != null) {
            throw new ValidationException("账号已存在");
        }
@@ -316,7 +324,7 @@
        addRole(dto.getRoleIds(), user.getId());
        //添加或更新员工信息
        addEmployee(dto.getEmployeeDTO(),user.getId());
        addEmployee(dto.getEmployeeDTO(), user.getId());
        return user;
    }
@@ -324,12 +332,12 @@
        Employee employee = employeeMapper.selectOne(new LambdaQueryWrapper<Employee>().eq(Employee::getUserId, userId));
        if (employee == null) {
            employee = new Employee();
            BeanUtils.copyProperties(dto,employee);
            BeanUtils.copyProperties(dto, employee);
            employee.setUserId(userId);
            employee.create(SecurityUtils.getUserId());
            employeeMapper.insert(employee);
        }else {
            BeanUtils.copyProperties(dto,employee);
        } else {
            BeanUtils.copyProperties(dto, employee);
            employee.setUserId(userId);
            employee.update(SecurityUtils.getUserId());
            employeeMapper.updateById(employee);
@@ -374,9 +382,9 @@
            String roleDesc = userMapper.selectUserRoleDesc(id);
            result.setRoleDesc(roleDesc);
            Employee employee = employeeMapper.selectOne(new LambdaQueryWrapper<Employee>().eq(Employee::getUserId, id));
            if(employee!=null){
            if (employee != null) {
                EmployeeDTO employeeDTO = new EmployeeDTO();
                BeanUtils.copyProperties(employee,employeeDTO);
                BeanUtils.copyProperties(employee, employeeDTO);
                result.setEmployeeDTO(employeeDTO);
            }
        }
@@ -385,6 +393,7 @@
    /**
     * 更新用户
     *
     * @param dto
     */
    public void updateUser(UpdateUserDTO dto) {
@@ -395,11 +404,11 @@
            user.setPassword(passwordEncoder.encode(dto.getPassword()));
        }
        BeanUtils.copyProperties(dto, user,"loginName", "tel", "password", "type");
        BeanUtils.copyProperties(dto, user, "loginName", "tel", "password", "type");
        user.update(SecurityUtils.getUserId());
        userMapper.updateById(user);
        if(Constants.USER_TYPE.admin.name().equals(user.getType())) {
        if (Constants.USER_TYPE.admin.name().equals(user.getType())) {
            //删除用户的角色信息
            userRoleMapper.delete(new QueryWrapper<UserRole>().eq("user_id", id));
            //给用户添加角色
@@ -407,22 +416,22 @@
        }
        //添加或更新员工信息
        addEmployee(dto.getEmployeeDTO(),user.getId());
        addEmployee(dto.getEmployeeDTO(), user.getId());
    }
    private void checkAndSetUserLoginInfo(User user, String tel, String loginName){
    private void checkAndSetUserLoginInfo(User user, String tel, String loginName) {
        List<String> userTypes = new ArrayList<>();
        userTypes.add(user.getType());
        if (StringUtils.isEmpty(user.getTel()) || !user.getTel().equals(tel)) {
            User u = findByLoginName(tel, userTypes);
            if(u != null){
            if (u != null) {
                throw new ValidationException("手机号已存在");
            }
            user.setTel(tel);
        }
        if(StringUtils.isNotEmpty(loginName)) {
        if (StringUtils.isNotEmpty(loginName)) {
            if (StringUtils.isEmpty(user.getLoginName()) || !user.getLoginName().equals(loginName)) {
                User u = findByLoginName(loginName, userTypes);
                if (u != null) {
@@ -433,7 +442,7 @@
        }
    }
    public void deleteUser(String id){
    public void deleteUser(String id) {
        User user = getUserById(id);
        user.setDeleted(true);
        user.update(SecurityUtils.getUserId());
@@ -447,11 +456,11 @@
        userMapper.updateById(user);
    }
    public void changePassword(ChangePasswordDTO dto){
    public void changePassword(ChangePasswordDTO dto) {
        String userId = SecurityUtils.getUserId();
        User user = getUserById(userId);
        if(StringUtils.isNotBlank(dto.getOldPassword())){
            if(!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())){
        if (StringUtils.isNotBlank(dto.getOldPassword())) {
            if (!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())) {
                throw new ValidationException("原密码错误,无权修改");
            }
        }
@@ -461,7 +470,7 @@
        userMapper.updateById(user);
    }
    public void setUserStatus(String id, String status){
    public void setUserStatus(String id, String status) {
        User user = getUserById(id);
        user.setStatus(status);
        user.update(SecurityUtils.getUserId());
@@ -505,14 +514,15 @@
    public List<User> getVipGradeUserList(String getVipGrade) {
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(User::getDeleted, TrueOrFalseEnum.FALSE.isFlag())
                .eq(User::getVipGrade,getVipGrade);
                .eq(User::getVipGrade, getVipGrade);
        return userMapper.selectList(queryWrapper);
    }
    /**
     * 查看微信是否已经存在用户
     *
     * @param openId
     * @param sessionKey
     * @param unionId
@@ -522,8 +532,8 @@
    public User getExistUserByOpenId(String openId, String sessionKey, String unionId, String userType) {
        List<String> userTypes = new ArrayList<>();
        userTypes.add(userType);
        List<User> userList = userMapper.getByOpenID(openId,userTypes);
        if(!CollectionUtils.isEmpty(userList)){
        List<User> userList = userMapper.getByOpenID(openId, userTypes);
        if (!CollectionUtils.isEmpty(userList)) {
            return userList.get(0);
        }
        return null;
@@ -531,11 +541,11 @@
    public void registWxUser(CreateWechatUserDTO dto) {
        String RETISTER_KEY = "%s_%s";
        RLock lock = redissonClient.getLock(String.format(RETISTER_KEY,dto.getPurePhoneNumber(),dto.getUserType()));
        RLock lock = redissonClient.getLock(String.format(RETISTER_KEY, dto.getPurePhoneNumber(), dto.getUserType()));
        try {
            // 获取锁,最多等待 10 秒,锁自动释放时间 30 秒
            if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
                try{
                try {
                    // 其次查找当前loginName是prephonenume的,userType是customer的用户存在不存在
                    if (StringUtils.isEmpty(dto.getPurePhoneNumber()) && StringUtils.isEmpty(dto.getPhoneNumber())) {
                        throw new ValidationException("微信获取的电话号码为空!无法注册");
@@ -572,7 +582,7 @@
                    BindWechatDTO wechatDTO = new BindWechatDTO();
                    wechatDTO.setRealName(dto.getPurePhoneNumber());
                    bindWechat(user.getId(), dto.getOpenId(), dto.getUnionId(), dto.getSessionKey(), wechatDTO);
                }finally {
                } finally {
                    lock.unlock();
                }
            }
@@ -605,6 +615,10 @@
                    userTypes.add(dto.getUserType());
                    User user = findByLoginName(dto.getUsername(), userTypes);
                    if (ObjectUtils.isEmpty(user)) {
                        //验证邀请码
                        if (StringUtils.isNotEmpty(dto.getIntevailCode()) && customerService.checkCode(dto.getIntevailCode())) {
                            throw new ValidationException("无效邀请码");
                        }
                        // 是新用户,需要注册
                        user = new User();
                        user.setId(UUIDGenerator.getUUID());
@@ -621,6 +635,12 @@
                        // 注册商户信息
                        UpdateCustomerDTO updateCustomerDTO = new UpdateCustomerDTO();
                        updateCustomerDTO.setUserId(user.getId());
                        updateCustomerDTO.setRegesterCode(dto.getIntevailCode());
                        //有效邀请码注册成功后赠送1天会员
                        if (!customerService.checkCode(dto.getIntevailCode())) {
                            updateCustomerDTO.setIsMember(true);
                            updateCustomerDTO.setMemberOvertime(LocalDateTime.now().plusDays(1));
                        }
                        if (StringUtils.isNotBlank(dto.getUsername())) {
                            updateCustomerDTO.setName("智信-" + dto.getUsername().substring(dto.getUsername().length() - 4));
@@ -628,6 +648,8 @@
                        updateCustomerDTO.setCover("https://hmy-flower.oss-cn-shanghai.aliyuncs.com/8f/8f205ea4618b4ce48d5bd204ae73f075tmp_f0c47a66148245dc17d74563c5939e764273ba583619664d.jpg");
                        customerService.addOrUpdateCustomer(updateCustomerDTO);
                        //邀请会员权益
                        intervialUser(dto.getIntevailCode());
                        return user;
                    }
                } finally {
@@ -640,5 +662,34 @@
        return null;
    }
    //邀请成功增加用户权益
    private void intervialUser(String code) {
        //按照该邀请码下已有邀请人数做相应的会员有效期增加
        Integer InvitatCount = customerMapper.getInvitatCountByCode(code);
        //根据邀请码查找对应的邀请人员
        //1人-3天,3人-15天,5人-30天
        Customer customerByCode = customerMapper.findCustomerByInvitationCode(code);
        if (!ObjectUtils.isEmpty(customerByCode)) {
            LocalDateTime memberOvertime = customerByCode.getMemberOvertime();
            if (!customerByCode.getIsMember()) {
                memberOvertime = LocalDateTime.now();
            }
            switch (InvitatCount) {
                case 1:
                    memberOvertime = memberOvertime.plusDays(3);
                    break;
                case 3:
                    memberOvertime = memberOvertime.plusDays(15);
                    break;
                case 5:
                    memberOvertime = memberOvertime.plusDays(30);
                    break;
            }
            customerByCode.setIsMember(true);
            customerByCode.setMemberOvertime(memberOvertime);
            customerService.updateMemberInfo(customerByCode);
        }
    }
}
src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java
@@ -31,4 +31,10 @@
    public ResponseEntity<ReturnDataDTO> customerCenterTj() {
        return returnData(R.SUCCESS.getCode(),customerCenterService.customerCenterTj(SecurityUtils.getUserId()));
    }
    @GetMapping("/invitereward")
    @ApiOperation(value = "邀请记录", notes = "邀请记录")
    public ResponseEntity<ReturnDataDTO> customerReward() {
        return returnData(R.SUCCESS.getCode(),customerCenterService.customerReward());
    }
}
src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
@@ -72,6 +72,9 @@
    @Autowired
    private CustomerMapper customerMapper;
    @Autowired
    private CustomerService customerService;
    @Autowired
    private TokenStore tokenStore;
src/main/resources/mapper/customer/CustomerMapper.xml
@@ -7,7 +7,7 @@
    <update id="checkVipExpireTime">
        update t_customer_info c
        set c.is_member = 0,c.member_overtime = NULL
        where c.member_overtime < now() and c.is_member = 1
        where c.member_overtime &lt; now() and c.is_member = 1
    </update>
    <select id="queryCustomer" resultType="com.mzl.flower.dto.response.customer.CustomerDTO">
        SELECT