zoujiajian 1 год назад
Родитель
Сommit
4940eb5e1d

+ 5 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -626,4 +626,9 @@ public interface Constant {
 	 * 银河币消费支付抵扣key
 	 */
 	String GALAXY_COIN_PAY_DEDUCT_KEY = "galaxy_coin_pay_deduct_key";
+
+	/**
+	 * GPT代充平台id
+	 */
+	Long GPT_RECHARGE_GOODS_ID = 40L;
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GptRechargeCardKeyMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GptRechargeCardKey;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptRechargeCardKeyMapper
+ * 创建者: JavaZou
+ * 创建时间:2025/7/31 14:19
+ */
+public interface GptRechargeCardKeyMapper extends BaseMapper<GptRechargeCardKey> {
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GptRechargeCardKey.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptRechargeCardKey
+ * 创建者: JavaZou
+ * 创建时间:2025/7/31 14:18
+ */
+@Getter
+@Setter
+public class GptRechargeCardKey extends BaseEntity{
+	private String cardKey;
+
+	private Boolean status;
+
+	private Long orderId;
+
+	private String orderNo;
+}

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java

@@ -44,6 +44,21 @@ public class GroupsRelation extends BaseEntity {
      */
     private String password;
 
+    /**
+     * gpt代充token
+     */
+    private String gptToken;
+
+    /***
+     * 代充次数
+     */
+    private Integer rechargeNum;
+
+    /**
+     * 代充剩余次数
+     */
+    private Integer rechargeRemainNum;
+
     private Date submitTime;
 
     private Date sendTime;

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/request/RechargeRemainNumReq.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: RechargeRemainNumReq
+ * 创建者: JavaZou
+ * 创建时间:2025/7/31 13:44
+ */
+@Getter
+@Setter
+public class RechargeRemainNumReq {
+	private Long relationId;
+
+	private Integer num;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GroupsRelationRechargeView.java

@@ -58,6 +58,24 @@ public class GroupsRelationRechargeView {
 	@DbField("gr.recharge_status")
 	private GroupsRelation.RechargeStatus rechargeStatus;
 
+	/**
+	 * gpt代充token
+	 */
+	@DbField("gr.gpt_token")
+	private String gptToken;
+
+	/***
+	 * 代充次数
+	 */
+	@DbField("gr.recharge_num")
+	private Integer rechargeNum;
+
+	/**
+	 * 代充剩余次数
+	 */
+	@DbField("gr.recharge_remain_num")
+	private Integer rechargeRemainNum;
+
 	/**
 	 * 家庭组邀请链接
 	 */

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -171,6 +171,18 @@ public class RenewalView {
     @DbField("gr.password")
     private String grPassword;
 
+    /**
+     * gpt代充token
+     */
+    @DbField("gr.gpt_token")
+    private String gptToken;
+
+    /**
+     * 代充剩余次数
+     */
+    @DbField("gr.recharge_remain_num")
+    private Integer rechargeRemainNum;
+
     @DbField("gr.recharge_status")
     private GroupsRelation.RechargeStatus rechargeStatus;
 

+ 9 - 1
netflix-service/src/main/java/com/cyksj/server/recharge/impl/GptProxyRechargeServiceImpl.java

@@ -4,8 +4,13 @@ import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.cyksj.mapper.GptRechargeCardKeyMapper;
 import com.cyksj.server.recharge.GptProxyRechargeService;
-import com.cyksj.server.recharge.dto.*;
+import com.cyksj.server.recharge.dto.CardKeyValidationResult;
+import com.cyksj.server.recharge.dto.TaskResult;
+import com.cyksj.server.recharge.dto.TaskSubmitResult;
+import com.cyksj.server.recharge.dto.TokenParseResult;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -15,10 +20,13 @@ import org.springframework.stereotype.Service;
  */
 @Slf4j
 @Service
+@RequiredArgsConstructor
 public class GptProxyRechargeServiceImpl implements GptProxyRechargeService {
 
     private static final String BASE_URL = "https://api.ow520.com/api";
 
+    private final GptRechargeCardKeyMapper gptRechargeCardKeyMapper;
+
     private HttpRequest createBaseRequest(String uri) {
         return HttpRequest.get(BASE_URL + uri)
                 .header("accept", "application/json, text/plain, */*")

+ 2 - 1
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -195,6 +195,7 @@ public class GroupRelationController {
                 .set(GroupsRelation::getAccount, relation.getAccount())
                 .set(GroupsRelation::getPassword, relation.getPassword())
                 .set(GroupsRelation::getContact, relation.getContact())
+                .set(GroupsRelation::getGptToken, relation.getGptToken())
                 .eq(GroupsRelation::getId, relation.getId());
         if (re.getRechargeStatus() != null) {
             if (re.getRechargeStatus() == GroupsRelation.RechargeStatus.complete) {
@@ -206,8 +207,8 @@ public class GroupRelationController {
             if (re.getRechargeStatus() == GroupsRelation.RechargeStatus.error) {
                 updateWrapper.set(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.waiting);
             }
+            relationMapper.update(relation, updateWrapper);
         }
-        relationMapper.update(relation, updateWrapper);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 

+ 94 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

@@ -20,6 +20,7 @@ import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationBackView;
+import com.cyksj.model.request.RechargeRemainNumReq;
 import com.cyksj.model.views.DisableAccountView;
 import com.cyksj.model.views.GroupsRelationIndependentView;
 import com.cyksj.model.views.GroupsRelationRechargeView;
@@ -69,6 +70,8 @@ public class CmsGroupRelationController {
 
     private final GroupRelationClearService groupRelationClearService;
 
+    private final GptRechargeCardKeyMapper gptRechargeCardKeyMapper;
+
     @GetMapping("/get")
     public Result<List<GroupsRelationBackView>> get(){
         List<GroupsRelationBackView> search = beanSearcher.searchAll(GroupsRelationBackView.class, MapUtils.flatBuilder(request.getParameterMap())
@@ -173,6 +176,21 @@ public class CmsGroupRelationController {
                 expiryTime = DateUtil.offsetMonth(relation.getStartTime(), sku.getMonths());
             }
             relation.setExpiryTime(expiryTime);
+
+            //GPT代充
+            if (orderDon.getGoodsId() == Constant.GPT_RECHARGE_GOODS_ID) {
+                //扣除次数
+                Integer rechargeRemainNum = relation.getRechargeRemainNum();
+                if (rechargeRemainNum != null && rechargeRemainNum > 0) {
+                    int update = groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+                            .set(GroupsRelation::getRechargeRemainNum, rechargeRemainNum - 1)
+                            .eq(GroupsRelation::getId, relationId)
+                            .eq(GroupsRelation::getRechargeRemainNum, rechargeRemainNum));
+                    if (update == 0) {
+                        throw BusinessRuntimeException.getInstance("更新用户代充剩余次数失败,请重试");
+                    }
+                }
+            }
         }
         groupsRelationMapper.updateById(relation);
         return GatewayResponse.SUCCESS.newBuilder().toResult("状态修改成功");
@@ -193,6 +211,82 @@ public class CmsGroupRelationController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(false);
     }
 
+    /**
+     * GPT代充 设置剩余次数
+     */
+    @PutMapping("/recharge/update/remain/num")
+    public Result<String> updateRechargeRemainNum(@RequestBody RechargeRemainNumReq req) {
+        Long relationId = req.getRelationId();
+        Integer num = req.getNum();
+        GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+        if (relation.getRechargeNum() != null) {
+            Integer rechargeRemainNum = relation.getRechargeRemainNum();
+            if (rechargeRemainNum == 0 && num < 0) {
+                throw BusinessRuntimeException.getInstance("剩余代充次数为0");
+            }
+            int update = groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+                    .set(GroupsRelation::getRechargeRemainNum, rechargeRemainNum - num)
+                    .eq(GroupsRelation::getId, relationId)
+                    .eq(GroupsRelation::getRechargeRemainNum, rechargeRemainNum));
+            if (update == 0) {
+                throw BusinessRuntimeException.getInstance("修改用户代充次数错误,请重试");
+            }
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * GPT代充卡密列表
+     */
+    @GetMapping("/get/gpt/cardKey")
+    public Result<SearchResult<GptRechargeCardKey>> getGptCardKey() {
+        SearchResult<GptRechargeCardKey> search = beanSearcher.search(GptRechargeCardKey.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+
+
+    /**
+     * 编辑GPT代充卡密
+     */
+    @GetMapping("/get/gpt/cardKey")
+    public Result<SearchResult<GptRechargeCardKey>> getGptCardKey(@RequestBody GptRechargeCardKey cardKey) {
+        Long id = cardKey.getId();
+        GptRechargeCardKey gptRechargeCardKey = gptRechargeCardKeyMapper.selectById(id);
+        if (gptRechargeCardKey == null) {
+            throw BusinessRuntimeException.getInstance("卡密不存在");
+        }
+        gptRechargeCardKeyMapper.updateById(cardKey);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+
+    /**
+     * 删除GPT代充卡密
+     */
+    @DeleteMapping("/del/gpt/cardKey/{id}")
+    public Result<SearchResult<GptRechargeCardKey>> deleteGptCardKeyById(@PathVariable Long id) {
+        GptRechargeCardKey gptRechargeCardKey = gptRechargeCardKeyMapper.selectById(id);
+        if (gptRechargeCardKey == null) {
+            throw BusinessRuntimeException.getInstance("卡密不存在");
+        }
+        if (gptRechargeCardKey.getStatus()) {
+            throw BusinessRuntimeException.getInstance("已使用的卡密不可删除");
+        }
+        gptRechargeCardKeyMapper.deleteById(id);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+
+    /**
+     * 新增GPT代充卡密
+     */
+    @PostMapping("/post/gpt/cardKey")
+    public Result<String> postGptCardKey(@RequestBody GptRechargeCardKey gptRechargeCardKey) {
+        gptRechargeCardKeyMapper.insert(gptRechargeCardKey);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
     /**
      * Chat GPT独立规格续费 列表
      */