Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

zoujiajian 1 miesiąc temu
rodzic
commit
8f8d4ccb8c

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/response/recharge/Auto17OrderStatusResponse.java

@@ -86,5 +86,7 @@ public class Auto17OrderStatusResponse {
         private String message;
 
         private Boolean success;
+
+        private String failure_detail;
     }
 }

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -238,6 +238,10 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
                     }
                 }
             }
+            //新版UI
+            if (DOMAIN.equals("https://chatnode.nf.video")) {
+                return DOMAIN + "/auth/login?carid=" + carId + "&usertoken=" + chatgptUser.getUserToken();
+            }
             return DOMAIN + (isNewGptDomain || DOMAIN.equals("https://gpt.bestaistore.com") || DOMAIN.equals("https://oai.liuliangbang.vip") ? "/codetoken?logintoken=" + chatgptUser.getUserToken() : "/auth/logintoken?carid=" + carId + "&usertoken=" + chatgptUser.getUserToken() );
         } else {
             throw BusinessRuntimeException.getInstance("服务器出了点问题");

+ 27 - 5
netflix-service/src/main/java/com/cyksj/service/recharge/impl/Auto17RechargeServiceImpl.java

@@ -40,6 +40,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
+import java.util.Locale;
 
 @Service
 @RequiredArgsConstructor
@@ -147,9 +148,14 @@ public class Auto17RechargeServiceImpl implements Auto17RechargeService {
     public TaskResult getTaskResult(GroupsRelation relation) {
         try {
             Auto17OrderStatusResponse response = queryOrderStatus(relation.getCardKey(), relation.getGptTaskId());
-            TaskResult taskResult = convertTaskResult(response.getData());
+            Auto17OrderStatusResponse.OrderData data = response.getData();
+            boolean specialSuccess = isSpecialSuccess(data);
+            TaskResult taskResult = convertTaskResult(data);
             String result = StrUtil.blankToDefault(taskResult.getError(), taskResult.getResult());
-            resetGroupsRelationRechargeStatus(relation, taskResult.getStatus(), result);
+            if (specialSuccess) {
+                result = getStatusMessage(data);
+            }
+            resetGroupsRelationRechargeStatus(relation, taskResult.getStatus(), result, specialSuccess);
             return taskResult;
         } catch (Exception e) {
             log.error("auto17查询充值任务失败: {}", e.getMessage(), e);
@@ -202,7 +208,7 @@ public class Auto17RechargeServiceImpl implements Auto17RechargeService {
         TaskResult result = new TaskResult();
         String status = data.getStatus();
         String message = getStatusMessage(data);
-        if ("success".equalsIgnoreCase(status)) {
+        if (isSpecialSuccess(data) || "success".equalsIgnoreCase(status)) {
             result.setStatus("completed");
             result.setResult(message);
         } else if ("failed".equalsIgnoreCase(status)) {
@@ -215,6 +221,22 @@ public class Auto17RechargeServiceImpl implements Auto17RechargeService {
         return result;
     }
 
+    private boolean isSpecialSuccess(Auto17OrderStatusResponse.OrderData data) {
+        if (data == null) {
+            return false;
+        }
+        Auto17OrderStatusResponse.PaymentResult paymentResult = data.getPaymentResult();
+        if (paymentResult == null) {
+            return false;
+        }
+        String message = StrUtil.blankToDefault(paymentResult.getFailure_detail(), "");
+        String failureReason = StrUtil.blankToDefault(data.getFailureReason(), "");
+        String details = message + " " + failureReason;
+        String lowerCaseDetails = details.toLowerCase(Locale.ROOT);
+        return lowerCaseDetails.contains("already succeeded after being previously confirmed")
+                || lowerCaseDetails.contains("payment_intent_unexpected_state");
+    }
+
     private String getStatusMessage(Auto17OrderStatusResponse.OrderData data) {
         if (StrUtil.isNotBlank(data.getFailureReason())) {
             return data.getFailureReason();
@@ -335,7 +357,7 @@ public class Auto17RechargeServiceImpl implements Auto17RechargeService {
                 .eq(GroupsRelation::getId, relation.getId())));
     }
 
-    private void resetGroupsRelationRechargeStatus(GroupsRelation relation, String status, String message) {
+    private void resetGroupsRelationRechargeStatus(GroupsRelation relation, String status, String message, boolean specialSuccess) {
         if (!"completed".equals(status) && !"failed".equals(status)) {
             return;
         }
@@ -392,7 +414,7 @@ public class Auto17RechargeServiceImpl implements Auto17RechargeService {
                 .set(GroupsRelation::getRechargeStatus, rechargeStatus)
                 .set(expiryTime != null, GroupsRelation::getStartTime, startTime)
                 .set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime)
-                .set(!completed && StrUtil.isNotBlank(message), GroupsRelation::getRechargeErrorInfo, message)
+                .set((!completed || specialSuccess) && StrUtil.isNotBlank(message), GroupsRelation::getRechargeErrorInfo, message)
                 .eq(GroupsRelation::getId, relation.getId())
                 .eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
         if (update == 0 || !completed) {

+ 21 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import com.alibaba.excel.EasyExcel;
@@ -147,9 +148,9 @@ public class CmsAccountController {
         }
         account = account.trim();
         Account netflixAccount = accountService.getOne(Wrappers.lambdaQuery(Account.class)
-                .eq(Account::getGoodsId, Constant.NETFLIX_GID)
+                .in(Account::getGoodsId, List.of(Constant.NETFLIX_GID, Constant.DISNEY_GID))
                 .eq(Account::getAccount, account)
-                .select(Account::getAccount, Account::getGptEmailPwd)
+                .select(Account::getAccount, Account::getGptEmailPwd, Account::getId, Account::getGoodsId)
                 .last("limit 1"));
         if (netflixAccount == null) {
             throw BusinessRuntimeException.getInstance("奈飞账号不存在");
@@ -164,6 +165,24 @@ public class CmsAccountController {
             if (sysEmail != null) gptEmailPwd = sysEmail.getPassword();
         }
         credential.put("password", gptEmailPwd);
+
+        if (ObjectUtil.equals(netflixAccount.getGoodsId(), Constant.NETFLIX_GID)) {
+            String type = "ohter";
+            GroupsTrips groupsTrips = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class).eq(GroupsTrips::getAccountId, netflixAccount.getId()).last("limit 1"));
+            if (groupsTrips != null) {
+                Long skuId = groupsTrips.getSkuId();
+                GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(skuId);
+                if (goodsDonSku != null && goodsDonSku.getMonths() == 1) {
+                    type = "month";
+                }
+            }
+            credential.put("type", type);
+        }
+        String goods = "Netflix";
+        if (ObjectUtil.equals(netflixAccount.getGoodsId(), Constant.DISNEY_GID)) {
+            goods = "Disney";
+        }
+        credential.put("goods", goods);
         return GatewayResponse.SUCCESS.newBuilder().toResult(credential);
     }