2024-06-23 14:35:54 +08:00
package jutuike
import (
"context"
"errors"
2024-11-05 18:03:50 +08:00
"github.com/spf13/cast"
"reflect"
2024-06-23 16:01:51 +08:00
"time"
2024-06-23 14:35:54 +08:00
"github.com/zeromicro/go-zero/core/logx"
2024-06-27 22:31:41 +08:00
"github.com/zywaited/xcopy"
2024-06-23 14:35:54 +08:00
2024-07-29 23:52:23 +08:00
"repository.lenntc.com/lenntc/third-platform-sdk/client"
"repository.lenntc.com/lenntc/third-platform-sdk/util"
2024-06-23 14:35:54 +08:00
)
// JutuikeApi 美团-美天赚
// Api defines the interface of jutuike api
type JutuikeApi interface {
// GenerateLink 生成推广链接
GenerateLink ( ctx context . Context , req GenerateLinkRequest ) ( * GenerateLinkData , error )
// QueryOrderList 查询订单列表
QueryOrderList ( ctx context . Context , req QueryOrderListRequest ) ( * QueryOrderListData , error )
}
type jutuikeApiImpl struct {
log logx . Logger
client * Client
}
func newJutuikeApiImpl ( log logx . Logger , client * Client ) JutuikeApi {
return & jutuikeApiImpl {
log : log ,
client : client ,
}
}
// GenerateLink 生成推广链接
func ( a * jutuikeApiImpl ) GenerateLink ( ctx context . Context , req GenerateLinkRequest ) ( * GenerateLinkData , error ) {
2024-06-23 16:01:51 +08:00
if req . ActId == 0 || len ( req . Sid ) == 0 {
return nil , errors . New ( "请求参数actId或sid不能为空" )
}
2024-06-23 14:35:54 +08:00
if len ( req . ApiKey ) == 0 {
req . ApiKey = a . client . authConfig . ApiKey
}
args := util . StructToMap ( req )
request := & client . HttpRequest { Headers : a . client . headers , QueryArgs : args }
response := new ( GenerateLinkResponse )
if err := a . client . HttpGet ( GetLinkUrl , request , & client . HttpResponse { Result : response } ) ; err != nil {
return nil , err
}
if response . Code != 1 {
2024-11-05 18:03:50 +08:00
a . log . WithFields ( logx . LogField { Key : "data" , Value : map [ string ] any { "req" : req , "resp" : response } } ) . Errorf ( "[jutuikeApiImpl][GenerateLink] response result error: %s" , response . Msg )
2024-06-23 14:35:54 +08:00
return nil , errors . New ( response . Msg )
}
2024-11-05 18:03:50 +08:00
result := new ( GenerateLinkData )
data := cast . ToStringMap ( response . Data )
if _ , ok := data [ "act_name" ] ; ok {
result . ActName = data [ "act_name" ] . ( string )
}
if _ , ok := data [ "poster_qrcode_url" ] ; ok {
result . PosterQrcodeUrl = data [ "poster_qrcode_url" ] . ( string )
}
if _ , ok := data [ "h5" ] ; ok {
result . H5 = data [ "h5" ] . ( string )
}
if _ , ok := data [ "long_h5" ] ; ok {
result . LongH5 = data [ "long_h5" ] . ( string )
}
if _ , ok := data [ "h5_evoke" ] ; ok {
result . H5Evoke = data [ "h5_evoke" ] . ( string )
}
if _ , ok := data [ "deeplink" ] ; ok {
result . DeepLink = data [ "deeplink" ] . ( string )
}
if _ , ok := data [ "we_app_info" ] ; ok {
weApp := cast . ToStringMap ( data [ "we_app_info" ] )
2024-11-06 15:10:52 +08:00
weAppInfoTemp := new ( WeAppInfo )
if _ , tok := weApp [ "app_id" ] ; tok {
weAppInfoTemp . AppId = weApp [ "app_id" ] . ( string )
2024-11-05 18:03:50 +08:00
}
2024-11-06 15:10:52 +08:00
if _ , tok := weApp [ "page_path" ] ; tok {
weAppInfoTemp . PagePath = weApp [ "page_path" ] . ( string )
}
if _ , tok := weApp [ "miniCode" ] ; tok {
weAppInfoTemp . MiniCode = weApp [ "miniCode" ] . ( string )
}
result . WeAppInfo = weAppInfoTemp
2024-11-05 18:03:50 +08:00
}
if _ , ok := data [ "alipay_app_info" ] ; ok {
alipayApp := cast . ToStringMap ( data [ "alipay_app_info" ] )
2024-11-06 15:10:52 +08:00
alipayAppInfoTemp := new ( AlipayAppInfo )
if _ , tok := alipayApp [ "app_id" ] ; tok {
alipayAppInfoTemp . AppId = alipayApp [ "app_id" ] . ( string )
}
if _ , tok := alipayApp [ "page_path" ] ; tok {
alipayAppInfoTemp . PagePath = alipayApp [ "page_path" ] . ( string )
2024-11-05 18:03:50 +08:00
}
2024-11-06 15:10:52 +08:00
result . AlipayAppInfo = alipayAppInfoTemp
2024-11-05 18:03:50 +08:00
}
return result , nil
2024-06-23 14:35:54 +08:00
}
// QueryOrderList 查询订单列表
func ( a * jutuikeApiImpl ) QueryOrderList ( ctx context . Context , req QueryOrderListRequest ) ( * QueryOrderListData , error ) {
2024-06-23 16:01:51 +08:00
if len ( req . StartTime ) == 0 || len ( req . EndTime ) == 0 {
return nil , errors . New ( "请求参数start_time或end_time为必传" )
}
if _ , err := time . Parse ( time . DateTime , req . StartTime ) ; err != nil {
return nil , errors . New ( "开始时间start_time时间格式错误" )
}
if _ , err := time . Parse ( time . DateTime , req . EndTime ) ; err != nil {
return nil , errors . New ( "结束时间end_time时间格式错误" )
}
2024-06-23 14:35:54 +08:00
if len ( req . ApiKey ) == 0 {
req . ApiKey = a . client . authConfig . ApiKey
}
args := util . StructToMap ( req )
request := & client . HttpRequest { Headers : a . client . headers , BodyArgs : args }
response := new ( QueryOrderListResponse )
if err := a . client . HttpPost ( GetOrderListUrl , request , & client . HttpResponse { Result : response } ) ; err != nil {
return nil , err
}
2024-11-05 18:03:50 +08:00
responseData := new ( QueryOrderListData )
2024-06-23 14:35:54 +08:00
if response . Code != 1 {
2024-11-05 18:03:50 +08:00
dataType := reflect . TypeOf ( response . Data ) . String ( )
if dataType == "string" {
a . log . WithFields ( logx . LogField { Key : "data" , Value : map [ string ] any { "req" : req , "resp" : response } } ) . Errorf ( "[jutuikeApiImpl][QueryOrderList] response result error: %s" , response . Msg )
return nil , errors . New ( response . Msg )
} else {
responseData . PerPage = req . Page
responseData . CurrentPage = req . Page
responseData . LastPage = req . Page
responseData . Data = make ( [ ] * OrderItem , 0 )
return responseData , nil
}
2024-06-23 14:35:54 +08:00
}
2024-06-27 22:31:41 +08:00
if err := xcopy . Copy ( & responseData , response . Data ) ; err != nil {
return nil , err
}
return responseData , nil
2024-06-23 14:35:54 +08:00
}