ai_summary_classify.go 14 KB

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