瀏覽代碼

绑定邀请关系

igl 1 年之前
父節點
當前提交
fec274d5d3

+ 30 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/UserInviteParams.java

@@ -0,0 +1,30 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class UserInviteParams implements Serializable {
+
+    private static final long serialVersionUID = 3682560818752891605L;
+
+    /**
+     * 邀请用户
+     */
+    @NotNull(message = "用户不能为空")
+    private Long userId;
+
+    /**
+     * 被邀请用户
+     */
+    @NotNull(message = "被邀请用户不能为空")
+    private Long targetId;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    @NotNull(message = "类型不能为空")
+    private Integer type;
+}

+ 8 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/UserInviteService.java

@@ -0,0 +1,8 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
+
+public interface UserInviteService {
+
+    void bindInvite(UserInviteParams params);
+}

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/ProfitRatioConfigMapper.java

@@ -0,0 +1,9 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProfitRatioConfigMapper extends BaseMapper<ProfitRatioConfig> {
+}

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserInviteMapper.java

@@ -0,0 +1,9 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.UserInvite;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserInviteMapper extends BaseMapper<UserInvite> {
+}

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserProfitRatioMapper.java

@@ -0,0 +1,9 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserProfitRatioMapper extends BaseMapper<UserProfitRatio> {
+}

+ 63 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/PlatformProfitRatio.java

@@ -0,0 +1,63 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 平台分佣比例
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class PlatformProfitRatio implements Serializable {
+
+    private static final long serialVersionUID = 7829616515167832606L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 抽成比例
+     */
+    private int ratio;
+
+    /**
+     * 上月营业额
+     */
+    private BigDecimal turnover;
+
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+}

+ 47 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/ProfitRatioConfig.java

@@ -0,0 +1,47 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.chelvc.framework.database.entity.BasicEntity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 分佣比例配置
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProfitRatioConfig extends BasicEntity<Long> {
+
+    private static final long serialVersionUID = -4564762089152618910L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 抽佣比例0-100
+     */
+    private int ratio;
+
+    /**
+     * 类型:1-平台;2-邀请用户;3-邀请商家
+     */
+    private Integer type;
+
+    /**
+     * 抽成要求数
+     */
+    private int num;
+
+    /**
+     * 状态:0-正常;1-停用
+     */
+    private Integer status;
+}

+ 51 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserInvite.java

@@ -0,0 +1,51 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 邀请关系
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class UserInvite implements Serializable {
+
+    private static final long serialVersionUID = -6394974784960414140L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 被邀请用户标识
+     */
+    private Long targetId;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    private Integer type;
+
+    /**
+     * 绑定时间
+     */
+    private LocalDateTime createTime;
+}

+ 63 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/UserProfitRatio.java

@@ -0,0 +1,63 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 用户分佣比例
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class UserProfitRatio implements Serializable {
+
+    private static final long serialVersionUID = -933687657794409050L;
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 抽成比例
+     */
+    private int ratio;
+
+    /**
+     * 类型:1-用户;2-商家
+     */
+    private Integer type;
+
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+}
+

+ 98 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java

@@ -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);
+        }
+    }
+}