ai_pormpt.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. package ai
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/ai_summary"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/utils"
  9. "time"
  10. )
  11. // AiPromptList
  12. // @Title 获取所有ai纪要分类接口-包含沙盘
  13. // @Description 获取所有ai纪要分类接口-包含沙盘
  14. // @Success 200 {object} data_manage.ChartClassifyListResp
  15. // @router /prompt/list [get]
  16. func (this *AiController) AiPromptList() {
  17. br := new(models.BaseResponse).Init()
  18. defer func() {
  19. this.Data["json"] = br
  20. this.ServeJSON()
  21. }()
  22. list, err := ai_summary.GetAiPromptList(this.SysUser.AdminId, 0)
  23. if err != nil {
  24. br.Msg = "获取失败"
  25. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  26. return
  27. }
  28. br.Ret = 200
  29. br.Success = true
  30. br.Msg = "获取成功"
  31. br.Data = list
  32. }
  33. // PromptGroupList
  34. // @Title 获取可见的目录列表
  35. // @Description 获取可见的目录列表接口
  36. // @Success 200 {object} ppt_english.RespGroupList
  37. // @router /prompt/groups [get]
  38. func (this *AiController) PromptGroupList() {
  39. br := new(models.BaseResponse).Init()
  40. defer func() {
  41. this.Data["json"] = br
  42. this.ServeJSON()
  43. }()
  44. list, err := ai_summary.GetAiPromptShareList()
  45. if err != nil {
  46. br.Msg = err.Error()
  47. return
  48. }
  49. resp := make([]*ai_summary.RespGroupListItem, 0)
  50. publicAdminIdList := make([]int, 0)
  51. publicPromptListMap := make(map[int][]*ai_summary.AiPromptItem)
  52. systemAdminMap := make(map[int]*system.Admin)
  53. for _, v := range list {
  54. publicPromptList, ok := publicPromptListMap[v.SysAdminId]
  55. if !ok {
  56. publicPromptList = make([]*ai_summary.AiPromptItem, 0)
  57. publicAdminIdList = append(publicAdminIdList, v.SysAdminId)
  58. }
  59. systemAdminMap[v.SysAdminId] = &system.Admin{
  60. AdminId: v.SysAdminId,
  61. RealName: v.SysAdminName,
  62. }
  63. publicPromptList = append(publicPromptList, v)
  64. publicPromptListMap[v.SysAdminId] = publicPromptList
  65. }
  66. for _, v := range publicAdminIdList {
  67. systemAdmin, ok := systemAdminMap[v]
  68. if !ok {
  69. continue
  70. }
  71. respGroupPptNameListItemList, ok := publicPromptListMap[v]
  72. if !ok {
  73. respGroupPptNameListItemList = make([]*ai_summary.AiPromptItem, 0)
  74. }
  75. // 分组信息
  76. tmpRespGroupListItem := &ai_summary.RespGroupListItem{
  77. GroupId: int64(systemAdmin.AdminId),
  78. GroupName: systemAdmin.RealName,
  79. AdminId: systemAdmin.AdminId,
  80. IsShare: 1,
  81. PromptList: respGroupPptNameListItemList,
  82. }
  83. resp = append(resp, tmpRespGroupListItem)
  84. }
  85. br.Ret = 200
  86. br.Success = true
  87. br.Msg = "查询成功"
  88. br.Data = resp
  89. return
  90. }
  91. // AddPpt
  92. // @Title 新增提示词
  93. // @Description 新增提示词接口
  94. // @Param request body ppt_english.AddPptEnglishReq true "type json string"
  95. // @Success 200 Ret=200 新增成功
  96. // @router /prompt/add [post]
  97. func (this *AiController) AddPrompt() {
  98. br := new(models.BaseResponse).Init()
  99. defer func() {
  100. this.Data["json"] = br
  101. this.ServeJSON()
  102. }()
  103. var req ai_summary.AiPromptAddReq
  104. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  105. if err != nil {
  106. br.Msg = "参数解析异常!"
  107. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  108. return
  109. }
  110. if req.Title == "" {
  111. br.Msg = "标题不能为空"
  112. return
  113. }
  114. var msg string
  115. //获取该层级下最大的排序数
  116. maxSort, err := ai_summary.GetAiPromptMaxSort(this.SysUser.AdminId)
  117. prompt := &ai_summary.AiPrompt{
  118. CreateTime: time.Now(),
  119. ModifyTime: time.Now(),
  120. PromptContent: req.PromptContent,
  121. SysAdminId: this.SysUser.AdminId,
  122. SysAdminName: this.SysUser.RealName,
  123. Title: req.Title,
  124. Sort: maxSort + 1,
  125. }
  126. _, err = ai_summary.AddPropmt(prompt)
  127. if err != nil {
  128. br.Msg = "新增失败"
  129. br.ErrMsg = "新增失败,Err:" + err.Error()
  130. return
  131. }
  132. msg = "新增成功"
  133. br.Ret = 200
  134. br.Success = true
  135. br.Msg = msg
  136. }
  137. // EditPpt
  138. // @Title 编辑提示词
  139. // @Description 编辑提示词接口
  140. // @Param request body ppt_english.AddPptEnglishReq true "type json string"
  141. // @Success 200 Ret=200 编辑成功
  142. // @router /prompt/edit [post]
  143. func (this *AiController) EditPrompt() {
  144. br := new(models.BaseResponse).Init()
  145. defer func() {
  146. this.Data["json"] = br
  147. this.ServeJSON()
  148. }()
  149. var req ai_summary.AiPromptEditReq
  150. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  151. if err != nil {
  152. br.Msg = "参数解析异常!"
  153. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  154. return
  155. }
  156. if req.Title == "" {
  157. br.Msg = "标题不能为空"
  158. return
  159. }
  160. promptItem := &ai_summary.AiPrompt{
  161. AiPromptId: req.AiPromptId,
  162. PromptContent: req.PromptContent,
  163. Title: req.Title,
  164. CreateTime: time.Time{},
  165. ModifyTime: time.Now(),
  166. IsShare: req.IsShare,
  167. }
  168. err = promptItem.Update([]string{"ModifyTime", "PromptContent", "Title", "IsShare"})
  169. if err != nil {
  170. br.Msg = "编辑失败"
  171. br.ErrMsg = "编辑失败,Err:" + err.Error()
  172. return
  173. }
  174. br.Ret = 200
  175. br.Success = true
  176. br.Msg = "编辑成功"
  177. br.IsAddLog = true
  178. }
  179. // DeletePpt
  180. // @Title 删除提示词
  181. // @Description 删除ppt接口
  182. // @Param request body ppt_english.DeletePptEnglishReq true "type json string"
  183. // @Success 200 Ret=200 删除成功
  184. // @router /prompt/delete [post]
  185. func (this *AiController) DeletePrompt() {
  186. br := new(models.BaseResponse).Init()
  187. defer func() {
  188. this.Data["json"] = br
  189. this.ServeJSON()
  190. }()
  191. var req ai_summary.DeleteAipromptReq
  192. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  193. if err != nil {
  194. br.Msg = "参数解析异常!"
  195. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  196. return
  197. }
  198. if req.AiPromptId <= 0 {
  199. br.Msg = "参数错误"
  200. return
  201. }
  202. promptInfo, err := ai_summary.GetAiPromptById(req.AiPromptId)
  203. if err != nil {
  204. br.Msg = "提示词不存在"
  205. return
  206. }
  207. if promptInfo.SysAdminId != this.SysUser.AdminId {
  208. br.Msg = "无权删除"
  209. return
  210. }
  211. err = ai_summary.DelAiPromptyId(req.AiPromptId)
  212. if err != nil {
  213. br.Msg = "删除失败"
  214. br.ErrMsg = "删除失败,Err:" + err.Error()
  215. return
  216. }
  217. br.Ret = 200
  218. br.Success = true
  219. br.IsAddLog = true
  220. br.Msg = "删除成功"
  221. }
  222. // DetailPrompt
  223. // @Title 获取提示词详情
  224. // @Description 获取提示词详情接口
  225. // @Param AiPromptId query int true "提示词id"
  226. // @Success 200 {object} ppt_english.PptEnglish
  227. // @router /prompt/detail [get]
  228. func (this *AiController) DetailPrompt() {
  229. br := new(models.BaseResponse).Init()
  230. defer func() {
  231. if br.ErrMsg == "" {
  232. br.IsSendEmail = false
  233. }
  234. this.Data["json"] = br
  235. this.ServeJSON()
  236. }()
  237. sysUser := this.SysUser
  238. if sysUser == nil {
  239. br.Msg = "请登录"
  240. br.ErrMsg = "请登录,SysUser Is Empty"
  241. br.Ret = 408
  242. return
  243. }
  244. aiPromptId, _ := this.GetInt("AiPromptId")
  245. promptInfo, err := ai_summary.GetAiPromptById(aiPromptId)
  246. if err != nil {
  247. br.Msg = "提示词不存在"
  248. return
  249. }
  250. br.Ret = 200
  251. br.Success = true
  252. br.Msg = "获取成功"
  253. br.Data = promptInfo
  254. }
  255. // MoveAiPrompt
  256. // @Title 移动提示词
  257. // @Description 移动提示词接口
  258. // @Param request body models.ReqMoveGroupPpt true "type json string"
  259. // @Success 200 Ret=200 移动成功
  260. // @router /prompt/move [post]
  261. func (this *AiController) MoveAiPrompt() {
  262. br := new(models.BaseResponse).Init()
  263. defer func() {
  264. this.Data["json"] = br
  265. this.ServeJSON()
  266. }()
  267. var req ai_summary.ReqMovePrompt
  268. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  269. if err != nil {
  270. br.Msg = "参数解析异常!"
  271. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  272. return
  273. }
  274. if req.AiPromptId <= 0 {
  275. br.Msg = "请输入提示词ID"
  276. return
  277. }
  278. prompt, err := ai_summary.GetAiPromptById(req.AiPromptId)
  279. if err != nil {
  280. if err.Error() == utils.ErrNoRow() {
  281. br.Msg = "当前提示词不存在"
  282. br.ErrMsg = "当前提示词不存在"
  283. return
  284. }
  285. br.Msg = "提示词查询出错"
  286. br.ErrMsg = "提示词查询出错:" + err.Error()
  287. return
  288. }
  289. var updateStr []string
  290. var currentSort, prevSort, nextSort int
  291. currentSort = prompt.Sort
  292. var prevPrompt *ai_summary.AiPrompt
  293. var nextPrompt *ai_summary.AiPrompt
  294. if req.PrevAiPromptId > 0 {
  295. prevPrompt, err = ai_summary.GetAiPromptById(req.PrevAiPromptId)
  296. if err != nil {
  297. if err.Error() == utils.ErrNoRow() {
  298. err = errors.New("目录下的提示词不存在")
  299. return
  300. }
  301. err = errors.New("目录下的提示词查询出错:" + err.Error())
  302. return
  303. }
  304. prevSort = prevPrompt.Sort
  305. }
  306. if req.NextAiPromptId > 0 {
  307. nextPrompt, err = ai_summary.GetAiPromptById(req.NextAiPromptId)
  308. if err != nil {
  309. if err.Error() == utils.ErrNoRow() {
  310. err = errors.New("目录下的提示词不存在")
  311. return
  312. }
  313. err = errors.New("目录下的提示词查询出错:" + err.Error())
  314. return
  315. }
  316. nextSort = nextPrompt.Sort
  317. }
  318. updateStr = append(updateStr, "sort")
  319. //移到两个排序值中间操作
  320. if prevSort >= currentSort {
  321. //往下移动
  322. err = ai_summary.MoveDownPromptBySort(this.SysUser.AdminId, prevSort, currentSort)
  323. if err != nil {
  324. err = errors.New("向下移动提示词出错:" + err.Error())
  325. return
  326. }
  327. prompt.Sort = prevSort
  328. } else if nextSort <= currentSort && nextSort != 0 {
  329. //往上移动
  330. err = ai_summary.MoveUpPromptBySort(this.SysUser.AdminId, nextSort, currentSort)
  331. if err != nil {
  332. err = errors.New("向上移动提示词出错:" + err.Error())
  333. return
  334. }
  335. prompt.Sort = nextSort
  336. }
  337. //更新当前排序
  338. err = prompt.Update(updateStr)
  339. if err != nil {
  340. err = errors.New("移动提示词出错:" + err.Error())
  341. return
  342. }
  343. br.Ret = 200
  344. br.Success = true
  345. br.Msg = "移动成功"
  346. }