Parcourir la source

新增邀请用户金币奖励规则

xudm il y a 2 mois
Parent
commit
b03f3cc03b

+ 22 - 0
continew-module-system/src/main/java/top/continew/admin/business/mapper/InviteRewardsRuleMapper.java

@@ -0,0 +1,22 @@
+package top.continew.admin.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import top.continew.admin.business.model.entity.InviteRewardsRule;
+
+/**
+ * <p>
+ * 邀请用户金币奖励规则 Mapper 接口
+ * </p>
+ *
+ * @author xudm
+ * @since 2024-12-15
+ */
+public interface InviteRewardsRuleMapper extends BaseMapper<InviteRewardsRule> {
+
+    /**
+     * 获取最大层级
+     *
+     * @return
+     */
+    int getMaxLevel();
+}

+ 91 - 0
continew-module-system/src/main/java/top/continew/admin/business/model/entity/InviteRewardsRule.java

@@ -0,0 +1,91 @@
+package top.continew.admin.business.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 邀请用户金币奖励规则
+ * </p>
+ *
+ * @author xudm
+ * @since 2024-12-15
+ */
+@Getter
+@Setter
+@TableName("b_invite_rewards_rule")
+public class InviteRewardsRule extends Model<InviteRewardsRule> {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 奖励名称
+     */
+    @TableField("rewards_name")
+    private String rewardsName;
+
+    /**
+     * 奖励说明
+     */
+    @TableField("rewards_describe")
+    private String rewardsDescribe;
+
+    /**
+     * 邀请好友数量
+     */
+    @TableField("invite_num")
+    private Integer inviteNum;
+
+    /**
+     * 金币数量
+     */
+    @TableField("gold_coin_num")
+    private Integer goldCoinNum;
+
+    /**
+     * 奖励层级
+     */
+    @TableField("rewards_level")
+    private int rewardsLevel;
+
+    /**
+     * 创建人
+     */
+    @TableField("created_by")
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField("created_time")
+    private LocalDateTime createdTime;
+
+    /**
+     * 更新人
+     */
+    @TableField("updated_by")
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField("updated_time")
+    private LocalDateTime updatedTime;
+
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+}

+ 29 - 0
continew-module-system/src/main/java/top/continew/admin/business/model/query/InviteRewardsRuleQuery.java

@@ -0,0 +1,29 @@
+package top.continew.admin.business.model.query;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Schema(description = "金币邀请查询参数")
+public class InviteRewardsRuleQuery implements Serializable {
+
+    @Schema(description = "奖励说明")
+    private String rewardsDescribe;
+
+    @Schema(description = "奖励名称")
+    private String rewardsName;
+
+    @Schema(description = "邀请好友数量")
+    private int inviteNum;
+
+    @Schema(description = "金币数量")
+    private int goldCoinNum;
+
+    @Schema(description = "页码")
+    private int page;
+
+    @Schema(description = "页大小")
+    private int size;
+}

+ 30 - 0
continew-module-system/src/main/java/top/continew/admin/business/model/req/InviteRewardsRuleReq.java

@@ -0,0 +1,30 @@
+package top.continew.admin.business.model.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Schema(description = "创建或修改奖励规则参数")
+public class InviteRewardsRuleReq implements Serializable {
+
+    @Schema(description = "奖励名称")
+    @NotNull(message = "奖励名称不能为空")
+    private String rewardsName;
+
+    @NotBlank(message = "奖励说明不能为空")
+    @Schema(description = "奖励说明")
+    private String rewardsDescribe;
+
+    @NotNull(message = "邀请好友数量不能为空")
+    @Schema(description = "邀请好友数量")
+    private Integer inviteNum;
+
+    @NotNull(message = "金币数量不能为空")
+    @Schema(description = "金币数量")
+    private Integer goldCoinNum;
+
+}

+ 27 - 1
continew-module-system/src/main/java/top/continew/admin/business/service/IInviteRewardsRuleService.java

@@ -1,7 +1,14 @@
 package top.continew.admin.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import top.continew.admin.coin.model.entity.InviteRewardsRule;
