Răsfoiți Sursa

feat(store): 新增平台福利管理功能

- 新增福利实体类 StorePlatformBenefits 及其相关字段定义
- 新增福利控制器 StorePlatformBenefitsController 实现CRUD接口
- 新增福利服务接口及实现类 StorePlatformBenefitsService
- 新增福利数据访问层接口 StorePlatformBenefitsMapper
- 新增福利VO类 StorePlatformBenefitsVo 继承自福利实体
- 新增虚拟货币实体类 StoreVirtualCurrency 及其Mapper接口
- 实现福利分页查询、详情查看、新增、修改、删除和审核功能
- 支持优惠券与U币两种类型的福利管理
- 添加JWT用户信息获取用于记录操作人ID
- 集成MyBatis Plus实现基础数据操作和分页支持
zjy 5 zile în urmă
părinte
comite
4f042f2e97

+ 73 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePlatformBenefits.java

@@ -0,0 +1,73 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 福利表
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+@Data
+@JsonInclude
+@TableName("store_platform_benefits")
+@ApiModel(value = "StorePlatformBenefits对象", description = "福利表")
+public class StorePlatformBenefits {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "类型:1=优惠券,2=U币")
+    @TableField("type")
+    private Integer type;
+
+    @ApiModelProperty(value = "优惠券类型(如\"全场通用优惠券\")")
+    @TableField("business_id")
+    private String businessId;
+
+    @ApiModelProperty(value = "优惠券使用条件(如\"满100可用\")")
+    @TableField("usage_conditions")
+    private String usageConditions;
+
+    @ApiModelProperty(value = "状态:0待审核/1审核拒绝/2审核通过")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+
+    @ApiModelProperty(value = "优惠券/U币名称")
+    private String name;
+
+    @ApiModelProperty(value = "U币Id")
+    private Integer virtualCurrencyId;
+}
+

+ 59 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreVirtualCurrency.java

@@ -0,0 +1,59 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * U币表
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+@Data
+@JsonInclude
+@TableName("store_virtual_currency")
+@ApiModel(value = "StoreVirtualCurrency对象", description = "U币表")
+public class StoreVirtualCurrency {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "U币名称")
+    @TableField("name")
+    private String name;
+
+    @ApiModelProperty(value = "状态:0待审核/1审核拒绝/2审核通过")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}
+

+ 25 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StorePlatformBenefitsVo.java

@@ -0,0 +1,25 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.StorePlatformBenefits;
+
+import java.util.Date;
+
+/**
+ * 福利表
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "StorePlatformBenefits对象", description = "福利表")
+public class StorePlatformBenefitsVo extends StorePlatformBenefits {
+
+}
+

+ 45 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformBenefitsMapper.java

@@ -0,0 +1,45 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import shop.alien.entity.store.StorePlatformBenefits;
+import shop.alien.entity.store.vo.LifeUserViolationVo;
+import shop.alien.entity.store.vo.StorePlatformBenefitsVo;
+
+/**
+ * 福利表 Mapper 接口
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+public interface StorePlatformBenefitsMapper extends BaseMapper<StorePlatformBenefits> {
+
+    /**
+     * 分页查询用户举报信息
+     *
+     * @param page         分页对象
+     * @param queryWrapper 查询条件包装器
+     * @return 分页结果
+     */
+    @Select("<script>" +
+            " select * from ( " +
+            " select spb.id, spb.type, spb.business_id, spb.usage_conditions, lc.name  " +
+            " from store_platform_benefits spb  " +
+            " left join life_coupon lc on spb.business_id = lc.id  " +
+            " union all " +
+            " select spb.id, spb.type, spb.business_id, spb.usage_conditions, svc.name  " +
+            " from store_platform_benefits spb " +
+            " left join store_virtual_currency svc on spb.business_id = svc.id ) a " +
+            " ${ew.customSqlSegment}" +
+            "</script>")
+    IPage<StorePlatformBenefitsVo> getPlatformBenefitsPage(
+            IPage<StorePlatformBenefitsVo> page,
+            @Param(Constants.WRAPPER) QueryWrapper<StorePlatformBenefitsVo> queryWrapper
+    );
+
+}
+

+ 15 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreVirtualCurrencyMapper.java

