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() // } //}