+import org.springframework.web.bind.annotation.GetMapping;
+import top.continew.admin.business.model.entity.InviteRewardsRule;
+import top.continew.admin.business.model.query.InviteRewardsRuleQuery;
+import top.continew.admin.business.model.req.InviteRewardsRuleReq;
+import top.continew.starter.extension.crud.model.resp.BaseIdResp;
+import top.continew.starter.extension.crud.model.resp.BasePageResp;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,23 @@ import top.continew.admin.coin.model.entity.InviteRewardsRule;
  */
 public interface IInviteRewardsRuleService extends IService<InviteRewardsRule> {
 
+    /**
+     * 查询邀请用户金币奖励规则 分页
+     *
+     * @param query
+     * @return
+     */
+    BasePageResp<InviteRewardsRule> InviteRewardsRulePage(InviteRewardsRuleQuery query);
+
+    void delete(List<Long> ids);
+
+    Long addRulesByLevel(InviteRewardsRuleReq inviteRewardsRule);
+
+    void updateRules(Long id, InviteRewardsRuleReq req);
+
+    List<InviteRewardsRule> getByIds(List<Long> ids);
+
+
+    int getMaxLevel();
+
 }

+ 100 - 0
continew-module-system/src/main/java/top/continew/admin/business/service/Impl/InviteRewardsRuleServiceImpl.java

@@ -0,0 +1,100 @@
+package top.continew.admin.business.service.Impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import top.continew.admin.business.mapper.InviteRewardsRuleMapper;
+import top.continew.admin.business.model.entity.InviteRewardsRule;
+import top.continew.admin.business.model.query.InviteRewardsRuleQuery;
+import top.continew.admin.business.model.req.InviteRewardsRuleReq;
+import top.continew.admin.business.service.IInviteRewardsRuleService;
+import top.continew.starter.core.validation.CheckUtils;
+import top.continew.starter.extension.crud.model.resp.BasePageResp;
+import top.continew.starter.extension.crud.model.resp.PageResp;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 邀请用户金币奖励规则 服务实现类
+ * </p>
+ *
+ * @author xudm
+ * @since 2024-12-15
+ */
+@Service
+public class InviteRewardsRuleServiceImpl extends ServiceImpl<InviteRewardsRuleMapper, InviteRewardsRule> implements IInviteRewardsRuleService {
+
+    @Override
+    public BasePageResp<InviteRewardsRule> InviteRewardsRulePage(InviteRewardsRuleQuery query) {
+        Page<InviteRewardsRule> page = new Page<>();
+        page.setCurrent(query.getPage() != 0 ? query.getPage() : 1);
+        page.setSize(query.getSize() != 0 ? query.getSize() : 10);
+
+        InviteRewardsRule rule = new InviteRewardsRule();
+        BeanUtils.copyProperties(query, rule);
+        LambdaQueryWrapper<InviteRewardsRule> queryWrapper = new LambdaQueryWrapper<>();
+        if (rule.getRewardsLevel() != 0) {
+            queryWrapper.eq(InviteRewardsRule::getRewardsLevel, rule.getRewardsLevel());
+        }
+        if (rule.getGoldCoinNum() != 0) {
+            queryWrapper.eq(InviteRewardsRule::getGoldCoinNum, rule.getGoldCoinNum());
+        }
+        if (StrUtil.isNotBlank(rule.getRewardsDescribe())) {
+            queryWrapper.like(InviteRewardsRule::getRewardsDescribe, rule.getRewardsDescribe());
+        }
+        if (StrUtil.isNotBlank(rule.getRewardsName())) {
+            queryWrapper.like(InviteRewardsRule::getRewardsName, rule.getRewardsName());
+        }
+        queryWrapper.orderByDesc(InviteRewardsRule::getCreatedTime);
+        page = page(page, queryWrapper);
+        return PageResp.build(page, InviteRewardsRule.class);
+    }
+
+    @Override
+    public void delete(List<Long> ids) {
+        baseMapper.deleteByIds(ids);
+    }
+
+    @Override
+    public Long addRulesByLevel(InviteRewardsRuleReq req) {
+        Object loginId = StpUtil.getLoginId();
+        CheckUtils.throwIfNull(req, "奖励规则请求体为空");
+        int maxLevel = getMaxLevel();
+        InviteRewardsRule rule = new InviteRewardsRule();
+        BeanUtils.copyProperties(req, rule);
+        rule.setRewardsLevel(maxLevel + 1);
+        rule.setCreatedBy((String) loginId);
+        rule.setUpdatedBy((String) loginId);
+        rule.setUpdatedTime(LocalDateTime.now());
+        rule.setCreatedTime(LocalDateTime.now());
+        save(rule);
+        return rule.getId();
+    }
+
+    @Override
+    public void updateRules(Long id, InviteRewardsRuleReq req) {
+        Object loginId = StpUtil.getLoginId();
+        InviteRewardsRule byId = getById(id);
+        CheckUtils.throwIfNull(byId, "查询的规则为空");
+        BeanUtils.copyProperties(req, byId, "id");
+        byId.setUpdatedBy((String) loginId);
+        byId.setUpdatedTime(LocalDateTime.now());
+        updateById(byId);
+    }
+
+    @Override
+    public List<InviteRewardsRule> getByIds(List<Long> ids) {
+        return baseMapper.selectByIds(ids);
+    }
+
+    @Override
+    public int getMaxLevel() {
+        return baseMapper.getMaxLevel();
+    }
+}

