edb_classify.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package data_manage
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "time"
  6. )
  7. type EdbClassify struct {
  8. ClassifyId int `orm:"column(classify_id);pk"`
  9. ClassifyType uint8 `description:"分类类型,0:普通指标分类,1:预测指标分类"`
  10. ClassifyName string `description:"分类名称"`
  11. ParentId int `description:"父级id"`
  12. ParentIdTwo int `description:"三级id"`
  13. HasData int `description:"是否含有指标数据"`
  14. CreateTime time.Time `description:"创建时间"`
  15. ModifyTime time.Time `description:"修改时间"`
  16. SysUserId int `description:"创建人id"`
  17. SysUserRealName string `description:"创建人姓名"`
  18. Level int `description:"层级"`
  19. UniqueCode string `description:"唯一编码"`
  20. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  21. }
  22. func AddEdbClassify(item *EdbClassify) (lastId int64, err error) {
  23. o := orm.NewOrmUsingDB("data")
  24. lastId, err = o.Insert(item)
  25. return
  26. }
  27. type AddEdbClassifyReq struct {
  28. ClassifyName string `description:"分类名称"`
  29. ParentId int `description:"父级id,第一级传0"`
  30. Level int `description:"层级,第一级传0,其余传上一级的层级"`
  31. ClassifyType uint8 `description:"分类类型,0:普通指标分类,1:预测指标分类"`
  32. }
  33. func GetEdbClassifyCount(classifyName string, parentId int, classifyType uint8) (count int, err error) {
  34. o := orm.NewOrmUsingDB("data")
  35. sql := `SELECT COUNT(1) AS count FROM edb_classify WHERE parent_id=? AND classify_name=? AND classify_type = ? `
  36. err = o.Raw(sql, parentId, classifyName, classifyType).QueryRow(&count)
  37. return
  38. }
  39. type EditEdbClassifyReq struct {
  40. ClassifyName string `description:"分类名称"`
  41. ClassifyId int `description:"分类名称"`
  42. }
  43. func GetEdbClassifyById(classifyId int) (item *EdbClassify, err error) {
  44. o := orm.NewOrmUsingDB("data")
  45. sql := `SELECT * FROM edb_classify WHERE classify_id=? `
  46. err = o.Raw(sql, classifyId).QueryRow(&item)
  47. return
  48. }
  49. func GetEdbClassifyCountById(classifyId int) (count int, err error) {
  50. o := orm.NewOrmUsingDB("data")
  51. sql := `SELECT count(1) AS count FROM edb_classify WHERE classify_id=? `
  52. err = o.Raw(sql, classifyId).QueryRow(&count)
  53. return
  54. }
  55. func EditEdbClassify(classifyId int, classifyName string) (err error) {
  56. o := orm.NewOrmUsingDB("data")
  57. sql := `UPDATE edb_classify SET classify_name=?,modify_time=NOW() WHERE classify_id=? `
  58. _, err = o.Raw(sql, classifyName, classifyId).Exec()
  59. return
  60. }
  61. type DeleteEdbClassifyReq struct {
  62. ClassifyId int `description:"分类id"`
  63. EdbInfoId int `description:"指标id"`
  64. }
  65. func GetEdbInfoCountByClassifyId(classifyId int) (count int, err error) {
  66. o := orm.NewOrmUsingDB("data")
  67. sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
  68. WHERE a.classify_id IN(
  69. SELECT t.classify_id FROM
  70. (
  71. SELECT rd.*
  72. FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
  73. (SELECT @pid := ?) pd
  74. WHERE FIND_IN_SET(parent_id, @pid) > 0
  75. AND @pid := CONCAT(@pid, ',', classify_id)
  76. UNION SELECT * FROM edb_classify WHERE classify_id = @pid
  77. )AS t
  78. ) `
  79. err = o.Raw(sql, classifyId).QueryRow(&count)
  80. return
  81. }
  82. func DeleteEdbClassify(classifyId int) (err error) {
  83. o := orm.NewOrmUsingDB("data")
  84. sql := ` DELETE FROM edb_classify
  85. WHERE classify_id IN(
  86. SELECT t.classify_id FROM
  87. (
  88. SELECT rd.*
  89. FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
  90. (SELECT @pid := ?) pd
  91. WHERE FIND_IN_SET(parent_id, @pid) > 0
  92. AND @pid := CONCAT(@pid, ',', classify_id)
  93. UNION SELECT * FROM edb_classify WHERE classify_id = @pid
  94. )AS t
  95. ) `
  96. _, err = o.Raw(sql, classifyId).Exec()
  97. return
  98. }
  99. func GetEdbClassifyByParentId(parentId int, classifyType int8) (items []*EdbClassifyItems, err error) {
  100. o := orm.NewOrmUsingDB("data")
  101. sql := ` SELECT * FROM edb_classify WHERE parent_id=? AND classify_type = ? order by sort asc,classify_id asc`
  102. _, err = o.Raw(sql, parentId, classifyType).QueryRows(&items)
  103. return
  104. }
  105. // GetEdbClassifyAll 获取普通指标的分类列表
  106. func GetEdbClassifyAll() (items []*EdbClassifyItems, err error) {
  107. o := orm.NewOrmUsingDB("data")
  108. sql := ` SELECT * FROM edb_classify WHERE parent_id<>0 AND classify_type = 0 order by sort asc,classify_id asc`
  109. _, err = o.Raw(sql).QueryRows(&items)
  110. return
  111. }
  112. // GetPredictEdbClassifyAll 获取预测指标的分类列表
  113. func GetPredictEdbClassifyAll() (items []*EdbClassifyItems, err error) {
  114. o := orm.NewOrmUsingDB("data")
  115. sql := ` SELECT * FROM edb_classify WHERE classify_type = 1 order by sort asc,classify_id asc`
  116. _, err = o.Raw(sql).QueryRows(&items)
  117. return
  118. }
  119. type EdbClassifyItems struct {
  120. ClassifyId int `description:"分类id"`
  121. EdbInfoId int `description:"指标id"`
  122. ClassifyName string
  123. ClassifyNameEn string
  124. ParentId int
  125. ParentIdTwo int
  126. Level int `description:"层级"`
  127. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  128. UniqueCode string `description:"唯一编码"`
  129. Source int `description:"来源id"`
  130. SourceName string `description:"来源名称"`
  131. SysUserId int `description:"创建人id"`
  132. SysUserRealName string `description:"创建人姓名"`
  133. StartDate string
  134. EdbCode string
  135. EdbType int `description:"指标类型:1:基础指标,2:计算指标"`
  136. Children []*EdbClassifyItems
  137. Button EdbClassifyItemsButton `description:"操作权限"`
  138. }
  139. // EdbClassifyItemsButton 操作按钮
  140. type EdbClassifyItemsButton struct {
  141. AddButton bool `description:"是否可添加"`
  142. OpButton bool `description:"是否可编辑"`
  143. DeleteButton bool `description:"是否可删除"`
  144. MoveButton bool `description:"是否可移动"`
  145. ShowEdbRelation bool `description:"是否展示关联指标"`
  146. ShowChartRelation bool `description:"是否展示关联图表"`
  147. InsertNewDataButton bool `description:"是否可插入最新值"`
  148. }
  149. type EdbClassifyListResp struct {
  150. AllNodes []*EdbClassifyItems
  151. CanOpClassify bool `description:"是否允许操作分类"`
  152. Language string `description:"指标的展示语言,CN:中文,EN:英文"`
  153. }
  154. type ClassifyDeleteCheckResp struct {
  155. DeleteStatus int `description:"检测状态:0:默认值,如果为0,继续走其他校验,1:若目录关联指标不可删除,2:确认删除当前目录及包含的子目录吗,3:当前指标已用作画图,不可删除"`
  156. TipsMsg string `description:"提示信息"`
  157. }
  158. type ClassifyDeleteCheckReq struct {
  159. ClassifyId int `description:"分类id"`
  160. EdbInfoId int `description:"指标id"`
  161. }
  162. func GetClassifyCountByClassifyId(classifyId int) (count int, err error) {
  163. o := orm.NewOrmUsingDB("data")
  164. sql := ` SELECT COUNT(1) AS count FROM (
  165. SELECT rd.*
  166. FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
  167. (SELECT @pid := ?) pd
  168. WHERE FIND_IN_SET(parent_id, @pid) > 0
  169. AND @pid := CONCAT(@pid, ',', classify_id)
  170. UNION SELECT * FROM edb_classify WHERE classify_id = @pid
  171. )AS t
  172. WHERE t.classify_id<>? `
  173. err = o.Raw(sql, classifyId, classifyId).QueryRow(&count)
  174. return
  175. }
  176. type EdbClassifySimplify struct {
  177. ClassifyId int `description:"分类id"`
  178. ClassifyName string `description:"分类名称"`
  179. ParentId int
  180. }
  181. // 递归获取所有目录
  182. func GetClassifyAllByClassifyId(classifyId int) (resultList []*EdbClassifySimplify, err error) {
  183. fmt.Println("185")
  184. o := orm.NewOrmUsingDB("data")
  185. for {
  186. sql := ` SELECT * FROM edb_classify AS a
  187. WHERE a.classify_id=? order by sort asc,classify_id asc`
  188. item := new(EdbClassifySimplify)
  189. err = o.Raw(sql, classifyId).QueryRow(&item)
  190. if err != nil {
  191. break
  192. }
  193. if item.ClassifyId > 0 {
  194. resultList = append(resultList, item)
  195. classifyId = item.ParentId
  196. } else {
  197. break
  198. }
  199. }
  200. return resultList, err
  201. }
  202. // MoveEdbClassifyReq 移动分类请求参数
  203. type MoveEdbClassifyReq struct {
  204. ClassifyId int `description:"分类id"`
  205. ParentClassifyId int `description:"父级分类id"`
  206. PrevClassifyId int `description:"上一个兄弟节点分类id"`
  207. NextClassifyId int `description:"下一个兄弟节点分类id"`
  208. }
  209. // GetFirstEdbClassifyByParentId 获取当前父级分类下,且排序数相同 的排序第一条的数据
  210. func GetFirstEdbClassifyByParentId(parentId int) (item *EdbClassify, err error) {
  211. o := orm.NewOrmUsingDB("data")
  212. sql := ` SELECT * FROM edb_classify WHERE parent_id=? order by sort asc,classify_id asc limit 1`
  213. err = o.Raw(sql, parentId).QueryRow(&item)
  214. return
  215. }
  216. // UpdateEdbClassifySortByParentId 根据父类id更新排序
  217. func UpdateEdbClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string, classifyType uint8) (err error) {
  218. o := orm.NewOrmUsingDB("data")
  219. sql := ` update edb_classify set sort = ` + updateSort + ` WHERE parent_id=? AND sort > ? AND classify_type = ? `
  220. if classifyId > 0 {
  221. sql += ` or ( classify_id > ` + fmt.Sprint(classifyId) + ` and sort = ` + fmt.Sprint(nowSort) + `)`
  222. }
  223. _, err = o.Raw(sql, parentId, nowSort, classifyType).Exec()
  224. return
  225. }
  226. // Update 更新分类基础信息
  227. func (edbClassify *EdbClassify) Update(cols []string) (err error) {
  228. o := orm.NewOrmUsingDB("data")
  229. _, err = o.Update(edbClassify, cols...)
  230. return
  231. }
  232. // GetEdbClassifyMaxSort 获取分类下最大的排序数
  233. func GetEdbClassifyMaxSort(parentId int, classifyType uint8) (sort int, err error) {
  234. o := orm.NewOrmUsingDB("data")
  235. sql := `SELECT Max(sort) AS sort FROM edb_classify WHERE parent_id=? AND classify_type=? `
  236. err = o.Raw(sql, parentId, classifyType).QueryRow(&sort)
  237. return
  238. }
  239. type ClassifyEdbInfoListResp struct {
  240. EdbInfoList []*EdbClassifyItems
  241. }
  242. // GetEdbClassifyAllV2 获取普通指标的分类列表
  243. func GetEdbClassifyAllV2() (items []*EdbClassifyItems, err error) {
  244. o := orm.NewOrmUsingDB("data")
  245. sql := ` SELECT * FROM edb_classify WHERE parent_id_two <>0 AND classify_type = 0 order by sort asc,classify_id asc`
  246. _, err = o.Raw(sql).QueryRows(&items)
  247. return
  248. }
  249. func GetEdbClassifyByParentIdTwo(parentIdTwo int, classifyType int8) (items []*EdbClassifyItems, err error) {
  250. o := orm.NewOrmUsingDB("data")
  251. sql := ` SELECT * FROM edb_classify WHERE parent_id_two=? AND classify_type = ? order by sort asc,classify_id asc`
  252. _, err = o.Raw(sql, parentIdTwo, classifyType).QueryRows(&items)
  253. return
  254. }
  255. type AddEdbClassifyReqV2 struct {
  256. ClassifyName string `description:"分类名称"`
  257. ParentId int `description:"父级id,第一级传0"`
  258. ParentIdTwo int `description:"二级id,第一级传0"`
  259. Level int `description:"层级,第一级传0,其余传上一级的层级"`
  260. ClassifyType uint8 `description:"分类类型,0:普通指标分类,1:预测指标分类"`
  261. }
  262. // GetEdbClassifyMaxSortV2 获取分类下最大的排序数
  263. func GetEdbClassifyMaxSortV2(parentId,parentIdTwo int, classifyType uint8) (sort int, err error) {
  264. o := orm.NewOrmUsingDB("data")
  265. sql := `SELECT Max(sort) AS sort FROM edb_classify WHERE parent_id=? AND parent_id_two=? AND classify_type=? `
  266. err = o.Raw(sql, parentId,parentIdTwo, classifyType).QueryRow(&sort)
  267. return
  268. }