From ce5e4de65f307fe397e2b2c6dfc0c0daa711fe59 Mon Sep 17 00:00:00 2001 From: sian Date: Thu, 28 Jul 2022 15:33:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B0=81=E8=A3=85=E5=A4=A9=E8=A1=8Capi?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E5=81=87=E6=97=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/controller/thirdPartyApi/holidays.go | 55 ++++++++++++++++++ internal/v2/lib/holidays/holidays.go | 57 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 internal/v2/controller/thirdPartyApi/holidays.go create mode 100644 internal/v2/lib/holidays/holidays.go diff --git a/internal/v2/controller/thirdPartyApi/holidays.go b/internal/v2/controller/thirdPartyApi/holidays.go new file mode 100644 index 0000000..33255c1 --- /dev/null +++ b/internal/v2/controller/thirdPartyApi/holidays.go @@ -0,0 +1,55 @@ +package thirdPartyApi + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "recook/internal/back" + "recook/internal/v2/lib/holidays" + "strconv" + "time" +) + +type TianXingApi struct { +} + +var NowYear = "" +var HolidaysTemp = &resp{} + +type resp struct { + Code int `json:"code"` + Msg string `json:"msg"` + NewsList []newslist `json:"newsList"` +} + +type newslist struct { + Holiday string `json:"holiday"` + Name string `json:"name"` + Vacation string `json:"vacation"` + Remark string `json:"remark"` + Wage string `json:"wage"` + Start int `json:"start"` + Now int `json:"now"` + End int `json:"end"` + Tip string `json:"tip"` + Rest string `json:"rest"` +} + +// GetHolidays 获取节假日并缓存 +func (t *TianXingApi) GetHolidays(c *gin.Context) { + if NowYear == "" || NowYear != strconv.Itoa(time.Now().Year()) { + NowYear = strconv.Itoa(time.Now().Year()) + result, err := holidays.HolidaysApi.GetHolidays(NowYear) + if err != nil { + back.Fail(c, err.Error()) + return + } + err = json.Unmarshal([]byte(result), HolidaysTemp) + if err != nil { + back.Fail(c, err.Error()) + return + } + back.Suc(c, "操作成功", HolidaysTemp.NewsList) + } else { + back.Suc(c, "操作成功", HolidaysTemp.NewsList) + } +} diff --git a/internal/v2/lib/holidays/holidays.go b/internal/v2/lib/holidays/holidays.go new file mode 100644 index 0000000..3285f12 --- /dev/null +++ b/internal/v2/lib/holidays/holidays.go @@ -0,0 +1,57 @@ +package holidays + +import ( + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" +) + +const hostUrl = "http://api.tianapi.com/jiejiari/index?" +const key = "f2599751017c50b91d6f31261ce6dbc0" +const yearType = 1 +const mouthTyoe = 2 + +var HolidaysApi = &holidaysApi{} + +type holidaysApi struct { +} + +func (h *holidaysApi) GetHolidays(year string) (string, error) { + request, err := h.request("get", hostUrl+url.Values{ + "key": {key}, + "type": {strconv.Itoa(yearType)}, + "date": {year + "-01-01"}, + }.Encode(), "") + if err != nil { + return "", err + } + return request, nil +} + +// @Style 网络请求 +func (h *holidaysApi) request(method string, host string, data string, headers ...*map[string]string) (string, error) { + client := &http.Client{} + method = strings.ToUpper(method) + + req, err := http.NewRequest(method, host, strings.NewReader(data)) + if err != nil { + return "", err + } + if len(headers) > 0 { + for key, value := range *headers[0] { + req.Header.Add(key, value) + } + } + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", err + } + return string(body), nil +} From 491e3dd87fd05fbd51d9508a225b885b6f986fc4 Mon Sep 17 00:00:00 2001 From: sian Date: Thu, 28 Jul 2022 15:41:04 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B0=81=E8=A3=85=E5=A4=A9=E8=A1=8Capi?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E5=81=87=E6=97=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/v2/router/app.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/v2/router/app.go b/internal/v2/router/app.go index 238c60f..4230e54 100644 --- a/internal/v2/router/app.go +++ b/internal/v2/router/app.go @@ -19,6 +19,7 @@ import ( "recook/internal/v2/controller/app/upgrade" "recook/internal/v2/controller/app/user" "recook/internal/v2/controller/app/vip" + "recook/internal/v2/controller/thirdPartyApi" "recook/internal/v2/router/middleware" "github.com/gin-gonic/gin" @@ -308,4 +309,11 @@ func routerApp(appRouter *gin.RouterGroup) { } } + thridApiController := appRouter.Group("thridapi") + { + proxy := thirdPartyApi.TianXingApi{} + { + thridApiController.POST("holidays", proxy.GetHolidays) + } + } } From 064f4c59132ef56b315224c9da3a6c99bac0175e Mon Sep 17 00:00:00 2001 From: sian Date: Thu, 28 Jul 2022 17:57:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B0=81=E8=A3=85=E5=A4=A9=E8=A1=8Capi?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E5=81=87=E6=97=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/controller/thirdPartyApi/holidays.go | 51 ++++---------- internal/v2/lib/cache/manage.go | 14 ++++ internal/v2/logic/thirdPartyApi/holidays.go | 66 +++++++++++++++++++ 3 files changed, 94 insertions(+), 37 deletions(-) create mode 100644 internal/v2/logic/thirdPartyApi/holidays.go diff --git a/internal/v2/controller/thirdPartyApi/holidays.go b/internal/v2/controller/thirdPartyApi/holidays.go index 33255c1..a83a73d 100644 --- a/internal/v2/controller/thirdPartyApi/holidays.go +++ b/internal/v2/controller/thirdPartyApi/holidays.go @@ -1,10 +1,9 @@ package thirdPartyApi import ( - "encoding/json" "github.com/gin-gonic/gin" "recook/internal/back" - "recook/internal/v2/lib/holidays" + "recook/internal/v2/logic/thirdPartyApi" "strconv" "time" ) @@ -12,44 +11,22 @@ import ( type TianXingApi struct { } -var NowYear = "" -var HolidaysTemp = &resp{} - -type resp struct { - Code int `json:"code"` - Msg string `json:"msg"` - NewsList []newslist `json:"newsList"` -} - -type newslist struct { - Holiday string `json:"holiday"` - Name string `json:"name"` - Vacation string `json:"vacation"` - Remark string `json:"remark"` - Wage string `json:"wage"` - Start int `json:"start"` - Now int `json:"now"` - End int `json:"end"` - Tip string `json:"tip"` - Rest string `json:"rest"` +type argsHolidays struct { + Year string `binding:"required"` } // GetHolidays 获取节假日并缓存 func (t *TianXingApi) GetHolidays(c *gin.Context) { - if NowYear == "" || NowYear != strconv.Itoa(time.Now().Year()) { - NowYear = strconv.Itoa(time.Now().Year()) - result, err := holidays.HolidaysApi.GetHolidays(NowYear) - if err != nil { - back.Fail(c, err.Error()) - return - } - err = json.Unmarshal([]byte(result), HolidaysTemp) - if err != nil { - back.Fail(c, err.Error()) - return - } - back.Suc(c, "操作成功", HolidaysTemp.NewsList) - } else { - back.Suc(c, "操作成功", HolidaysTemp.NewsList) + var args argsHolidays + if err := c.ShouldBindJSON(&args); err != nil { + back.Fail(c, err.Error()) + return + } + var nowYear = strconv.Itoa(time.Now().Year()) + holidays, err := thirdPartyApi.TianXingApiLogic.GetHolidays(nowYear) + if err != nil { + back.Fail(c, err.Error()) + return } + back.Suc(c, "操作成功", holidays.NewsList) } diff --git a/internal/v2/lib/cache/manage.go b/internal/v2/lib/cache/manage.go index 9128039..3378f53 100644 --- a/internal/v2/lib/cache/manage.go +++ b/internal/v2/lib/cache/manage.go @@ -91,3 +91,17 @@ func GetUserLoginCache(id uint, deviceType int) string { } return val } + +// @Style 获取app登录缓存 +func GetxxxCache(id uint, deviceType int) string { + k := fmt.Sprintf("login:%d:user_%d", deviceType, id) + val, err := dbc.Rds.Get(k).Result() + if err != nil { + if err == redis.Nil { + return "" + } else { + panic(err) + } + } + return val +} diff --git a/internal/v2/logic/thirdPartyApi/holidays.go b/internal/v2/logic/thirdPartyApi/holidays.go new file mode 100644 index 0000000..c33d586 --- /dev/null +++ b/internal/v2/logic/thirdPartyApi/holidays.go @@ -0,0 +1,66 @@ +package thirdPartyApi + +import ( + "encoding/json" + "errors" + "fmt" + "github.com/go-redis/redis" + "recook/internal/dbc" + "recook/internal/v2/lib/holidays" + "time" +) + +var TianXingApiLogic = &tianXingApi{} + +type tianXingApi struct { +} + +type Response struct { + Code int `json:"code"` + Msg string `json:"msg"` + NewsList []newslist `json:"newsList"` +} + +type newslist struct { + Holiday string `json:"holiday"` + Name string `json:"name"` + Vacation string `json:"vacation"` + Remark string `json:"remark"` + Wage string `json:"wage"` + Start int `json:"start"` + Now int `json:"now"` + End int `json:"end"` + Tip string `json:"tip"` + Rest string `json:"rest"` +} + +// GetHolidays 获取节假日并缓存 +func (t *tianXingApi) GetHolidays(year string) (Response, error) { + k := fmt.Sprintf("thridParty:holidays:year_%s", year) + result, err := dbc.Rds.Get(k).Result() + if err != nil { + if err == redis.Nil { + var resp Response + result, err := holidays.HolidaysApi.GetHolidays(year) + if err != nil { + return Response{}, err + } + if err := json.Unmarshal([]byte(result), &resp); err != nil { + return Response{}, err + } + if resp.Code != 200 { + return Response{}, errors.New(resp.Msg) + } + dbc.Rds.Set(k, resp.NewsList, time.Hour*24) + return resp, nil + } else { + return Response{}, err + } + } else { + var resp Response + if err := json.Unmarshal([]byte(result), &resp); err != nil { + return Response{}, err + } + return resp, nil + } +}