package api import ( "database/sql/driver" "encoding/json" "fmt" ctxLogger "github.com/luizsuper/ctxLoggers" "go.uber.org/zap" "time" ) type ( ShopDetailReq struct { ShopId string `json:"shopId"` SceneType int `json:"sceneType"` } ShopDResp struct { Head struct { Msg string `json:"msg"` Code int `json:"code"` } `json:"head"` Data struct { ShopId string `json:"shopId"` ShopName string `json:"shopName"` ShopScore float64 `json:"shopScore"` ShopAddr string `json:"shopAddr"` ShopTagName interface{} `json:"shopTagName"` ShopContractTelNumOne string `json:"shopContractTelNumOne"` ShopContractTelNumTwo string `json:"shopContractTelNumTwo"` ConsumptionUserSuccCount int `json:"consumptionUserSuccCount"` ShopLongitude string `json:"shopLongitude"` ShopLatitude string `json:"shopLatitude"` ShopCoverUrl string `json:"shopCoverUrl"` ShopLogoUrl string `json:"shopLogoUrl"` BannerList []interface{} `json:"bannerList"` RecommendScriptList []interface{} `json:"recommendScriptList"` NewScriptList []interface{} `json:"newScriptList"` } `json:"data"` } ) const ShopDetailUrl = `https://api.h5.helloaba.cn/shop/shopDetail_V2` type ShopDetailInfo struct { ID int `json:"id" gorm:"column:id"` Resp ShopDResp `json:"resp" gorm:"column:resp"` } func (m *ShopDetailInfo) TableName() string { return "shop_detail_info" } func (p ShopDResp) Value() (driver.Value, error) { return json.Marshal(p) } func (p *ShopDResp) Scan(input interface{}) error { return json.Unmarshal(input.([]byte), &p) } func ShopDMarshal(req, body []byte) (resp interface{}, err error) { r := new(ShopDResp) err = json.Unmarshal(body, r) if err != nil { ctxLogger.Error(nil, "json UnmarshalError", zap.String("resp body", string(body))) } if r.Head.Code != 200 || r.Head.Msg != "成功" { ctxLogger.Error(nil, "net wrok error", zap.String("resq body", string(req)), zap.String("resp body", string(body))) } return r, err } // ShopDKvStr todo:抽象 // ShopDKvStr 按照顺序对查询的key排序 func ShopDKvStr(body ShopDetailReq) string { var s = "" s += fmt.Sprintf("%v=%v&", "sceneType", body.SceneType) s += fmt.Sprintf("%v=%v", "shopId", body.ShopId) return s } func shopDetail(body ShopDetailReq) { dto, err := Attach(ShopDetailUrl, GetCheckSum(ShopDKvStr(body)), body, M, ShopDMarshal) if err != nil { ctxLogger.Error(nil, "net error record") } if s, ok := dto.(*ShopDResp); !ok { ctxLogger.Error(nil, "assertion error") } else { info := ShopDetailInfo{Resp: *s} DB.Create(&info) ctxLogger.Info(nil, "detailOk", zap.String("ShopId", s.Data.ShopId)) time.Sleep(time.Duration(1) * time.Second) } }