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 )
2025-06-20 11:02:49 +08:00
if actName , ok := data [ "act_name" ] ; ok {
if actName != nil {
result . ActName = cast . ToString ( actName )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if posterQrcodeUrl , ok := data [ "poster_qrcode_url" ] ; ok {
if posterQrcodeUrl != nil {
result . PosterQrcodeUrl = cast . ToString ( posterQrcodeUrl )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if h5Url , ok := data [ "h5" ] ; ok {
if h5Url != nil {
result . H5 = cast . ToString ( h5Url )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if longH5 , ok := data [ "long_h5" ] ; ok {
if longH5 != nil {
result . LongH5 = cast . ToString ( longH5 )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if h5Evoke , ok := data [ "h5_evoke" ] ; ok {
if h5Evoke != nil {
result . H5Evoke = cast . ToString ( h5Evoke )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if deepLink , ok := data [ "deeplink" ] ; ok {
if deepLink != nil {
result . DeepLink = cast . ToString ( deepLink )
}
2024-11-05 18:03:50 +08:00
}
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 )
2025-06-20 11:02:49 +08:00
if weAppAppId , tok := weApp [ "app_id" ] ; tok {
if weAppAppId != nil {
weAppInfoTemp . AppId = cast . ToString ( weAppAppId )
}
2024-11-05 18:03:50 +08:00
}
2025-06-20 11:02:49 +08:00
if weAppPagePath , tok := weApp [ "page_path" ] ; tok {
if weAppPagePath != nil {
weAppInfoTemp . PagePath = cast . ToString ( weAppPagePath )
}
2024-11-06 15:10:52 +08:00
}
2025-06-20 11:02:49 +08:00
if weAppMiniCode , tok := weApp [ "miniCode" ] ; tok {
if weAppMiniCode != nil {
weAppInfoTemp . MiniCode = cast . ToString ( weAppMiniCode )
}
2024-11-06 15:10:52 +08:00
}
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 )
2025-06-20 11:02:49 +08:00
if alipayAppAppid , tok := alipayApp [ "app_id" ] ; tok {
if alipayAppAppid != nil {
alipayAppInfoTemp . AppId = cast . ToString ( alipayAppAppid )
}
2024-11-06 15:10:52 +08:00
}
2025-06-20 11:02:49 +08:00
if alipayAppPagePath , tok := alipayApp [ "page_path" ] ; tok {
if alipayAppPagePath != nil {
alipayAppInfoTemp . PagePath = cast . ToString ( alipayAppPagePath )
}
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
}