@@ -0,0 +1,15 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.StoreVirtualCurrency;
+
+/**
+ * U币表 Mapper 接口
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+public interface StoreVirtualCurrencyMapper extends BaseMapper<StoreVirtualCurrency> {
+
+}
+

+ 114 - 0
alien-store/src/main/java/shop/alien/store/controller/StorePlatformBenefitsController.java

@@ -0,0 +1,114 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.StorePlatformBenefits;
+import shop.alien.entity.store.vo.StorePlatformBenefitsVo;
+import shop.alien.store.service.StorePlatformBenefitsService;
+
+/**
+ * 福利管理 前端控制器
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+@Slf4j
+@Api(tags = {"福利管理"})
+@ApiSort(10)
+@CrossOrigin
+@RestController
+@RequestMapping("/benefits")
+@RequiredArgsConstructor
+public class StorePlatformBenefitsController {
+
+    private final StorePlatformBenefitsService benefitsService;
+
+    @ApiOperation("分页查询福利列表")
+    @ApiOperationSupport(order = 1)
+    @GetMapping("/page")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "int", paramType = "query", defaultValue = "1"),
+            @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", defaultValue = "10"),
+            @ApiImplicitParam(name = "type", value = "类型:1=优惠券,2=U币", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "状态:0待审核/1审核拒绝/2审核通过", dataType = "int", paramType = "query")
+    })
+    public R<IPage<StorePlatformBenefitsVo>> getPage(
+            @RequestParam(defaultValue = "1") int pageNum,
+            @RequestParam(defaultValue = "10") int pageSize,
+            @RequestParam(required = false) Integer type,
+            @RequestParam(required = false) String name) {
+        log.info("StorePlatformBenefitsController.getPage - pageNum={}, pageSize={}, type={}, name={}", pageNum, pageSize, type, name);
+        return R.data(benefitsService.getPage(pageNum, pageSize, type, name));
+    }
+
+    @ApiOperation("根据ID查询详情")
+    @ApiOperationSupport(order = 2)
+    @GetMapping("/detail/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "path", required = true)
+    })
+    public R<StorePlatformBenefits> getDetail(@PathVariable Integer id) {
+        log.info("StorePlatformBenefitsController.getDetail - id={}", id);
+        return R.data(benefitsService.getById(id));
+    }
+
+    @ApiOperation("新增福利")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/add")
+    public R<String> add(@RequestBody StorePlatformBenefits benefits) {
+        log.info("StorePlatformBenefitsController.add - benefits={}", benefits);
+        int result = benefitsService.add(benefits);
+        if (result > 0) {
+            return R.success("新增成功");
+        }
+        return R.fail("新增失败");
+    }
+
+    @ApiOperation("修改福利")
+    @ApiOperationSupport(order = 4)
+    @PostMapping("/update")
+    public R<String> update(@RequestBody StorePlatformBenefits benefits) {
+        log.info("StorePlatformBenefitsController.update - benefits={}", benefits);
+        int result = benefitsService.update(benefits);
+        if (result > 0) {
+            return R.success("修改成功");
+        }
+        return R.fail("修改失败");
+    }
+
+    @ApiOperation("删除福利")
+    @ApiOperationSupport(order = 5)
+    @PostMapping("/delete/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "path", required = true)
+    })
+    public R<String> delete(@PathVariable Integer id) {
+        log.info("StorePlatformBenefitsController.delete - id={}", id);
+        int result = benefitsService.delete(id);
+        if (result > 0) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败");
+    }
+
+    @ApiOperation("审核福利")
+    @ApiOperationSupport(order = 6)
+    @PostMapping("/audit")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "status", value = "审核状态:1审核拒绝/2审核通过", dataType = "int", paramType = "query", required = true)
+    })
+    public R<String> audit(@RequestParam Integer id, @RequestParam Integer status) {
+        log.info("StorePlatformBenefitsController.audit - id={}, status={}", id, status);
+        int result = benefitsService.audit(id, status);
+        if (result > 0) {
+            return R.success("审核成功");
+        }
+        return R.fail("审核失败");
+    }
+}
+

+ 68 - 0
alien-store/src/main/java/shop/alien/store/service/StorePlatformBenefitsService.java

@@ -0,0 +1,68 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.StorePlatformBenefits;
+import shop.alien.entity.store.vo.StorePlatformBenefitsVo;
+
+/**
+ * 福利表 服务类
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+public interface StorePlatformBenefitsService extends IService<StorePlatformBenefits> {
+
+    /**
+     * 分页查询福利列表
+     *
+     * @param page   页码
+     * @param size   每页条数
+     * @param type   类型:1=优惠券,2=U币
+     * @param name 状态:0待审核/1审核拒绝/2审核通过
+     * @return 分页结果
+     */
+    IPage<StorePlatformBenefitsVo> getPage(int page, int size, Integer type, String name);
+
+    /**
+     * 根据ID查询详情
+     *
+     * @param id 主键ID
+     * @return 福利详情
+     */
+    StorePlatformBenefits getById(Integer id);
+
+    /**
+     * 新增福利
+     *
+     * @param benefits 福利信息
+     * @return 新增结果
+     */
+    int add(StorePlatformBenefits benefits);
+
+    /**
+     * 修改福利
+     *
+     * @param benefits 福利信息
+     * @return 修改结果
+     */
+    int update(StorePlatformBenefits benefits);
+
+    /**
+     * 删除福利(逻辑删除)
+     *
+     * @param id 主键ID
+     * @return 删除结果
+     */
+    int delete(Integer id);
+
+    /**
+     * 审核福利
+     *
+     * @param id     主键ID
+     * @param status 审核状态:1审核拒绝/2审核通过
+     * @return 审核结果
+     */
+    int audit(Integer id, Integer status);
+}
+

+ 140 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StorePlatformBenefitsServiceImpl.java

