|
|
@@ -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) {
|