zoujiajian vor 10 Monaten
Ursprung
Commit
a28e60a5a4

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/mapper/SoraCodeMapper.java

@@ -0,0 +1,14 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SoraCode;
+
+/**
+ * sora邀请码Mapper接口
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+public interface SoraCodeMapper extends BaseMapper<SoraCode> {
+
+}

+ 37 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SoraCode.java

@@ -0,0 +1,37 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sora邀请码实体类
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+@Getter
+@Setter
+@TableName("sora_code")
+public class SoraCode extends BaseEntity {
+
+    /**
+     * 邀请码
+     */
+    private String code;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 使用状态:0-未使用,1-已使用
+     */
+    private Boolean status;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelSoraCodeData.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: ExcelSoraCodeData
+ * 创建者: JavaZou
+ * 创建时间:2025/10/13 18:07
+ */
+@Getter
+@Setter
+public class ExcelSoraCodeData {
+	@ExcelProperty("邀请码")
+	private String code;
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/request/SoraCodeAddReq.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.request;
+
+import lombok.Data;
+import javax.validation.constraints.NotBlank;
+
+/**
+ * SoraCode添加请求
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+@Data
+public class SoraCodeAddReq {
+
+    /**
+     * 邀请码
+     */
+    @NotBlank(message = "邀请码不能为空")
+    private String code;
+}

+ 40 - 0
netflix-dao/src/main/java/com/cyksj/model/request/SoraCodeUpdateReq.java

@@ -0,0 +1,40 @@
+package com.cyksj.model.request;
+
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * SoraCode更新请求
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+@Data
+public class SoraCodeUpdateReq {
+
+    /**
+     * ID
+     */
+    @NotNull(message = "ID不能为空")
+    private Long id;
+
+    /**
+     * 邀请码
+     */
+    private String code;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 使用状态
+     */
+    private Boolean status;
+}

+ 28 - 0
netflix-service/src/main/java/com/cyksj/service/sora/SoraCodeService.java

@@ -0,0 +1,28 @@
+package com.cyksj.service.sora;
+
+import com.cyksj.model.request.SoraCodeAddReq;
+import com.cyksj.model.request.SoraCodeUpdateReq;
+
+/**
+ * Sora邀请码Service接口
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+public interface SoraCodeService {
+
+    /**
+     * 添加Sora邀请码
+     */
+    void addSoraCode(SoraCodeAddReq req);
+
+    /**
+     * 更新Sora邀请码
+     */
+    void updateSoraCode(SoraCodeUpdateReq req);
+
+    /**
+     * 删除Sora邀请码
+     */
+    void deleteSoraCode(Long id);
+}

+ 90 - 0
netflix-service/src/main/java/com/cyksj/service/sora/impl/SoraCodeServiceImpl.java