@@ -0,0 +1,140 @@
+package shop.alien.store.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.store.StorePlatformBenefits;
+import shop.alien.entity.store.StoreVirtualCurrency;
+import shop.alien.entity.store.vo.LifeUserViolationVo;
+import shop.alien.entity.store.vo.StorePlatformBenefitsVo;
+import shop.alien.mapper.StorePlatformBenefitsMapper;
+import shop.alien.mapper.StoreVirtualCurrencyMapper;
+import shop.alien.store.service.StorePlatformBenefitsService;
+import shop.alien.util.common.JwtUtil;
+
+import java.util.Date;
+
+/**
+ * 福利表 服务实现类
+ *
+ * @author ssk
+ * @since 2025-12-18
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class StorePlatformBenefitsServiceImpl extends ServiceImpl<StorePlatformBenefitsMapper, StorePlatformBenefits> implements StorePlatformBenefitsService {
+
+    private final StorePlatformBenefitsMapper benefitsMapper;
+
+    private final StoreVirtualCurrencyMapper virtualCurrencyMapper;
+
+
+    @Override
+    public IPage<StorePlatformBenefitsVo> getPage(int page, int size, Integer type, String name) {
+        log.info("StorePlatformBenefitsServiceImpl.getPage - page={}, size={}, type={}, name={}", page, size, type, name);
+
+        IPage<StorePlatformBenefitsVo> pageRequest = new Page<>(page, size);
+        QueryWrapper<StorePlatformBenefitsVo> queryWrapper = new QueryWrapper<>();
+
+        // 动态查询条件
+        if (type != null) {
+            queryWrapper.eq("type", type);
+        }
+        if (name != null && !name.isEmpty()) {
+            queryWrapper.eq("name", name);
+        }
+
+        // 按创建时间倒序
+        queryWrapper.orderByDesc("created_time");
+
+        return benefitsMapper.getPlatformBenefitsPage(pageRequest, queryWrapper);
+    }
+
+    @Override
+    public StorePlatformBenefits getById(Integer id) {
+        log.info("StorePlatformBenefitsServiceImpl.getById - id={}", id);
+        return benefitsMapper.selectById(id);
+    }
+
+    @Override
+    public int add(StorePlatformBenefits benefits) {
+        log.info("StorePlatformBenefitsServiceImpl.add - benefits={}", benefits);
+        JSONObject data = JwtUtil.getCurrentUserInfo();
+        Integer userId = null;
+        if (data != null) {
+            userId = data.getInteger("userId");
+            log.info("获取用户ID:userId={}", userId);
+        }
+        if (benefits.getType() == 2) {
+            StoreVirtualCurrency virtualCurrency = new StoreVirtualCurrency();
+            virtualCurrency.setName(benefits.getName());
+            virtualCurrency.setStatus(0);
+            virtualCurrency.setCreatedTime(new Date());
+            virtualCurrency.setCreatedUserId(userId);
+            virtualCurrencyMapper.insert(virtualCurrency);
+
+            benefits.setBusinessId(virtualCurrency.getId().toString());
+        }
+
+        benefits.setCreatedTime(new Date());
+        benefits.setDeleteFlag(0);
+        benefits.setCreatedUserId(userId);
+        // 默认待审核
+        if (benefits.getStatus() == null) {
+            benefits.setStatus(0);
+        }
+        return benefitsMapper.insert(benefits);
+    }
+
+    @Override
+    public int update(StorePlatformBenefits benefits) {
+        log.info("StorePlatformBenefitsServiceImpl.update - benefits={}", benefits);
+        JSONObject data = JwtUtil.getCurrentUserInfo();
+        Integer userId = null;
+        if (data != null) {
+            userId = data.getInteger("userId");
+            log.info("获取用户ID:userId={}", userId);
+        }
+
+        if (benefits.getType() == 2) {
+            StoreVirtualCurrency virtualCurrency = new StoreVirtualCurrency();
+            virtualCurrency.setId(benefits.getVirtualCurrencyId());
+            virtualCurrency.setName(benefits.getName());
+            virtualCurrency.setUpdatedTime(new Date());
+            virtualCurrency.setUpdatedUserId(userId);
+            virtualCurrencyMapper.updateById(virtualCurrency);
+        }
+
+        benefits.setUpdatedUserId(userId);
+        benefits.setUpdatedTime(new Date());
+        return benefitsMapper.updateById(benefits);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        log.info("StorePlatformBenefitsServiceImpl.delete - id={}", id);
+        StorePlatformBenefits benefits = new StorePlatformBenefits();
+        benefits.setId(id);
+        benefits.setDeleteFlag(1);
+        benefits.setUpdatedTime(new Date());
+        return benefitsMapper.updateById(benefits);
+    }
+
+    @Override
+    public int audit(Integer id, Integer status) {
+        log.info("StorePlatformBenefitsServiceImpl.audit - id={}, status={}", id, status);
+        StorePlatformBenefits benefits = new StorePlatformBenefits();
+        benefits.setId(id);
+        benefits.setStatus(status);
+        benefits.setUpdatedTime(new Date());
+        return benefitsMapper.updateById(benefits);
+    }
+}
+