version.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. _id, _ := c.GetPostForm("_id")
  27. data := GetPostForm(c)
  28. if _id != "" {
  29. Mgo.UpdateById("version", _id, map[string]interface{}{"$set": data})
  30. c.JSON(200, gin.H{"rep": true})
  31. } else {
  32. version, _ := c.GetPostForm("version")
  33. tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`","delete":false}`)
  34. if len(*tmp) > 0 {
  35. c.JSON(200, gin.H{"rep": false})
  36. } else {
  37. s_pversionid, _ := c.GetPostForm("s_pversionid")
  38. iscopyfiled, _ := data["iscopyfiled"].(bool)
  39. data["l_createtime"] = time.Now().Unix()
  40. s_username := sessions.Default(c).Get("username").(string)
  41. data["s_username"] = s_username
  42. data["delete"] = false
  43. vid := Mgo.Save("version", data)
  44. if s_pversionid != "" {
  45. copyComRules(version, s_pversionid, s_username)
  46. }
  47. if iscopyfiled {
  48. list, _ := Mgo.Find("versioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
  49. log.Println(s_pversionid, len(*list))
  50. for _, v := range *list {
  51. delete(v, "_id")
  52. v["l_createtime"] = time.Now().Unix()
  53. v["s_username"] = sessions.Default(c).Get("username")
  54. v["l_lasttime"] = time.Now().Unix()
  55. v["vid"] = vid
  56. v["delete"] = false
  57. pid := Mgo.Save("versioninfo", v)
  58. s_field := qu.ObjToString(v["s_field"])
  59. copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
  60. }
  61. }
  62. c.JSON(200, gin.H{"rep": true})
  63. }
  64. }
  65. })
  66. Admin.POST("/version/use", func(c *gin.Context) {
  67. _id, _ := c.GetPostForm("_id")
  68. isuse, _ := c.GetPostForm("isuse")
  69. if isuse == "true" { //启用确保只有一个版本
  70. l, _ := Mgo.Find("version", `{"isuse":true}`, nil, nil, false, -1, -1)
  71. if len(*l) > 0 {
  72. c.JSON(200, gin.H{"rep": false})
  73. return
  74. }
  75. }
  76. bisuse := false
  77. if isuse == "true" {
  78. bisuse = true
  79. }
  80. set := map[string]interface{}{
  81. "$set": map[string]interface{}{
  82. "isuse": bisuse,
  83. },
  84. }
  85. b := Mgo.UpdateById("version", _id, set)
  86. c.JSON(200, gin.H{"rep": b})
  87. })
  88. Admin.POST("/version/del", func(c *gin.Context) { //删除版本
  89. _id, _ := c.GetPostForm("_id")
  90. s_version, _ := c.GetPostForm("version")
  91. b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
  92. //b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
  93. //级联删除
  94. //刪除属性配置
  95. //删除逻辑
  96. //删除属性配置中的前置规则
  97. //删除属性配置中的抽取规则
  98. //删除属性配置中的后置规则
  99. go DelVersionInfo(_id)
  100. //删除版本的通用前置规则
  101. go DelRulePre(s_version)
  102. //删除版本的通用后置规则
  103. go DelRuleBack(s_version)
  104. //删除标签库
  105. go DelTag(s_version)
  106. //删除版本的通用前置规则
  107. go DelCleanUp(s_version)
  108. c.JSON(200, gin.H{"rep": b})
  109. })
  110. Admin.GET("/version/info", func(c *gin.Context) {
  111. vid := c.Query("vid")
  112. v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  113. c.HTML(
  114. http.StatusOK, "versioninfo.html",
  115. gin.H{"vid": vid, "versions": v},
  116. )
  117. })
  118. Admin.POST("/version/infodata", func(c *gin.Context) {
  119. vid, _ := c.GetPostForm("vid")
  120. list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  121. c.JSON(200, gin.H{"data": list, "vid": vid})
  122. })
  123. Admin.POST("/version/infosave", func(c *gin.Context) {
  124. _id, _ := c.GetPostForm("_id")
  125. data := GetPostForm(c)
  126. if _id != "" {
  127. Mgo.UpdateById("versioninfo", _id, map[string]interface{}{"$set": data})
  128. c.JSON(200, gin.H{"rep": true})
  129. } else {
  130. s_field, _ := c.GetPostForm("s_field")
  131. vid, _ := c.GetPostForm("vid")
  132. tmp, _ := Mgo.FindOne("versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  133. if len(*tmp) > 0 {
  134. c.JSON(200, gin.H{"rep": false})
  135. } else {
  136. data["l_createtime"] = time.Now().Unix()
  137. data["s_username"] = sessions.Default(c).Get("username")
  138. data["l_lasttime"] = time.Now().Unix()
  139. data["delete"] = false
  140. pid := Mgo.Save("versioninfo", data)
  141. fromvid, _ := data["s_pversionid"].(string)
  142. if fromvid != "" {
  143. copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  144. }
  145. c.JSON(200, gin.H{"rep": true})
  146. }
  147. }
  148. })
  149. Admin.POST("/version/infouse", func(c *gin.Context) {
  150. _id, _ := c.GetPostForm("_id")
  151. isuse, _ := c.GetPostForm("isuse")
  152. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
  153. c.JSON(200, gin.H{"rep": b})
  154. })
  155. Admin.POST("/version/infodel", func(c *gin.Context) {
  156. _id, _ := c.GetPostForm("_id")
  157. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
  158. v, _ := Mgo.FindById("versioninfo", _id, `{"vid":1}`)
  159. go DelLogic(qu.ObjToString((*v)["vid"]), _id)
  160. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  161. c.JSON(200, gin.H{"rep": b})
  162. })
  163. Admin.GET("/version/specialainfo", func(c *gin.Context) {
  164. vid := c.Query("vid")
  165. c.HTML(
  166. http.StatusOK, "specialainfo.html",
  167. gin.H{"vid": vid},
  168. )
  169. })
  170. }
  171. //克隆版本通用属性
  172. func copyComRules(version, pvid, s_username string) {
  173. tmp, _ := Mgo.FindById("version", pvid, nil)
  174. oldversion := (*tmp)["version"].(string)
  175. //克隆前置规则
  176. plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  177. for _, v := range *plist {
  178. delete(v, "_id")
  179. v["s_version"] = version
  180. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  181. v["s_username"] = s_username
  182. v["l_createtime"] = time.Now().Unix()
  183. v["l_lasttime"] = time.Now().Unix()
  184. Mgo.Save("rule_pre", v)
  185. }
  186. //克隆后置规则
  187. blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  188. for _, v := range *blist {
  189. delete(v, "_id")
  190. v["s_version"] = version
  191. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  192. v["s_username"] = s_username
  193. v["l_createtime"] = time.Now().Unix()
  194. v["l_lasttime"] = time.Now().Unix()
  195. Mgo.Save("rule_back", v)
  196. }
  197. //克隆tag
  198. tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  199. for _, v := range *tlist {
  200. oldId := qu.BsonIdToSId(v["_id"])
  201. delete(v, "_id")
  202. v["s_version"] = version
  203. v["s_creater"] = s_username
  204. v["l_intime"] = time.Now().Unix()
  205. newId := Mgo.Save("tag", v) //克隆父标签
  206. td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
  207. for _, v2 := range *td {
  208. delete(v2, "_id")
  209. v2["s_version"] = version
  210. v2["s_creater"] = s_username
  211. v2["l_intime"] = time.Now().Unix()
  212. v2["s_parentid"] = newId
  213. Mgo.Save("tagdetailinfo", v2) //克隆详细标签
  214. }
  215. }
  216. //克隆函数
  217. clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  218. for _, v := range *clist {
  219. delete(v, "_id")
  220. v["s_version"] = version
  221. v["s_creater"] = s_username
  222. v["l_intime"] = time.Now().Unix()
  223. Mgo.Save("cleanup", v)
  224. }
  225. }
  226. //克隆版本Field
  227. func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
  228. tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  229. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  230. //克隆逻辑列表
  231. logic, _ := Mgo.FindOne("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`)
  232. if len(*logic) > 0 {
  233. oldsid := qu.BsonIdToSId((*logic)["_id"])
  234. delete(*logic, "_id")
  235. (*logic)["vid"] = vid
  236. (*logic)["pid"] = pid
  237. (*logic)["l_createtime"] = time.Now().Unix()
  238. (*logic)["l_lasttime"] = time.Now().Unix()
  239. (*logic)["s_username"] = s_username
  240. sid := Mgo.Save("rule_logic", logic)
  241. //克隆前置规则
  242. plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  243. for _, v := range *plist {
  244. delete(v, "_id")
  245. v["vid"] = vid
  246. v["pid"] = pid
  247. v["sid"] = sid
  248. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  249. v["s_username"] = s_username
  250. v["l_createtime"] = time.Now().Unix()
  251. v["l_lasttime"] = time.Now().Unix()
  252. Mgo.Save("rule_logicpre", v)
  253. }
  254. //克隆抽取规则
  255. elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  256. for _, v := range *elist {
  257. delete(v, "_id")
  258. v["vid"] = vid
  259. v["pid"] = pid
  260. v["sid"] = sid
  261. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  262. v["s_username"] = s_username
  263. v["l_createtime"] = time.Now().Unix()
  264. v["l_lasttime"] = time.Now().Unix()
  265. Mgo.Save("rule_logicore", v)
  266. }
  267. //克隆过滤规则
  268. blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  269. for _, v := range *blist {
  270. delete(v, "_id")
  271. v["vid"] = vid
  272. v["pid"] = pid
  273. v["sid"] = sid
  274. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  275. v["s_username"] = s_username
  276. v["l_createtime"] = time.Now().Unix()
  277. v["l_lasttime"] = time.Now().Unix()
  278. Mgo.Save("rule_logicback", v)
  279. }
  280. }
  281. }
  282. //获取代码
  283. func getCode(code string) string {
  284. tmps := strings.Split(code, "_")
  285. tmp := tmps[:len(tmps)-1]
  286. return strings.Join(tmp, "_")
  287. }