+ 27 - 0
continew-module-system/src/main/resources/mapper/InviteRewardsRuleMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="top.continew.admin.business.mapper.InviteRewardsRuleMapper">
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="top.continew.admin.business.model.entity.InviteRewardsRule">
+        <id column="id" property="id"/>
+        <result column="rewards_name" property="rewardsName"/>
+        <result column="rewards_describe" property="rewardsDescribe"/>
+        <result column="invite_num" property="inviteNum"/>
+        <result column="gold_coin_num" property="goldCoinNum"/>
+        <result column="rewards_level" property="rewardsLevel"/>
+        <result column="created_by" property="createdBy"/>
+        <result column="created_time" property="createdTime"/>
+        <result column="updated_by" property="updatedBy"/>
+        <result column="updated_time" property="updatedTime"/>
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, rewards_name, rewards_describe, invit_num, gold_coin_num, rewards_level, created_by, created_time, updated_by, updated_time
+    </sql>
+    
+    <select id="getMaxLevel" resultType="int">
+        select ifnull(max(r.rewards_level), 0) as n
+        from b_invite_rewards_rule r
+    </select>
+</mapper>

+ 77 - 0
continew-webapi/src/main/java/top/continew/admin/controller/business/InviteRewardsRulesController.java

@@ -0,0 +1,77 @@
+package top.continew.admin.controller.business;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import top.continew.admin.business.model.entity.InviteRewardsRule;
+import top.continew.admin.business.model.query.InviteRewardsRuleQuery;
+import top.continew.admin.business.model.req.InviteRewardsRuleReq;
+import top.continew.admin.business.service.IInviteRewardsRuleService;
+import top.continew.starter.extension.crud.model.resp.BaseIdResp;
+import top.continew.starter.extension.crud.model.resp.BasePageResp;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/invite/rewards/rules")
+@Tag(name = "邀请用户金币奖励规则API")
+@AllArgsConstructor
+public class InviteRewardsRulesController {
+    private final IInviteRewardsRuleService ruleService;
+
+    @Operation(summary = "分页查询", description = "分页查询")
+    @GetMapping("/page")
+    BasePageResp<InviteRewardsRule> page(InviteRewardsRuleQuery query) {
+        return ruleService.InviteRewardsRulePage(query);
+    }
+
+
+    @Operation(summary = "查询规则数据", description = "查询规则数据")
+    @GetMapping("/{ids}")
+    @Parameter(
+            name = "ids",
+            description = "ids",
+            example = "1,2,3,4",
+            in = ParameterIn.PATH
+    )
+    List<InviteRewardsRule> getInviteRewardsRuleByIds(@PathVariable("ids") List<Long> ids) {
+        return ruleService.getByIds(ids);
+    }
+
+
+    @Operation(summary = "修改数据", description = "修改数据")
+    @Parameter(
+            name = "id",
+            description = "ID",
+            example = "1",
+            in = ParameterIn.PATH
+    )
+    @PutMapping({"/{id}"})
+    //@Validated({CrudValidationGroup.Update.class})
+    public void update(@RequestBody InviteRewardsRuleReq req, @PathVariable("id") Long id) {
+        this.ruleService.updateRules(id, req);
+    }
+
+    @Operation(
+            summary = "删除数据",
+            description = "删除数据"
+    )
+    @DeleteMapping({"/{ids}"})
+    public void delete(@PathVariable("ids") List<Long> ids) {
+        this.ruleService.delete(ids);
+    }
+
+
+    @Operation(
+            summary = "新增奖励规则数据",
+            description = "新增奖励规则数据"
+    )
+    @PostMapping
+    public BaseIdResp<Long> add(@RequestBody InviteRewardsRuleReq req) {
+        return new BaseIdResp<>(ruleService.addRulesByLevel(req));
+    }
+
+}