question.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. package llm
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/rag"
  7. "eta/eta_api/models/rag/request"
  8. "eta/eta_api/models/rag/response"
  9. "eta/eta_api/services"
  10. "eta/eta_api/services/elastic"
  11. "eta/eta_api/utils"
  12. "fmt"
  13. "github.com/rdlucklib/rdluck_tools/paging"
  14. "strings"
  15. "time"
  16. )
  17. // QuestionController
  18. // @Description: 提示词库管理
  19. type QuestionController struct {
  20. controllers.BaseAuthController
  21. }
  22. // List
  23. // @Title 列表
  24. // @Description 列表
  25. // @Param PageSize query int true "每页数据条数"
  26. // @Param CurrentIndex query int true "当前页页码,从1开始"
  27. // @Param KeyWord query string true "搜索关键词"
  28. // @Param IsQueryDefault query bool true "是否默认:true,或者false"
  29. // @Success 200 {object} []*rag.QuestionListListResp
  30. // @router /question/list [get]
  31. func (c *QuestionController) List() {
  32. br := new(models.BaseResponse).Init()
  33. defer func() {
  34. c.Data["json"] = br
  35. c.ServeJSON()
  36. }()
  37. sysUser := c.SysUser
  38. if sysUser == nil {
  39. br.Msg = "请登录"
  40. br.ErrMsg = "请登录,SysUser Is Empty"
  41. return
  42. }
  43. pageSize, _ := c.GetInt("PageSize")
  44. currentIndex, _ := c.GetInt("CurrentIndex")
  45. keyWord := c.GetString("KeyWord")
  46. isQueryDefault, _ := c.GetBool("IsQueryDefault")
  47. var startSize int
  48. if pageSize <= 0 {
  49. pageSize = utils.PageSize20
  50. }
  51. if currentIndex <= 0 {
  52. currentIndex = 1
  53. }
  54. startSize = utils.StartIndex(currentIndex, pageSize)
  55. var total int
  56. viewList := make([]rag.QuestionView, 0)
  57. if keyWord == `` {
  58. var condition string
  59. var pars []interface{}
  60. if keyWord != "" {
  61. condition += fmt.Sprintf(` AND %s like ? `, rag.QuestionColumns.QuestionContent)
  62. pars = append(pars, `%`+keyWord+`%`)
  63. }
  64. if isQueryDefault {
  65. condition += fmt.Sprintf(` AND %s = ? `, rag.QuestionColumns.IsDefault)
  66. pars = append(pars, 1)
  67. }
  68. obj := new(rag.Question)
  69. tmpTotal, list, err := obj.GetPageListByCondition(condition, pars, startSize, pageSize)
  70. if err != nil {
  71. br.Msg = "获取失败"
  72. br.ErrMsg = "获取失败,Err:" + err.Error()
  73. return
  74. }
  75. total = tmpTotal
  76. if list != nil && len(list) > 0 {
  77. viewList = list[0].ListToViewList(list)
  78. }
  79. } else {
  80. sortMap := map[string]string{
  81. //"ArticleCreateTime": "desc",
  82. //"WechatArticleId": "desc",
  83. }
  84. tmpTotal, list, err := elastic.RagQuestionEsSearch(keyWord, isQueryDefault, startSize, pageSize, sortMap)
  85. if err != nil {
  86. br.Msg = "获取失败"
  87. br.ErrMsg = "获取失败,Err:" + err.Error()
  88. return
  89. }
  90. total = int(tmpTotal)
  91. if list != nil && len(list) > 0 {
  92. viewList = list[0].ToViewList(list)
  93. }
  94. }
  95. page := paging.GetPaging(currentIndex, pageSize, total)
  96. resp := response.QuestionListListResp{
  97. List: viewList,
  98. Paging: page,
  99. }
  100. br.Ret = 200
  101. br.Success = true
  102. br.Msg = "获取成功"
  103. br.Data = resp
  104. }
  105. // TitleList
  106. // @Title 标题列表
  107. // @Description 标题列表
  108. // @Param PageSize query int true "每页数据条数"
  109. // @Param CurrentIndex query int true "当前页页码,从1开始"
  110. // @Param KeyWord query string true "搜索关键词"
  111. // @Param IsQueryDefault query bool true "是否默认:true,或者false"
  112. // @Success 200 {object} []*rag.QuestionListListResp
  113. // @router /question/title/list [get]
  114. func (c *QuestionController) TitleList() {
  115. br := new(models.BaseResponse).Init()
  116. defer func() {
  117. c.Data["json"] = br
  118. c.ServeJSON()
  119. }()
  120. sysUser := c.SysUser
  121. if sysUser == nil {
  122. br.Msg = "请登录"
  123. br.ErrMsg = "请登录,SysUser Is Empty"
  124. return
  125. }
  126. pageSize, _ := c.GetInt("PageSize")
  127. currentIndex, _ := c.GetInt("CurrentIndex")
  128. keyWord := c.GetString("KeyWord")
  129. isQueryDefault, _ := c.GetBool("IsQueryDefault")
  130. var startSize int
  131. if pageSize <= 0 {
  132. pageSize = utils.PageSize20
  133. }
  134. if currentIndex <= 0 {
  135. currentIndex = 1
  136. }
  137. startSize = utils.StartIndex(currentIndex, pageSize)
  138. var total int
  139. viewList := make([]rag.QuestionView, 0)
  140. if keyWord == `` {
  141. var condition string
  142. var pars []interface{}
  143. if keyWord != "" {
  144. condition += fmt.Sprintf(` AND %s like ?`, rag.QuestionColumns.QuestionContent)
  145. pars = append(pars, `%`+keyWord+`%`)
  146. }
  147. if isQueryDefault {
  148. condition += fmt.Sprintf(` AND %s = ? `, rag.QuestionColumns.IsDefault)
  149. pars = append(pars, 1)
  150. }
  151. obj := new(rag.Question)
  152. tmpTotal, list, err := obj.GetTitlePageListByCondition(condition, pars, startSize, pageSize)
  153. if err != nil {
  154. br.Msg = "获取失败"
  155. br.ErrMsg = "获取失败,Err:" + err.Error()
  156. return
  157. }
  158. total = tmpTotal
  159. if list != nil && len(list) > 0 {
  160. viewList = list[0].ListToViewList(list)
  161. }
  162. } else {
  163. sortMap := map[string]string{
  164. //"ArticleCreateTime": "desc",
  165. //"WechatArticleId": "desc",
  166. }
  167. tmpTotal, esList, err := elastic.RagQuestionEsSearch(keyWord, isQueryDefault, startSize, pageSize, sortMap)
  168. if err != nil {
  169. br.Msg = "获取失败"
  170. br.ErrMsg = "获取失败,Err:" + err.Error()
  171. return
  172. }
  173. total = int(tmpTotal)
  174. if total > 0 {
  175. questionIdList := make([]int, 0)
  176. for _, v := range esList {
  177. questionIdList = append(questionIdList, v.QuestionId)
  178. }
  179. var condition string
  180. var pars []interface{}
  181. condition += fmt.Sprintf(` AND %s in (?)`, rag.QuestionColumns.QuestionId)
  182. pars = append(pars, `%`+keyWord+`%`)
  183. obj := new(rag.Question)
  184. tmpTotal, list, err := obj.GetTitlePageListByCondition(condition, pars, startSize, pageSize)
  185. if err != nil {
  186. br.Msg = "获取失败"
  187. br.ErrMsg = "获取失败,Err:" + err.Error()
  188. return
  189. }
  190. if list != nil && len(list) > 0 {
  191. viewList = list[0].ListToViewList(list)
  192. }
  193. total = tmpTotal
  194. }
  195. }
  196. page := paging.GetPaging(currentIndex, pageSize, total)
  197. resp := response.QuestionListListResp{
  198. List: viewList,
  199. Paging: page,
  200. }
  201. br.Ret = 200
  202. br.Success = true
  203. br.Msg = "获取成功"
  204. br.Data = resp
  205. }
  206. // Detail
  207. // @Title 列表
  208. // @Description 列表
  209. // @Param QuestionId query int true "提示词id"
  210. // @Success 200 {object} []*rag.QuestionListListResp
  211. // @router /question/detail [get]
  212. func (c *QuestionController) Detail() {
  213. br := new(models.BaseResponse).Init()
  214. defer func() {
  215. c.Data["json"] = br
  216. c.ServeJSON()
  217. }()
  218. sysUser := c.SysUser
  219. if sysUser == nil {
  220. br.Msg = "请登录"
  221. br.ErrMsg = "请登录,SysUser Is Empty"
  222. return
  223. }
  224. questionId, _ := c.GetInt("QuestionId")
  225. if questionId <= 0 {
  226. br.Msg = "提示词id不能为空"
  227. br.ErrMsg = "提示词id不能为空"
  228. return
  229. }
  230. obj := new(rag.Question)
  231. questionItem, err := obj.GetByID(questionId)
  232. if err != nil {
  233. br.Msg = "获取失败"
  234. br.ErrMsg = "获取失败,Err:" + err.Error()
  235. return
  236. }
  237. br.Data = questionItem.ToView()
  238. br.Ret = 200
  239. br.Success = true
  240. br.Msg = "获取成功"
  241. }
  242. // Add
  243. // @Title 新增提示词
  244. // @Description 新增提示词
  245. // @Param request body request.AddQuestionReq true "type json string"
  246. // @Success 200 Ret=200 新增成功
  247. // @router /question/add [post]
  248. func (c *QuestionController) Add() {
  249. br := new(models.BaseResponse).Init()
  250. defer func() {
  251. c.Data["json"] = br
  252. c.ServeJSON()
  253. }()
  254. var req request.AddQuestionReq
  255. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  256. if err != nil {
  257. br.Msg = "参数解析异常!"
  258. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  259. return
  260. }
  261. req.Content = strings.TrimSpace(req.Content)
  262. if req.Content == "" {
  263. br.Msg = "请输入提示词"
  264. br.IsSendEmail = false
  265. return
  266. }
  267. //obj := rag.Question{}
  268. //_, err = obj.GetByCondition(` AND question_content = ? `, []interface{}{req.Content})
  269. //if err == nil {
  270. // br.Msg = "提示词已入库,请不要重复添加"
  271. // br.IsSendEmail = false
  272. // return
  273. //}
  274. title := utils.GetFirstNChars(req.Content, 20)
  275. item := &rag.Question{
  276. QuestionId: 0,
  277. QuestionTitle: title,
  278. QuestionContent: req.Content,
  279. Sort: 0,
  280. ModifyTime: time.Now(),
  281. CreateTime: time.Now(),
  282. }
  283. err = item.Create()
  284. if err != nil {
  285. br.Msg = "添加失败"
  286. br.ErrMsg = "添加失败,Err:" + err.Error()
  287. return
  288. }
  289. // 新增/编辑ES数据
  290. go services.AddOrEditEsRagQuestion(item.QuestionId)
  291. br.Ret = 200
  292. br.Success = true
  293. br.Msg = `添加成功`
  294. }
  295. // Edit
  296. // @Title 编辑提示词
  297. // @Description 编辑提示词
  298. // @Param request body request.EditQuestionReq true "type json string"
  299. // @Success 200 Ret=200 新增成功
  300. // @router /question/edit [post]
  301. func (c *QuestionController) Edit() {
  302. br := new(models.BaseResponse).Init()
  303. defer func() {
  304. c.Data["json"] = br
  305. c.ServeJSON()
  306. }()
  307. var req request.EditQuestionReq
  308. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  309. if err != nil {
  310. br.Msg = "参数解析异常!"
  311. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  312. return
  313. }
  314. if req.QuestionId <= 0 {
  315. br.Msg = "提示词id不能为空"
  316. br.IsSendEmail = false
  317. return
  318. }
  319. req.Content = strings.TrimSpace(req.Content)
  320. if req.Content == "" {
  321. br.Msg = "请输入提示词"
  322. br.IsSendEmail = false
  323. return
  324. }
  325. obj := rag.Question{}
  326. item, err := obj.GetByID(req.QuestionId)
  327. if err != nil {
  328. br.Msg = "修改失败"
  329. br.ErrMsg = "修改失败,查找提示词失败,Err:" + err.Error()
  330. if utils.IsErrNoRow(err) {
  331. br.Msg = "提示词不存在"
  332. br.IsSendEmail = false
  333. }
  334. return
  335. }
  336. // 编辑提示词:
  337. if item.IsDefault == 1 {
  338. total, err := services.GetNotFinishGenerateAbstractTaskNumByQuestionId(item.QuestionId)
  339. if err != nil {
  340. br.Msg = "修改失败"
  341. br.ErrMsg = "权限校验失败,Err:" + err.Error()
  342. return
  343. }
  344. if total > 0 {
  345. br.Msg = "当前提示词正在生成摘要,请稍后再修改"
  346. return
  347. }
  348. }
  349. // 添加问题的历史记录
  350. rag.AddQuestionHistoryByQuestion(item)
  351. item.QuestionTitle = utils.GetFirstNChars(req.Content, 20)
  352. item.QuestionContent = req.Content
  353. item.Version++
  354. item.GenerateStatus = `undo`
  355. item.ModifyTime = time.Now()
  356. err = item.Update([]string{"question_title", "question_content", `version`, `generate_status`, "modify_time"})
  357. if err != nil {
  358. br.Msg = "修改失败"
  359. br.ErrMsg = "修改失败,Err:" + err.Error()
  360. return
  361. }
  362. // 新增/编辑ES数据
  363. go services.AddOrEditEsRagQuestion(item.QuestionId)
  364. br.Ret = 200
  365. br.Success = true
  366. br.Msg = `修改成功`
  367. }
  368. // Del
  369. // @Title 删除提示词
  370. // @Description 删除提示词
  371. // @Param request body request.EditQuestionReq true "type json string"
  372. // @Success 200 Ret=200 新增成功
  373. // @router /question/del [post]
  374. func (c *QuestionController) Del() {
  375. br := new(models.BaseResponse).Init()
  376. defer func() {
  377. c.Data["json"] = br
  378. c.ServeJSON()
  379. }()
  380. var req request.EditQuestionReq
  381. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  382. if err != nil {
  383. br.Msg = "参数解析异常!"
  384. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  385. return
  386. }
  387. if req.QuestionId <= 0 {
  388. br.Msg = "提示词id不能为空"
  389. br.IsSendEmail = false
  390. return
  391. }
  392. obj := rag.Question{}
  393. item, err := obj.GetByID(req.QuestionId)
  394. if err != nil {
  395. br.Msg = "修改失败"
  396. br.ErrMsg = "修改失败,查找提示词失败,Err:" + err.Error()
  397. if utils.IsErrNoRow(err) {
  398. br.Msg = "提示词不存在"
  399. br.IsSendEmail = false
  400. }
  401. return
  402. }
  403. // 删除提示词:若删除默认提示词,提示:当前提示词不允许删除;若删除非默认提示词:提示删除成功(项目eta4.0,时间:2025-4-16 17:39:38)
  404. if item.IsDefault == 1 {
  405. br.Msg = "当前提示词不允许删除!"
  406. return
  407. }
  408. // 添加问题的历史记录
  409. rag.AddQuestionHistoryByQuestion(item)
  410. err = item.Del()
  411. if err != nil {
  412. br.Msg = "删除失败"
  413. br.ErrMsg = "删除失败,Err:" + err.Error()
  414. return
  415. }
  416. // 删除ES数据
  417. go services.DelEsRagQuestion(item.QuestionId)
  418. br.Ret = 200
  419. br.Success = true
  420. br.Msg = `删除成功`
  421. }
  422. // SetDefault
  423. // @Title 设置默认提示词
  424. // @Description 设置默认提示词
  425. // @Param request body request.EditQuestionReq true "type json string"
  426. // @Success 200 Ret=200 设置成功
  427. // @router /question/default/set [post]
  428. func (c *QuestionController) SetDefault() {
  429. br := new(models.BaseResponse).Init()
  430. defer func() {
  431. c.Data["json"] = br
  432. c.ServeJSON()
  433. }()
  434. var req request.EditQuestionReq
  435. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  436. if err != nil {
  437. br.Msg = "参数解析异常!"
  438. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  439. return
  440. }
  441. if req.QuestionId <= 0 {
  442. br.Msg = "提示词id不能为空"
  443. br.IsSendEmail = false
  444. return
  445. }
  446. obj := rag.Question{}
  447. item, err := obj.GetByID(req.QuestionId)
  448. if err != nil {
  449. br.Msg = "修改失败"
  450. br.ErrMsg = "修改失败,查找提示词失败,Err:" + err.Error()
  451. if utils.IsErrNoRow(err) {
  452. br.Msg = "提示词不存在"
  453. br.IsSendEmail = false
  454. }
  455. return
  456. }
  457. // 判断是否正在取消默认提示词(删除历史摘要)
  458. {
  459. cacheKey := services.GetDelAbstractByQuestionIdCacheKey(item.QuestionId)
  460. if utils.Rc.IsExist(cacheKey) {
  461. br.Msg = "取消设置默认提示词后,删除历史摘要中,请稍后再试!"
  462. br.IsSendEmail = false
  463. return
  464. }
  465. }
  466. if item.IsDefault == 1 {
  467. br.Msg = "该提示词已经是默认提示词,无需设置"
  468. br.IsSendEmail = false
  469. return
  470. }
  471. item.IsDefault = 1
  472. item.GenerateStatus = `undo`
  473. item.ModifyTime = time.Now()
  474. err = item.Update([]string{"is_default", "generate_status", "modify_time"})
  475. if err != nil {
  476. br.Msg = "设置失败"
  477. br.ErrMsg = "设置失败,Err:" + err.Error()
  478. return
  479. }
  480. // 新增/编辑ES数据
  481. go services.AddOrEditEsRagQuestion(item.QuestionId)
  482. br.Ret = 200
  483. br.Success = true
  484. br.Msg = `设置成功`
  485. }
  486. // UnSetDefault
  487. // @Title 取消设置默认提示词
  488. // @Description 取消设置默认提示词
  489. // @Param request body request.EditQuestionReq true "type json string"
  490. // @Success 200 Ret=200 设置成功
  491. // @router /question/default/unset [post]
  492. func (c *QuestionController) UnSetDefault() {
  493. br := new(models.BaseResponse).Init()
  494. defer func() {
  495. c.Data["json"] = br
  496. c.ServeJSON()
  497. }()
  498. var req request.EditQuestionReq
  499. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  500. if err != nil {
  501. br.Msg = "参数解析异常!"
  502. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  503. return
  504. }
  505. if req.QuestionId <= 0 {
  506. br.Msg = "提示词id不能为空"
  507. br.IsSendEmail = false
  508. return
  509. }
  510. obj := rag.Question{}
  511. item, err := obj.GetByID(req.QuestionId)
  512. if err != nil {
  513. br.Msg = "修改失败"
  514. br.ErrMsg = "修改失败,查找提示词失败,Err:" + err.Error()
  515. if utils.IsErrNoRow(err) {
  516. br.Msg = "提示词不存在"
  517. br.IsSendEmail = false
  518. }
  519. return
  520. }
  521. if item.IsDefault == 0 {
  522. br.Msg = "该提示词不是默认提示词,无需取消"
  523. br.IsSendEmail = false
  524. return
  525. }
  526. // 如果是取消已经设置成默认的提示词,那么需要判断是否有正在生成摘要的提示词任务,如果存在的话,那么就不允许取消
  527. auth, err := services.CheckOpQuestionAuth()
  528. if err != nil {
  529. br.Msg = "修改失败"
  530. br.ErrMsg = "权限校验失败,Err:" + err.Error()
  531. return
  532. }
  533. if !auth {
  534. br.Msg = "当前有提示词正在生成摘要,请稍后再修改"
  535. return
  536. }
  537. item.IsDefault = 0
  538. item.GenerateStatus = `undo`
  539. item.ModifyTime = time.Now()
  540. err = item.Update([]string{"is_default", "generate_status", "modify_time"})
  541. if err != nil {
  542. br.Msg = "取消设置失败"
  543. br.ErrMsg = "取消设置失败,Err:" + err.Error()
  544. return
  545. }
  546. // 新增/编辑ES数据
  547. go services.AddOrEditEsRagQuestion(item.QuestionId)
  548. // 对应的提示词生成的摘要库和向量库内容也取消,同时需要加锁,不允许重复操作
  549. go services.DelAbstractByQuestionId(item.QuestionId)
  550. br.Ret = 200
  551. br.Success = true
  552. br.Msg = `取消设置成功`
  553. }
  554. // GenerateAbstract
  555. // @Title 生成摘要
  556. // @Description 生成摘要
  557. // @Param request body request.EditQuestionReq true "type json string"
  558. // @Success 200 Ret=200 设置成功
  559. // @router /question/abstract/generate [post]
  560. func (c *QuestionController) GenerateAbstract() {
  561. br := new(models.BaseResponse).Init()
  562. defer func() {
  563. c.Data["json"] = br
  564. c.ServeJSON()
  565. }()
  566. var req request.EditQuestionReq
  567. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  568. if err != nil {
  569. br.Msg = "参数解析异常!"
  570. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  571. return
  572. }
  573. if req.QuestionId <= 0 {
  574. br.Msg = "提示词id不能为空"
  575. br.IsSendEmail = false
  576. return
  577. }
  578. obj := rag.Question{}
  579. item, err := obj.GetByID(req.QuestionId)
  580. if err != nil {
  581. br.Msg = "修改失败"
  582. br.ErrMsg = "修改失败,查找提示词失败,Err:" + err.Error()
  583. if utils.IsErrNoRow(err) {
  584. br.Msg = "提示词不存在"
  585. br.IsSendEmail = false
  586. }
  587. return
  588. }
  589. if item.IsDefault != 1 {
  590. br.Msg = "该提示词不是默认提示词,不允许生成"
  591. br.IsSendEmail = false
  592. return
  593. }
  594. if item.GenerateStatus != `undo` {
  595. br.Msg = "该提示词已经生成过摘要,不允许重复生成"
  596. br.IsSendEmail = false
  597. return
  598. }
  599. // 如果是需要对提示词做摘要的生成,那么需要判断是否有正在生成摘要的提示词任务,如果存在的话,那么就不允许生成(暂定,后面可以改成加到任务中去,等上一个批次的任务完成后,继续该任务)
  600. auth, err := services.CheckOpQuestionAuth()
  601. if err != nil {
  602. br.Msg = "修改失败"
  603. br.ErrMsg = "权限校验失败,Err:" + err.Error()
  604. return
  605. }
  606. if !auth {
  607. br.Msg = "当前有提示词正在生成摘要,请稍后再重新生成"
  608. return
  609. }
  610. // 标记摘要生成状态,避免重复生成
  611. item.GenerateStatus = `done`
  612. item.ModifyTime = time.Now()
  613. err = item.Update([]string{"generate_status", "modify_time"})
  614. if err != nil {
  615. br.Msg = "取消设置失败"
  616. br.ErrMsg = "取消设置失败,Err:" + err.Error()
  617. return
  618. }
  619. // 新增/编辑ES数据
  620. go services.AddOrEditEsRagQuestion(item.QuestionId)
  621. // 添加任务
  622. services.AddGenerateAbstractTask(item, c.SysUser)
  623. br.Ret = 200
  624. br.Success = true
  625. br.Msg = `摘要生成中`
  626. }
  627. // CheckOpAuth
  628. // @Title 获取
  629. // @Description 列表
  630. // @Success 200 {object} []*rag.QuestionListListResp
  631. // @router /question/op_auth/check [get]
  632. func (c *QuestionController) CheckOpAuth() {
  633. br := new(models.BaseResponse).Init()
  634. defer func() {
  635. c.Data["json"] = br
  636. c.ServeJSON()
  637. }()
  638. sysUser := c.SysUser
  639. if sysUser == nil {
  640. br.Msg = "请登录"
  641. br.ErrMsg = "请登录,SysUser Is Empty"
  642. return
  643. }
  644. // 如果是需要对提示词做摘要的生成,那么需要判断是否有正在生成摘要的提示词任务,如果存在的话,那么就不允许生成(暂定,后面可以改成加到任务中去,等上一个批次的任务完成后,继续该任务)
  645. auth, err := services.CheckOpQuestionAuth()
  646. if err != nil {
  647. br.Msg = "修改失败"
  648. br.ErrMsg = "权限校验失败,Err:" + err.Error()
  649. return
  650. }
  651. var status, tip string
  652. if auth {
  653. status = `done`
  654. tip = `新摘要生成成功!`
  655. } else {
  656. status = `processing`
  657. tip = `新摘要生成中...`
  658. }
  659. resp := response.QuestionOpAuthResp{
  660. Status: status,
  661. Tip: tip,
  662. }
  663. br.Ret = 200
  664. br.Success = true
  665. br.Msg = "获取成功"
  666. br.Data = resp
  667. }
  668. //func init() {
  669. // // 提示词加到es
  670. // {
  671. // obj := rag.Question{}
  672. // list, _ := obj.GetListByCondition(``, ` `, []interface{}{}, 0, 10000)
  673. // total := len(list)
  674. // for k, item := range list {
  675. // fmt.Println(k, "/", total)
  676. // services.AddOrEditEsRagQuestion(item.QuestionId)
  677. // }
  678. //
  679. // fmt.Println("结束了")
  680. // }
  681. //}