|
@@ -1,15 +1,20 @@
|
|
package fms
|
|
package fms
|
|
|
|
|
|
-import "time"
|
|
|
|
-
|
|
|
|
-// TODO:汇率
|
|
|
|
|
|
+import (
|
|
|
|
+ "encoding/json"
|
|
|
|
+ "fmt"
|
|
|
|
+ "hongze/fms_api/services/alarm_msg"
|
|
|
|
+ "hongze/fms_api/utils"
|
|
|
|
+ "strconv"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
|
|
const CurrencyRateApiAppCode = "ABC123"
|
|
const CurrencyRateApiAppCode = "ABC123"
|
|
|
|
|
|
type CurrencyRateApiResp struct {
|
|
type CurrencyRateApiResp struct {
|
|
- Status int `json:"status" description:"状态码"`
|
|
|
|
- Msg string `json:"msg" description:"响应信息"`
|
|
|
|
- Result []CurrencyRateApiRespResult `json:"result" description:"响应数据"`
|
|
|
|
|
|
+ Status string `json:"status" description:"状态码"`
|
|
|
|
+ Msg string `json:"msg" description:"响应信息"`
|
|
|
|
+ Result CurrencyRateApiRespResult `json:"result" description:"响应数据"`
|
|
}
|
|
}
|
|
|
|
|
|
type CurrencyRateApiRespResult struct {
|
|
type CurrencyRateApiRespResult struct {
|
|
@@ -19,16 +24,60 @@ type CurrencyRateApiRespResult struct {
|
|
}
|
|
}
|
|
|
|
|
|
type CurrencyRateApiRespResultList struct {
|
|
type CurrencyRateApiRespResultList struct {
|
|
- Name string `json:"name"`
|
|
|
|
- Rate string `json:"rate"`
|
|
|
|
- UpdateTime time.Time `json:"updatetime"`
|
|
|
|
|
|
+ Name string `json:"name"`
|
|
|
|
+ Rate string `json:"rate"`
|
|
|
|
+ UpdateTime string `json:"updatetime"`
|
|
}
|
|
}
|
|
|
|
|
|
-func CurlRateApi() {
|
|
|
|
-
|
|
|
|
|
|
+type CurrencyRateItem struct {
|
|
|
|
+ Name string `json:"name"`
|
|
|
|
+ Code string `json:"code"`
|
|
|
|
+ Rate float64 `json:"rate"`
|
|
|
|
+ UpdateTime time.Time `json:"update_time"`
|
|
}
|
|
}
|
|
|
|
|
|
-// GetRMBRate 获取人民币汇率
|
|
|
|
-func GetRMBRate() (err error) {
|
|
|
|
|
|
+func CurlRateApi() (resList []*CurrencyRateItem, err error) {
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ go alarm_msg.SendAlarmMsg("请求汇率接口失败, Err: "+err.Error(), 3)
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+ // TODO:请求接口
|
|
|
|
+
|
|
|
|
+ // 汇率结果
|
|
|
|
+ resultJson := `{"status":"0","msg":"ok","result":{"currency":"CNY","name":"人民币","list":{"HKD":{"name":"港币","rate":"1.2198","updatetime":"2015-10-26 16:56:22"},"USD":{"name":"美元","rate":"0.1574","updatetime":"2015-10-26 16:56:22"},"EUR":{"name":"欧元","rate":"0.1426","updatetime":"2015-10-26 16:56:22"}}}}`
|
|
|
|
+ results := new(CurrencyRateApiResp)
|
|
|
|
+ if e := json.Unmarshal([]byte(resultJson), &results); e != nil {
|
|
|
|
+ err = fmt.Errorf("rate api result unmarshal err: %s", results.Msg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if results.Status != "0" {
|
|
|
|
+ err = fmt.Errorf("curl rate api errMsg: %s", results.Msg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ list := results.Result.List
|
|
|
|
+ if list == nil {
|
|
|
|
+ err = fmt.Errorf("rate api list is empty")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ resList = make([]*CurrencyRateItem, 0)
|
|
|
|
+ for k, v := range list {
|
|
|
|
+ item := new(CurrencyRateItem)
|
|
|
|
+ item.Code = k
|
|
|
|
+ item.Name = v.Name
|
|
|
|
+ f, e := strconv.ParseFloat(v.Rate, 64)
|
|
|
|
+ if e != nil {
|
|
|
|
+ err = fmt.Errorf("rate api rate parse err: %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ item.Rate = f
|
|
|
|
+ t, e := time.ParseInLocation(utils.FormatDateTime, v.UpdateTime, time.Local)
|
|
|
|
+ if e != nil {
|
|
|
|
+ err = fmt.Errorf("rate api time parse err: %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ item.UpdateTime = t
|
|
|
|
+ resList = append(resList, item)
|
|
|
|
+ }
|
|
return
|
|
return
|
|
}
|
|
}
|