Jelajahi Sumber

feat: 虚拟支付道具映射 实体/Mapper/Service/管理端CRUD接口

asus 1 bulan lalu
induk
melakukan
588d27552c

+ 54 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/admin/VirtualGoodsConfigAdminController.java

@@ -0,0 +1,54 @@
+package com.etotem.cfc.controller.admin;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.VirtualGoodsConfig;
+import com.etotem.cfc.service.VirtualGoodsConfigService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/admin/virtual-goods")
+public class VirtualGoodsConfigAdminController {
+
+    @Resource
+    private VirtualGoodsConfigService virtualGoodsConfigService;
+
+    @PostMapping("/list")
+    public Result<List<VirtualGoodsConfig>> list(@RequestBody(required = false) Map<String, Object> params,
+                                                 @RequestAttribute("role") String role) {
+        if (!"admin".equals(role)) {
+            return Result.error("无权限");
+        }
+        String goodsType = params == null ? null : (String) params.get("goodsType");
+        return Result.success(virtualGoodsConfigService.list(goodsType));
+    }
+
+    @PostMapping("/save")
+    public Result<Boolean> save(@RequestBody VirtualGoodsConfig config,
+                                @RequestAttribute("role") String role) {
+        if (!"admin".equals(role)) {
+            return Result.error("无权限");
+        }
+        return Result.success(virtualGoodsConfigService.save(config));
+    }
+
+    @PostMapping("/delete")
+    public Result<Boolean> delete(@RequestBody Map<String, Object> params,
+                                  @RequestAttribute("role") String role) {
+        if (!"admin".equals(role)) {
+            return Result.error("无权限");
+        }
+        Long id = params.get("id") == null ? null : Long.valueOf(params.get("id").toString());
+        if (id == null) {
+            return Result.error("参数错误");
+        }
+        return Result.success(virtualGoodsConfigService.delete(id));
+    }
+}

+ 44 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/VirtualGoodsConfig.java

@@ -0,0 +1,44 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("virtual_goods_config")
+public class VirtualGoodsConfig {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 道具类型:ASSESSMENT_PACKAGE / MEMBERSHIP / SUBSCRIPTION
+     */
+    private String goodsType;
+
+    /**
+     * 业务SKU标识
+     */
+    private String bizKey;
+
+    /**
+     * 微信商户后台道具ID
+     */
+    private String productId;
+
+    /**
+     * 道具名称
+     */
+    private String goodsName;
+
+    /**
+     * 状态:1=启用 0=停用
+     */
+    private Integer status;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/VirtualGoodsConfigMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.VirtualGoodsConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface VirtualGoodsConfigMapper extends BaseMapper<VirtualGoodsConfig> {
+}

+ 49 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/VirtualGoodsConfigService.java

@@ -0,0 +1,49 @@
+package com.etotem.cfc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.etotem.cfc.entity.VirtualGoodsConfig;
+import com.etotem.cfc.mapper.VirtualGoodsConfigMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class VirtualGoodsConfigService extends ServiceImpl<VirtualGoodsConfigMapper, VirtualGoodsConfig> {
+
+    /**
+     * 查询启用的道具映射(status=1),按 (goodsType, bizKey) 匹配;查不到返回 null
+     */
+    public VirtualGoodsConfig getEnabled(String goodsType, String bizKey) {
+        LambdaQueryWrapper<VirtualGoodsConfig> wrapper = new LambdaQueryWrapper<VirtualGoodsConfig>()
+                .eq(VirtualGoodsConfig::getGoodsType, goodsType)
+                .eq(VirtualGoodsConfig::getBizKey, bizKey)
+                .eq(VirtualGoodsConfig::getStatus, 1)
+                .last("LIMIT 1");
+        return this.getOne(wrapper);
+    }
+
+    /**
+     * 管理端列表:goodsType 为空则查全部,按 id 倒序
+     */
+    public List<VirtualGoodsConfig> list(String goodsType) {
+        LambdaQueryWrapper<VirtualGoodsConfig> wrapper = new LambdaQueryWrapper<VirtualGoodsConfig>()
+                .eq(goodsType != null && !goodsType.isEmpty(), VirtualGoodsConfig::getGoodsType, goodsType)
+                .orderByDesc(VirtualGoodsConfig::getId);
+        return this.list(wrapper);
+    }
+
+    /**
+     * 保存:id 为空则新增,非空则更新(saveOrUpdate 语义)
+     */
+    public boolean save(VirtualGoodsConfig config) {
+        return this.saveOrUpdate(config);
+    }
+
+    /**
+     * 删除
+     */
+    public boolean delete(Long id) {
+        return this.removeById(id);
+    }
+}