package controllers
|
|
import (
|
"car-service/extend/code"
|
"car-service/models"
|
"encoding/json"
|
"fmt"
|
"github.com/astaxie/beego"
|
"net/http"
|
"strings"
|
"time"
|
)
|
|
type RestrictionController struct {
|
beego.Controller
|
}
|
|
// @Title 查询限行尾号
|
// @Description 查询限行尾号
|
// @Success 200 {object} controllers.RestrictionResult
|
// @Failure 403 {string} json ""
|
// @router /restriction [get]
|
func (c *RestrictionController) Restriction() {
|
resp := code.Code{}
|
var restric models.Restriction
|
err := restric.GetOne()
|
|
if err == nil {
|
resp.Success= true
|
resp.Status= http.StatusOK
|
now := time.Now()
|
nowDate := now.Format("2006-01-02")
|
week := now.Weekday()
|
result := RestrictionResult{}
|
result.CityName = "北京"
|
result.Date = nowDate
|
result.Week = getWeek(week)
|
//周六周日,以及法定节假日不限行
|
if week == time.Sunday || week == time.Saturday || isHoliday(nowDate, restric.Holidays) {
|
result.IsXianXing = 0
|
result.XxWeiHao = []int{}
|
} else {
|
result.IsXianXing = 1
|
//获取限行尾号
|
result.XxWeiHao = getXianxingWeiHao(now, nowDate, restric.Setting)
|
}
|
resp.Data= result
|
} else {
|
resp.Success= false
|
resp.Status= http.StatusBadRequest
|
resp.Data= "数据请求失败,请稍后重试"
|
}
|
c.Data["json"] = resp
|
c.ServeJSON()
|
}
|
|
func getXianxingWeiHao(nowTime time.Time, nowDate string, setting string) []int {
|
var set []models.SetWeiHao
|
err := json.Unmarshal([]byte(setting), &set)
|
if err != nil {
|
fmt.Println("unmarshal xianxing set err:", err)
|
return []int{}
|
} else {
|
list := make([]int, 0)
|
for _,d := range set {
|
if isBetween(d.StartTime, d.EndTime, nowDate, nowTime) {
|
for _,xx := range d.XianXing {
|
if xx.Day == int(nowTime.Weekday()) {
|
list = xx.WeiHao
|
break
|
}
|
}
|
break
|
}
|
}
|
return list
|
}
|
}
|
|
func isBetween(st string, et string, nowDate string, nowTime time.Time) bool {
|
if st == nowDate || et == nowDate {
|
return true
|
} else {
|
st, e1 := time.Parse("2006-01-02", st)
|
et, e2 := time.Parse("2006-01-02", et)
|
if e1 == nil && e2 == nil && st.Before(nowTime) && et.After(nowTime) {
|
return true
|
}
|
return false
|
}
|
}
|
|
func getWeek(week time.Weekday) string {
|
s := ""
|
switch week {
|
case time.Sunday:
|
s = "星期日"
|
case time.Monday:
|
s = "星期一"
|
case time.Tuesday:
|
s = "星期二"
|
case time.Wednesday:
|
s = "星期三"
|
case time.Thursday:
|
s = "星期四"
|
case time.Friday:
|
s = "星期五"
|
case time.Saturday:
|
s = "星期六"
|
default:
|
s = ""
|
}
|
return s
|
}
|
|
//判断是否是节假日
|
func isHoliday(nowDate string, holidays string) bool {
|
arr := strings.Split(holidays, ",")
|
for _,s := range arr {
|
if s == nowDate {
|
return true
|
}
|
}
|
return false
|
}
|
|
type RestrictionResult struct {
|
Date string `json:"date"`
|
Week string `json:"week"`
|
CityName string `json:"cityName"`
|
IsXianXing int `json:"isxianxing"`
|
XxWeiHao []int `json:"xxWeiHao"`
|
}
|
|
//type JuHeResult struct {
|
// Reason string `json:"reason"`
|
// Result CityRestriction `json:"result"`
|
// ErrorCode int `json:"error_code"`
|
//}
|
//
|
//type CityRestriction struct {
|
// Date string `json:"date"`
|
// Week string `json:"week"`
|
// City string `json:"city"`
|
// CityName string `json:"cityname"`
|
// Des []interface{} `json:"des"`
|
// Fine string `json:"fine"`
|
// Remarks string `json:"remarks"`
|
// IsXianXing int `json:"isxianxing"`
|
// XXWeiHao []int `json:"xxweihao"`
|
// Holiday string `json:"holiday"`
|
//}
|
|
//func getRestrictionInfo() {
|
// juHeAppKey := beego.AppConfig.String("juheweihaokey")
|
// url := "http://v.juhe.cn/xianxing/index?key="+ juHeAppKey +"&city=beijing&type=1"
|
// b, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, nil, nil, nil)
|
// if err != nil {
|
// fmt.Println("err:", err)
|
// return
|
// }
|
// var result JuHeResult
|
// err = json.Unmarshal(b, &result)
|
// if err != nil {
|
// fmt.Println("unmarshal err:", err)
|
// return
|
// }
|
// if result.ErrorCode == 0 {
|
// todayRes = &RestrictionResult{
|
// Date: result.Result.Date,
|
// Week: result.Result.Week,
|
// CityName: result.Result.CityName,
|
// IsXianXing: result.Result.IsXianXing,
|
// XxWeiHao: result.Result.XXWeiHao,
|
// }
|
// rc := models.Restriction{
|
// Date: result.Result.Date,
|
// Week: result.Result.Week,
|
// CityName: result.Result.CityName,
|
// IsXianXing: result.Result.IsXianXing,
|
// }
|
// var arr []string
|
// for _,n := range result.Result.XXWeiHao {
|
// arr=append(arr, strconv.Itoa(n))
|
// }
|
// rc.WeiHao = strings.Join(arr, ",")
|
// rc.Insert()
|
// }
|
//}
|