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/system/UserService.java | 165 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 108 insertions(+), 57 deletions(-) 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); + } + } + } -- Gitblit v1.9.3