main.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package main
  2. import (
  3. "eta_gn/eta_api/controllers"
  4. _ "eta_gn/eta_api/global"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/models/knowledge"
  7. _ "eta_gn/eta_api/routers"
  8. "eta_gn/eta_api/services/alarm_msg"
  9. knowledgeSrv "eta_gn/eta_api/services/knowledge"
  10. "eta_gn/eta_api/utils"
  11. "fmt"
  12. "runtime"
  13. "sort"
  14. "time"
  15. "github.com/beego/beego/v2/adapter/logs"
  16. "github.com/beego/beego/v2/server/web"
  17. "github.com/beego/beego/v2/server/web/context"
  18. )
  19. func main() {
  20. if web.BConfig.RunMode == "dev" {
  21. web.BConfig.WebConfig.DirectoryIndex = true
  22. web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
  23. }
  24. //MigrateKnowledgeResource()
  25. FixKnowledgeEs()
  26. // go services.Task()
  27. // 初始化表数据入库
  28. models.AfterInitTable()
  29. // 异常处理
  30. web.ErrorController(&controllers.ErrorController{})
  31. // 内存调整
  32. web.BConfig.MaxMemory = 1024 * 1024 * 128
  33. web.BConfig.RecoverFunc = Recover
  34. web.Run()
  35. }
  36. func Recover(ctx *context.Context, conf *web.Config) {
  37. if err := recover(); err != nil {
  38. if err == web.ErrAbort {
  39. return
  40. }
  41. if !web.BConfig.RecoverPanic {
  42. panic(err)
  43. }
  44. stack := ""
  45. msg := fmt.Sprintf("The request url is %v", ctx.Input.URL())
  46. stack += msg + "</br>"
  47. logs.Critical(msg)
  48. msg = fmt.Sprintf("The request data is %v", string(ctx.Input.RequestBody))
  49. stack += msg + "</br>"
  50. logs.Critical(msg)
  51. msg = fmt.Sprintf("Handler crashed with error %v", err)
  52. stack += msg + "</br>"
  53. logs.Critical(msg)
  54. for i := 1; ; i++ {
  55. _, file, line, ok := runtime.Caller(i)
  56. if !ok {
  57. break
  58. }
  59. logs.Critical(fmt.Sprintf("%s:%d", file, line))
  60. stack = stack + fmt.Sprintln(fmt.Sprintf("%s:%d</br>", file, line))
  61. }
  62. go alarm_msg.SendAlarmMsg(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05")+"<br/>"+stack, 3)
  63. }
  64. return
  65. }
  66. func MigrateKnowledgeResource() {
  67. var condition string
  68. var pars []interface{}
  69. condition = " AND resource_type IN (?)"
  70. // pars = []interface{}{[]int{knowledge.KnowledgeResourceTypeOpinion, knowledge.KnowledgeResourceTypeReport}}
  71. pars = []interface{}{[]int{knowledge.KnowledgeResourceTypeReport}}
  72. condition += " AND is_file = ?"
  73. pars = append(pars, 0)
  74. // 分类映射
  75. classifyObj := new(knowledge.KnowledgeClassify)
  76. classifyList, err := classifyObj.GetAllClassify(knowledge.KnowledgeResourceTypeReport)
  77. if err != nil {
  78. fmt.Println("GetAllClassify err:", err)
  79. return
  80. }
  81. classifyMap := make(map[int]*knowledge.KnowledgeClassify)
  82. for _, item := range classifyList {
  83. classifyMap[item.ClassifyId] = item
  84. }
  85. sort.Slice(classifyList, func(i, j int) bool {
  86. if classifyList[i].Level != classifyList[j].Level {
  87. return classifyList[i].Level < classifyList[j].Level
  88. }
  89. return classifyList[i].ClassifyId < classifyList[j].ClassifyId
  90. })
  91. classifyPathMap := make(map[int]map[int]int)
  92. for _, classify := range classifyList {
  93. if _, ok := classifyPathMap[classify.ClassifyId]; !ok {
  94. classifyPathMap[classify.ClassifyId] = make(map[int]int)
  95. }
  96. currClassifyMap := classifyPathMap[classify.ClassifyId]
  97. currClassify := classify
  98. for i := classify.Level; i > 0; i-- {
  99. currClassifyMap[currClassify.Level] = currClassify.ClassifyId
  100. if currClassify.ParentId == 0 {
  101. break
  102. }
  103. currClassify = classifyMap[currClassify.ParentId]
  104. }
  105. }
  106. // 标签映射
  107. tagObj := new(knowledge.KnowledgeTag)
  108. tagList, err := tagObj.GetAllTag(knowledge.KnowledgeResourceTypeReport)
  109. if err != nil {
  110. fmt.Println("GetAllTag err:", err)
  111. return
  112. }
  113. tagMap := make(map[int]*knowledge.KnowledgeTag)
  114. for _, item := range tagList {
  115. tagMap[item.TagId] = item
  116. }
  117. oldClassifyToNewClassifyMap := make(map[int]int)
  118. oldTagToNewTagMap := make(map[int]int)
  119. for {
  120. list, err := knowledge.GetBatchKnowledgeResourceByCondition(condition, pars, 100)
  121. if err != nil {
  122. fmt.Println("GetBatchKnowledgeResourceByCondition err:", err)
  123. continue
  124. }
  125. if len(list) == 0 {
  126. break
  127. }
  128. for _, item := range list {
  129. var parentId int
  130. oldClassifyId := item.ClassifyId
  131. newClassifyId, classifyOk := oldClassifyToNewClassifyMap[oldClassifyId]
  132. if classifyOk {
  133. parentId = newClassifyId
  134. } else {
  135. levelMap := classifyPathMap[item.ClassifyId]
  136. fmt.Println("--------", classifyMap[item.ClassifyId])
  137. if classifyMap[item.ClassifyId] == nil {
  138. continue
  139. }
  140. for i := 1; i <= 3; i++ {
  141. if classifyId, ok := levelMap[i]; ok {
  142. tmp := classifyMap[classifyId]
  143. tmp.ClassifyId = 0
  144. tmp.ParentId = parentId
  145. tmp.CreateTime = time.Now()
  146. tmp.ModifyTime = time.Now()
  147. tmp.ResourceType = knowledge.KnowledgeResourceTypeOpinion
  148. err = tmp.Add(tmp)
  149. if err != nil {
  150. fmt.Println("Add classify err:", err)
  151. continue
  152. }
  153. parentId = tmp.ClassifyId
  154. }
  155. }
  156. }
  157. var tmpTagId, oldTagId int
  158. newTagId, tagOk := oldTagToNewTagMap[item.TagId]
  159. if tagOk {
  160. tmpTagId = newTagId
  161. } else {
  162. if item.TagId > 0 {
  163. oldTagId = item.TagId
  164. tmpTag := tagMap[item.TagId]
  165. tmpTag.TagId = 0
  166. tmpTag.CreateTime = time.Now()
  167. tmpTag.ModifyTime = time.Now()
  168. tmpTag.ResourceType = knowledge.KnowledgeResourceTypeOpinion
  169. err = tmpTag.Add(tmpTag)
  170. if err != nil {
  171. fmt.Println("Add tag err:", err)
  172. continue
  173. }
  174. tmpTagId = tmpTag.TagId
  175. }
  176. }
  177. item.State = knowledge.KnowledgeResourceStateUnpublished
  178. item.TagId = tmpTagId
  179. item.ClassifyId = parentId
  180. item.ResourceType = knowledge.KnowledgeResourceTypeOpinion
  181. err = item.Update([]string{"state", "classify_id", "tag_id", "resource_type"})
  182. if err != nil {
  183. fmt.Println("Update classify_id err:", err)
  184. continue
  185. }
  186. delete(classifyPathMap, oldClassifyId)
  187. oldClassifyToNewClassifyMap[oldClassifyId] = item.ClassifyId
  188. oldTagToNewTagMap[oldTagId] = tmpTagId
  189. }
  190. esErr := knowledgeSrv.EsBatchAddOrEditKnowledgeResource(list)
  191. if esErr != nil {
  192. fmt.Println("EsBatchAddOrEditKnowledgeResource err:", esErr)
  193. }
  194. condition += " AND knowledge_resource_id > ?"
  195. pars = append(pars, list[len(list)-1].KnowledgeResourceId)
  196. }
  197. }
  198. func FixKnowledgeEs() {
  199. fmt.Println("开始修复")
  200. var err error
  201. defer func() {
  202. if err != nil {
  203. fmt.Printf("修复ES失败, %v\n", err)
  204. }
  205. fmt.Println("修复完成")
  206. }()
  207. condition := " AND resource_type = 4"
  208. list, e := knowledge.GetBatchKnowledgeResourceByCondition(condition, make([]interface{}, 0), 10000)
  209. if e != nil {
  210. err = fmt.Errorf("get list err: %v", e)
  211. return
  212. }
  213. for _, v := range list {
  214. fmt.Printf("fixing, id: %d, title: %s\n", v.KnowledgeResourceId, v.Title)
  215. e = knowledgeSrv.EsAddOrEditKnowledgeResource(v)
  216. if e != nil {
  217. fmt.Printf("write err, id: %d, title: %s\n", v.KnowledgeResourceId, v.Title)
  218. continue
  219. }
  220. }
  221. }