zhujie
2025-04-11 52358cd76aee8d5f7edc54e177b6eab0d1f58533
邀请功能
已修改11个文件
已添加2个文件
156 ■■■■■ 文件已修改
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 53 ●●●●● 补丁 | 查看 | 原始文档 | 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;
@@ -156,7 +164,6 @@
    }
    public User getUserByThirdId(String thirdId){
@@ -283,6 +290,7 @@
    /**
     * 新增用户
     *
     * @param dto
     * @return
     */
@@ -385,6 +393,7 @@
    /**
     * 更新用户
     *
     * @param dto
     */
    public void updateUser(UpdateUserDTO dto) {
@@ -513,6 +522,7 @@
    /**
     * 查看微信是否已经存在用户
     *
     * @param openId
     * @param sessionKey
     * @param unionId
@@ -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