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 < now() and c.is_member = 1 </update> <select id="queryCustomer" resultType="com.mzl.flower.dto.response.customer.CustomerDTO"> SELECT