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