// version package admin import ( . "jy/mongodbutil" "jy/util" "log" "net/http" qu "qfw/util" "strings" "time" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" ) func init() { Admin.GET("/version", func(c *gin.Context) { c.HTML( http.StatusOK, "version.html", gin.H{}, ) }) Admin.POST("/version/data", func(c *gin.Context) { data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1) c.JSON(200, gin.H{"data": data}) }) Admin.POST("/version/save", func(c *gin.Context) { version, _ := c.GetPostForm("version") tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`"}`) if len(*tmp) > 0 { c.JSON(200, gin.H{"rep": false}) } else { s_pversionid, _ := c.GetPostForm("s_pversionid") data := GetPostForm(c) data["l_createtime"] = time.Now().Unix() s_username := sessions.Default(c).Get("username").(string) data["s_username"] = s_username data["delete"] = false Mgo.Save("version", data) if s_pversionid != "" { copyComRules(version, s_pversionid, s_username) } c.JSON(200, gin.H{"rep": true}) } }) Admin.POST("/version/use", func(c *gin.Context) { _id, _ := c.GetPostForm("_id") isuse, _ := c.GetPostForm("isuse") if isuse == "1" { //启用确保只有一个版本 l, _ := Mgo.Find("version", `{"isuse":"1"}`, nil, nil, false, -1, -1) if len(*l) > 0 { c.JSON(200, gin.H{"rep": false}) return } } b := Mgo.UpdateById("version", _id, `{"$set":{"isuse":"`+isuse+`"}}`) c.JSON(200, gin.H{"rep": b}) }) Admin.POST("/version/del", func(c *gin.Context) { _id, _ := c.GetPostForm("_id") b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`) //b := Mgo.Del("version", `{"_id":"`+_id+`"}`) c.JSON(200, gin.H{"rep": b}) }) Admin.GET("/version/info", func(c *gin.Context) { vid := c.Query("vid") v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1) c.HTML( http.StatusOK, "versioninfo.html", gin.H{"vid": vid, "versions": v}, ) }) Admin.POST("/version/infodata", func(c *gin.Context) { vid, _ := c.GetPostForm("vid") list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1) c.JSON(200, gin.H{"data": list, "vid": vid}) }) Admin.POST("/version/infosave", func(c *gin.Context) { s_field, _ := c.GetPostForm("s_field") vid, _ := c.GetPostForm("vid") data := GetPostForm(c) data["l_createtime"] = time.Now().Unix() data["s_username"] = sessions.Default(c).Get("username") data["l_lasttime"] = time.Now().Unix() data["delete"] = false tmp, _ := Mgo.FindOne("versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`"}`) if len(*tmp) > 0 { c.JSON(200, gin.H{"rep": false}) } else { pid := Mgo.Save("versioninfo", data) fromvid, _ := data["s_pversionid"].(string) if fromvid != "" { copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string)) } c.JSON(200, gin.H{"rep": true}) } }) Admin.POST("/version/infouse", func(c *gin.Context) { _id, _ := c.GetPostForm("_id") isuse, _ := c.GetPostForm("isuse") b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`) c.JSON(200, gin.H{"rep": b}) }) Admin.POST("/version/infodel", func(c *gin.Context) { _id, _ := c.GetPostForm("_id") b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`) //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`) c.JSON(200, gin.H{"rep": b}) }) } //克隆版本通用属性 func copyComRules(version, pvid, s_username string) { tmp, _ := Mgo.FindById("version", pvid, nil) oldversion := (*tmp)["version"].(string) //克隆前置规则 plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *plist { delete(v, "_id") v["s_version"] = version v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string))) v["s_username"] = s_username v["l_createtime"] = time.Now().Unix() v["l_lasttime"] = time.Now().Unix() Mgo.Save("rule_pre", v) } //克隆后置规则 blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *blist { delete(v, "_id") v["s_version"] = version v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string))) v["s_username"] = s_username v["l_createtime"] = time.Now().Unix() v["l_lasttime"] = time.Now().Unix() Mgo.Save("rule_back", v) } //克隆tag tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *tlist { oldId := qu.BsonIdToSId(v["_id"]) delete(v, "_id") v["s_version"] = version v["s_creater"] = s_username v["l_intime"] = time.Now().Unix() newId := Mgo.Save("tag", v) //克隆父标签 td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1) for _, v2 := range *td { delete(v2, "_id") v2["s_version"] = version v2["s_creater"] = s_username v2["l_intime"] = time.Now().Unix() v2["s_parentid"] = newId Mgo.Save("tagdetailinfo", v2) //克隆详细标签 } } //克隆函数 clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *clist { delete(v, "_id") v["s_version"] = version v["s_creater"] = s_username v["l_intime"] = time.Now().Unix() Mgo.Save("cleanup", v) } } //克隆版本Field func copyFieldRules(vid, pid, s_field, oldvid, s_username string) { tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`) oldpid := qu.BsonIdToSId((*tmp)["_id"]) log.Println(s_field, oldvid, oldpid, s_username) //克隆逻辑列表 logic, _ := Mgo.FindOne("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`) oldsid := qu.BsonIdToSId((*logic)["_id"]) delete(*logic, "_id") (*logic)["vid"] = vid (*logic)["pid"] = pid (*logic)["l_createtime"] = time.Now().Unix() (*logic)["l_lasttime"] = time.Now().Unix() (*logic)["s_username"] = s_username sid := Mgo.Save("rule_logic", logic) //克隆前置规则 plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *plist { delete(v, "_id") v["vid"] = vid v["pid"] = pid v["sid"] = sid v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string))) v["s_username"] = s_username v["l_createtime"] = time.Now().Unix() v["l_lasttime"] = time.Now().Unix() Mgo.Save("rule_logicpre", v) } //克隆抽取规则 elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *elist { delete(v, "_id") v["vid"] = vid v["pid"] = pid v["sid"] = sid v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string))) v["s_username"] = s_username v["l_createtime"] = time.Now().Unix() v["l_lasttime"] = time.Now().Unix() Mgo.Save("rule_logicore", v) } //克隆过滤规则 blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1) for _, v := range *blist { delete(v, "_id") v["vid"] = vid v["pid"] = pid v["sid"] = sid v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string))) v["s_username"] = s_username v["l_createtime"] = time.Now().Unix() v["l_lasttime"] = time.Now().Unix() Mgo.Save("rule_logicback", v) } } //获取代码 func getCode(code string) string { tmps := strings.Split(code, "_") tmp := tmps[:len(tmps)-1] return strings.Join(tmp, "_") }