fix(social): 解决微信小程序订单发货信息上传时间差问题

- 添加 ObjectUtil 和 CompletableFuture 依赖
- 针对错误代码 10060001 实现延迟重试机制
- 在支付回调与订单信息上传间增加 1 秒延时处理
- 添加延迟重试后的日志记录和异常处理
- 优化错误处理流程以应对时间差导致的上传失败
pull/230/head
wuKong 2026-01-04 11:19:29 +08:00
parent 716e2a63c1
commit ce4cc9c4b2
1 changed files with 24 additions and 0 deletions

View File

@ -14,6 +14,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
@ -65,6 +66,8 @@ import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
@ -371,6 +374,27 @@ public class SocialClientServiceImpl implements SocialClientService {
try {
WxMaOrderShippingInfoBaseResponse response = service.getWxMaOrderShippingService().upload(request);
if (response.getErrCode() != 0) {
if (ObjectUtil.equals(response.getErrCode(),10060001)) {
// 错误代码10060001, 错误信息:支付单不存在
// 收到支付回调时同步订单到微信很大概率会出现10060001
// 应对支付回调与订单信息上传之间的时间差
CompletableFuture.delayedExecutor(1000, TimeUnit.MILLISECONDS)
.execute(() -> {
try {
WxMaOrderShippingInfoBaseResponse delayedResponse =
service.getWxMaOrderShippingService().upload(request);
if (delayedResponse.getErrCode() != 0) {
log.error("[uploadWxaOrderShippingInfo][上传微信小程序发货信息失败request({}) response({})]", request, delayedResponse);
return;
}
log.info("[uploadWxaOrderShippingInfo][上传微信小程序发货信息成功request({}) response({})]", request, delayedResponse);
} catch (WxErrorException ex) {
log.error("[uploadWxaOrderShippingInfo][上传微信小程序发货信息失败request({})]", request,
ex);
}
});
return;
}
log.error("[uploadWxaOrderShippingInfo][上传微信小程序发货信息失败request({}) response({})]", request, response);
throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_UPLOAD_SHIPPING_INFO_ERROR, response.getErrMsg());
}