ai_pormpt.go 10 KB

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