version.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  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. "gopkg.in/mgo.v2/bson"
  14. )
  15. func init() {
  16. Admin.GET("/version", func(c *gin.Context) {
  17. c.HTML(
  18. http.StatusOK, "version.html",
  19. gin.H{},
  20. )
  21. })
  22. //任务版本
  23. Admin.POST("/version/data", func(c *gin.Context) {
  24. data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  25. c.JSON(200, gin.H{"data": data})
  26. })
  27. //根据_id查询版本详细信息
  28. Admin.GET("/version/dataById", func(c *gin.Context) {
  29. gid, b := c.GetQuery("_id")
  30. if !b || !bson.IsObjectIdHex(gid) {
  31. c.JSON(400, gin.H{"req": false})
  32. return
  33. }
  34. data, _ := Mgo.FindOne("version", `{"_id":"`+gid+`","delete":false}`)
  35. c.JSON(200, gin.H{"req": true, "data": data})
  36. })
  37. Admin.POST("/version/save", func(c *gin.Context) {
  38. _id, _ := c.GetPostForm("_id")
  39. data := GetPostForm(c)
  40. if data["s_filefileds"] != nil {
  41. data["s_filefileds"] = strings.Split(data["s_filefileds"].(string), ",")
  42. }
  43. if _id != "" {
  44. Mgo.UpdateById("version", _id, map[string]interface{}{"$set": data})
  45. c.JSON(200, gin.H{"rep": true})
  46. } else {
  47. version, _ := c.GetPostForm("version")
  48. tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`","delete":false}`)
  49. if len(*tmp) > 0 {
  50. c.JSON(200, gin.H{"rep": false})
  51. } else {
  52. s_pversionid, _ := c.GetPostForm("s_pversionid")
  53. iscopyfiled, _ := data["iscopyfiled"].(bool)
  54. data["l_createtime"] = time.Now().Unix()
  55. s_username := sessions.Default(c).Get("username").(string)
  56. data["s_username"] = s_username
  57. data["delete"] = false
  58. vid := Mgo.Save("version", data)
  59. if s_pversionid != "" {
  60. copyComRules(version, s_pversionid, s_username)
  61. }
  62. if iscopyfiled {
  63. list, _ := Mgo.Find("versioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
  64. for _, v := range *list {
  65. delete(v, "_id")
  66. v["l_createtime"] = time.Now().Unix()
  67. v["s_username"] = sessions.Default(c).Get("username")
  68. v["l_lasttime"] = time.Now().Unix()
  69. v["vid"] = vid
  70. v["delete"] = false
  71. pid := Mgo.Save("versioninfo", v)
  72. s_field := qu.ObjToString(v["s_field"])
  73. //克隆属性配置
  74. copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
  75. }
  76. //克隆分包属性
  77. list2, _ := Mgo.Find("pkg_info", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
  78. for _, v := range *list2 {
  79. delete(v, "_id")
  80. v["l_createtime"] = time.Now().Unix()
  81. v["s_username"] = sessions.Default(c).Get("username")
  82. v["l_lasttime"] = time.Now().Unix()
  83. v["vid"] = vid
  84. v["delete"] = false
  85. pid := Mgo.Save("pkg_info", v)
  86. s_field := qu.ObjToString(v["s_field"])
  87. //克隆属性配置
  88. copyPkgRules(vid, pid, s_field, s_pversionid, s_username)
  89. }
  90. }
  91. c.JSON(200, gin.H{"rep": true})
  92. }
  93. }
  94. })
  95. Admin.POST("/version/use", func(c *gin.Context) {
  96. _id, _ := c.GetPostForm("_id")
  97. isuse, _ := c.GetPostForm("isuse")
  98. if isuse == "true" { //启用确保只有一个版本
  99. l, _ := Mgo.Find("version", `{"isuse":true,"delete":false}`, nil, nil, false, -1, -1)
  100. if len(*l) > 0 {
  101. c.JSON(200, gin.H{"rep": false})
  102. return
  103. }
  104. }
  105. bisuse := false
  106. if isuse == "true" {
  107. bisuse = true
  108. }
  109. set := map[string]interface{}{
  110. "$set": map[string]interface{}{
  111. "isuse": bisuse,
  112. },
  113. }
  114. b := Mgo.UpdateById("version", _id, set)
  115. c.JSON(200, gin.H{"rep": b})
  116. })
  117. Admin.POST("/version/del", func(c *gin.Context) { //删除版本
  118. _id, _ := c.GetPostForm("_id")
  119. s_version, _ := c.GetPostForm("version")
  120. b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
  121. //b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
  122. //级联删除
  123. //刪除属性配置
  124. //删除分包配置
  125. //删除逻辑
  126. //删除属性配置中的前置规则
  127. //删除属性配置中的抽取规则
  128. //删除属性配置中的后置规则
  129. //刪除属性配置
  130. go DelVersionInfo(_id)
  131. //删除分包配置
  132. go DelPkgInfo(_id)
  133. //删除版本的通用前置规则
  134. go DelRulePre(s_version)
  135. //删除版本的通用后置规则
  136. go DelRuleBack(s_version)
  137. //删除标签库
  138. go DelTag(s_version)
  139. //删除版本的通用前置规则
  140. go DelCleanUp(s_version)
  141. c.JSON(200, gin.H{"rep": b})
  142. })
  143. Admin.GET("/version/info", func(c *gin.Context) {
  144. vid := c.Query("vid")
  145. v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  146. c.HTML(
  147. http.StatusOK, "versioninfo.html",
  148. gin.H{"vid": vid, "versions": v},
  149. )
  150. })
  151. Admin.POST("/version/infodata", func(c *gin.Context) {
  152. vid, _ := c.GetPostForm("vid")
  153. list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  154. c.JSON(200, gin.H{"data": list, "vid": vid})
  155. })
  156. Admin.POST("/version/infosave", func(c *gin.Context) {
  157. _id, _ := c.GetPostForm("_id")
  158. data := GetPostForm(c)
  159. if _id != "" {
  160. Mgo.UpdateById("versioninfo", _id, map[string]interface{}{"$set": data})
  161. c.JSON(200, gin.H{"rep": true})
  162. } else {
  163. s_field, _ := c.GetPostForm("s_field")
  164. vid, _ := c.GetPostForm("vid")
  165. tmp, _ := Mgo.FindOne("versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  166. if len(*tmp) > 0 {
  167. c.JSON(200, gin.H{"rep": false})
  168. } else {
  169. data["l_createtime"] = time.Now().Unix()
  170. data["s_username"] = sessions.Default(c).Get("username")
  171. data["l_lasttime"] = time.Now().Unix()
  172. data["delete"] = false
  173. pid := Mgo.Save("versioninfo", data)
  174. fromvid, _ := data["s_pversionid"].(string)
  175. if fromvid != "" {
  176. copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  177. }
  178. c.JSON(200, gin.H{"rep": true})
  179. }
  180. }
  181. })
  182. Admin.POST("/version/infouse", func(c *gin.Context) {
  183. _id, _ := c.GetPostForm("_id")
  184. isuse, _ := c.GetPostForm("isuse")
  185. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
  186. c.JSON(200, gin.H{"rep": b})
  187. })
  188. Admin.POST("/version/infodel", func(c *gin.Context) {
  189. _id, _ := c.GetPostForm("_id")
  190. b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
  191. v, _ := Mgo.FindById("versioninfo", _id, `{"vid":1}`)
  192. go DelLogic(qu.ObjToString((*v)["vid"]), _id)
  193. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  194. c.JSON(200, gin.H{"rep": b})
  195. })
  196. Admin.GET("/version/pkginfo", func(c *gin.Context) {
  197. vid := c.Query("vid")
  198. c.HTML(
  199. http.StatusOK, "pkg_info.html",
  200. gin.H{"vid": vid},
  201. )
  202. })
  203. Admin.POST("/version/pkginfodata", func(c *gin.Context) {
  204. vid, _ := c.GetPostForm("vid")
  205. list, _ := Mgo.Find("pkg_info", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  206. c.JSON(200, gin.H{"data": list, "vid": vid})
  207. })
  208. Admin.POST("/version/pkginfosave", func(c *gin.Context) {
  209. _id, _ := c.GetPostForm("_id")
  210. data := GetPostForm(c)
  211. if _id != "" {
  212. Mgo.UpdateById("pkg_info", _id, map[string]interface{}{"$set": data})
  213. c.JSON(200, gin.H{"rep": true})
  214. } else {
  215. s_field, _ := c.GetPostForm("s_field")
  216. vid, _ := c.GetPostForm("vid")
  217. tmp, _ := Mgo.FindOne("pkg_info", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  218. if len(*tmp) > 0 {
  219. c.JSON(200, gin.H{"rep": false})
  220. } else {
  221. data["l_createtime"] = time.Now().Unix()
  222. data["s_username"] = sessions.Default(c).Get("username")
  223. data["l_lasttime"] = time.Now().Unix()
  224. data["delete"] = false
  225. pid := Mgo.Save("pkg_info", data)
  226. fromvid, _ := data["s_pversionid"].(string)
  227. if fromvid != "" {
  228. //克隆分包属性
  229. copyPkgRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
  230. }
  231. c.JSON(200, gin.H{"rep": true})
  232. }
  233. }
  234. })
  235. Admin.POST("/version/pkginfouse", func(c *gin.Context) {
  236. _id, _ := c.GetPostForm("_id")
  237. isuse, _ := c.GetPostForm("isuse")
  238. b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"isuse":`+isuse+`}}`)
  239. c.JSON(200, gin.H{"rep": b})
  240. })
  241. Admin.POST("/version/pkginfodel", func(c *gin.Context) {
  242. _id, _ := c.GetPostForm("_id")
  243. b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"delete":true}}`)
  244. v, _ := Mgo.FindById("pkg_info", _id, `{"vid":1}`)
  245. go DelPkgLogic(qu.ObjToString((*v)["vid"]), _id)
  246. //b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
  247. c.JSON(200, gin.H{"rep": b})
  248. })
  249. //分块配置
  250. Admin.GET("/version/blockinfo", func(c *gin.Context) {
  251. vid := c.Query("vid")
  252. c.HTML(http.StatusOK, "blockinfo.html", gin.H{"vid": vid})
  253. })
  254. Admin.POST("/version/blockinfo_list", func(c *gin.Context) {
  255. vid, _ := c.GetPostForm("vid")
  256. data, _ := Mgo.Find("block_info", bson.M{"vid": vid, "delete": false}, `{"index":-1}`, `{"block_reg":1,"title_reg":1,"index":1}`, false, -1, -1)
  257. for _, v := range *data {
  258. v["id"] = qu.BsonIdToSId(v["_id"])
  259. }
  260. c.JSON(http.StatusOK, gin.H{"data": data})
  261. })
  262. //分块配置保存
  263. Admin.POST("/version/blockinfo_save", func(c *gin.Context) {
  264. status := false
  265. _id, _ := c.GetPostForm("_id")
  266. block_reg, _ := c.GetPostForm("block_reg")
  267. title_reg, _ := c.GetPostForm("title_reg")
  268. if _id != "" {
  269. status = Mgo.UpdateById("block_info", _id, bson.M{
  270. "$set": bson.M{
  271. "l_updatetime": time.Now().Unix(),
  272. "block_reg": block_reg,
  273. "title_reg": title_reg,
  274. },
  275. })
  276. } else {
  277. vid, _ := c.GetPostForm("vid")
  278. list, flag := Mgo.Find("block_info", bson.M{"vid": vid}, `{"index": 1}`, `{"index":1}`, false, 0, 1)
  279. index := -1
  280. if flag && len(*list) == 1 {
  281. index = qu.IntAllDef((*list)[0]["index"], 1) - 1
  282. }
  283. unix := time.Now().Unix()
  284. status = Mgo.Save("block_info", bson.M{
  285. "delete": false,
  286. "index": index,
  287. "block_reg": block_reg,
  288. "title_reg": title_reg,
  289. "vid": vid,
  290. "l_createtime": unix,
  291. "l_updatetime": unix,
  292. "s_username": sessions.Default(c).Get("username"),
  293. }) != ""
  294. }
  295. c.JSON(http.StatusOK, gin.H{"status": status})
  296. })
  297. Admin.POST("/version/blockinfo_updateindex", func(c *gin.Context) {
  298. _ids := c.PostFormArray("_ids")
  299. indexs := c.PostFormArray("indexs")
  300. log.Println(_ids, indexs)
  301. for k, _id := range _ids {
  302. Mgo.UpdateById("block_info", _id, bson.M{
  303. "$set": bson.M{
  304. "index": qu.IntAll(indexs[k]),
  305. },
  306. })
  307. }
  308. c.JSON(http.StatusOK, gin.H{})
  309. })
  310. Admin.POST("/version/blockinfo_delete", func(c *gin.Context) {
  311. _id, _ := c.GetPostForm("_id")
  312. status := Mgo.UpdateById("block_info", _id, bson.M{"$set": bson.M{"delete": true}})
  313. c.JSON(http.StatusOK, gin.H{"status": status})
  314. })
  315. //块的信息分类
  316. Admin.GET("/version/blockclassify", func(c *gin.Context) {
  317. vid := c.Query("vid")
  318. c.HTML(http.StatusOK, "blockclassify.html", gin.H{"vid": vid})
  319. })
  320. Admin.POST("/version/blockclassify_delete", func(c *gin.Context) {
  321. _id, _ := c.GetPostForm("_id")
  322. status := Mgo.UpdateById("block_classify", _id, bson.M{"$set": bson.M{"delete": true}})
  323. c.JSON(http.StatusOK, gin.H{"status": status})
  324. })
  325. Admin.POST("/version/blockclassify_save", func(c *gin.Context) {
  326. status := false
  327. _id, _ := c.GetPostForm("_id")
  328. name, _ := c.GetPostForm("name")
  329. if _id != "" {
  330. status = Mgo.UpdateById("block_classify", _id, bson.M{
  331. "$set": bson.M{
  332. "l_updatetime": time.Now().Unix(),
  333. "name": name,
  334. },
  335. })
  336. } else {
  337. vid, _ := c.GetPostForm("vid")
  338. unix := time.Now().Unix()
  339. status = Mgo.Save("block_classify", bson.M{
  340. "delete": false,
  341. "name": name,
  342. "vid": vid,
  343. "l_createtime": unix,
  344. "l_updatetime": unix,
  345. "s_username": sessions.Default(c).Get("username"),
  346. }) != ""
  347. }
  348. c.JSON(http.StatusOK, gin.H{"status": status})
  349. })
  350. Admin.POST("/version/blockclassify_list", func(c *gin.Context) {
  351. vid, _ := c.GetPostForm("vid")
  352. data, _ := Mgo.Find("block_classify", bson.M{"vid": vid, "delete": false}, `{"l_updatetime":-1}`, `{"name":1,"l_updatetime":1}`, false, -1, -1)
  353. for _, v := range *data {
  354. v["id"] = qu.BsonIdToSId(v["_id"])
  355. l_updatetime := v["l_updatetime"]
  356. v["l_updatetime"] = qu.FormatDateWithObj(&l_updatetime, qu.Date_Full_Layout)
  357. }
  358. c.JSON(http.StatusOK, gin.H{"data": data})
  359. })
  360. //块分类
  361. Admin.GET("/version/blockclassify_info", func(c *gin.Context) {
  362. pid := c.Query("pid")
  363. vid := c.Query("vid")
  364. c.HTML(http.StatusOK, "blockclassify_info.html", gin.H{"vid": vid, "pid": pid})
  365. })
  366. Admin.POST("/version/blockclassify_info_delete", func(c *gin.Context) {
  367. _id, _ := c.GetPostForm("_id")
  368. status := Mgo.UpdateById("block_classify_info", _id, bson.M{"$set": bson.M{"delete": true}})
  369. c.JSON(http.StatusOK, gin.H{"status": status})
  370. })
  371. Admin.POST("/version/blockclassify_info_save", func(c *gin.Context) {
  372. status := 0
  373. name, _ := c.GetPostForm("name")
  374. code, _ := c.GetPostForm("code")
  375. pid, _ := c.GetPostForm("pid")
  376. if Mgo.Count("block_classify_info", map[string]interface{}{
  377. "delete": false,
  378. "$or": []map[string]interface{}{
  379. map[string]interface{}{
  380. "name": name,
  381. },
  382. map[string]interface{}{
  383. "code": code,
  384. },
  385. },
  386. }) == 1 {
  387. status = -1
  388. } else {
  389. _id, _ := c.GetPostForm("_id")
  390. if _id != "" {
  391. if Mgo.UpdateById("block_classify_info", _id, bson.M{
  392. "$set": bson.M{
  393. "l_updatetime": time.Now().Unix(),
  394. "name": name,
  395. "code": code,
  396. },
  397. }) {
  398. status = 1
  399. }
  400. } else {
  401. vid, _ := c.GetPostForm("vid")
  402. unix := time.Now().Unix()
  403. if Mgo.Save("block_classify_info", bson.M{
  404. "delete": false,
  405. "name": name,
  406. "code": code,
  407. "vid": vid,
  408. "pid": pid,
  409. "l_createtime": unix,
  410. "l_updatetime": unix,
  411. "s_username": sessions.Default(c).Get("username"),
  412. }) != "" {
  413. status = 1
  414. }
  415. }
  416. }
  417. c.JSON(http.StatusOK, gin.H{"status": status})
  418. })
  419. Admin.POST("/version/blockclassify_info_list", func(c *gin.Context) {
  420. pid, _ := c.GetPostForm("pid")
  421. data, _ := Mgo.Find("block_classify_info", bson.M{"pid": pid, "delete": false}, `{"l_updatetime":-1}`, `{"name":1,"code":1,"l_updatetime":1}`, false, -1, -1)
  422. for _, v := range *data {
  423. v["id"] = qu.BsonIdToSId(v["_id"])
  424. l_updatetime := v["l_updatetime"]
  425. v["l_updatetime"] = qu.FormatDateWithObj(&l_updatetime, qu.Date_Full_Layout)
  426. }
  427. c.JSON(http.StatusOK, gin.H{"data": data})
  428. })
  429. //块标签
  430. Admin.GET("/version/blockclassify_tag", func(c *gin.Context) {
  431. pid := c.Query("pid")
  432. vid := c.Query("vid")
  433. c.HTML(http.StatusOK, "blockclassify_tag.html", gin.H{"vid": vid, "pid": pid})
  434. })
  435. Admin.POST("/version/blockclassify_tag_delete", func(c *gin.Context) {
  436. _id, _ := c.GetPostForm("_id")
  437. status := Mgo.UpdateById("block_classify_tag", _id, bson.M{"$set": bson.M{"delete": true}})
  438. c.JSON(http.StatusOK, gin.H{"status": status})
  439. })
  440. Admin.POST("/version/blockclassify_tag_save", func(c *gin.Context) {
  441. status := 0
  442. name, _ := c.GetPostForm("name")
  443. pid, _ := c.GetPostForm("pid")
  444. if Mgo.Count("block_classify_tag", map[string]interface{}{"delete": false, "name": name, "pid": pid}) == 1 {
  445. status = -1
  446. } else {
  447. _id, _ := c.GetPostForm("_id")
  448. if _id != "" {
  449. if Mgo.UpdateById("block_classify_tag", _id, bson.M{
  450. "$set": bson.M{
  451. "l_updatetime": time.Now().Unix(),
  452. "name": name,
  453. },
  454. }) {
  455. status = 1
  456. }
  457. } else {
  458. vid, _ := c.GetPostForm("vid")
  459. unix := time.Now().Unix()
  460. if Mgo.Save("block_classify_tag", bson.M{
  461. "delete": false,
  462. "name": name,
  463. "vid": vid,
  464. "pid": pid,
  465. "l_createtime": unix,
  466. "l_updatetime": unix,
  467. "s_username": sessions.Default(c).Get("username"),
  468. }) != "" {
  469. status = 1
  470. }
  471. }
  472. }
  473. c.JSON(http.StatusOK, gin.H{"status": status})
  474. })
  475. Admin.POST("/version/blockclassify_tag_list", func(c *gin.Context) {
  476. pid, _ := c.GetPostForm("pid")
  477. data, _ := Mgo.Find("block_classify_tag", bson.M{"pid": pid, "delete": false}, `{"l_updatetime":-1}`, `{"name":1,"l_updatetime":1}`, false, -1, -1)
  478. for _, v := range *data {
  479. v["id"] = qu.BsonIdToSId(v["_id"])
  480. l_updatetime := v["l_updatetime"]
  481. v["l_updatetime"] = qu.FormatDateWithObj(&l_updatetime, qu.Date_Full_Layout)
  482. }
  483. c.JSON(http.StatusOK, gin.H{"data": data})
  484. })
  485. }
  486. //克隆版本通用属性
  487. func copyComRules(version, pvid, s_username string) {
  488. tmp, _ := Mgo.FindById("version", pvid, nil)
  489. oldversion := (*tmp)["version"].(string)
  490. //克隆前置规则
  491. plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  492. for _, v := range *plist {
  493. delete(v, "_id")
  494. v["s_version"] = version
  495. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  496. v["s_username"] = s_username
  497. v["l_createtime"] = time.Now().Unix()
  498. v["l_lasttime"] = time.Now().Unix()
  499. Mgo.Save("rule_pre", v)
  500. }
  501. //克隆后置规则
  502. blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  503. for _, v := range *blist {
  504. delete(v, "_id")
  505. v["s_version"] = version
  506. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  507. v["s_username"] = s_username
  508. v["l_createtime"] = time.Now().Unix()
  509. v["l_lasttime"] = time.Now().Unix()
  510. Mgo.Save("rule_back", v)
  511. }
  512. //克隆tag
  513. tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  514. for _, v := range *tlist {
  515. oldId := qu.BsonIdToSId(v["_id"])
  516. delete(v, "_id")
  517. v["s_version"] = version
  518. v["s_creater"] = s_username
  519. v["l_intime"] = time.Now().Unix()
  520. newId := Mgo.Save("tag", v) //克隆父标签
  521. td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
  522. for _, v2 := range *td {
  523. delete(v2, "_id")
  524. v2["s_version"] = version
  525. v2["s_creater"] = s_username
  526. v2["l_intime"] = time.Now().Unix()
  527. v2["s_parentid"] = newId
  528. Mgo.Save("tagdetailinfo", v2) //克隆详细标签
  529. }
  530. }
  531. //克隆函数
  532. clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
  533. for _, v := range *clist {
  534. delete(v, "_id")
  535. v["s_version"] = version
  536. v["s_creater"] = s_username
  537. v["l_intime"] = time.Now().Unix()
  538. Mgo.Save("cleanup", v)
  539. }
  540. }
  541. func copyPkgRules(vid, pid, s_field, oldvid, s_username string) {
  542. tmp, _ := Mgo.FindOne("pkg_info", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  543. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  544. //克隆逻辑列表
  545. logicList, _ := Mgo.Find("pkg_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  546. for _, logic := range *logicList {
  547. if len(logic) > 0 {
  548. oldsid := qu.BsonIdToSId(logic["_id"])
  549. delete(logic, "_id")
  550. logic["vid"] = vid
  551. logic["pid"] = pid
  552. logic["l_createtime"] = time.Now().Unix()
  553. logic["l_lasttime"] = time.Now().Unix()
  554. logic["s_username"] = s_username
  555. sid := Mgo.Save("pkg_logic", logic)
  556. //克隆过滤规则
  557. blist, _ := Mgo.Find("pkg_logicback", `{"sid":"`+oldsid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  558. for _, v := range *blist {
  559. delete(v, "_id")
  560. v["vid"] = vid
  561. v["pid"] = pid
  562. v["sid"] = sid
  563. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  564. v["s_username"] = s_username
  565. v["l_createtime"] = time.Now().Unix()
  566. v["l_lasttime"] = time.Now().Unix()
  567. Mgo.Save("pkg_logicback", v)
  568. }
  569. }
  570. }
  571. }
  572. //克隆版本Field
  573. func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
  574. tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  575. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  576. //克隆逻辑列表
  577. logicList, _ := Mgo.Find("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
  578. for _, logic := range *logicList {
  579. if len(logic) > 0 {
  580. oldsid := qu.BsonIdToSId(logic["_id"])
  581. delete(logic, "_id")
  582. logic["vid"] = vid
  583. logic["pid"] = pid
  584. logic["l_createtime"] = time.Now().Unix()
  585. logic["l_lasttime"] = time.Now().Unix()
  586. logic["s_username"] = s_username
  587. sid := Mgo.Save("rule_logic", logic)
  588. //克隆前置规则
  589. plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  590. for _, v := range *plist {
  591. delete(v, "_id")
  592. v["vid"] = vid
  593. v["pid"] = pid
  594. v["sid"] = sid
  595. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  596. v["s_username"] = s_username
  597. v["l_createtime"] = time.Now().Unix()
  598. v["l_lasttime"] = time.Now().Unix()
  599. Mgo.Save("rule_logicpre", v)
  600. }
  601. //克隆抽取规则
  602. elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  603. for _, v := range *elist {
  604. delete(v, "_id")
  605. v["vid"] = vid
  606. v["pid"] = pid
  607. v["sid"] = sid
  608. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  609. v["s_username"] = s_username
  610. v["l_createtime"] = time.Now().Unix()
  611. v["l_lasttime"] = time.Now().Unix()
  612. Mgo.Save("rule_logicore", v)
  613. }
  614. //克隆过滤规则
  615. blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
  616. for _, v := range *blist {
  617. delete(v, "_id")
  618. v["vid"] = vid
  619. v["pid"] = pid
  620. v["sid"] = sid
  621. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  622. v["s_username"] = s_username
  623. v["l_createtime"] = time.Now().Unix()
  624. v["l_lasttime"] = time.Now().Unix()
  625. Mgo.Save("rule_logicback", v)
  626. }
  627. }
  628. }
  629. }
  630. //克隆清理版本Field
  631. func copyClearRuleLogic(vid, pid, s_field, oldvid, s_username string) {
  632. tmp, _ := Mgo.FindOne("clearversioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
  633. oldpid := qu.BsonIdToSId((*tmp)["_id"])
  634. elist, _ := Mgo.Find("clearulelogic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, nil, nil, false, -1, -1)
  635. for _, v := range *elist {
  636. delete(v, "_id")
  637. v["vid"] = vid
  638. v["pid"] = pid
  639. v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
  640. v["s_username"] = s_username
  641. v["l_createtime"] = time.Now().Unix()
  642. v["l_lasttime"] = time.Now().Unix()
  643. Mgo.Save("clearulelogic", v)
  644. }
  645. }
  646. //获取代码
  647. func getCode(code string) string {
  648. tmps := strings.Split(code, "_")
  649. tmp := tmps[:len(tmps)-1]
  650. return strings.Join(tmp, "_")
  651. }