parent
4d5818f3b1
commit
88cdeb08e7
@ -1,7 +1,15 @@ |
|||||||
package com.hfkj.dao; |
package com.hfkj.dao; |
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Param; |
||||||
|
import org.apache.ibatis.annotations.Select; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
/** |
/** |
||||||
* mapper扩展类 |
* mapper扩展类 |
||||||
*/ |
*/ |
||||||
public interface BsUserAccountRecordMapperExt { |
public interface BsUserAccountRecordMapperExt { |
||||||
|
|
||||||
|
@Select("<script> select sum(transaction_amount) from bs_user_account_record where user_id = #{userId} and type = 1 and `status` = 1 </script>") |
||||||
|
BigDecimal queryUserTotalProfit(@Param("userId") Long userId); |
||||||
} |
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.hfkj.service.user; |
||||||
|
|
||||||
|
/** |
||||||
|
* @className: BsUserService |
||||||
|
* @author: HuRui |
||||||
|
* @date: 2024/9/6 |
||||||
|
**/ |
||||||
|
public interface BsUserGradeService { |
||||||
|
|
||||||
|
/** |
||||||
|
* 等级晋升 |
||||||
|
* @param userId |
||||||
|
*/ |
||||||
|
void promote(Long userId); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,168 @@ |
|||||||
|
package com.hfkj.service.user.impl; |
||||||
|
|
||||||
|
import com.hfkj.common.exception.ErrorCode; |
||||||
|
import com.hfkj.common.exception.ErrorHelp; |
||||||
|
import com.hfkj.common.exception.SysCode; |
||||||
|
import com.hfkj.entity.BsUser; |
||||||
|
import com.hfkj.model.UserTeamModel; |
||||||
|
import com.hfkj.service.user.BsUserGradeService; |
||||||
|
import com.hfkj.service.user.BsUserAccountRecordService; |
||||||
|
import com.hfkj.service.user.BsUserParentRelService; |
||||||
|
import com.hfkj.service.user.BsUserService; |
||||||
|
import com.hfkj.sysenum.user.UserAccountRecordSourceTypeEnum; |
||||||
|
import com.hfkj.sysenum.user.UserGradeEnum; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Propagation; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @className: BsGradeServiceImpl |
||||||
|
* @author: HuRui |
||||||
|
* @date: 2024/9/26 |
||||||
|
**/ |
||||||
|
@Service("userGradeService") |
||||||
|
public class BsUserGradeServiceImpl implements BsUserGradeService { |
||||||
|
@Resource |
||||||
|
private BsUserService userService; |
||||||
|
@Resource |
||||||
|
private BsUserAccountRecordService userAccountRecordService; |
||||||
|
@Resource |
||||||
|
private BsUserParentRelService userParentRelService; |
||||||
|
@Override |
||||||
|
@Transactional(propagation= Propagation.REQUIRED,rollbackFor= {RuntimeException.class}) |
||||||
|
public void promote(Long userId) { |
||||||
|
// 查询详情
|
||||||
|
BsUser user = userService.getUser(userId); |
||||||
|
if (user == null) { |
||||||
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, ""); |
||||||
|
} |
||||||
|
if (UserGradeEnum.grade1.getCode().equals(user.getGrade())) { |
||||||
|
// 晋升优淘会员
|
||||||
|
if (promoteGrade2(user)) { |
||||||
|
user.setGrade(UserGradeEnum.grade2.getCode()); |
||||||
|
userService.editData(user); |
||||||
|
|
||||||
|
// 修改上下级关系等级
|
||||||
|
userParentRelService.updateParentGrade(user.getId(), UserGradeEnum.grade2); |
||||||
|
} |
||||||
|
} else if (UserGradeEnum.grade2.getCode().equals(user.getGrade())) { |
||||||
|
// 晋升团长
|
||||||
|
if (promoteGrade3(user)) { |
||||||
|
user.setGrade(UserGradeEnum.grade3.getCode()); |
||||||
|
userService.editData(user); |
||||||
|
|
||||||
|
// 修改上下级关系等级
|
||||||
|
userParentRelService.updateParentGrade(user.getId(), UserGradeEnum.grade3); |
||||||
|
} |
||||||
|
} else if (UserGradeEnum.grade3.getCode().equals(user.getGrade())) { |
||||||
|
// 晋升渠道
|
||||||
|
if (promoteGrade4(user)) { |
||||||
|
user.setGrade(UserGradeEnum.grade4.getCode()); |
||||||
|
userService.editData(user); |
||||||
|
|
||||||
|
// 修改上下级关系等级
|
||||||
|
userParentRelService.updateParentGrade(user.getId(), UserGradeEnum.grade4); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 晋升条件【优淘会员】 |
||||||
|
* @param user |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private boolean promoteGrade2(BsUser user) { |
||||||
|
// 满足的条件状态
|
||||||
|
boolean payCondition = false; |
||||||
|
boolean profitCondition = false; |
||||||
|
|
||||||
|
// 条件一(支付3元宝)
|
||||||
|
Map<String,Object> accountRecordParam = new HashMap<>(); |
||||||
|
accountRecordParam.put("userId", ""); |
||||||
|
accountRecordParam.put("sourceType", UserAccountRecordSourceTypeEnum.type2.getType()); |
||||||
|
if (!userAccountRecordService.getList(accountRecordParam).isEmpty()) { |
||||||
|
payCondition = true; |
||||||
|
} |
||||||
|
|
||||||
|
// 条件二(元宝收益达到5元宝)
|
||||||
|
BigDecimal profit = userAccountRecordService.getUserTotalProfit(user.getId()); |
||||||
|
if (profit.compareTo(new BigDecimal("5")) >= 1) { |
||||||
|
profitCondition = true; |
||||||
|
} |
||||||
|
// 满足其中条件一项
|
||||||
|
return (profitCondition || payCondition); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 晋升条件【团长】 |
||||||
|
* @param user |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private boolean promoteGrade3(BsUser user) { |
||||||
|
// 满足的条件状态
|
||||||
|
boolean directlyUnder = false; // 直属
|
||||||
|
boolean nonDirect = false; // 非直属
|
||||||
|
boolean profitCondition = false; // 元宝收益
|
||||||
|
|
||||||
|
Map<String,Object> param = new HashMap<>(); |
||||||
|
param.put("parentUserId", user.getId()); |
||||||
|
List<UserTeamModel> subData = userParentRelService.getTeamSubList(param); |
||||||
|
|
||||||
|
// 条件一(直属正式会员达到30人)
|
||||||
|
if (subData.stream().filter(o -> o.getRelType().equals(1)).count() >= 30) { |
||||||
|
directlyUnder = true; |
||||||
|
} |
||||||
|
// 条件二(非直属正式会员达到100人)
|
||||||
|
if (subData.stream().filter(o -> o.getRelType().equals(2)).count() >= 100) { |
||||||
|
nonDirect = true; |
||||||
|
} |
||||||
|
// 条件三(累计元宝收益达到100元宝)
|
||||||
|
BigDecimal profit = userAccountRecordService.getUserTotalProfit(user.getId()); |
||||||
|
if (profit.compareTo(new BigDecimal("100")) >= 1) { |
||||||
|
profitCondition = true; |
||||||
|
} |
||||||
|
|
||||||
|
// 满足全部条件
|
||||||
|
return (directlyUnder && nonDirect && profitCondition); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 晋升条件【渠道】 |
||||||
|
* @param user |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private boolean promoteGrade4(BsUser user) { |
||||||
|
// 满足的条件状态
|
||||||
|
boolean directlyUnder = false; // 直属
|
||||||
|
boolean nonDirect = false; // 非直属
|
||||||
|
boolean profitCondition = false; // 元宝收益
|
||||||
|
|
||||||
|
Map<String,Object> param = new HashMap<>(); |
||||||
|
param.put("parentUserId", user.getId()); |
||||||
|
param.put("userType", 4); |
||||||
|
List<UserTeamModel> directlyUnderData = userParentRelService.getTeamSubList(param); |
||||||
|
|
||||||
|
// 条件一(直属团长达到100人)
|
||||||
|
if (directlyUnderData.stream().filter(o -> o.getRelType().equals(1)).count() >= 100) { |
||||||
|
directlyUnder = true; |
||||||
|
} |
||||||
|
|
||||||
|
// 条件二(非直属团长达到300人)
|
||||||
|
if (directlyUnderData.stream().filter(o -> o.getRelType().equals(2)).count() >= 300) { |
||||||
|
nonDirect = true; |
||||||
|
} |
||||||
|
|
||||||
|
// 条件三(累计元宝收益达到10000元宝)
|
||||||
|
BigDecimal profit = userAccountRecordService.getUserTotalProfit(user.getId()); |
||||||
|
if (profit.compareTo(new BigDecimal("10000")) >= 1) { |
||||||
|
profitCondition = true; |
||||||
|
} |
||||||
|
return (directlyUnder && nonDirect && profitCondition); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue