From bae4af47f77a195a12a0437584d667465e826e12 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期一, 17 八月 2020 16:09:28 +0800
Subject: [PATCH] add log

---
 controllers/restriction.go |  204 +++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 149 insertions(+), 55 deletions(-)

diff --git a/controllers/restriction.go b/controllers/restriction.go
index 8ce48ce..6df5716 100644
--- a/controllers/restriction.go
+++ b/controllers/restriction.go
@@ -2,11 +2,13 @@
 
 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"
+	"strings"
+	"time"
 )
 
 type RestrictionController struct {
@@ -17,79 +19,171 @@
 // @Description 鏌ヨ闄愯灏惧彿
 // @Success 200 {object} controllers.RestrictionResult
 // @Failure 403 {string} json ""
-// @router /spaceNo [get]
+// @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
-		resp.Data= nil
+		resp.Data= "鏁版嵁璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯"
 	}
 	c.Data["json"] = resp
 	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()
-	//姣忓皬鏃剁洃娴嬩竴娆℃槸鍚﹁繃鏈�
-	c.AddFunc("0 0 * * * ?", 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("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 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 := ""
-	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 {
-		return
-	}
-	var result JuHeResult
-	err = json.Unmarshal(b, &result)
-	if err != nil {
-		return
-	}
-	if result.ErrorCode == 0 {
-		todayRes = &RestrictionResult{
-			Date: result.Result.Date,
-			Week: result.Result.Week,
-			CityName: result.Result.CityName,
-			XxWeiHao: result.Result.XXWeiHao,
-		}
-	}
-}
-
+//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()
+//	}
+//}
\ No newline at end of file

--
Gitblit v1.8.0