liuxiaolong
2020-08-14 c2217c8ff10605844779ec8a8c0a91f608d26155
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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")
    fmt.Println("curV:", curV)
    result := vo.Upgrade{}
    var sv models.SysUpgrade
    err := sv.GetLatest()
    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
    }
}