ai_summary_classify.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. package ai_summary
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "time"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. )
  9. type AiSummaryClassify struct {
  10. AiSummaryClassifyId int `orm:"column(ai_summary_classify_id);pk" gorm:"primaryKey"` // ai纪要分类id
  11. ClassifyName string // 分类名称
  12. ParentId int // 父级id
  13. CreateTime time.Time // 创建时间
  14. ModifyTime time.Time // 修改时间
  15. SysUserId int // 创建人id,使用指针表示可为空
  16. SysUserRealName string // 创建人姓名
  17. Level int // 层级
  18. Sort int // 排序字段,越小越靠前,默认值:10
  19. RootId int // 顶级ID
  20. HasData int `description:"是否含有指标数据"`
  21. }
  22. func AddAiSummaryClassify(item *AiSummaryClassify) (lastId int64, err error) {
  23. o := global.DbMap[utils.DbNameMaster]
  24. err = o.Create(item).Error
  25. if err != nil {
  26. return
  27. }
  28. lastId = int64(item.AiSummaryClassifyId)
  29. return
  30. }
  31. type AiSummaryClassifyItems struct {
  32. AiSummaryClassifyId int
  33. Title string `description:"标题" json:"-"`
  34. ClassifyName string `description:"分类名称"`
  35. ParentId int `description:"父级id"`
  36. HasData int `description:"是否含有指标数据"`
  37. CreateTime time.Time `description:"创建时间"`
  38. ModifyTime time.Time `description:"修改时间"`
  39. SysUserId int `description:"创建人id"`
  40. SysUserRealName string `description:"创建人姓名"`
  41. Level int `description:"层级"`
  42. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  43. AiSummaryId int `description:"纪要id"`
  44. UniqueCode string `description:"唯一编码"`
  45. Children []*AiSummaryClassifyItems `gorm:"-"`
  46. }
  47. type AiSummaryClassifyListResp struct {
  48. AllNodes []*AiSummaryClassifyItems
  49. }
  50. // GetAiSummaryClassifyByParentId
  51. func GetAiSummaryClassifyByParentId(parentId int) (items []*AiSummaryClassifyItems, err error) {
  52. o := global.DbMap[utils.DbNameMaster]
  53. sql := ` SELECT * FROM ai_summary_classify WHERE parent_id=? order by sort asc,ai_summary_classify_id asc`
  54. err = o.Raw(sql, parentId).Find(&items).Error
  55. return
  56. }
  57. // GetAiSummaryInfoByAdminId 获取所有我创建的纪要,用于分类展示
  58. func GetAiSummaryInfoByAdminId(adminId int) (items []*AiSummaryClassifyItems, err error) {
  59. o := global.DbMap[utils.DbNameMaster]
  60. sql := ` SELECT
  61. a.*,
  62. b.ai_summary_classify_id,
  63. b.classify_name
  64. FROM
  65. ai_summary AS a
  66. JOIN ai_summary_classify AS b ON a.classify_id = b.ai_summary_classify_id
  67. WHERE
  68. a.sys_user_id = ?
  69. ORDER BY
  70. a.sort ASC,
  71. a.create_time ASC `
  72. err = o.Raw(sql, adminId).Find(&items).Error
  73. return
  74. }
  75. // GetAiSummaryClassifyAndInfoByParentId
  76. func GetAiSummaryClassifyAndInfoByParentId(parentId int) (items []*AiSummaryClassifyItems, err error) {
  77. o := global.DbMap[utils.DbNameMaster]
  78. sql := ` SELECT
  79. 0 AS ai_summary_id,
  80. ai_summary_classify_id,
  81. classify_name,
  82. parent_id,
  83. create_time,
  84. modify_time,
  85. sys_user_id,
  86. sys_user_real_name AS sys_user_real_name,
  87. sort,
  88. level
  89. FROM
  90. ai_summary_classify
  91. WHERE
  92. parent_id = ? UNION ALL
  93. SELECT
  94. ai_summary_id,
  95. classify_id as ai_summary_classify_id,
  96. title AS classify_name,
  97. 0 AS parent_id,
  98. create_time,
  99. modify_time,
  100. sys_user_id,
  101. sys_user_real_name,
  102. sort,
  103. 0 AS level
  104. FROM
  105. ai_summary
  106. WHERE
  107. classify_id = ?
  108. ORDER BY
  109. sort ASC,
  110. ai_summary_classify_id ASC`
  111. err = o.Raw(sql, parentId, parentId).Find(&items).Error
  112. return
  113. }
  114. type AddAiSummaryClassifyReq struct {
  115. ClassifyName string `description:"分类名称"`
  116. ParentId int `description:"父级id,第一级传0"`
  117. Level int `description:"层级,第一级传0,其余传上一级的层级"`
  118. }
  119. func GetAiSummaryClassifyCount(classifyName string, parentId int) (count int, err error) {
  120. o := global.DbMap[utils.DbNameMaster]
  121. sql := `SELECT COUNT(1) AS count FROM ai_summary_classify WHERE parent_id=? AND classify_name=? `
  122. err = o.Raw(sql, parentId, classifyName).Scan(&count).Error
  123. return
  124. }
  125. // GetAiSummaryClassifyMaxSort 获取ai纪要下最大的排序数
  126. func GetAiSummaryClassifyMaxSort(parentId int) (sort int, err error) {
  127. o := global.DbMap[utils.DbNameMaster]
  128. sql := `SELECT COALESCE(MAX(sort), 0) AS sort FROM ai_summary_classify WHERE parent_id=? `
  129. err = o.Raw(sql, parentId).Scan(&sort).Error
  130. return
  131. }
  132. type EditAiSummaryClassifyReq struct {
  133. ClassifyName string `description:"分类名称"`
  134. AiSummaryClassifyId int `description:"分类id"`
  135. }
  136. func EditSandboxClassify(classifyId int, classifyName string) (err error) {
  137. o := global.DbMap[utils.DbNameMaster]
  138. sql := `UPDATE ai_summary_classify SET classify_name=?, modify_time=NOW() WHERE ai_summary_classify_id=? `
  139. err = o.Exec(sql, classifyName, classifyId).Error
  140. return
  141. }
  142. type AiSummaryClassifyDeleteCheckReq struct {
  143. AiSummaryClassifyId int `description:"分类id"`
  144. }
  145. func GetAiSummaryInfoCountByClassifyId(classifyId int) (count int, err error) {
  146. o := global.DbMap[utils.DbNameMaster]
  147. var pars []interface{}
  148. var sql string
  149. if utils.DbDriverName == utils.DbDriverByDm {
  150. sql = `WITH RECURSIVE ai_summary_classify_cte (ai_summary_classify_id, parent_id) AS (
  151. SELECT ai_summary_classify_id, parent_id
  152. FROM ai_summary_classify
  153. WHERE parent_id = ?
  154. UNION ALL
  155. SELECT c.ai_summary_classify_id, c.parent_id
  156. FROM ai_summary_classify c
  157. INNER JOIN ai_summary_classify_cte ct ON c.parent_id = ct.ai_summary_classify_id
  158. )
  159. SELECT COUNT(1) AS count
  160. FROM ai_summary a
  161. WHERE a.classify_id IN (
  162. SELECT ai_summary_classify_id
  163. FROM ai_summary_classify_cte
  164. UNION
  165. SELECT ai_summary_classify_id
  166. FROM ai_summary_classify
  167. WHERE ai_summary_classify_id = ?
  168. )`
  169. pars = append(pars, classifyId, classifyId)
  170. } else {
  171. sql = ` SELECT COUNT(1) AS count FROM ai_summary AS a
  172. WHERE a.classify_id IN(
  173. SELECT t.ai_summary_classify_id FROM
  174. (
  175. SELECT rd.*
  176. FROM (SELECT * FROM ai_summary_classify WHERE parent_id IS NOT NULL) rd,
  177. (SELECT @pid := ?) pd
  178. WHERE FIND_IN_SET(parent_id, @pid) > 0
  179. AND @pid := CONCAT(@pid, ',', ai_summary_classify_id)
  180. UNION SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id = @pid
  181. )AS t
  182. ) `
  183. pars = append(pars, classifyId)
  184. }
  185. err = o.Raw(sql, pars...).Scan(&count).Error
  186. return
  187. }
  188. type DeleteAiSummaryClassifyReq struct {
  189. AiSummaryClassifyId int `description:"分类id"`
  190. AiSummaryId int `description:"纪要id"`
  191. }
  192. func DeleteAiSummaryClassify(classifyId int) (err error) {
  193. o := global.DbMap[utils.DbNameMaster]
  194. var sql string
  195. var pars []interface{}
  196. if utils.DbDriverName == utils.DbDriverByDm {
  197. sql = `WITH RECURSIVE ai_summary_classify_cte (ai_summary_classify_id, parent_id) AS (
  198. SELECT ai_summary_classify_id, parent_id
  199. FROM ai_summary_classify
  200. WHERE parent_id = ?
  201. UNION ALL
  202. SELECT c.ai_summary_classify_id, c.parent_id
  203. FROM ai_summary_classify c
  204. INNER JOIN ai_summary_classify_cte ct ON c.parent_id = ct.ai_summary_classify_id
  205. )
  206. DELETE FROM ai_summary_classify
  207. WHERE ai_summary_classify_id IN (
  208. SELECT ai_summary_classify_id
  209. FROM ai_summary_classify_cte
  210. UNION
  211. SELECT ai_summary_classify_id
  212. FROM ai_summary_classify
  213. WHERE ai_summary_classify_id = ?
  214. )`
  215. pars = append(pars, classifyId, classifyId)
  216. } else {
  217. sql = ` DELETE FROM ai_summary_classify
  218. WHERE ai_summary_classify_id IN(
  219. SELECT t.ai_summary_classify_id FROM
  220. (
  221. SELECT rd.*
  222. FROM (SELECT * FROM ai_summary_classify WHERE parent_id IS NOT NULL) rd,
  223. (SELECT @pid := ?) pd
  224. WHERE FIND_IN_SET(parent_id, @pid) > 0
  225. AND @pid := CONCAT(@pid, ',', ai_summary_classify_id)
  226. UNION SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id = @pid
  227. )AS t
  228. ) `
  229. pars = append(pars, classifyId)
  230. }
  231. err = o.Exec(sql, pars...).Error
  232. return
  233. }
  234. // MoveAiSummaryClassifyReq 移动纪要分类请求参数
  235. type MoveAiSummaryClassifyReq struct {
  236. AiSummaryClassifyId int `description:"分类id"`
  237. AiSummaryId int `description:"纪要ID"`
  238. ParentClassifyId int `description:"父级分类id 移动纪要时为目标分类id"`
  239. PrevId int `description:"上一个兄弟节点分类id"`
  240. NextId int `description:"下一个兄弟节点分类id"`
  241. PrevType int `description:"上一个兄弟节点类型 1分类 2纪要 "`
  242. NextType int `description:"上一个兄弟节点类型 1分类 2纪要 "`
  243. }
  244. func GetAiSummaryClassifyById(classifyId int) (item *AiSummaryClassify, err error) {
  245. o := global.DbMap[utils.DbNameMaster]
  246. sql := `SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id=? `
  247. err = o.Raw(sql, classifyId).First(&item).Error
  248. return
  249. }
  250. func GetAiSummaryClassifyCountById(classifyId int) (count int, err error) {
  251. o := global.DbMap[utils.DbNameMaster]
  252. sql := `SELECT count(1) AS count FROM ai_summary_classify WHERE ai_summary_classify_id=? `
  253. err = o.Raw(sql, classifyId).Scan(&count).Error
  254. return
  255. }
  256. // Update 更新沙盘分类基础信息
  257. func (aiSummaryClassify *AiSummaryClassify) Update(cols []string) (err error) {
  258. o := global.DbMap[utils.DbNameMaster]
  259. err = o.Select(cols).Updates(aiSummaryClassify).Error
  260. return
  261. }
  262. // GetFirstAiSummaryClassifyByParentId 获取当前父级沙盘分类下的排序第一条的数据
  263. func GetFirstAiSummaryClassifyByParentId(parentId int) (item *AiSummaryClassify, err error) {
  264. o := global.DbMap[utils.DbNameMaster]
  265. sql := ` SELECT * FROM ai_summary_classify WHERE parent_id=? order by sort asc,ai_summary_classify_id asc limit 1`
  266. err = o.Raw(sql, parentId).First(&item).Error
  267. return
  268. }
  269. // UpdateSandboxClassifySortByParentId 根据沙盘父类id更新排序
  270. func UpdateAiSummaryClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string) (err error) {
  271. o := global.DbMap[utils.DbNameMaster]
  272. sql := ` update ai_summary_classify set sort = ` + updateSort + ` WHERE parent_id=? and sort > ? `
  273. if classifyId > 0 {
  274. sql += ` or ( ai_summary_classify_id > ` + fmt.Sprint(classifyId) + ` and sort= ` + fmt.Sprint(nowSort) + `)`
  275. }
  276. err = o.Exec(sql, parentId, nowSort).Error
  277. return
  278. }
  279. // 获取所有子级分类id
  280. func GetAiSummaryClassifySubcategories(classifyId int) (Ids string, err error) {
  281. o := global.DbMap[utils.DbNameMaster]
  282. sql := `SELECT GROUP_CONCAT(ai_summary_classify_id) AS ids
  283. FROM (
  284. SELECT @pv := ? AS ai_summary_classify_id
  285. UNION ALL
  286. SELECT sc.ai_summary_classify_id
  287. FROM ai_summary_classify sc
  288. JOIN (SELECT @pv := ?) initial
  289. WHERE sc.parent_id = @pv
  290. ) subcategories; `
  291. err = o.Raw(sql, classifyId, classifyId).Scan(&Ids).Error
  292. return
  293. }
  294. func GetAiSummaryClassify(aiSummaryClassify int) (aiSummaryClassifyIds string, err error) {
  295. o := global.DbMap[utils.DbNameMaster]
  296. sql := `SELECT GROUP_CONCAT(t.ai_summary_classify_id) AS ai_summary_classify_id FROM (
  297. SELECT a.ai_summary_classify_id FROM ai_summary_classify AS a
  298. WHERE a.ai_summary_classify_id=?
  299. UNION ALL
  300. SELECT a.ai_summary_classify_id FROM ai_summary_classify AS a
  301. WHERE a.parent_id=? UNION ALL
  302. SELECT
  303. ai_summary_classify_id
  304. FROM
  305. ai_summary_classify
  306. WHERE
  307. parent_id IN ( SELECT ai_summary_classify_id FROM ai_summary_classify WHERE parent_id = ? )
  308. )AS t`
  309. err = o.Raw(sql, aiSummaryClassify, aiSummaryClassify, aiSummaryClassify).Scan(&aiSummaryClassifyIds).Error
  310. return
  311. }
  312. func GetAiSummaryAllParentByClassifyId(aiSummaryClassifyId int) (ids string, err error) {
  313. o := global.DbMap[utils.DbNameMaster]
  314. var sql string
  315. if utils.DbDriverName == utils.DbDriverByDm {
  316. sql = `WITH RECURSIVE parent_tree (ai_summary_classify_id, parent_id, level) AS (
  317. -- 获取起始节点的父级
  318. SELECT ai_summary_classify_id, parent_id, 1 as level
  319. FROM ai_summary_classify
  320. WHERE ai_summary_classify_id = (
  321. SELECT parent_id
  322. FROM ai_summary_classify
  323. WHERE ai_summary_classify_id = ?
  324. )
  325. UNION ALL
  326. -- 递归获取所有上级节点
  327. SELECT ac.ai_summary_classify_id, ac.parent_id, pt.level + 1
  328. FROM ai_summary_classify ac
  329. JOIN parent_tree pt ON ac.ai_summary_classify_id = pt.parent_id
  330. WHERE ac.parent_id IS NOT NULL
  331. )
  332. SELECT LISTAGG(ai_summary_classify_id, ',') WITHIN GROUP (ORDER BY level DESC) AS ids
  333. FROM parent_tree`
  334. }else{
  335. sql = `SELECT
  336. GROUP_CONCAT(DISTINCT m.ai_summary_classify_id ORDER BY m.level) AS ids
  337. FROM
  338. (
  339. SELECT
  340. @id AS _id,(
  341. SELECT
  342. @id := parent_id
  343. FROM
  344. ai_summary_classify
  345. WHERE
  346. ai_summary_classify_id = _id
  347. )
  348. FROM
  349. (
  350. SELECT
  351. @id :=(
  352. SELECT
  353. parent_id
  354. FROM
  355. ai_summary_classify
  356. WHERE
  357. ai_summary_classify_id = ?
  358. )) vm,
  359. ai_summary_classify m
  360. WHERE
  361. @id IS NOT NULL
  362. ) vm
  363. INNER JOIN ai_summary_classify m
  364. WHERE
  365. ai_summary_classify_id = vm._id `
  366. }
  367. err = o.Raw(sql, aiSummaryClassifyId).Scan(&ids).Error
  368. return
  369. }
  370. type AiSummaryListResp struct {
  371. Paging *paging.PagingItem
  372. List []*AiSummaryItems
  373. }
  374. // GetAiSummaryClassifyAll
  375. func GetAiSummaryClassifyAll() (items []*AiSummaryClassifyItems, err error) {
  376. o := global.DbMap[utils.DbNameMaster]
  377. sql := ` SELECT * FROM ai_summary_classify WHERE parent_id<>0 order by sort asc,ai_summary_classify_id asc`
  378. err = o.Raw(sql).Find(&items).Error
  379. return
  380. }
  381. func GetAiSummaryClassifyAllIncludeParent() (items []*AiSummaryClassifyItems, err error) {
  382. o := global.DbMap[utils.DbNameMaster]
  383. sql := ` SELECT * FROM ai_summary_classify order by sort asc,ai_summary_classify_id asc`
  384. err = o.Raw(sql).Find(&items).Error
  385. return
  386. }