sandbox_classify.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package sandbox
  2. import (
  3. "eta_gn/eta_api/global"
  4. "fmt"
  5. "time"
  6. )
  7. type SandboxClassify struct {
  8. SandboxClassifyId int `gorm:"primaryKey;column:sandbox_classify_id;type:int(11);not null"`
  9. SandboxClassifyName string `gorm:"column:sandbox_classify_name;type:varchar(255);not null;default:''"` // 分类名称
  10. ParentId int `gorm:"column:parent_id;type:int(11);not null;default:0"` // 父级id
  11. HasData int `gorm:"column:has_data;type:tinyint(4);default:0"` // 是否存在指标数据:1有,2:无
  12. CreateTime time.Time `gorm:"column:create_time;type:datetime"` // 创建时间
  13. ModifyTime time.Time `gorm:"column:modify_time;type:datetime"` // 修改时间
  14. SysUserId int `gorm:"column:sys_user_id;type:int(11)"` // 创建人id
  15. SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(50)"` // 创建人姓名
  16. Level int `gorm:"column:level;type:int(11);default:0"` // 层级
  17. Sort int `gorm:"column:sort;type:int(9) unsigned;default:10"` // 排序字段,越小越靠前,默认值:10
  18. ChartPermissionId int `gorm:"column:chart_permission_id;type:int(9) unsigned;not null;default:0"` // 品种id
  19. ChartPermissionName string `gorm:"column:chart_permission_name;type:varchar(32);not null;default:''"` // 品种名称(冗余字段,避免列表页查询时再去关联表查询)
  20. }
  21. func AddSandboxClassify(item *SandboxClassify) (lastId int64, err error) {
  22. err = global.DmSQL["data"].Create(item).Error
  23. return
  24. }
  25. // GetSandboxClassifyByParentId
  26. func GetSandboxClassifyByParentId(parentId int) (items []*SandboxClassifyItems, err error) {
  27. sql := ` SELECT * FROM sandbox_classify WHERE parent_id=? order by sort asc,sandbox_classify_id asc`
  28. err = global.DmSQL["data"].Raw(sql, parentId).Find(&items).Error
  29. return
  30. }
  31. // GetSandboxClassifyAll
  32. func GetSandboxClassifyAll() (items []*SandboxClassifyItems, err error) {
  33. sql := ` SELECT * FROM sandbox_classify WHERE parent_id<>0 order by sort asc,sandbox_classify_id asc`
  34. err = global.DmSQL["data"].Raw(sql).Find(&items).Error
  35. return
  36. }
  37. type SandboxClassifyItems struct {
  38. SandboxClassifyId int `gorm:"primaryKey;column:sandbox_classify_id;type:int(11);not null"`
  39. SandboxClassifyName string `gorm:"column:sandbox_classify_name;type:varchar(255);not null;default:''"` // 分类名称
  40. ParentId int `gorm:"column:parent_id;type:int(11);not null;default:0"` // 父级id
  41. HasData int `gorm:"column:has_data;type:tinyint(4);default:0"` // 是否存在指标数据:1有,2:无
  42. CreateTime time.Time `gorm:"column:create_time;type:datetime"` // 创建时间
  43. ModifyTime time.Time `gorm:"column:modify_time;type:datetime"` // 修改时间
  44. SysUserId int `gorm:"column:sys_user_id;type:int(11)"` // 创建人id
  45. SysUserRealName string `gorm:"column:sys_user_real_name;type:varchar(50)"` // 创建人姓名
  46. Level int `gorm:"column:level;type:int(11);default:0"` // 层级
  47. Sort int `gorm:"column:sort;type:int(9) unsigned;default:10"` // 排序字段,越小越靠前,默认值:10
  48. ChartPermissionId int `gorm:"column:chart_permission_id;type:int(9) unsigned;not null;default:0"` // 品种id
  49. ChartPermissionName string `gorm:"column:chart_permission_name;type:varchar(32);not null;default:''"` // 品种名称(冗余字段,避免列表页查询时再去关联表查询)
  50. Children []*SandboxClassifyItems `gorm:"-"`
  51. SandboxId int `gorm:"column:sandbox_id" description:"沙盘id"`
  52. }
  53. type SandboxClassifyListResp struct {
  54. AllNodes []*SandboxClassifyItems
  55. }
  56. type AddSandboxClassifyReq struct {
  57. SandboxClassifyName string `description:"分类名称"`
  58. ParentId int `description:"父级id,第一级传0"`
  59. Level int `description:"层级,第一级传0,其余传上一级的层级"`
  60. ChartPermissionId int `description:"品种id"`
  61. ChartPermissionName string `description:"品种名称"`
  62. }
  63. func GetSandboxClassifyCount(sandboxClassifyName string, parentId int) (count int, err error) {
  64. sql := `SELECT COUNT(1) AS count FROM sandbox_classify WHERE parent_id=? AND sandbox_classify_name=? `
  65. err = global.DmSQL["data"].Raw(sql, parentId, sandboxClassifyName).Scan(&count).Error
  66. return
  67. }
  68. // GetSandboxClassifyMaxSort 获取沙盘分类下最大的排序数
  69. func GetSandboxClassifyMaxSort(parentId int) (sort int, err error) {
  70. sql := `SELECT COALESCE(MAX(sort), 0) AS sort FROM sandbox_classify WHERE parent_id=? `
  71. err = global.DmSQL["data"].Raw(sql, parentId).Scan(&sort).Error
  72. return
  73. }
  74. type EditSandboxClassifyReq struct {
  75. SandboxClassifyName string `description:"分类名称"`
  76. SandboxClassifyId int `description:"分类id"`
  77. ChartPermissionId int `description:"品种id"`
  78. ChartPermissionName string `description:"品种名称"`
  79. }
  80. func GetSandboxClassifyById(classifyId int) (item *SandboxClassify, err error) {
  81. sql := `SELECT * FROM sandbox_classify WHERE sandbox_classify_id=? `
  82. err = global.DmSQL["data"].Raw(sql, classifyId).First(&item).Error
  83. return
  84. }
  85. func EditSandboxClassify(classifyId, ChartPermissionId int, sandboxClassifyName, ChartPermissionName string) (err error) {
  86. sql := `UPDATE sandbox_classify SET sandbox_classify_name=?,chart_permission_id = ?, chart_permission_name = ?, modify_time=NOW() WHERE sandbox_classify_id=? `
  87. err = global.DmSQL["data"].Exec(sql, sandboxClassifyName, ChartPermissionId, ChartPermissionName, classifyId).Error
  88. return
  89. }
  90. type SandboxClassifyDeleteCheckReq struct {
  91. SandboxClassifyId int `description:"分类id"`
  92. }
  93. func GetSandboxInfoCountByClassifyId(classifyId int) (count int, err error) {
  94. var sql string
  95. var pars []interface{}
  96. sql = `WITH RECURSIVE classify_tree (sandbox_classify_id, parent_id, level) AS (
  97. -- 基础查询:获取起始节点
  98. SELECT sandbox_classify_id, parent_id, 1 as level
  99. FROM sandbox_classify
  100. WHERE sandbox_classify_id = ?
  101. UNION ALL
  102. -- 递归查询:获取所有子节点
  103. SELECT c.sandbox_classify_id, c.parent_id, t.level + 1
  104. FROM sandbox_classify c
  105. INNER JOIN classify_tree t ON c.parent_id = t.sandbox_classify_id
  106. WHERE c.parent_id IS NOT NULL
  107. )
  108. SELECT COUNT(1) AS count
  109. FROM sandbox a
  110. WHERE a.sandbox_classify_id IN (
  111. SELECT sandbox_classify_id
  112. FROM classify_tree
  113. )
  114. AND a.is_delete = 0`
  115. pars = append(pars, classifyId, classifyId)
  116. err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error
  117. return
  118. }
  119. type SandboxClassifyDeleteCheckResp struct {
  120. DeleteStatus int `description:"检测状态:0:默认值,如果为0,继续走其他校验,1:该分类下关联图表不可删除,2:确认删除当前目录及包含的子目录吗"`
  121. TipsMsg string `description:"提示信息"`
  122. }
  123. type DeleteSandboxClassifyReq struct {
  124. SandboxClassifyId int `description:"分类id"`
  125. SandboxId int `description:"指标id"`
  126. }
  127. func DeleteSandboxClassify(classifyId int) (err error) {
  128. var pars []interface{}
  129. var sql string
  130. sql = `WITH RECURSIVE sandbox_classify_cte (sandbox_classify_id, parent_id) AS (
  131. SELECT sandbox_classify_id, parent_id
  132. FROM sandbox_classify
  133. WHERE parent_id = ?
  134. UNION ALL
  135. SELECT c.sandbox_classify_id, c.parent_id
  136. FROM sandbox_classify c
  137. INNER JOIN sandbox_classify_cte ct ON c.parent_id = ct.sandbox_classify_id
  138. )
  139. DELETE FROM sandbox_classify
  140. WHERE sandbox_classify_id IN (
  141. SELECT sandbox_classify_id
  142. FROM sandbox_classify_cte
  143. UNION
  144. SELECT sandbox_classify_id
  145. FROM sandbox_classify
  146. WHERE sandbox_classify_id = ?
  147. )`
  148. pars = append(pars, classifyId, classifyId)
  149. err = global.DmSQL["data"].Exec(sql, pars...).Error
  150. return
  151. }
  152. // MoveSandboxClassifyReq 移动沙盘分类请求参数
  153. type MoveSandboxClassifyReq struct {
  154. ClassifyId int `description:"分类id"`
  155. SandboxId int `description:"沙盘ID"`
  156. ParentClassifyId int `description:"父级分类id 移动沙盘时为目标分类id"`
  157. PrevId int `description:"上一个兄弟节点分类id"`
  158. NextId int `description:"下一个兄弟节点分类id"`
  159. PrevType int `description:"上一个兄弟节点类型 1分类 2沙盘 "`
  160. NextType int `description:"上一个兄弟节点类型 1分类 2沙盘 "`
  161. }
  162. // UpdateSandboxClassifySortByParentId 根据沙盘父类id更新排序
  163. func UpdateSandboxClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string) (err error) {
  164. sql := ` update sandbox_classify set sort = ` + updateSort + ` WHERE parent_id=? and sort > ? `
  165. if classifyId > 0 {
  166. sql += ` or ( sandbox_classify_id > ` + fmt.Sprint(classifyId) + ` and sort= ` + fmt.Sprint(nowSort) + `)`
  167. }
  168. err = global.DmSQL["data"].Exec(sql, parentId, nowSort).Error
  169. return
  170. }
  171. // GetFirstSandboxClassifyByParentId 获取当前父级沙盘分类下的排序第一条的数据
  172. func GetFirstSandboxClassifyByParentId(parentId int) (item *SandboxClassify, err error) {
  173. sql := ` SELECT * FROM sandbox_classify WHERE parent_id=? order by sort asc,sandbox_classify_id asc limit 1`
  174. err = global.DmSQL["data"].Raw(sql, parentId).First(&item).Error
  175. return
  176. }
  177. // Update 更新沙盘分类基础信息
  178. func (sandboxClassify *SandboxClassify) Update(cols []string) (err error) {
  179. err = global.DmSQL["data"].Select(cols).Updates(sandboxClassify).Error
  180. return
  181. }
  182. // GetSandboxClassifyAndInfoByParentId
  183. func GetSandboxClassifyAndInfoByParentId(parentId int) (items []*SandboxClassifyItems, err error) {
  184. sql := ` SELECT
  185. 0 AS sandbox_id,
  186. sandbox_classify_id,
  187. sandbox_classify_name,
  188. parent_id,
  189. create_time,
  190. modify_time,
  191. sys_user_id,
  192. sys_user_real_name AS sys_user_name,
  193. sort,
  194. level,
  195. chart_permission_id,
  196. chart_permission_name,
  197. 0 AS is_delete
  198. FROM
  199. sandbox_classify
  200. WHERE
  201. parent_id = ? UNION ALL
  202. SELECT
  203. sandbox_id,
  204. sandbox_classify_id,
  205. name AS sandbox_classify_name,
  206. 0 AS parent_id,
  207. create_time,
  208. modify_time,
  209. sys_user_id,
  210. sys_user_name,
  211. sort,
  212. 0 AS level,
  213. chart_permission_id,
  214. chart_permission_name,
  215. is_delete
  216. FROM
  217. sandbox
  218. WHERE
  219. sandbox_classify_id = ? AND is_delete = 0
  220. ORDER BY
  221. sort ASC,
  222. sandbox_classify_id ASC`
  223. err = global.DmSQL["data"].Raw(sql, parentId, parentId).Find(&items).Error
  224. return
  225. }
  226. type SandboxLinkCheckReq struct {
  227. EdbInfoIdList []int `description:"指标id列表"`
  228. ChartInfoIdList []int `description:"图库id列表"`
  229. ReportIdList []int `description:"报告id列表"`
  230. }
  231. type SandboxLinkCheckItem struct {
  232. Id int `description:"id"`
  233. Name string `description:"名称"`
  234. UniqueCode string `description:"唯一编码"`
  235. ClassifyId int `description:"分类id"`
  236. }
  237. type SandboxLinkCheckResp struct {
  238. EdbInfoIdList []*SandboxLinkCheckItem `description:"指标id列表"`
  239. ChartInfoIdList []*SandboxLinkCheckItem `description:"图库id列表"`
  240. ReportIdList []*SandboxLinkCheckItem `description:"报告id列表"`
  241. }
  242. // GetSandboxClassifySubcategories 获取所有子级分类id
  243. func GetSandboxClassifySubcategories(classifyId int) (Ids string, err error) {
  244. sql := `WITH RECURSIVE Subcategories (sandbox_classify_id) AS (
  245. SELECT ? AS sandbox_classify_id
  246. FROM DUAL
  247. UNION ALL
  248. SELECT sc.sandbox_classify_id
  249. FROM sandbox_classify sc
  250. JOIN Subcategories s
  251. ON sc.parent_id = s.sandbox_classify_id
  252. )
  253. SELECT LISTAGG(sandbox_classify_id, ',') WITHIN GROUP (ORDER BY sandbox_classify_id) AS ids
  254. FROM Subcategories;`
  255. err = global.DmSQL["data"].Raw(sql, classifyId).First(&Ids).Error
  256. return
  257. }
  258. // UpdateSandboxClassifyChartPermissionById 根据沙盘id更新品种
  259. func UpdateSandboxClassifyChartPermissionById(ChartPermissionId int, ChartPermissionName, Ids string) (err error) {
  260. sql := ` UPDATE sandbox_classify SET chart_permission_id = ?, chart_permission_name = ? WHERE sandbox_classify_id IN ( ` + Ids + ` ) `
  261. err = global.DmSQL["data"].Exec(sql, ChartPermissionId, ChartPermissionName).Error
  262. return
  263. }
  264. // GetAllSandboxClassify
  265. func GetAllSandboxClassify() (items []*SandboxClassifyItems, err error) {
  266. sql := ` SELECT * FROM sandbox_classify `
  267. err = global.DmSQL["data"].Raw(sql).Find(&items).Error
  268. return
  269. }