| | |
| | | |
| | | import ( |
| | | "car-service/extend/code" |
| | | "car-service/extend/util" |
| | | "car-service/models" |
| | | "encoding/json" |
| | | "fmt" |
| | | "github.com/astaxie/beego" |
| | | "net/http" |
| | | "github.com/robfig/cron" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | ) |
| | | |
| | | type RestrictionController struct { |
| | | beego.Controller |
| | | } |
| | | |
| | | func InitRestriction() { |
| | | date := time.Now().Format("2006-01-02") |
| | | var r models.Restriction |
| | | err := r.SelectByDate(date) |
| | | if err == nil { |
| | | //今日已获取过限行信息 |
| | | todayRes = &RestrictionResult{ |
| | | Date: date, |
| | | Week: r.Week, |
| | | CityName: r.CityName, |
| | | IsXianXing: r.IsXianXing, |
| | | } |
| | | arr := strings.Split(r.WeiHao, ",") |
| | | if len(arr) >0 { |
| | | for _,s := range arr { |
| | | n, e := strconv.Atoi(s) |
| | | if e ==nil { |
| | | todayRes.XxWeiHao = append(todayRes.XxWeiHao,n) |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | getRestrictionInfo() |
| | | } |
| | | } |
| | | |
| | | // @Title 查询限行尾号 |
| | |
| | | // @router /restriction [get] |
| | | func (c *RestrictionController) Restriction() { |
| | | resp := code.Code{} |
| | | if todayRes !=nil { |
| | | var restric models.Restriction |
| | | err := restric.GetOne() |
| | | |
| | | if err == nil { |
| | | resp.Success= true |
| | | resp.Status= http.StatusOK |
| | | resp.Data= *todayRes |
| | | 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 |
| | |
| | | c.ServeJSON() |
| | | } |
| | | |
| | | var todayRes *RestrictionResult |
| | | 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 Schedule() { |
| | | c := cron.New() |
| | | //每天凌晨5点执行一次,获取当日数据 |
| | | c.AddFunc("0 0 1 * * ?", func() { |
| | | todayRes = nil |
| | | getRestrictionInfo() |
| | | }) |
| | | c.Start() |
| | | func isBetween(st string, et string, nowDate string, nowTime time.Time) bool { |
| | | if st == nowDate || et == nowDate { |
| | | return true |
| | | } else { |
| | | st, e1 := time.Parse(st, "2006-01-02") |
| | | et, e2 := time.Parse(et, "2006-01-02") |
| | | 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 { |
| | |
| | | XxWeiHao []int `json:"xxWeiHao"` |
| | | } |
| | | |
| | | type JuHeResult struct { |
| | | Reason string `json:"reason"` |
| | | Result CityRestriction `json:"result"` |
| | | ErrorCode int `json:"error_code"` |
| | | } |
| | | //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"` |
| | | //} |
| | | |
| | | 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() |
| | | } |
| | | } |
| | | |
| | | //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() |
| | | // } |
| | | //} |