package controllers import ( "car-service/models" "car-service/vo" "encoding/json" "fmt" "github.com/astaxie/beego" "strconv" "strings" ) type AppController struct { beego.Controller } // @Title 比对版本号,看是否有升级 // @Description 比对版本号,看是否有升级 // @Param curVersion query string true "当前版本号" // @Success 200 {object} models.SysUpgrade // @Failure 403 {string} json "" // @router /version [get] func (c *AppController) Version() { curV := c.GetString("curVersion") platform := c.GetString("platform") fmt.Println("platform:",platform,"curV:", curV) if platform == "" { platform = "android" } pType := -1 //未知的平台 if platform == "android" { pType = models.PlatType_Android } else if platform == "ios" { pType = models.PlatType_Ios } result := vo.Upgrade{} var sv models.SysUpgrade err := sv.GetLatest(pType) if err != nil { result.Msg = []string{} } else { latestV := sv.LatestVersion if shouldVersionBeUpgrade(curV, latestV) { result.IsUpgrade = true result.Url = sv.Url result.LatestVersion = sv.LatestVersion result.Time = sv.Time result.ForceUpgrade = sv.ForceUpgrade var msgArr []string if e1 := json.Unmarshal([]byte(sv.Msg), &msgArr);e1 ==nil { result.Msg = msgArr } else { fmt.Println("unmarshal err:", e1) result.Msg = []string{} } result.Size = sv.Size } else { result.IsUpgrade = false result.Msg = []string{} } } c.Data["json"] = result c.ServeJSON() } func shouldVersionBeUpgrade(curVersion, latestVersion string) bool { if curVersion == "" { return true } if latestVersion == "" { return false } curIVArr := strings.Split(curVersion, ".") dstIVArr := strings.Split(latestVersion, ".") if len(curIVArr) !=3 || len(dstIVArr) != 3{ fmt.Println("version arr !=3") return false } cH,cEH := strconv.Atoi(curIVArr[0]) cM,cEM := strconv.Atoi(curIVArr[1]) cL,cEL := strconv.Atoi(curIVArr[2]) dH,dEH := strconv.Atoi(dstIVArr[0]) dM,dEM := strconv.Atoi(dstIVArr[1]) dL,dEL := strconv.Atoi(dstIVArr[2]) if cEH !=nil || cEM != nil || cEL != nil || dEH != nil ||dEM !=nil || dEL !=nil { fmt.Println("Atoi err") return false } if cH > dH { return false } else if cH == dH { if cM > dM { return false } else if cM == dM { if cL > dL { return false } else if cL == dL { return false } else { return true } } else { return true } } else { return true } }