Merge branch 'develop' into production
This commit is contained in:
@@ -44,7 +44,7 @@ func (c *OrderController) OrderQuery() {
|
||||
}
|
||||
|
||||
func (c *OrderController) OrderSchedule() {
|
||||
ctx, span := otelTrace.CreateLinkContext(c.Ctx.Request.Context(), "OrderController.OrderSchedule")
|
||||
ctx, span := otelTrace.Span(c.Ctx.Request.Context(), "OrderSchedule", "OrderController.OrderSchedule")
|
||||
defer span.End()
|
||||
bankOrderId := strings.TrimSpace(c.GetString("bankOrderId"))
|
||||
orderInfo := order.GetOrderByBankOrderId(ctx, bankOrderId)
|
||||
@@ -82,20 +82,25 @@ func (c *OrderController) OrderSchedule() {
|
||||
}
|
||||
|
||||
go func() {
|
||||
ctx2, span2 := otelTrace.CreateLinkContext(c.Ctx.Request.Context(), "OrderController.OrderScheduleGo")
|
||||
ctx2, span2 := otelTrace.CreateLinkContext(ctx, "OrderController.OrderScheduleGo")
|
||||
span2.SetAttributes(attribute.String("bankOrderId", bankOrderId))
|
||||
defer span2.End()
|
||||
span2.AddEvent("开始调度")
|
||||
scanData := supplierByCode.Scan(ctx2, orderInfo, roadInfo, merchantInfo)
|
||||
span2.AddEvent("结束调度")
|
||||
order.InsertCardReturnDataByBankId(ctx2, orderInfo.BankOrderId, scanData.ReturnData)
|
||||
|
||||
if scanData.Status == "01" {
|
||||
span2.AddEvent("开始处理成功订单")
|
||||
service.SolvePaySuccess(ctx2, orderInfo.BankOrderId, orderInfo.OrderAmount, "", scanData.ReturnData)
|
||||
return
|
||||
}
|
||||
|
||||
if scanData.Status == "00" {
|
||||
span2.AddEvent("开始处理失败订单")
|
||||
return
|
||||
}
|
||||
|
||||
span2.AddEvent("开始处理失败订单")
|
||||
// 插入处理失败的动账通知
|
||||
service.SolvePayFail(ctx2, orderInfo.BankOrderId, orderInfo.BankTransId, scanData.ReturnData)
|
||||
}()
|
||||
|
||||
@@ -26,8 +26,8 @@ const (
|
||||
MaxQueueSize = 2048 // 最大队列大小,防止内存溢出
|
||||
|
||||
// DefaultSamplingRatio 采样配置 - 生产环境资源控制
|
||||
DefaultSamplingRatio = 0.5 // 默认采样率50%,平衡观测性和性能
|
||||
HighLoadSamplingRatio = 0.1 // 高负载时采样率10%,保护系统稳定性
|
||||
DefaultSamplingRatio = 1 // 默认采样率50%,平衡观测性和性能
|
||||
HighLoadSamplingRatio = 1 // 高负载时采样率10%,保护系统稳定性
|
||||
)
|
||||
|
||||
// CircuitBreakerState 熔断器状态
|
||||
|
||||
@@ -24,7 +24,7 @@ func TestSendCardTaskTypeCamel_CreateOrder(t *testing.T) {
|
||||
|
||||
func TestSendCardTaskTypeCamel_sign(t *testing.T) {
|
||||
formData := map[string]string{
|
||||
"mchId": "1051",
|
||||
"mchId": "1052",
|
||||
"mchOrderNo": utils.GenerateId(),
|
||||
"productId": "1",
|
||||
"orderAmount": fmt.Sprintf("%d", 10*100),
|
||||
@@ -34,7 +34,7 @@ func TestSendCardTaskTypeCamel_sign(t *testing.T) {
|
||||
"extra": utils.GenerateId(),
|
||||
}
|
||||
|
||||
formData["sign"] = (&SendCardTaskTypeCamel{}).sign(t.Context(), formData, "f527b85c595c45108bbf006bb01c95d7")
|
||||
formData["sign"] = (&SendCardTaskTypeCamel{}).sign(t.Context(), formData, "c6afc479ea7a43ce8bee59bfd6c3b74c")
|
||||
|
||||
client := resty.New().SetTimeout(time.Second * 10).SetRetryCount(2).SetRetryMaxWaitTime(time.Second * 3)
|
||||
otelresty.TraceClient(client)
|
||||
|
||||
@@ -72,8 +72,8 @@ func (s *SendCardTaskTypeNuclear) getRandomId(ctx context.Context) (string, stri
|
||||
// 随机选择一个key
|
||||
selectedKey := keys[rand.IntN(len(keys))]
|
||||
|
||||
// 万分之一概率随机删除一个key-value
|
||||
if rand.IntN(2000) == 57 {
|
||||
// 两千分之一概率随机删除一个key-value
|
||||
if rand.IntN(1000) == 57 {
|
||||
// 随机选择一个key删除
|
||||
selectedKeyToDelete := keys[rand.IntN(len(keys))]
|
||||
if err2 := redisClient.Delete(ctx, selectedKeyToDelete); err != nil {
|
||||
@@ -182,19 +182,13 @@ func (s *SendCardTaskTypeNuclear) CreateOrder(ctx context.Context, roadUid strin
|
||||
SendCardTaskType: SendCardTaskTypeEnumNuclear,
|
||||
RemoteOrderID: respData.Payload.TradeOrderId,
|
||||
Params: map[string]any{
|
||||
//"cookie": webClient.Cookies,
|
||||
"fingerprintHash": fingerprintHash,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *SendCardTaskTypeNuclear) channelOne(ctx context.Context, orderItem OrderPoolItem, task SendCardTask) error {
|
||||
ctx, span := otelTrace.Span(ctx, "SendCardTaskTypeNuclear", "SendCardTaskTypeNuclear.HandleSendCardTask", trace.WithAttributes(
|
||||
attribute.String("bankOrderId", task.LocalOrderID),
|
||||
attribute.String("cardNo", task.CardInfo.CardNo),
|
||||
attribute.String("cardPassword", task.CardInfo.Data),
|
||||
attribute.String("remoteOrderId", orderItem.OrderID),
|
||||
))
|
||||
ctx, span := otelTrace.Span(ctx, "SendCardTaskTypeNuclear", "SendCardTaskTypeNuclear.channelOne")
|
||||
defer span.End()
|
||||
|
||||
queryOrderInfo, err2 := url.Parse(orderItem.PayURL)
|
||||
@@ -227,7 +221,7 @@ func (s *SendCardTaskTypeNuclear) channelOne(ctx context.Context, orderItem Orde
|
||||
time.Sleep(time.Second*20 - time.Since(orderItem.CreateTime))
|
||||
}
|
||||
|
||||
for range 10 {
|
||||
for range 3 {
|
||||
errRes = nil
|
||||
webClient := resty.New().SetTimeout(10 * time.Second).SetHeaders(map[string]string{
|
||||
"user-agent": useragent.GetUserAgentByPlatform(useragent.PlatformPhone),
|
||||
@@ -246,7 +240,7 @@ func (s *SendCardTaskTypeNuclear) channelOne(ctx context.Context, orderItem Orde
|
||||
_, _ = webClient.R().Get(orderItem.PayURL)
|
||||
|
||||
//添加计数器
|
||||
for range 3 {
|
||||
for range 5 {
|
||||
span.AddEvent("startGetCaptcha")
|
||||
resp, err4 := webClient.R().SetContext(ctx).SetQueryParams(map[string]string{
|
||||
"oe": orderId,
|
||||
@@ -341,7 +335,7 @@ func (s *SendCardTaskTypeNuclear) channelOne(ctx context.Context, orderItem Orde
|
||||
span.AddEvent("retrySubmit")
|
||||
continue
|
||||
}
|
||||
if strings.Contains(submitRespStr.Msg, "访问异常,页面刷新后请重试") {
|
||||
if strings.Contains(submitRespStr.Msg, "访问异常,页面刷新后请重试") || strings.Contains(submitRespStr.Msg, "当前操作频繁操作") {
|
||||
needChangeProxyId = utils.GenerateId()
|
||||
fingerprintHash = fingerprint.GenerateRandomBrowserFingerprintHash()
|
||||
span.AddEvent("startRefreshPage")
|
||||
@@ -449,6 +443,14 @@ func (s *SendCardTaskTypeNuclear) channelThree(ctx context.Context, orderItem Or
|
||||
}
|
||||
|
||||
func (s *SendCardTaskTypeNuclear) HandleSendCardTask(ctx context.Context, orderItem OrderPoolItem, task SendCardTask) error {
|
||||
ctx, span := otelTrace.Span(ctx, "SendCardTaskTypeNuclear", "SendCardTaskTypeNuclear.HandleSendCardTask", trace.WithAttributes(
|
||||
attribute.String("bankOrderId", task.LocalOrderID),
|
||||
attribute.String("cardNo", task.CardInfo.CardNo),
|
||||
attribute.String("cardPassword", task.CardInfo.Data),
|
||||
attribute.String("orderId", orderItem.OrderID),
|
||||
attribute.String("remoteOrderId", orderItem.RemoteOrderID),
|
||||
))
|
||||
defer span.End()
|
||||
if strings.Contains(orderItem.PayURL, "baolong18080.com") {
|
||||
return s.channelOne(ctx, orderItem, task)
|
||||
}
|
||||
|
||||
@@ -563,12 +563,15 @@ func (s *OrderPoolServiceImpl) SubmitOrder(ctx context.Context, task card_sender
|
||||
var orderItem card_sender.OrderPoolItem
|
||||
|
||||
for range 3 {
|
||||
span.AddEvent("create order")
|
||||
orderItem, err := task.SendCardTaskType.GetSendCardTaskType().
|
||||
CreateOrder(ctx, task.RoadUid, task.CardInfo.GetFaceTypeFloat(ctx))
|
||||
|
||||
if err != nil {
|
||||
span.AddEvent("create order failed")
|
||||
return fmt.Errorf("创建订单失败: %v", err)
|
||||
}
|
||||
span.AddEvent("bind order")
|
||||
if err = task.SendCardTaskType.GetSendCardTaskType().BindPoolOrderId(ctx, orderItem, task); err != nil {
|
||||
otelTrace.Logger.WithContext(ctx).Error("绑定订单ID和卡片信息ID失败", zap.Error(err))
|
||||
return fmt.Errorf("绑定订单ID和卡片信息ID失败: %v", err)
|
||||
@@ -577,10 +580,13 @@ func (s *OrderPoolServiceImpl) SubmitOrder(ctx context.Context, task card_sender
|
||||
// 绑定订单ID和卡片信息ID
|
||||
bindKey := fmt.Sprintf("%s:%s", s.config.OrderBindKey, orderItem.OrderID)
|
||||
if err = s.redisClient.Set(ctx, bindKey, task.LocalOrderID, s.config.OrderBindKeyActiveTime); err != nil {
|
||||
span.AddEvent("绑定订单ID和卡片信息ID失败")
|
||||
return fmt.Errorf("绑定订单ID和卡片信息ID失败: %v", err)
|
||||
}
|
||||
span.AddEvent("handle order")
|
||||
err = task.SendCardTaskType.GetSendCardTaskType().HandleSendCardTask(ctx, orderItem, task)
|
||||
if err != nil {
|
||||
span.AddEvent("handle order failed")
|
||||
if strings.Contains(err.Error(), "重新下单") {
|
||||
_ = s.unboundPoolOrderId(ctx, task.SendCardTaskType, orderItem, task)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user