Merge pull request 'test-pay' (#70) from test-pay into test
Reviewed-on: https://git.oa00.com/recook/backend_v2/pulls/70master
commit
98c9b6a6c2
@ -0,0 +1,32 @@
|
||||
package thirdPartyApi
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"recook/internal/back"
|
||||
"recook/internal/v2/logic/thirdPartyApi"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TianXingApi struct {
|
||||
}
|
||||
|
||||
type argsHolidays struct {
|
||||
Year string `binding:"required"`
|
||||
}
|
||||
|
||||
// GetHolidays 获取节假日并缓存
|
||||
func (t *TianXingApi) GetHolidays(c *gin.Context) {
|
||||
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)
|
||||
}
|
@ -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
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in new issue