|
@@ -0,0 +1,98 @@
|
|
|
+package com.chelvc.cloud.vehicle.server.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
|
|
|
+import com.chelvc.cloud.vehicle.api.service.UserInviteService;
|
|
|
+import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.dao.UserInviteMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.dao.UserProfitRatioMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.UserInvite;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
|
|
|
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.apache.dubbo.config.annotation.DubboService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.UserInviteService.class)
|
|
|
+public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInvite> implements UserInviteService {
|
|
|
+
|
|
|
+ private final ProfitRatioConfigMapper profitRatioConfigMapper;
|
|
|
+
|
|
|
+ private final UserProfitRatioMapper userProfitRatioMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void bindInvite(UserInviteParams params) {
|
|
|
+ Long userId = params.getUserId();
|
|
|
+ Long targetId = params.getTargetId();
|
|
|
+ Integer type = params.getType();
|
|
|
+ if(userId == null || targetId == null || type == null){
|
|
|
+ throw new ResourceUnavailableException("参数错误");
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<UserInvite> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(UserInvite::getTargetId, targetId);
|
|
|
+ wrapper.eq(UserInvite::getType, type);
|
|
|
+ Integer count = baseMapper.selectCount(wrapper);
|
|
|
+ if(count > 0){
|
|
|
+ throw new ResourceUnavailableException("该用户已绑定关系");
|
|
|
+ }
|
|
|
+ UserInvite userInvite = new UserInvite();
|
|
|
+ userInvite.setUserId(userId);
|
|
|
+ userInvite.setTargetId(targetId);
|
|
|
+ userInvite.setType(type);
|
|
|
+ userInvite.setCreateTime(LocalDateTime.now());
|
|
|
+ int i = baseMapper.insert(userInvite);
|
|
|
+ if(i < 1){
|
|
|
+ throw new ResourceUnavailableException("绑定失败");
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<UserInvite> lwq = Wrappers.lambdaQuery();
|
|
|
+ lwq.eq(UserInvite::getUserId, userId);
|
|
|
+ lwq.eq(UserInvite::getType, type);
|
|
|
+ Integer total = baseMapper.selectCount(lwq);
|
|
|
+ int ratio = 0;
|
|
|
+ LambdaQueryWrapper<UserProfitRatio> lambdaQuery = Wrappers.lambdaQuery();
|
|
|
+ lambdaQuery.eq(UserProfitRatio::getUserId, userId);
|
|
|
+ lambdaQuery.eq(UserProfitRatio::getType, type);
|
|
|
+ UserProfitRatio userProfitRatio = userProfitRatioMapper.selectOne(lambdaQuery);
|
|
|
+ if(userProfitRatio == null){
|
|
|
+ userProfitRatio = new UserProfitRatio();
|
|
|
+ userProfitRatio.setRatio(ratio);
|
|
|
+ userProfitRatio.setUserId(userId);
|
|
|
+ userProfitRatio.setType(type);
|
|
|
+ userProfitRatio.setCreateTime(LocalDateTime.now());
|
|
|
+ userProfitRatio.setUpdateTime(LocalDateTime.now());
|
|
|
+ userProfitRatio.setUpdater(1L);
|
|
|
+ userProfitRatioMapper.insert(userProfitRatio);
|
|
|
+ }
|
|
|
+ int oldRatio = userProfitRatio.getRatio();
|
|
|
+ LambdaQueryWrapper<ProfitRatioConfig> config = Wrappers.lambdaQuery();
|
|
|
+ config.eq(ProfitRatioConfig::getType, type);
|
|
|
+ config.eq(ProfitRatioConfig::getStatus, 0);
|
|
|
+ config.orderByDesc(ProfitRatioConfig::getNum);
|
|
|
+ List<ProfitRatioConfig> list = profitRatioConfigMapper.selectList(config);
|
|
|
+ if(!CollectionUtils.isEmpty(list)){
|
|
|
+ for(ProfitRatioConfig profitRatioConfig : list){
|
|
|
+ int num = profitRatioConfig.getNum();
|
|
|
+ if(total >= num){
|
|
|
+ ratio = profitRatioConfig.getRatio();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(ratio != 0 && ratio != oldRatio){
|
|
|
+ userProfitRatio.setRatio(ratio);
|
|
|
+ userProfitRatio.setUpdateTime(LocalDateTime.now());
|
|
|
+ userProfitRatio.setUpdater(1L);
|
|
|
+ userProfitRatioMapper.update(userProfitRatio, null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|