version.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. // version
  2. package admin
  3. import (
  4. . "jy/mongodbutil"
  5. "jy/util"
  6. "net/http"
  7. qu "qfw/util"
  8. "strings"
  9. "time"
  10. "github.com/gin-contrib/sessions"
  11. "github.com/gin-gonic/gin"
  12. )
  13. func init() {
  14. Admin.GET("/version", func(c *gin.Context) {
  15. c.HTML(
  16. http.StatusOK, "version.html",
  17. gin.H{},
  18. )
  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. for _, v := range *list {
  50. delete(v, "_id")
  51. v["l_createtime"] = time.Now().Unix()
  52. v["s_username"] = sessions.Default(c).Get("username")
  53. v["l_lasttime"] = time.Now().Unix()
  54. v["vid"] = vid
  55. v["delete"] = false
  56. pid := Mgo.Save("versioninfo", v)
  57. s_field := qu.ObjToString(v["s_field"])
  58. //克隆属性配置
  59. copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
  60. }
  61. //克隆分包属性
  62. list2, _ := Mgo.Find("pkg_info", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
  63. for _, v := range *list2 {
  64. delete(v, "_id")
  65. v["l_createtime"] = time.Now().Unix()
  66. v["s_username"] = sessions.Default(c).Get("username")
  67. v["l_lasttime"] = time.Now().Unix()
  68. v["vid"] = vid
  69. v["delete"] = false
  70. pid := Mgo.Save("pkg_info", v)
  71. s_field := qu.ObjToString(v["s_field"])
  72. //克隆属性配置
  73. copyPkgRules(vid, pid, s_field, s_pversionid, s_username)
  74. }
  75. }
  76. c.JSON(200, gin.H{"rep": true})
  77. }
  78. }
  79. })
  80. Admin.POST("/version/use", func(c *gin.Context) {
  81. _id, _ := c.GetPostForm("_id")
  82. isuse, _ := c.GetPostForm("isuse")
  83. if isuse == "true" { //启用确保只有一个版本
  84. l, _ := Mgo.Find("version", `{"isuse":true}`, nil, nil, false, -1, -1)
  85. if len(*l) > 0 {
  86. c.JSON(200, gin.H{"rep": false})
  87. return
  88. }
  89. }
  90. bisuse := false
  91. if isuse == "true" {
  92. bisuse = true
  93. }
  94. set := map[string]interface{}{
  95. "$set": map[string]interface{}{
  96. "isuse": bisuse,
  97. },
  98. }
  99. b := Mgo.UpdateById("version", _id, set)
  100. c.JSON(200, gin.H{"rep": b})
  101. })
  102. Admin.POST("/version/del", func(c *gin.Context) { //删除版本
  103. _id, _ := c.GetPostForm("_id")
  104. s_version, _ := c.GetPostForm("version")
  105. b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
  106. //b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
  107. //级联删除
  108. //刪除属性配置
  109. //删除分包配置
  110. //删除逻辑
  111. //删除属性配置中的前置规则
  112. //删除属性配置中的抽取规则
  113. //删除属性配置中的后置规则
  114. //刪除属性配置
  115. go DelVersionInfo(_id)
  116. //删除分包配置
  117. go DelPkgInfo(_id)
  118. //删除版本的通用前置规则
  119. go DelRulePre(s_version)
  120. //删除版本的通用后置规则
  121. go DelRuleBack(s_version)
  122. //删除标签库
  123. go DelTag(s_version)
  124. //删除版本的通用前置规则
  125. go DelCleanUp(s_version)
  126. c.JSON(200, gin.H{"rep": b})
  127. })
  128. Admin.GET("/version/info", func(c *gin.Context) {
  129. vid := c.Query("vid")
  130. v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  131. c.HTML(
  132. http.StatusOK, "versioninfo.html",
  133. gin.H{"vid": vid, "versions": v},
  134. )
  135. })
  136. Admin.POST("/version/infodata", func(c *gin.Context) {
  137. vid, _ := c.GetPostForm("vid")
  138. list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  139. c.JSON(200, gin.H{"data": list, "vid": vid})
  140. })
  141. Admin.POST("/version/infosave", func(c *gin.Context) {
  142. _id, _ := c.GetPostForm("_id")
  143. data := GetPostForm(c)
  144. if _id != "" {
  145. Mgo.UpdateById("versioninfo", _id, map[string]interface{}{"$set": data})
  146. c.JSON(200, gin.H{"rep": true})
  147. } else {
  148. s_field, _ := c.GetPostForm("s_field")
  149. vid, _ := c.GetPostForm("vid")
  150. tmp, _ := Mgo.FindOne("versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  151. if len(*tmp) > 0 {
  152. c.JSON(200, gin.H{"rep": false})
  153. } else {
  154. data["l_createtime"] = time.Now().Unix()
  155. data["s_username"] = sessions.Default(c).Get("username")
  156. data["l_lasttime"] = time.Now().Unix()
  157. data["delete"] = false
  158. pid := Mgo.Save("versioninfo", data)
  159. fromvid, _ := data["s_pversionid"].(string)
  160. if fromvid != "" {
  161. copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  162. }
  163. c.JSON(200, gin.H{"rep": true})
  164. }
  165. }
  166. })
  167. Admin.POST("/version/infouse", func(c *gin.Context) {
  168. _id, _ := c.GetPostForm("_id")
  169. isuse, _ := c.GetPostForm("isuse")
  170. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
  171. c.JSON(200, gin.H{"rep": b})
  172. })
  173. Admin.POST("/version/infodel", func(c *gin.Context) {
  174. _id, _ := c.GetPostForm("_id")
  175. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
  176. v, _ := Mgo.FindById("versioninfo", _id, `{"vid":1}`)
  177. go DelLogic(qu.ObjToString((*v)["vid"]), _id)
  178. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  179. c.JSON(200, gin.H{"rep": b})
  180. })
  181. Admin.GET("/version/pkginfo", func(c *gin.Context) {
  182. vid := c.Query("vid")
  183. c.HTML(
  184. http.StatusOK, "pkg_info.html",
  185. gin.H{"vid": vid},
  186. )
  187. })
  188. Admin.POST("/version/pkginfodata", func(c *gin.Context) {
  189. vid, _ := c.GetPostForm("vid")
  190. list, _ := Mgo.Find("pkg_info", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  191. c.JSON(200, gin.H{"data": list, "vid": vid})
  192. })
  193. Admin.POST("/version/pkginfosave", func(c *gin.Context) {
  194. _id, _ := c.GetPostForm("_id")
  195. data := GetPostForm(c)
  196. if _id != "" {
  197. Mgo.UpdateById("pkg_info", _id, map[string]interface{}{"$set": data})
  198. c.JSON(200, gin.H{"rep": true})
  199. } else {
  200. s_field, _ := c.GetPostForm("s_field")
  201. vid, _ := c.GetPostForm("vid")
  202. tmp, _ := Mgo.FindOne("pkg_info", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  203. if len(*tmp) > 0 {
  204. c.JSON(200, gin.H{"rep": false})
  205. } else {
  206. data["l_createtime"] = time.Now().Unix()
  207. data["s_username"] = sessions.Default(c).Get("username")
  208. data["l_lasttime"] = time.Now().Unix()
  209. data["delete"] = false
  210. pid := Mgo.Save("pkg_info", data)
  211. fromvid, _ := data["s_pversionid"].(string)
  212. if fromvid != "" {
  213. //克隆分包属性
  214. copyPkgRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  215. }
  216. c.JSON(200, gin.H{"rep": true})
  217. }
  218. }
  219. })
  220. Admin.POST("/version/pkginfouse", func(c *gin.Context) {
  221. _id, _ := c.GetPostForm("_id")
  222. isuse, _ := c.GetPostForm("isuse")
  223. b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"isuse":`+isuse+`}}`)
  224. c.JSON(200, gin.H{"rep": b})
  225. })
  226. Admin.POST("/version/pkginfodel", func(c *gin.Context) {
  227. _id, _ := c.GetPostForm("_id")
  228. b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"delete":true}}`)
  229. v, _ := Mgo.FindById("pkg_info", _id, `{"vid":1}`)
  230. go DelPkgLogic(qu.ObjToString((*v)["vid"]), _id)
  231. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  232. c.JSON(200, gin.H{"rep": b})
  233. })
  234. }
  235. //克隆版本通用属性
  236. func copyComRules(version, pvid, s_username string) {
  237. tmp, _ := Mgo.FindById("version", pvid, nil)
  238. oldversion := (*tmp)["version"].(string)
  239. //克隆前置规则
  240. plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  241. for _, v := range *plist {
  242. delete(v, "_id")
  243. v["s_version"] = version
  244. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  245. v["s_username"] = s_username
  246. v["l_createtime"] = time.Now().Unix()
  247. v["l_lasttime"] = time.Now().Unix()
  248. Mgo.Save("rule_pre", v)
  249. }
  250. //克隆后置规则
  251. blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  252. for _, v := range *blist {
  253. delete(v, "_id")
  254. v["s_version"] = version
  255. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  256. v["s_username"] = s_username
  257. v["l_createtime"] = time.Now().Unix()
  258. v["l_lasttime"] = time.Now().Unix()
  259. Mgo.Save("rule_back", v)
  260. }
  261. //克隆tag
  262. tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  263. for _, v := range *tlist {
  264. oldId := qu.BsonIdToSId(v["_id"])
  265. delete(v, "_id")
  266. v["s_version"] = version
  267. v["s_creater"] = s_username
  268. v["l_intime"] = time.Now().Unix()
  269. newId := Mgo.Save("tag", v) //克隆父标签
  270. td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
  271. for _, v2 := range *td {
  272. delete(v2, "_id")
  273. v2["s_version"] = version
  274. v2["s_creater"] = s_username
  275. v2["l_intime"] = time.Now().Unix()
  276. v2["s_parentid"] = newId
  277. Mgo.Save("tagdetailinfo", v2) //克隆详细标签
  278. }
  279. }
  280. //克隆函数
  281. clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  282. for _, v := range *clist {
  283. delete(v, "_id")
  284. v["s_version"] = version
  285. v["s_creater"] = s_username
  286. v["l_intime"] = time.Now().Unix()
  287. Mgo.Save("cleanup", v)
  288. }
  289. }
  290. func copyPkgRules(vid, pid, s_field, oldvid, s_username string) {
  291. tmp, _ := Mgo.FindOne("pkg_info", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  292. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  293. //克隆逻辑列表
  294. logicList, _ := Mgo.Find("pkg_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  295. for _, logic := range *logicList {
  296. if len(logic) > 0 {
  297. oldsid := qu.BsonIdToSId(logic["_id"])
  298. delete(logic, "_id")
  299. logic["vid"] = vid
  300. logic["pid"] = pid
  301. logic["l_createtime"] = time.Now().Unix()
  302. logic["l_lasttime"] = time.Now().Unix()
  303. logic["s_username"] = s_username
  304. sid := Mgo.Save("pkg_logic", logic)
  305. //克隆过滤规则
  306. blist, _ := Mgo.Find("pkg_logicback", `{"sid":"`+oldsid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  307. for _, v := range *blist {
  308. delete(v, "_id")
  309. v["vid"] = vid
  310. v["pid"] = pid
  311. v["sid"] = sid
  312. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  313. v["s_username"] = s_username
  314. v["l_createtime"] = time.Now().Unix()
  315. v["l_lasttime"] = time.Now().Unix()
  316. Mgo.Save("pkg_logicback", v)
  317. }
  318. }
  319. }
  320. }
  321. //克隆版本Field
  322. func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
  323. tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  324. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  325. //克隆逻辑列表
  326. logicList, _ := Mgo.Find("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  327. for _, logic := range *logicList {
  328. if len(logic) > 0 {
  329. oldsid := qu.BsonIdToSId(logic["_id"])
  330. delete(logic, "_id")
  331. logic["vid"] = vid
  332. logic["pid"] = pid
  333. logic["l_createtime"] = time.Now().Unix()
  334. logic["l_lasttime"] = time.Now().Unix()
  335. logic["s_username"] = s_username
  336. sid := Mgo.Save("rule_logic", logic)
  337. //克隆前置规则
  338. plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  339. for _, v := range *plist {
  340. delete(v, "_id")
  341. v["vid"] = vid
  342. v["pid"] = pid
  343. v["sid"] = sid
  344. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  345. v["s_username"] = s_username
  346. v["l_createtime"] = time.Now().Unix()
  347. v["l_lasttime"] = time.Now().Unix()
  348. Mgo.Save("rule_logicpre", v)
  349. }
  350. //克隆抽取规则
  351. elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  352. for _, v := range *elist {
  353. delete(v, "_id")
  354. v["vid"] = vid
  355. v["pid"] = pid
  356. v["sid"] = sid
  357. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  358. v["s_username"] = s_username
  359. v["l_createtime"] = time.Now().Unix()
  360. v["l_lasttime"] = time.Now().Unix()
  361. Mgo.Save("rule_logicore", v)
  362. }
  363. //克隆过滤规则
  364. blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  365. for _, v := range *blist {
  366. delete(v, "_id")
  367. v["vid"] = vid
  368. v["pid"] = pid
  369. v["sid"] = sid
  370. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  371. v["s_username"] = s_username
  372. v["l_createtime"] = time.Now().Unix()
  373. v["l_lasttime"] = time.Now().Unix()
  374. Mgo.Save("rule_logicback", v)
  375. }
  376. }
  377. }
  378. }
  379. //克隆清理版本Field
  380. func copyClearRuleLogic(vid, pid, s_field, oldvid, s_username string) {
  381. tmp, _ := Mgo.FindOne("clearversioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  382. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  383. elist, _ := Mgo.Find("clearulelogic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, nil, nil, false, -1, -1)
  384. for _, v := range *elist {
  385. delete(v, "_id")
  386. v["vid"] = vid
  387. v["pid"] = pid
  388. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  389. v["s_username"] = s_username
  390. v["l_createtime"] = time.Now().Unix()
  391. v["l_lasttime"] = time.Now().Unix()
  392. Mgo.Save("clearulelogic", v)
  393. }
  394. }
  395. //获取代码
  396. func getCode(code string) string {
  397. tmps := strings.Split(code, "_")
  398. tmp := tmps[:len(tmps)-1]
  399. return strings.Join(tmp, "_")
  400. }