@@ -0,0 +1,90 @@
+package com.cyksj.service.sora.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.SoraCodeMapper;
+import com.cyksj.model.entity.SoraCode;
+import com.cyksj.model.request.SoraCodeAddReq;
+import com.cyksj.model.request.SoraCodeUpdateReq;
+import com.cyksj.service.sora.SoraCodeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Service;
+
+/**
+ * Sora邀请码Service实现类
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class SoraCodeServiceImpl implements SoraCodeService {
+
+    private final SoraCodeMapper soraCodeMapper;
+
+    @Override
+    public void addSoraCode(SoraCodeAddReq req) {
+        // 检查邀请码是否已存在
+        Integer count = soraCodeMapper.selectCount(
+            new LambdaQueryWrapper<SoraCode>()
+                .eq(SoraCode::getCode, req.getCode())
+        );
+        if (count > 0) {
+            throw new BusinessRuntimeException("邀请码已存在");
+        }
+
+        SoraCode soraCode = new SoraCode();
+        soraCode.setCode(req.getCode());
+
+        try {
+            soraCodeMapper.insert(soraCode);
+        } catch (DataAccessException e) {
+
+        }
+    }
+
+    @Override
+    public void updateSoraCode(SoraCodeUpdateReq req) {
+        SoraCode soraCode = soraCodeMapper.selectById(req.getId());
+        if (soraCode == null) {
+            throw new BusinessRuntimeException("Sora邀请码不存在");
+        }
+
+        // 如果要更新邀请码,检查新邀请码是否已存在
+        if (StrUtil.isNotBlank(req.getCode()) && !req.getCode().equals(soraCode.getCode())) {
+            Integer count = soraCodeMapper.selectCount(
+                new LambdaQueryWrapper<SoraCode>()
+                    .eq(SoraCode::getCode, req.getCode())
+                    .ne(SoraCode::getId, req.getId())
+            );
+            if (count > 0) {
+                throw new BusinessRuntimeException("邀请码已存在");
+            }
+        }
+
+        SoraCode updateSoraCode = new SoraCode();
+        updateSoraCode.setId(req.getId());
+
+        if (StrUtil.isNotBlank(req.getCode())) {
+            updateSoraCode.setCode(req.getCode());
+        }
+
+        soraCodeMapper.updateById(updateSoraCode);
+    }
+
+    @Override
+    public void deleteSoraCode(Long id) {
+        SoraCode soraCode = soraCodeMapper.selectById(id);
+        if (soraCode == null) {
+            throw new BusinessRuntimeException("Sora邀请码不存在");
+        }
+        if (soraCode.getStatus()) {
+            throw BusinessRuntimeException.getInstance("Sora邀请码已使用,不可删除");
+        }
+        soraCodeMapper.deleteById(id);
+    }
+}

+ 111 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/sora/SoraCodeController.java

@@ -0,0 +1,111 @@
+package com.cyksj.web.controller.manage.sora;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.SoraCodeMapper;
+import com.cyksj.model.entity.SoraCode;
+import com.cyksj.model.excel.ExcelSoraCodeData;
+import com.cyksj.model.request.SoraCodeAddReq;
+import com.cyksj.model.request.SoraCodeUpdateReq;
+import com.cyksj.service.sora.SoraCodeService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DataAccessException;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Sora邀请码管理Controller
+ *
+ * @author system
+ * @date 2025-10-13
+ */
+@Slf4j
+@RestController
+@RequestMapping("/manage/sora-code")
+@RequiredArgsConstructor
+public class SoraCodeController {
+
+    private final SoraCodeService soraCodeService;
+
+    private final SoraCodeMapper soraCodeMapper;
+
+    private final BeanSearcher beanSearcher;
+
+    private final HttpServletRequest request;
+
+    /**
+     * 添加Sora邀请码
+     */
+    @PostMapping("/add")
+    public Result<String> addSoraCode(@RequestBody @Validated SoraCodeAddReq req) {
+        soraCodeService.addSoraCode(req);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("添加成功");
+    }
+
+    /**
+     * 更新Sora邀请码
+     */
+    @PutMapping("/update")
+    public Result<String> updateSoraCode(@RequestBody @Validated SoraCodeUpdateReq req) {
+        soraCodeService.updateSoraCode(req);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("更新成功");
+    }
+
+    /**
+     * 删除Sora邀请码
+     */
+    @DeleteMapping("/delete/{id}")
+    public Result<String> deleteSoraCode(@PathVariable Long id) {
+        soraCodeService.deleteSoraCode(id);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("删除成功");
+    }
+
+    /**
+     * 分页查询Sora邀请码
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<SoraCode> > getSoraCodePage() {
+        SearchResult<SoraCode> search = beanSearcher.search(SoraCode.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 批量导入Sora邀请码
+     */
+    @PostMapping("/batch-import")
+    public Result<String> batchImportSoraCode(MultipartFile file) throws IOException {
+        EasyExcel.read(file.getInputStream(), ExcelSoraCodeData.class, new AnalysisEventListener<ExcelSoraCodeData>() {
+            @Override
+            public void invoke(ExcelSoraCodeData data, AnalysisContext analysisContext) {
+                String code = data.getCode();
+                if (StrUtil.isNotBlank(code)) {
+                    SoraCode soraCode = new SoraCode();
+                    soraCode.setCode(code);
+                    try {
+                        soraCodeMapper.insert(soraCode);
+                    } catch (DataAccessException e) {
+
+                    }
+                }
+            }
+
+            @Override
+            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+            }
+        }).sheet().doRead();
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+}