abstract.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package llm
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/cache"
  5. "eta/eta_api/controllers"
  6. "eta/eta_api/models"
  7. "eta/eta_api/models/rag"
  8. "eta/eta_api/models/rag/request"
  9. "eta/eta_api/models/rag/response"
  10. "eta/eta_api/services"
  11. "eta/eta_api/services/elastic"
  12. "eta/eta_api/utils"
  13. "fmt"
  14. "github.com/rdlucklib/rdluck_tools/paging"
  15. )
  16. // AbstractController
  17. // @Description: 摘要管理
  18. type AbstractController struct {
  19. controllers.BaseAuthController
  20. }
  21. // List
  22. // @Title 列表
  23. // @Description 列表
  24. // @Param PageSize query int true "每页数据条数"
  25. // @Param CurrentIndex query int true "当前页页码,从1开始"
  26. // @Param KeyWord query string true "搜索关键词"
  27. // @Success 200 {object} []*rag.QuestionListListResp
  28. // @router /abstract/list [get]
  29. func (c *AbstractController) List() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. c.Data["json"] = br
  33. c.ServeJSON()
  34. }()
  35. sysUser := c.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请登录"
  38. br.ErrMsg = "请登录,SysUser Is Empty"
  39. return
  40. }
  41. pageSize, _ := c.GetInt("PageSize")
  42. currentIndex, _ := c.GetInt("CurrentIndex")
  43. keyWord := c.GetString("KeyWord")
  44. tagId, _ := c.GetInt("TagId")
  45. var startSize int
  46. if pageSize <= 0 {
  47. pageSize = utils.PageSize20
  48. }
  49. if currentIndex <= 0 {
  50. currentIndex = 1
  51. }
  52. startSize = utils.StartIndex(currentIndex, pageSize)
  53. var total int
  54. viewList := make([]rag.WechatArticleAbstractView, 0)
  55. if keyWord == `` {
  56. var condition string
  57. var pars []interface{}
  58. if keyWord != "" {
  59. condition += fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content)
  60. pars = append(pars, `%`+keyWord+`%`)
  61. }
  62. if tagId > 0 {
  63. condition += fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID)
  64. pars = append(pars, tagId)
  65. }
  66. obj := new(rag.WechatArticleAbstract)
  67. tmpTotal, list, err := obj.GetPageListByTagAndPlatformCondition(condition, pars, startSize, pageSize)
  68. if err != nil {
  69. br.Msg = "获取失败"
  70. br.ErrMsg = "获取失败,Err:" + err.Error()
  71. return
  72. }
  73. total = tmpTotal
  74. viewList = obj.WechatArticleAbstractItem(list)
  75. } else {
  76. sortMap := map[string]string{
  77. "ModifyTime": "desc",
  78. "WechatArticleAbstractId": "desc",
  79. }
  80. tmpTotal, list, err := elastic.WechatArticleAbstractEsSearch(keyWord, tagId, startSize, pageSize, sortMap)
  81. if err != nil {
  82. br.Msg = "获取失败"
  83. br.ErrMsg = "获取失败,Err:" + err.Error()
  84. return
  85. }
  86. total = int(tmpTotal)
  87. if list != nil && len(list) > 0 {
  88. viewList = list[0].ToViewList(list)
  89. }
  90. }
  91. page := paging.GetPaging(currentIndex, pageSize, total)
  92. resp := response.AbstractListListResp{
  93. List: viewList,
  94. Paging: page,
  95. }
  96. br.Ret = 200
  97. br.Success = true
  98. br.Msg = "获取成功"
  99. br.Data = resp
  100. }
  101. // 向量库删除
  102. // 摘要库删除
  103. // 批量加入到向量库
  104. // Del
  105. // @Title 删除摘要
  106. // @Description 删除摘要
  107. // @Param request body request.DelAbstractReq true "type json string"
  108. // @Success 200 Ret=200 新增成功
  109. // @router /abstract/del [post]
  110. func (c *AbstractController) Del() {
  111. br := new(models.BaseResponse).Init()
  112. defer func() {
  113. c.Data["json"] = br
  114. c.ServeJSON()
  115. }()
  116. var req request.DelAbstractReq
  117. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  118. if err != nil {
  119. br.Msg = "参数解析异常!"
  120. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  121. return
  122. }
  123. if len(req.WechatArticleAbstractIdList) <= 0 {
  124. br.Msg = "请选择摘要"
  125. br.IsSendEmail = false
  126. return
  127. }
  128. obj := rag.WechatArticleAbstract{}
  129. list, err := obj.GetByIdList(req.WechatArticleAbstractIdList)
  130. if err != nil {
  131. br.Msg = "修改失败"
  132. br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error()
  133. if utils.IsErrNoRow(err) {
  134. br.Msg = "问题不存在"
  135. br.IsSendEmail = false
  136. }
  137. return
  138. }
  139. if len(list) > 0 {
  140. // 删除向量库
  141. err = services.DelDoc(list)
  142. if err != nil {
  143. br.Msg = "删除失败"
  144. br.ErrMsg = "删除向量库失败,Err:" + err.Error()
  145. return
  146. }
  147. // 删除摘要
  148. err = obj.DelByIdList(req.WechatArticleAbstractIdList)
  149. if err != nil {
  150. br.Msg = "删除失败"
  151. br.ErrMsg = "删除失败,Err:" + err.Error()
  152. return
  153. }
  154. for _, v := range list {
  155. go services.AddOrEditEsWechatArticleAbstract(v.WechatArticleAbstractId)
  156. }
  157. }
  158. br.Ret = 200
  159. br.Success = true
  160. br.Msg = `删除成功`
  161. }
  162. // VectorDel
  163. // @Title 删除摘要向量库
  164. // @Description 删除摘要向量库
  165. // @Param request body request.EditQuestionReq true "type json string"
  166. // @Success 200 Ret=200 新增成功
  167. // @router /abstract/vector/del [post]
  168. func (c *AbstractController) VectorDel() {
  169. br := new(models.BaseResponse).Init()
  170. defer func() {
  171. c.Data["json"] = br
  172. c.ServeJSON()
  173. }()
  174. var req request.DelAbstractReq
  175. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  176. if err != nil {
  177. br.Msg = "参数解析异常!"
  178. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  179. return
  180. }
  181. if len(req.WechatArticleAbstractIdList) <= 0 {
  182. br.Msg = "请选择摘要"
  183. br.IsSendEmail = false
  184. return
  185. }
  186. obj := rag.WechatArticleAbstract{}
  187. list, err := obj.GetByIdList(req.WechatArticleAbstractIdList)
  188. if err != nil {
  189. br.Msg = "修改失败"
  190. br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error()
  191. if utils.IsErrNoRow(err) {
  192. br.Msg = "问题不存在"
  193. br.IsSendEmail = false
  194. }
  195. return
  196. }
  197. // 删除向量库
  198. err = services.DelDoc(list)
  199. if err != nil {
  200. br.Msg = "删除失败"
  201. br.ErrMsg = "删除失败,Err:" + err.Error()
  202. return
  203. }
  204. br.Ret = 200
  205. br.Success = true
  206. br.Msg = `删除成功`
  207. }
  208. // AddVector
  209. // @Title 删除摘要向量库
  210. // @Description 删除摘要向量库
  211. // @Param request body request.EditQuestionReq true "type json string"
  212. // @Success 200 Ret=200 新增成功
  213. // @router /abstract/vector/add [post]
  214. func (c *AbstractController) AddVector() {
  215. br := new(models.BaseResponse).Init()
  216. defer func() {
  217. c.Data["json"] = br
  218. c.ServeJSON()
  219. }()
  220. var req request.DelAbstractReq
  221. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  222. if err != nil {
  223. br.Msg = "参数解析异常!"
  224. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  225. return
  226. }
  227. if len(req.WechatArticleAbstractIdList) <= 0 {
  228. br.Msg = "请选择摘要"
  229. br.IsSendEmail = false
  230. return
  231. }
  232. obj := rag.WechatArticleAbstract{}
  233. list, err := obj.GetByIdList(req.WechatArticleAbstractIdList)
  234. if err != nil {
  235. br.Msg = "修改失败"
  236. br.ErrMsg = "修改失败,查找问题失败,Err:" + err.Error()
  237. if utils.IsErrNoRow(err) {
  238. br.Msg = "问题不存在"
  239. br.IsSendEmail = false
  240. }
  241. return
  242. }
  243. for _, item := range list {
  244. cache.AddWechatArticleLlmOpToCache(item.WechatArticleId, ``)
  245. }
  246. br.Ret = 200
  247. br.Success = true
  248. br.Msg = `添加向量库中,请稍后查看`
  249. }