version.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. // version
  2. package admin
  3. import (
  4. . "jy/mongodbutil"
  5. "jy/util"
  6. "log"
  7. "net/http"
  8. qu "qfw/util"
  9. "strings"
  10. "time"
  11. "github.com/gin-contrib/sessions"
  12. "github.com/gin-gonic/gin"
  13. )
  14. func init() {
  15. Admin.GET("/version", func(c *gin.Context) {
  16. c.HTML(
  17. http.StatusOK, "version.html",
  18. gin.H{},
  19. )
  20. })
  21. Admin.POST("/version/data", func(c *gin.Context) {
  22. data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  23. c.JSON(200, gin.H{"data": data})
  24. })
  25. Admin.POST("/version/save", func(c *gin.Context) {
  26. version, _ := c.GetPostForm("version")
  27. tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`"}`)
  28. if len(*tmp) > 0 {
  29. c.JSON(200, gin.H{"rep": false})
  30. } else {
  31. s_pversionid, _ := c.GetPostForm("s_pversionid")
  32. data := GetPostForm(c)
  33. data["l_createtime"] = time.Now().Unix()
  34. s_username := sessions.Default(c).Get("username").(string)
  35. data["s_username"] = s_username
  36. data["delete"] = false
  37. Mgo.Save("version", data)
  38. if s_pversionid != "" {
  39. copyComRules(version, s_pversionid, s_username)
  40. }
  41. c.JSON(200, gin.H{"rep": true})
  42. }
  43. })
  44. Admin.POST("/version/use", func(c *gin.Context) {
  45. _id, _ := c.GetPostForm("_id")
  46. isuse, _ := c.GetPostForm("isuse")
  47. if isuse == "1" { //启用确保只有一个版本
  48. l, _ := Mgo.Find("version", `{"isuse":"1"}`, nil, nil, false, -1, -1)
  49. if len(*l) > 0 {
  50. c.JSON(200, gin.H{"rep": false})
  51. return
  52. }
  53. }
  54. b := Mgo.UpdateById("version", _id, `{"$set":{"isuse":"`+isuse+`"}}`)
  55. c.JSON(200, gin.H{"rep": b})
  56. })
  57. Admin.POST("/version/del", func(c *gin.Context) {
  58. _id, _ := c.GetPostForm("_id")
  59. b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
  60. //b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
  61. c.JSON(200, gin.H{"rep": b})
  62. })
  63. Admin.GET("/version/info", func(c *gin.Context) {
  64. vid := c.Query("vid")
  65. v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  66. c.HTML(
  67. http.StatusOK, "versioninfo.html",
  68. gin.H{"vid": vid, "versions": v},
  69. )
  70. })
  71. Admin.POST("/version/infodata", func(c *gin.Context) {
  72. vid, _ := c.GetPostForm("vid")
  73. list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  74. c.JSON(200, gin.H{"data": list, "vid": vid})
  75. })
  76. Admin.POST("/version/infosave", func(c *gin.Context) {
  77. s_field, _ := c.GetPostForm("s_field")
  78. vid, _ := c.GetPostForm("vid")
  79. data := GetPostForm(c)
  80. data["l_createtime"] = time.Now().Unix()
  81. data["s_username"] = sessions.Default(c).Get("username")
  82. data["l_lasttime"] = time.Now().Unix()
  83. data["delete"] = false
  84. tmp, _ := Mgo.FindOne("versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`"}`)
  85. if len(*tmp) > 0 {
  86. c.JSON(200, gin.H{"rep": false})
  87. } else {
  88. pid := Mgo.Save("versioninfo", data)
  89. fromvid, _ := data["s_pversionid"].(string)
  90. if fromvid != "" {
  91. copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  92. }
  93. c.JSON(200, gin.H{"rep": true})
  94. }
  95. })
  96. Admin.POST("/version/infouse", func(c *gin.Context) {
  97. _id, _ := c.GetPostForm("_id")
  98. isuse, _ := c.GetPostForm("isuse")
  99. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
  100. c.JSON(200, gin.H{"rep": b})
  101. })
  102. Admin.POST("/version/infodel", func(c *gin.Context) {
  103. _id, _ := c.GetPostForm("_id")
  104. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
  105. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  106. c.JSON(200, gin.H{"rep": b})
  107. })
  108. }
  109. //克隆版本通用属性
  110. func copyComRules(version, pvid, s_username string) {
  111. tmp, _ := Mgo.FindById("version", pvid, nil)
  112. oldversion := (*tmp)["version"].(string)
  113. //克隆前置规则
  114. plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  115. for _, v := range *plist {
  116. delete(v, "_id")
  117. v["s_version"] = version
  118. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  119. v["s_username"] = s_username
  120. v["l_createtime"] = time.Now().Unix()
  121. v["l_lasttime"] = time.Now().Unix()
  122. Mgo.Save("rule_pre", v)
  123. }
  124. //克隆后置规则
  125. blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  126. for _, v := range *blist {
  127. delete(v, "_id")
  128. v["s_version"] = version
  129. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  130. v["s_username"] = s_username
  131. v["l_createtime"] = time.Now().Unix()
  132. v["l_lasttime"] = time.Now().Unix()
  133. Mgo.Save("rule_back", v)
  134. }
  135. //克隆tag
  136. tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  137. for _, v := range *tlist {
  138. oldId := qu.BsonIdToSId(v["_id"])
  139. delete(v, "_id")
  140. v["s_version"] = version
  141. v["s_creater"] = s_username
  142. v["l_intime"] = time.Now().Unix()
  143. newId := Mgo.Save("tag", v) //克隆父标签
  144. td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
  145. for _, v2 := range *td {
  146. delete(v2, "_id")
  147. v2["s_version"] = version
  148. v2["s_creater"] = s_username
  149. v2["l_intime"] = time.Now().Unix()
  150. v2["s_parentid"] = newId
  151. Mgo.Save("tagdetailinfo", v2) //克隆详细标签
  152. }
  153. }
  154. //克隆函数
  155. clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  156. for _, v := range *clist {
  157. delete(v, "_id")
  158. v["s_version"] = version
  159. v["s_creater"] = s_username
  160. v["l_intime"] = time.Now().Unix()
  161. Mgo.Save("cleanup", v)
  162. }
  163. }
  164. //克隆版本Field
  165. func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
  166. tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  167. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  168. log.Println(s_field, oldvid, oldpid, s_username)
  169. //克隆逻辑列表
  170. logic, _ := Mgo.FindOne("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`)
  171. oldsid := qu.BsonIdToSId((*logic)["_id"])
  172. delete(*logic, "_id")
  173. (*logic)["vid"] = vid
  174. (*logic)["pid"] = pid
  175. (*logic)["l_createtime"] = time.Now().Unix()
  176. (*logic)["l_lasttime"] = time.Now().Unix()
  177. (*logic)["s_username"] = s_username
  178. sid := Mgo.Save("rule_logic", logic)
  179. //克隆前置规则
  180. plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  181. for _, v := range *plist {
  182. delete(v, "_id")
  183. v["vid"] = vid
  184. v["pid"] = pid
  185. v["sid"] = sid
  186. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  187. v["s_username"] = s_username
  188. v["l_createtime"] = time.Now().Unix()
  189. v["l_lasttime"] = time.Now().Unix()
  190. Mgo.Save("rule_logicpre", v)
  191. }
  192. //克隆抽取规则
  193. elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  194. for _, v := range *elist {
  195. delete(v, "_id")
  196. v["vid"] = vid
  197. v["pid"] = pid
  198. v["sid"] = sid
  199. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  200. v["s_username"] = s_username
  201. v["l_createtime"] = time.Now().Unix()
  202. v["l_lasttime"] = time.Now().Unix()
  203. Mgo.Save("rule_logicore", v)
  204. }
  205. //克隆过滤规则
  206. blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  207. for _, v := range *blist {
  208. delete(v, "_id")
  209. v["vid"] = vid
  210. v["pid"] = pid
  211. v["sid"] = sid
  212. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  213. v["s_username"] = s_username
  214. v["l_createtime"] = time.Now().Unix()
  215. v["l_lasttime"] = time.Now().Unix()
  216. Mgo.Save("rule_logicback", v)
  217. }
  218. }
  219. //获取代码
  220. func getCode(code string) string {
  221. tmps := strings.Split(code, "_")
  222. tmp := tmps[:len(tmps)-1]
  223. return strings.Join(tmp, "_")
  224. }