131 lines
2.6 KiB
Go
131 lines
2.6 KiB
Go
package express_tool
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"errors"
|
||
"fmt"
|
||
"github.com/redis/go-redis/v9"
|
||
"log"
|
||
"testing"
|
||
"time"
|
||
)
|
||
|
||
func TestAliCloudExpressClient_GetLogisticsInfo(t *testing.T) {
|
||
type fields struct {
|
||
AppCode string
|
||
Host string
|
||
}
|
||
type args struct {
|
||
mobile string
|
||
number string
|
||
}
|
||
tests := []struct {
|
||
name string
|
||
fields fields
|
||
args args
|
||
wantRes *ExpressRes
|
||
wantErr bool
|
||
}{
|
||
{
|
||
name: "test1",
|
||
fields: fields{
|
||
AppCode: "",
|
||
Host: "",
|
||
},
|
||
args: args{
|
||
mobile: "",
|
||
number: "",
|
||
},
|
||
},
|
||
}
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
a := &AliCloudExpressClient{
|
||
AppCode: tt.fields.AppCode,
|
||
Host: tt.fields.Host,
|
||
}
|
||
gotRes, err := a.GetLogisticsInfo(tt.args.mobile, tt.args.number)
|
||
log.Println(gotRes, err)
|
||
})
|
||
}
|
||
}
|
||
|
||
func TestAliCloudExpressClient_GetLogisticsInfoFormCache(t *testing.T) {
|
||
rdb := redis.NewClient(&redis.Options{
|
||
Addr: "",
|
||
Password: "",
|
||
DB: 1,
|
||
})
|
||
|
||
// 创建缓存实例
|
||
cache := NewRedisCache(rdb)
|
||
a := &AliCloudExpressClient{
|
||
AppCode: "",
|
||
Host: "",
|
||
cache: cache,
|
||
}
|
||
gotRes, err := a.GetLogisticsInfoFormCache(context.Background(), "", "", "", time.Minute)
|
||
log.Println(gotRes, err)
|
||
}
|
||
|
||
func TestAliCloudExpressClient_DeleteLogisticsInfoCache(t *testing.T) {
|
||
rdb := redis.NewClient(&redis.Options{
|
||
Addr: "",
|
||
Password: "",
|
||
DB: 1,
|
||
})
|
||
|
||
// 创建缓存实例
|
||
cache := NewRedisCache(rdb)
|
||
a := &AliCloudExpressClient{
|
||
AppCode: "",
|
||
Host: "",
|
||
cache: cache,
|
||
}
|
||
err := a.DeleteLogisticsInfoCache(context.Background(), "", "")
|
||
log.Println(err)
|
||
}
|
||
|
||
type RedisCache struct {
|
||
client *redis.Client
|
||
}
|
||
|
||
func (r *RedisCache) Del(ctx context.Context, number string) error {
|
||
return r.client.Del(ctx, number).Err()
|
||
}
|
||
|
||
func NewRedisCache(client *redis.Client) *RedisCache {
|
||
return &RedisCache{client: client}
|
||
}
|
||
|
||
func (r *RedisCache) Set(ctx context.Context, number string, res string, ttl time.Duration) error {
|
||
if number == "" {
|
||
return errors.New("number不能为空")
|
||
}
|
||
|
||
return r.client.Set(ctx, number, res, ttl).Err()
|
||
}
|
||
|
||
// Get 从Redis获取IP信息
|
||
func (r *RedisCache) Get(ctx context.Context, number string) (*ExpressRes, error) {
|
||
if number == "" {
|
||
return nil, errors.New("number不能为空")
|
||
}
|
||
|
||
data, err := r.client.Get(ctx, number).Bytes()
|
||
if err != nil {
|
||
if errors.Is(err, redis.Nil) {
|
||
return nil, nil // 键不存在,返回nil而不是错误
|
||
}
|
||
return nil, fmt.Errorf("无法获取物流信息: %w", err)
|
||
}
|
||
|
||
var info ExpressRes
|
||
if err = json.Unmarshal(data, &info); err != nil {
|
||
return nil, fmt.Errorf("无法解析物流信息: %w", err)
|
||
}
|
||
|
||
return &info, nil
|
||
}
|