ai_summary.go 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817
  1. package ai
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/ai_summary"
  6. "eta/eta_api/models/aimod"
  7. "eta/eta_api/models/sandbox"
  8. aiSummaryService "eta/eta_api/services/ai_summary"
  9. "eta/eta_api/utils"
  10. "fmt"
  11. "time"
  12. )
  13. // AiSummaryClassifyItems
  14. // @Title 获取所有ai纪要分类接口
  15. // @Description 获取所有ai纪要分类接口
  16. // @Param IsShowMe query bool true "是否只看我的,true、false"
  17. // @Success 200 {object} data_manage.ChartClassifyListResp
  18. // @router /summary/classify/list [get]
  19. func (this *AiController) AiSummaryClassifyItems() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. resp := new(ai_summary.AiSummaryClassifyListResp)
  26. aiSummaryClassifyId, _ := this.GetInt("AiSummaryClassifyId")
  27. isShowMe, _ := this.GetBool("IsShowMe")
  28. if isShowMe {
  29. errMsg, err := aiSummaryService.GetAiSummaryClassifyListForMe(*this.SysUser, resp, aiSummaryClassifyId)
  30. if err != nil {
  31. br.Msg = errMsg
  32. br.ErrMsg = err.Error()
  33. return
  34. }
  35. br.Ret = 200
  36. br.Success = true
  37. br.Msg = "获取成功"
  38. br.Data = resp
  39. fmt.Println("source my classify")
  40. return
  41. }
  42. rootList, err := ai_summary.GetAiSummaryClassifyAndInfoByParentId(aiSummaryClassifyId)
  43. if err != nil && err.Error() != utils.ErrNoRow() {
  44. br.Msg = "获取失败"
  45. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  46. return
  47. }
  48. classifyAll, err := ai_summary.GetAiSummaryClassifyAndInfoByParentId(aiSummaryClassifyId)
  49. if err != nil && err.Error() != utils.ErrNoRow() {
  50. br.Msg = "获取失败"
  51. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  52. return
  53. }
  54. nodeAll := make([]*ai_summary.AiSummaryClassifyItems, 0)
  55. for k := range rootList {
  56. rootNode := rootList[k]
  57. aiSummaryService.AiSummaryClassifyItemsMakeTreeV2(this.SysUser, classifyAll, rootNode)
  58. nodeAll = append(nodeAll, rootNode)
  59. }
  60. resp.AllNodes = nodeAll
  61. br.Ret = 200
  62. br.Success = true
  63. br.Msg = "获取成功"
  64. br.Data = resp
  65. }
  66. // @Title 新增ai纪要分类
  67. // @Description 新增ai纪要分类接口
  68. // @Param request body data_manage.AddChartClassifyReq true "type json string"
  69. // @Success 200 Ret=200 保存成功
  70. // @router /summary/classify/add [post]
  71. func (this *AiController) AddSandboxClassify() {
  72. br := new(models.BaseResponse).Init()
  73. defer func() {
  74. this.Data["json"] = br
  75. this.ServeJSON()
  76. }()
  77. var req ai_summary.AddAiSummaryClassifyReq
  78. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  79. if err != nil {
  80. br.Msg = "参数解析异常!"
  81. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  82. return
  83. }
  84. if req.ClassifyName == "" {
  85. br.Msg = "请输入分类名称"
  86. br.IsSendEmail = false
  87. return
  88. }
  89. if req.ParentId < 0 {
  90. br.Msg = "参数错误"
  91. br.IsSendEmail = false
  92. return
  93. }
  94. count, err := ai_summary.GetAiSummaryClassifyCount(req.ClassifyName, req.ParentId)
  95. if err != nil {
  96. br.Msg = "判断名称是否已存在失败"
  97. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  98. return
  99. }
  100. if count > 0 {
  101. br.Msg = "分类名称已存在,请重新输入"
  102. br.IsSendEmail = false
  103. return
  104. }
  105. //获取该层级下最大的排序数
  106. maxSort, err := ai_summary.GetAiSummaryClassifyMaxSort(req.ParentId)
  107. classify := new(ai_summary.AiSummaryClassify)
  108. classify.ParentId = req.ParentId
  109. classify.ClassifyName = req.ClassifyName
  110. classify.HasData = 0
  111. classify.CreateTime = time.Now()
  112. classify.ModifyTime = time.Now()
  113. classify.SysUserId = this.SysUser.AdminId
  114. classify.SysUserRealName = this.SysUser.RealName
  115. classify.Level = req.Level + 1
  116. classify.Sort = maxSort + 1
  117. _, err = ai_summary.AddAiSummaryClassify(classify)
  118. if err != nil {
  119. br.Msg = "保存分类失败"
  120. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  121. return
  122. }
  123. br.Ret = 200
  124. br.Msg = "保存成功"
  125. br.Success = true
  126. }
  127. // @Title 修改ai纪要分类
  128. // @Description 修改ai纪要分类接口
  129. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  130. // @Success 200 Ret=200 修改成功
  131. // @router /summary/classify/edit [post]
  132. func (this *AiController) EditAiSummaryClassify() {
  133. br := new(models.BaseResponse).Init()
  134. defer func() {
  135. this.Data["json"] = br
  136. this.ServeJSON()
  137. }()
  138. var req ai_summary.EditAiSummaryClassifyReq
  139. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  140. if err != nil {
  141. br.Msg = "参数解析异常!"
  142. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  143. return
  144. }
  145. if req.ClassifyName == "" {
  146. br.Msg = "请输入分类名称"
  147. br.IsSendEmail = false
  148. return
  149. }
  150. if req.AiSummaryClassifyId <= 0 {
  151. br.Msg = "参数错误"
  152. br.IsSendEmail = false
  153. return
  154. }
  155. err = ai_summary.EditSandboxClassify(req.AiSummaryClassifyId, req.ClassifyName)
  156. if err != nil {
  157. br.Msg = "保存失败"
  158. br.ErrMsg = "保存失败,Err:" + err.Error()
  159. return
  160. }
  161. br.Ret = 200
  162. br.Msg = "保存成功"
  163. br.Success = true
  164. br.IsAddLog = true
  165. }
  166. // @Title 删除纪要分类检测接口
  167. // @Description 删除纪要分类检测接口
  168. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  169. // @Success 200 Ret=200 检测成功
  170. // @router /summary/classify/delete/check [post]
  171. func (this *AiController) DeleteSandboxClassifyCheck() {
  172. br := new(models.BaseResponse).Init()
  173. defer func() {
  174. this.Data["json"] = br
  175. this.ServeJSON()
  176. }()
  177. var req ai_summary.AiSummaryClassifyDeleteCheckReq
  178. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  179. if err != nil {
  180. br.Msg = "参数解析异常!"
  181. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  182. return
  183. }
  184. if req.AiSummaryClassifyId < 0 {
  185. br.Msg = "参数错误"
  186. br.IsSendEmail = false
  187. return
  188. }
  189. var deleteStatus int
  190. var tipsMsg string
  191. //删除分类
  192. if req.AiSummaryClassifyId > 0 {
  193. //判断分类下,是否含有纪要
  194. count, err := ai_summary.GetAiSummaryInfoCountByClassifyId(req.AiSummaryClassifyId)
  195. if err != nil {
  196. br.Msg = "删除失败"
  197. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  198. return
  199. }
  200. if count > 0 {
  201. deleteStatus = 1
  202. tipsMsg = "该分类下关联沙盘不可删除"
  203. }
  204. }
  205. if deleteStatus != 1 {
  206. classifyCount, err := ai_summary.GetAiSummaryInfoCountByClassifyId(req.AiSummaryClassifyId)
  207. if err != nil && err.Error() != utils.ErrNoRow() {
  208. br.Msg = "删除失败"
  209. br.ErrMsg = "分类下是否含有沙盘失败,Err:" + err.Error()
  210. return
  211. }
  212. if classifyCount > 0 {
  213. deleteStatus = 2
  214. tipsMsg = "确认删除当前目录及包含的子目录吗"
  215. }
  216. }
  217. if deleteStatus == 0 {
  218. tipsMsg = "可删除,进行删除操作"
  219. }
  220. resp := new(sandbox.SandboxClassifyDeleteCheckResp)
  221. resp.DeleteStatus = deleteStatus
  222. resp.TipsMsg = tipsMsg
  223. br.Ret = 200
  224. br.Msg = "检测成功"
  225. br.Success = true
  226. br.Data = resp
  227. }
  228. // @Title 删除纪要分类/纪要
  229. // @Description 删除纪要分类/纪要接口
  230. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  231. // @Success 200 Ret=200 删除成功
  232. // @router /summary/classify/delete [post]
  233. func (this *AiController) DeleteAiSummaryClassify() {
  234. br := new(models.BaseResponse).Init()
  235. defer func() {
  236. this.Data["json"] = br
  237. this.ServeJSON()
  238. }()
  239. sysUser := this.SysUser
  240. if sysUser == nil {
  241. br.Msg = "请登录"
  242. br.ErrMsg = "请登录,SysUser Is Empty"
  243. br.Ret = 408
  244. return
  245. }
  246. var req ai_summary.DeleteAiSummaryClassifyReq
  247. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  248. if err != nil {
  249. br.Msg = "参数解析异常!"
  250. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  251. return
  252. }
  253. if req.AiSummaryClassifyId < 0 && req.AiSummaryId <= 0 {
  254. br.Msg = "参数错误"
  255. br.IsSendEmail = false
  256. return
  257. }
  258. //删除分类
  259. if req.AiSummaryClassifyId > 0 && req.AiSummaryId == 0 {
  260. //判断是否含有纪要
  261. count, err := ai_summary.GetAiSummaryInfoCountByClassifyId(req.AiSummaryClassifyId)
  262. if err != nil && err.Error() != utils.ErrNoRow() {
  263. br.Msg = "删除失败"
  264. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  265. return
  266. }
  267. if count > 0 {
  268. br.Msg = "该目录下存在纪要,不可删除"
  269. br.IsSendEmail = false
  270. return
  271. }
  272. err = ai_summary.DeleteAiSummaryClassify(req.AiSummaryClassifyId)
  273. if err != nil {
  274. br.Msg = "删除失败"
  275. br.ErrMsg = "删除失败,Err:" + err.Error()
  276. return
  277. }
  278. }
  279. //删除沙盘
  280. if req.AiSummaryId > 0 {
  281. summaryInfo, err := ai_summary.GetAiSummaryById(req.AiSummaryId)
  282. if err != nil {
  283. if err.Error() == utils.ErrNoRow() {
  284. br.Msg = "沙盘已删除,请刷新页面"
  285. br.ErrMsg = "指标不存在,Err:" + err.Error()
  286. return
  287. } else {
  288. br.Msg = "删除失败"
  289. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  290. return
  291. }
  292. }
  293. if summaryInfo == nil {
  294. br.Msg = "纪要已删除,请刷新页面"
  295. return
  296. }
  297. err = ai_summary.DelAiSummaryById(req.AiSummaryId)
  298. if err != nil {
  299. br.Msg = err.Error()
  300. return
  301. }
  302. }
  303. br.Ret = 200
  304. br.Msg = "删除成功"
  305. br.Success = true
  306. br.IsAddLog = true
  307. }
  308. // AiSummaryClassifyMove
  309. // @Title 纪要分类移动接口
  310. // @Description 纪要分类移动接口
  311. // @Success 200 {object} data_manage.MoveChartClassifyReq
  312. // @router /summary/classify/move [post]
  313. func (this *AiController) AiSummaryClassifyMove() {
  314. br := new(models.BaseResponse).Init()
  315. defer func() {
  316. this.Data["json"] = br
  317. this.ServeJSON()
  318. }()
  319. sysUser := this.SysUser
  320. if sysUser == nil {
  321. br.Msg = "请登录"
  322. br.ErrMsg = "请登录,SysUser Is Empty"
  323. br.Ret = 408
  324. return
  325. }
  326. var req ai_summary.MoveAiSummaryClassifyReq
  327. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  328. if err != nil {
  329. br.Msg = "参数解析异常!"
  330. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  331. return
  332. }
  333. if req.AiSummaryClassifyId <= 0 {
  334. br.Msg = "参数错误"
  335. br.ErrMsg = "分类id小于等于0"
  336. return
  337. }
  338. //判断分类是否存在
  339. aiSummaryClassifyInfo, err := ai_summary.GetAiSummaryClassifyById(req.AiSummaryClassifyId)
  340. if err != nil {
  341. br.Msg = "移动失败"
  342. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  343. return
  344. }
  345. updateCol := make([]string, 0)
  346. // 判断移动的是分类还是沙盘
  347. if req.AiSummaryId > 0 {
  348. //判断分类是否存在
  349. count, _ := ai_summary.GetAiSummaryClassifyCountById(req.AiSummaryClassifyId)
  350. if count <= 0 {
  351. br.Msg = "分类已被删除,不可移动,请刷新页面"
  352. return
  353. }
  354. aiSummaryInfo, err := ai_summary.GetAiSummaryById(req.AiSummaryId)
  355. if err != nil {
  356. br.Msg = "移动失败"
  357. br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
  358. return
  359. }
  360. //如果改变了分类,那么移动该图表数据
  361. // 11/22 ETA逻辑优化去除名称重复限制
  362. if aiSummaryInfo.ClassifyId != req.ParentClassifyId {
  363. ////查询需要修改的分类下是否存在同一个图表名称
  364. //tmpSandboxInfo, tmpErr := sandbox.GetSandboxByClassifyIdAndName(req.ParentClassifyId, aiSummaryInfo.Name)
  365. //if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  366. // br.Msg = "移动失败"
  367. // br.ErrMsg = "移动失败,Err:" + tmpErr.Error()
  368. // return
  369. //}
  370. //if tmpSandboxInfo != nil {
  371. // br.Msg = "移动失败,同一个分类下沙盘名称不允许重复"
  372. // br.ErrMsg = "移动失败,同一个分类下沙盘名称不允许重复"
  373. // return
  374. //}
  375. err = ai_summary.MoveAiSummary(req.AiSummaryId, req.ParentClassifyId)
  376. if err != nil {
  377. br.Msg = "移动失败"
  378. br.ErrMsg = "移动失败,Err:" + err.Error()
  379. return
  380. }
  381. }
  382. //移动排序
  383. updateCol := make([]string, 0)
  384. //如果有传入 上一个兄弟节点分类id
  385. if req.PrevId > 0 {
  386. if req.PrevType == 1 {
  387. //上一个兄弟节点
  388. prevClassify, err := ai_summary.GetAiSummaryClassifyById(req.PrevId)
  389. if err != nil {
  390. br.Msg = "移动失败"
  391. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  392. return
  393. }
  394. //如果是移动在两个兄弟节点之间
  395. if req.NextId > 0 {
  396. if req.NextType == 1 {
  397. //上一个节点是分类 下一个节点是分类的情况
  398. //下一个兄弟节点
  399. nextClassify, err := ai_summary.GetAiSummaryClassifyById(req.NextId)
  400. if err != nil {
  401. br.Msg = "移动失败"
  402. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  403. return
  404. }
  405. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  406. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == aiSummaryClassifyInfo.Sort {
  407. //变更兄弟节点的排序
  408. updateSortStr := `sort + 2`
  409. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, prevClassify.AiSummaryClassifyId, prevClassify.Sort, updateSortStr)
  410. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  411. } else {
  412. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  413. if nextClassify.Sort-prevClassify.Sort == 1 {
  414. //变更兄弟节点的排序
  415. updateSortStr := `sort + 1`
  416. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  417. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  418. }
  419. }
  420. } else {
  421. //上一个节点是分类 下一个节点是沙盘的情况
  422. //下一个兄弟节点
  423. nextChartInfo, err := ai_summary.GetAiSummaryById(req.NextId)
  424. if err != nil {
  425. br.Msg = "移动失败"
  426. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  427. return
  428. }
  429. //如果上一个兄弟(分类)与下一个兄弟(沙盘)的排序权重是一致的,那么需要将下一个兄弟(沙盘)(以及下个兄弟(沙盘)的同样排序权重)的排序权重+2,自己变成上一个兄弟(分类)的排序权重+1
  430. if prevClassify.Sort == nextChartInfo.Sort || prevClassify.Sort == aiSummaryInfo.Sort {
  431. //变更兄弟节点的排序
  432. updateSortStr := `sort + 2`
  433. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, prevClassify.AiSummaryClassifyId, prevClassify.Sort, updateSortStr)
  434. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  435. } else {
  436. //如果下一个兄弟(沙盘)的排序权重正好是上个兄弟节点(分类)的下一层,那么需要再加一层了
  437. if nextChartInfo.Sort-prevClassify.Sort == 1 {
  438. //变更兄弟节点的排序
  439. updateSortStr := `sort + 1`
  440. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.AiSummaryClassifyId, updateSortStr)
  441. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  442. }
  443. }
  444. }
  445. }
  446. aiSummaryInfo.Sort = prevClassify.Sort + 1
  447. aiSummaryInfo.ModifyTime = time.Now()
  448. updateCol = append(updateCol, "Sort", "ModifyTime")
  449. } else {
  450. prevAiSumary, err := ai_summary.GetAiSummaryById(req.PrevId)
  451. if err != nil {
  452. br.Msg = "移动失败"
  453. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  454. return
  455. }
  456. //如果是移动在两个兄弟节点之间
  457. if req.NextId > 0 {
  458. if req.NextType == 1 {
  459. //上一个节点是沙盘 下一个节点是分类的情况
  460. //下一个兄弟节点
  461. nextClassify, err := ai_summary.GetAiSummaryClassifyById(req.NextId)
  462. if err != nil {
  463. br.Msg = "移动失败"
  464. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  465. return
  466. }
  467. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  468. if prevAiSumary.Sort == nextClassify.Sort || prevAiSumary.Sort == aiSummaryClassifyInfo.Sort {
  469. //变更兄弟节点的排序
  470. updateSortStr := `sort + 2`
  471. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  472. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  473. } else {
  474. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  475. if nextClassify.Sort-prevAiSumary.Sort == 1 {
  476. //变更兄弟节点的排序
  477. updateSortStr := `sort + 1`
  478. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  479. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  480. }
  481. }
  482. } else {
  483. //上一个节点是沙盘 下一个节点是沙盘的情况
  484. //下一个兄弟节点
  485. nextChartInfo, err := ai_summary.GetAiSummaryById(req.NextId)
  486. if err != nil {
  487. br.Msg = "移动失败"
  488. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  489. return
  490. }
  491. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  492. if prevAiSumary.Sort == nextChartInfo.Sort || prevAiSumary.Sort == aiSummaryInfo.Sort {
  493. //变更兄弟节点的排序
  494. updateSortStr := `sort + 2`
  495. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  496. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  497. } else {
  498. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  499. if nextChartInfo.Sort-prevAiSumary.Sort == 1 {
  500. //变更兄弟节点的排序
  501. updateSortStr := `sort + 1`
  502. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  503. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  504. }
  505. }
  506. }
  507. }
  508. aiSummaryInfo.Sort = prevAiSumary.Sort + 1
  509. aiSummaryInfo.ModifyTime = time.Now()
  510. updateCol = append(updateCol, "Sort", "ModifyTime")
  511. }
  512. } else {
  513. // prevId为0,也就是沙盘移到最前端
  514. firstClassify, err := ai_summary.GetFirstAiSummaryByClassifyId(req.AiSummaryClassifyId)
  515. if err != nil && err.Error() != utils.ErrNoRow() {
  516. br.Msg = "移动失败"
  517. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  518. return
  519. }
  520. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  521. if firstClassify != nil && firstClassify.Sort == 0 {
  522. updateSortStr := ` sort + 1 `
  523. _ = ai_summary.UpdateAiSummarySortByClassifyId(firstClassify.ClassifyId, 0, firstClassify.AiSummaryId-1, updateSortStr)
  524. }
  525. aiSummaryInfo.Sort = 0 //那就是排在第一位
  526. aiSummaryInfo.ModifyTime = time.Now()
  527. updateCol = append(updateCol, "Sort", "ModifyTime")
  528. }
  529. //更新
  530. if len(updateCol) > 0 {
  531. err = aiSummaryInfo.Update(updateCol)
  532. if err != nil {
  533. br.Msg = "移动失败"
  534. br.ErrMsg = "修改失败,Err:" + err.Error()
  535. return
  536. }
  537. }
  538. } else {
  539. //移动的是分类
  540. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  541. if aiSummaryClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  542. parentChartClassifyInfo, err := ai_summary.GetAiSummaryClassifyById(req.ParentClassifyId)
  543. if err != nil {
  544. br.Msg = "移动失败"
  545. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  546. return
  547. }
  548. aiSummaryClassifyInfo.ParentId = parentChartClassifyInfo.AiSummaryClassifyId
  549. aiSummaryClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  550. aiSummaryClassifyInfo.ModifyTime = time.Now()
  551. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  552. } else if aiSummaryClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId == 0 {
  553. //改为一级分类
  554. aiSummaryClassifyInfo.ParentId = req.ParentClassifyId
  555. aiSummaryClassifyInfo.Level = 1
  556. aiSummaryClassifyInfo.ModifyTime = time.Now()
  557. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  558. }
  559. //如果有传入 上一个兄弟节点分类id
  560. if req.PrevId > 0 {
  561. if req.PrevType == 1 {
  562. //上一个节点是分类
  563. //上一个兄弟节点
  564. prevClassify, err := ai_summary.GetAiSummaryClassifyById(req.PrevId)
  565. if err != nil {
  566. br.Msg = "移动失败"
  567. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  568. return
  569. }
  570. //如果是移动在两个兄弟节点之间
  571. if req.NextId > 0 {
  572. if req.NextType == 1 {
  573. //上一个节点是分类 下一个节点是分类的情况
  574. //下一个兄弟节点
  575. nextClassify, err := ai_summary.GetAiSummaryClassifyById(req.NextId)
  576. if err != nil {
  577. br.Msg = "移动失败"
  578. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  579. return
  580. }
  581. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  582. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == aiSummaryClassifyInfo.Sort {
  583. //变更兄弟节点的排序
  584. updateSortStr := `sort + 2`
  585. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, prevClassify.AiSummaryClassifyId, prevClassify.Sort, updateSortStr)
  586. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  587. } else {
  588. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  589. if nextClassify.Sort-prevClassify.Sort == 1 {
  590. //变更兄弟节点的排序
  591. updateSortStr := `sort + 1`
  592. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  593. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  594. }
  595. }
  596. } else {
  597. //上一个节点是分类 下一个节点是沙盘的情况
  598. //下一个兄弟节点
  599. nextChartInfo, err := ai_summary.GetAiSummaryById(req.NextId)
  600. if err != nil {
  601. br.Msg = "移动失败"
  602. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  603. return
  604. }
  605. //如果上一个兄弟(分类)与下一个兄弟(沙盘)的排序权重是一致的,那么需要将下一个兄弟(沙盘)(以及下个兄弟(沙盘)的同样排序权重)的排序权重+2,自己变成上一个兄弟(分类)的排序权重+1
  606. if prevClassify.Sort == nextChartInfo.Sort || prevClassify.Sort == aiSummaryClassifyInfo.Sort {
  607. //变更兄弟节点的排序
  608. updateSortStr := `sort + 2`
  609. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, prevClassify.AiSummaryClassifyId, prevClassify.Sort, updateSortStr)
  610. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  611. } else {
  612. //如果下一个兄弟(沙盘)的排序权重正好是上个兄弟节点(分类)的下一层,那么需要再加一层了
  613. if nextChartInfo.Sort-prevClassify.Sort == 1 {
  614. //变更兄弟节点的排序
  615. updateSortStr := `sort + 1`
  616. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.AiSummaryClassifyId, updateSortStr)
  617. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevClassify.AiSummaryClassifyId, prevClassify.Sort, 0, updateSortStr)
  618. }
  619. }
  620. }
  621. }
  622. aiSummaryClassifyInfo.Sort = prevClassify.Sort + 1
  623. aiSummaryClassifyInfo.ModifyTime = time.Now()
  624. updateCol = append(updateCol, "Sort", "ModifyTime")
  625. } else {
  626. //上一个节点是沙盘
  627. prevAiSumary, err := ai_summary.GetAiSummaryById(req.PrevId)
  628. if err != nil {
  629. br.Msg = "移动失败"
  630. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  631. return
  632. }
  633. //如果是移动在两个兄弟节点之间
  634. if req.NextId > 0 {
  635. if req.NextType == 1 {
  636. //上一个节点是沙盘 下一个节点是分类的情况
  637. //下一个兄弟节点
  638. nextClassify, err := ai_summary.GetAiSummaryClassifyById(req.NextId)
  639. if err != nil {
  640. br.Msg = "移动失败"
  641. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  642. return
  643. }
  644. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  645. if prevAiSumary.Sort == nextClassify.Sort || prevAiSumary.Sort == aiSummaryClassifyInfo.Sort {
  646. //变更兄弟节点的排序
  647. updateSortStr := `sort + 2`
  648. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  649. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  650. } else {
  651. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  652. if nextClassify.Sort-prevAiSumary.Sort == 1 {
  653. //变更兄弟节点的排序
  654. updateSortStr := `sort + 1`
  655. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  656. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  657. }
  658. }
  659. } else {
  660. //上一个节点是沙盘 下一个节点是沙盘的情况
  661. //下一个兄弟节点
  662. nextChartInfo, err := ai_summary.GetAiSummaryById(req.NextId)
  663. if err != nil {
  664. br.Msg = "移动失败"
  665. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  666. return
  667. }
  668. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  669. if prevAiSumary.Sort == nextChartInfo.Sort || prevAiSumary.Sort == aiSummaryClassifyInfo.Sort {
  670. //变更兄弟节点的排序
  671. updateSortStr := `sort + 2`
  672. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  673. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  674. } else {
  675. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  676. if nextChartInfo.Sort-prevAiSumary.Sort == 1 {
  677. //变更兄弟节点的排序
  678. updateSortStr := `sort + 1`
  679. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(prevAiSumary.ClassifyId, 0, prevAiSumary.Sort, updateSortStr)
  680. _ = ai_summary.UpdateAiSummarySortByClassifyId(prevAiSumary.ClassifyId, prevAiSumary.Sort, prevAiSumary.AiSummaryId, updateSortStr)
  681. }
  682. }
  683. }
  684. }
  685. aiSummaryClassifyInfo.Sort = prevAiSumary.Sort + 1
  686. aiSummaryClassifyInfo.ModifyTime = time.Now()
  687. updateCol = append(updateCol, "Sort", "ModifyTime")
  688. }
  689. } else {
  690. firstClassify, err := ai_summary.GetFirstAiSummaryClassifyByParentId(aiSummaryClassifyInfo.ParentId)
  691. if err != nil && err.Error() != utils.ErrNoRow() {
  692. br.Msg = "移动失败"
  693. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  694. return
  695. }
  696. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  697. if firstClassify != nil && firstClassify.Sort == 0 {
  698. updateSortStr := ` sort + 1 `
  699. _ = ai_summary.UpdateAiSummaryClassifySortByParentId(firstClassify.ParentId, firstClassify.AiSummaryClassifyId-1, 0, updateSortStr)
  700. }
  701. aiSummaryClassifyInfo.Sort = 0 //那就是排在第一位
  702. aiSummaryClassifyInfo.ModifyTime = time.Now()
  703. updateCol = append(updateCol, "Sort", "ModifyTime")
  704. }
  705. //更新
  706. if len(updateCol) > 0 {
  707. err = aiSummaryClassifyInfo.Update(updateCol)
  708. if err != nil {
  709. br.Msg = "移动失败"
  710. br.ErrMsg = "修改失败,Err:" + err.Error()
  711. return
  712. }
  713. }
  714. }
  715. br.Ret = 200
  716. br.Success = true
  717. br.Msg = "移动成功"
  718. }
  719. // @Title 获取话题列表
  720. // @Description 获取话题列表接口
  721. // @Success 200 {object} aimod.AiChatTopicListResp
  722. // @router /summary/list [get]
  723. func (this *AiController) SummaryList() {
  724. br := new(models.BaseResponse).Init()
  725. defer func() {
  726. this.Data["json"] = br
  727. this.ServeJSON()
  728. }()
  729. sysUser := this.SysUser
  730. if sysUser == nil {
  731. br.Msg = "请登录"
  732. br.ErrMsg = "请登录,SysUser Is Empty"
  733. br.Ret = 408
  734. return
  735. }
  736. list, err := aimod.GetAiChatTopicList(sysUser.AdminId)
  737. if err != nil {
  738. br.Msg = "获取数据失败!"
  739. br.ErrMsg = "获取主题记录信息失败,Err:" + err.Error()
  740. return
  741. }
  742. resp := new(aimod.AiChatTopicListResp)
  743. resp.List = list
  744. br.Ret = 200
  745. br.Success = true
  746. br.Msg = "获取成功"
  747. br.Data = resp
  748. }