Просмотр исходного кода

Merge branch 'master' into pre

zoujiajian 3 месяцев назад
Родитель
Сommit
2d7a339a5f

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/mapper/DailyUsageStatisticsRecordMapper.java

@@ -0,0 +1,7 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DailyUsageStatisticsRecord;
+
+public interface DailyUsageStatisticsRecordMapper extends BaseMapper<DailyUsageStatisticsRecord> {
+}

+ 35 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DailyUsageStatisticsRecord.java

@@ -0,0 +1,35 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.cyksj.model.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Getter
+@Setter
+@TableName("daily_usage_statistics_record")
+public class DailyUsageStatisticsRecord extends BaseEntity {
+
+    private String type;
+
+    private Date usageDate;
+
+    private Long userCount;
+
+    /**
+     * 当日可用量
+     */
+    private BigDecimal dailyLimitTotal;
+
+    private Long usageUserCount;
+
+    /**
+     * 当日用量
+     */
+    private BigDecimal usedUsd;
+
+    private Long requestCount;
+}

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/response/recharge/CdkValidateResponse.java

@@ -18,6 +18,8 @@ public class CdkValidateResponse {
      */
     private String status;
 
+    private String email;
+
     @Data
     public static class ResponseData {
 
@@ -25,5 +27,7 @@ public class CdkValidateResponse {
          * guofen
          */
         private String status;
+
+        private String email;
     }
 }

+ 24 - 0
netflix-service/src/main/java/com/cyksj/service/recharge/impl/CdkRechargeServiceImpl.java

@@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.*;
+import com.cyksj.model.dto.GptCardTokenDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.response.recharge.CdkValidateResponse;
 import com.cyksj.model.response.recharge.RechargeResponse;
@@ -141,9 +143,31 @@ public class CdkRechargeServiceImpl implements CdkRechargeService {
 
             RechargeResponse rechargeResponse = Jsons.parseObject(body, RechargeResponse.class);
             Boolean success = rechargeResponse.getSuccess();
+            //这渠道会有几率成功 返回失败
+            //查询卡密状态兜底
+            if (!success) {
+                CdkValidateResponse cdkValidateResponse = validateCardKey(cardKey, accessToken);
+                GptCardTokenDto gptCardTokenDto = Jsons.parseObject(accessToken, GptCardTokenDto.class);
+                //卡密已使用 并且是当前账号
+                if ("used".equals(cdkValidateResponse.getStatus()) && gptCardTokenDto.getUser().getEmail().equals(cdkValidateResponse.getEmail())) {
+                    return Boolean.TRUE;
+                }
+            }
             return success;
 
         } catch (Exception e) {
+            //睡眠120s 再查询订单状态 这种特殊情况
+            try {
+                Thread.sleep(120000);
+                CdkValidateResponse cdkValidateResponse = validateCardKey(cardKey, accessToken);
+                GptCardTokenDto gptCardTokenDto = Jsons.parseObject(accessToken, GptCardTokenDto.class);
+                //卡密已使用 并且是当前账号
+                if ("used".equals(cdkValidateResponse.getStatus()) && gptCardTokenDto.getUser().getEmail().equals(cdkValidateResponse.getEmail())) {
+                    return Boolean.TRUE;
+                }
+            } catch (Exception ex) {
+                log.error("查询卡密{}失败:{}", cardKey, StringUtil.getErrorMsg(e));
+            }
             log.error("提交任务失败: {}", e.getMessage(), e);
             throw new RuntimeException("提交任务失败: " + e.getMessage(), e);
         }

+ 23 - 0
netflix-service/src/main/java/com/cyksj/service/recharge/impl/GuofenzaixianRechargeServiceImpl.java

@@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.*;
+import com.cyksj.model.dto.GptCardTokenDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.response.recharge.CdkValidateResponse;
 import com.cyksj.model.response.recharge.RechargeResponse;
@@ -141,9 +143,30 @@ public class GuofenzaixianRechargeServiceImpl implements GuofenzaixianRechargeSe
 
             RechargeResponse rechargeResponse = Jsons.parseObject(body, RechargeResponse.class);
             Boolean success = rechargeResponse.getData().getSuccess();
+            //这渠道会有几率成功 返回失败
+            //查询卡密状态兜底
+            if (!success) {
+                CdkValidateResponse cdkValidateResponse = validateCardKey(cardKey, accessToken);
+                GptCardTokenDto gptCardTokenDto = Jsons.parseObject(accessToken, GptCardTokenDto.class);
+                //卡密已使用 并且是当前账号
+                if ("used".equals(cdkValidateResponse.getData().getStatus()) && gptCardTokenDto.getUser().getEmail().equals(cdkValidateResponse.getData().getEmail())) {
+                    return Boolean.TRUE;
+                }
+            }
             return success;
 
         } catch (Exception e) {
+            try {
+                Thread.sleep(120000);
+                CdkValidateResponse cdkValidateResponse = validateCardKey(cardKey, accessToken);
+                GptCardTokenDto gptCardTokenDto = Jsons.parseObject(accessToken, GptCardTokenDto.class);
+                //卡密已使用 并且是当前账号
+                if ("used".equals(cdkValidateResponse.getData().getStatus()) && gptCardTokenDto.getUser().getEmail().equals(cdkValidateResponse.getData().getEmail())) {
+                    return Boolean.TRUE;
+                }
+            } catch (Exception ex) {
+                log.error("查询卡密{}失败:{}", cardKey, StringUtil.getErrorMsg(e));
+            }
             log.error("提交任务失败: {}", e.getMessage(), e);
             throw new RuntimeException("提交任务失败: " + e.getMessage(), e);
         }

+ 8 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/statistics/StatisticsDataController.java

@@ -710,4 +710,12 @@ public class StatisticsDataController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(dataList);
 	}
 
+    /**
+     * 用户 AI用量每日统计
+     */
+    @GetMapping("/get/aiUsageData")
+    public Result<SearchResult<DailyUsageStatisticsRecord>> getAiUsageData() {
+        SearchResult<DailyUsageStatisticsRecord> search = beanSearcher.search(DailyUsageStatisticsRecord.class, MapUtils.flatBuilder(request.getParameterMap()).orderBy(DailyUsageStatisticsRecord::getUsageDate).desc().build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
 }