ai_summary.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package ai_summary
  2. import (
  3. "errors"
  4. "eta_gn/eta_api/models/ai_summary"
  5. "eta_gn/eta_api/models/system"
  6. "eta_gn/eta_api/utils"
  7. "strconv"
  8. )
  9. func GetAiSummaryClassifyListForMe(adminInfo system.Admin, resp *ai_summary.AiSummaryClassifyListResp, ai_summaryClassifyId int) (errMsg string, err error) {
  10. rootList, err := ai_summary.GetAiSummaryClassifyByParentId(ai_summaryClassifyId)
  11. if err != nil && !utils.IsErrNoRow(err) {
  12. errMsg = "获取失败"
  13. return
  14. }
  15. for k := range rootList {
  16. rootList[k].UniqueCode = strconv.Itoa(rootList[k].AiSummaryClassifyId) + "_" + strconv.Itoa(rootList[k].AiSummaryId)
  17. }
  18. classifyAll, err := ai_summary.GetAiSummaryClassifyByParentId(ai_summaryClassifyId)
  19. if err != nil && !utils.IsErrNoRow(err) {
  20. errMsg = "获取失败"
  21. return
  22. }
  23. for k := range classifyAll {
  24. classifyAll[k].UniqueCode = strconv.Itoa(classifyAll[k].AiSummaryClassifyId) + "_" + strconv.Itoa(classifyAll[k].AiSummaryId)
  25. }
  26. ai_summaryAll, err := ai_summary.GetAiSummaryInfoByAdminId(adminInfo.AdminId)
  27. if err != nil && !utils.IsErrNoRow(err) {
  28. errMsg = "获取失败"
  29. return
  30. }
  31. for k := range ai_summaryAll {
  32. ai_summaryAll[k].UniqueCode = strconv.Itoa(ai_summaryAll[k].AiSummaryClassifyId) + "_" + strconv.Itoa(ai_summaryAll[k].AiSummaryId)
  33. }
  34. sandListMap := make(map[int][]*ai_summary.AiSummaryClassifyItems)
  35. for _, v := range ai_summaryAll {
  36. if _, ok := sandListMap[v.AiSummaryClassifyId]; !ok {
  37. list := make([]*ai_summary.AiSummaryClassifyItems, 0)
  38. list = append(list, v)
  39. sandListMap[v.AiSummaryClassifyId] = list
  40. } else {
  41. sandListMap[v.AiSummaryClassifyId] = append(sandListMap[v.AiSummaryClassifyId], v)
  42. }
  43. }
  44. nodeAll := make([]*ai_summary.AiSummaryClassifyItems, 0)
  45. for k := range rootList {
  46. rootNode := rootList[k]
  47. AiSummaryClassifyItemsMakeTree(&adminInfo, classifyAll, rootNode)
  48. nodeAll = append(nodeAll, rootNode)
  49. }
  50. newAll := AiSummaryItemsMakeTree(nodeAll, sandListMap, ai_summaryClassifyId)
  51. resp.AllNodes = newAll
  52. return
  53. }
  54. func aiSummaryClassifyHaveChild(allNode []*ai_summary.AiSummaryClassifyItems, node *ai_summary.AiSummaryClassifyItems) (childs []*ai_summary.AiSummaryClassifyItems, yes bool) {
  55. for _, v := range allNode {
  56. if v.ParentId == node.AiSummaryClassifyId {
  57. childs = append(childs, v)
  58. }
  59. }
  60. if len(childs) > 0 {
  61. yes = true
  62. }
  63. return
  64. }
  65. func AiSummaryClassifyItemsMakeTree(sysUser *system.Admin, allNode []*ai_summary.AiSummaryClassifyItems, node *ai_summary.AiSummaryClassifyItems) {
  66. childs, _ := aiSummaryClassifyHaveChild(allNode, node) //判断节点是否有子节点并返回
  67. if len(childs) > 0 {
  68. node.Children = append(node.Children, childs[0:]...) //添加子节点
  69. for _, v := range childs { //查询子节点的子节点,并添加到子节点
  70. _, has := aiSummaryClassifyHaveChild(allNode, v)
  71. if has {
  72. AiSummaryClassifyItemsMakeTree(sysUser, allNode, v) //递归添加节点
  73. } else {
  74. childrenArr := make([]*ai_summary.AiSummaryClassifyItems, 0)
  75. v.Children = childrenArr
  76. }
  77. }
  78. } else {
  79. childrenArr := make([]*ai_summary.AiSummaryClassifyItems, 0)
  80. node.Children = childrenArr
  81. }
  82. }
  83. func AiSummaryItemsMakeTree(allNode []*ai_summary.AiSummaryClassifyItems, sandListMap map[int][]*ai_summary.AiSummaryClassifyItems, sandboxClassifyId int) (nodeAll []*ai_summary.AiSummaryClassifyItems) {
  84. for k := range allNode {
  85. if len(allNode[k].Children) > 0 {
  86. AiSummaryItemsMakeTree(allNode[k].Children, sandListMap, sandboxClassifyId)
  87. allNode = append(allNode, sandListMap[allNode[k].ParentId]...)
  88. nodeAll = allNode
  89. } else if k == len(allNode)-1 {
  90. allNode = append(allNode, sandListMap[allNode[k].ParentId]...)
  91. nodeAll = allNode
  92. }
  93. }
  94. if len(allNode) == 0 {
  95. nodeAll = append(nodeAll, sandListMap[sandboxClassifyId]...)
  96. }
  97. return
  98. }
  99. func AiSummaryClassifyItemsMakeTreeV2(sysUser *system.Admin, allNode []*ai_summary.AiSummaryClassifyItems, node *ai_summary.AiSummaryClassifyItems) {
  100. childs, _ := aiSummaryClassifyHaveChildV2(allNode, node) //判断节点是否有子节点并返回
  101. if len(childs) > 0 {
  102. node.Children = append(node.Children, childs[0:]...) //添加子节点
  103. for _, v := range childs { //查询子节点的子节点,并添加到子节点
  104. _, has := aiSummaryClassifyHaveChildV2(allNode, v)
  105. if has {
  106. AiSummaryClassifyItemsMakeTreeV2(sysUser, allNode, v) //递归添加节点
  107. } else {
  108. }
  109. }
  110. } else {
  111. }
  112. }
  113. func aiSummaryClassifyHaveChildV2(allNode []*ai_summary.AiSummaryClassifyItems, node *ai_summary.AiSummaryClassifyItems) (childs []*ai_summary.AiSummaryClassifyItems, yes bool) {
  114. for _, v := range allNode {
  115. if v.ParentId == node.AiSummaryClassifyId && node.AiSummaryId == 0 {
  116. childs = append(childs, v)
  117. }
  118. }
  119. if len(childs) > 0 {
  120. yes = true
  121. }
  122. return
  123. }
  124. func SharePrompt(promptId int, adminId int) (err error) {
  125. prompt, err := ai_summary.GetAiPromptById(promptId)
  126. if err != nil {
  127. if utils.IsErrNoRow(err) {
  128. err = errors.New("当前目录下的提示词不存在")
  129. return
  130. }
  131. err = errors.New("目录下的提示词查询出错:" + err.Error())
  132. return
  133. }
  134. if prompt.SysAdminId != adminId {
  135. err = errors.New("该提示词不是本人创建")
  136. return
  137. }
  138. if prompt.IsShare > 0 {
  139. prompt.IsShare = 0
  140. err = prompt.Update([]string{"IsShare"})
  141. if err != nil {
  142. err = errors.New(err.Error())
  143. return
  144. }
  145. } else {
  146. prompt.IsShare = 1
  147. err = prompt.Update([]string{"IsShare"})
  148. if err != nil {
  149. err = errors.New(err.Error())
  150. return
  151. }
  152. }
  153. return
  154. }
  155. func GetSummaryClassifyChildIds(classifyId int, classifymap map[int]*ai_summary.AiSummaryClassifyItems, childIds *[]int) {
  156. for _, item := range classifymap {
  157. if item.ParentId == classifyId {
  158. *childIds = append(*childIds, item.AiSummaryClassifyId)
  159. GetSummaryClassifyChildIds(item.AiSummaryClassifyId, classifymap, childIds)
  160. }
  161. }
  162. }
  163. func GetSummaryParentIds(classifyId int, classifymap map[int]*ai_summary.AiSummaryClassifyItems, parentIds *[]int) {
  164. if item, ok := classifymap[classifyId]; ok {
  165. if item.ParentId == 0 {
  166. return
  167. }
  168. *parentIds = append(*parentIds, item.ParentId)
  169. GetSummaryParentIds(item.ParentId, classifymap, parentIds)
  170. }
  171. }