From 52358cd76aee8d5f7edc54e177b6eab0d1f58533 Mon Sep 17 00:00:00 2001
From: zhujie <leon.zhu@cloudroam.com.cn>
Date: 星期五, 11 四月 2025 17:31:06 +0800
Subject: [PATCH] 邀请功能

---
 src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java |   21 ++++
 src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java |    7 +
 src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java          |    3 
 src/main/java/com/mzl/flower/dto/response/customer/InviteRewardDTO.java  |   12 ++
 src/main/java/com/mzl/flower/service/customer/CustomerService.java       |   21 ++++
 src/main/java/com/mzl/flower/config/ResourceServerConfig.java            |    1 
 src/main/java/com/mzl/flower/web/login/CustomerLoginController.java      |    3 
 src/main/java/com/mzl/flower/dto/response/customer/InviteDTO.java        |   12 ++
 src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java         |   11 ++
 src/main/resources/mapper/customer/CustomerMapper.xml                    |    2 
 src/main/java/com/mzl/flower/entity/customer/Customer.java               |    4 
 src/main/java/com/mzl/flower/service/system/UserService.java             |  165 +++++++++++++++++++++-----------
 src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java  |    6 +
 13 files changed, 209 insertions(+), 59 deletions(-)

diff --git a/src/main/java/com/mzl/flower/config/ResourceServerConfig.java b/src/main/java/com/mzl/flower/config/ResourceServerConfig.java
index 0f1ae5f..dc560c6 100644
--- a/src/main/java/com/mzl/flower/config/ResourceServerConfig.java
+++ b/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();//配置访问控制,必须认证过后才可以访问
 
     }
diff --git a/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java b/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java
index 9464958..e199a9d 100644
--- a/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java
+++ b/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;
 
diff --git a/src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java b/src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java
index bc0509e..c537eaf 100644
--- a/src/main/java/com/mzl/flower/dto/request/customer/UpdateCustomerDTO.java
+++ b/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;
+
 
 
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/customer/InviteDTO.java b/src/main/java/com/mzl/flower/dto/response/customer/InviteDTO.java
new file mode 100644
index 0000000..b823e96
--- /dev/null
+++ b/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;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mzl/flower/dto/response/customer/InviteRewardDTO.java b/src/main/java/com/mzl/flower/dto/response/customer/InviteRewardDTO.java
new file mode 100644
index 0000000..10f74cd
--- /dev/null
+++ b/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;
+}
diff --git a/src/main/java/com/mzl/flower/entity/customer/Customer.java b/src/main/java/com/mzl/flower/entity/customer/Customer.java
index e59773e..1da4a4d 100644
--- a/src/main/java/com/mzl/flower/entity/customer/Customer.java
+++ b/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;
 }
diff --git a/src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java b/src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java
index c1f8002..2a1ee52 100644
--- a/src/main/java/com/mzl/flower/mapper/customer/CustomerMapper.java
+++ b/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();
 }
diff --git a/src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java b/src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java
index e161096..d53a2f0 100644
--- a/src/main/java/com/mzl/flower/service/customer/CustomerCenterService.java
+++ b/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;
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/customer/CustomerService.java b/src/main/java/com/mzl/flower/service/customer/CustomerService.java
index 1331f6e..401be19 100644
--- a/src/main/java/com/mzl/flower/service/customer/CustomerService.java
+++ b/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();
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/system/UserService.java b/src/main/java/com/mzl/flower/service/system/UserService.java
index 3d25276..502000a 100644
--- a/src/main/java/com/mzl/flower/service/system/UserService.java
+++ b/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);
+        }
+    }
+
 
 }
diff --git a/src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java b/src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java
index 54e5181..dbfdcd1 100644
--- a/src/main/java/com/mzl/flower/web/customer/CustomerCenterController.java
+++ b/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());
+    }
 }
diff --git a/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java b/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
index ee32007..29a6bce 100644
--- a/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
+++ b/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;
diff --git a/src/main/resources/mapper/customer/CustomerMapper.xml b/src/main/resources/mapper/customer/CustomerMapper.xml
index dbf189c..8e9c56e 100644
--- a/src/main/resources/mapper/customer/CustomerMapper.xml
+++ b/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

--
Gitblit v1.9.3