public_edb_classify.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. package data_manage
  2. import (
  3. "eta_gn/eta_api/global"
  4. "fmt"
  5. "time"
  6. )
  7. // EdbPublicClassify
  8. // @Description: 公共分类
  9. type EdbPublicClassify struct {
  10. EdbPublicClassifyId int `gorm:"primaryKey" `
  11. ClassifyType uint8 `description:"分类类型,0:普通指标分类,1:预测指标分类,2:指标加工的分类(普通指标的计算指标)"`
  12. EdbPublicClassifyName string `description:"分类名称"`
  13. ParentId int `description:"父级id"`
  14. HasData int `description:"是否含有指标数据"`
  15. RootId int `description:"顶级id"`
  16. CreateTime time.Time `description:"创建时间"`
  17. ModifyTime time.Time `description:"修改时间"`
  18. SysUserId int `description:"创建人id"`
  19. SysUserRealName string `description:"创建人姓名"`
  20. Level int `description:"层级"`
  21. UniqueCode string `description:"唯一编码"`
  22. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  23. LastModifyUserId int `description:"最后修改人ID"`
  24. LastModifyUserRealName string `description:"最后修改人姓名"`
  25. EdbPublicClassifyNamePath string `description:"分类名称的完整路径,格式为:父级分类名称|当前分类名称"`
  26. EdbPublicClassifyIdPath string `description:"分类的完整路径,格式为:父级ID,当前ID"`
  27. }
  28. func (m EdbPublicClassify) ToEdbClassifyItems() *EdbClassifyItems {
  29. return &EdbClassifyItems{
  30. ClassifyId: m.EdbPublicClassifyId,
  31. //EdbInfoId: 0,
  32. ClassifyType: m.ClassifyType,
  33. ClassifyName: m.EdbPublicClassifyName,
  34. ClassifyNameEn: m.EdbPublicClassifyName,
  35. ParentId: m.ParentId,
  36. RootId: m.RootId,
  37. Level: m.Level,
  38. Sort: m.Sort,
  39. UniqueCode: m.UniqueCode,
  40. //Source: 0,
  41. //SourceName: "",
  42. SysUserId: m.SysUserId,
  43. SysUserRealName: m.SysUserRealName,
  44. //StartDate: "",
  45. //EdbCode: "",
  46. //EdbType: 0,
  47. //Children: nil,
  48. //Button: EdbClassifyItemsButton{},
  49. //IsJoinPermission: 0,
  50. //HaveOperaAuth: false,
  51. ClassifyIdPath: m.EdbPublicClassifyIdPath,
  52. }
  53. }
  54. // Add
  55. // @Description: 添加分类
  56. // @author: Roc
  57. // @receiver m
  58. // @datetime 2024-12-04 17:00:18
  59. // @return err error
  60. func (m *EdbPublicClassify) Add() (err error) {
  61. err = global.DmSQL["data"].Create(m).Error
  62. return
  63. }
  64. // Update
  65. // @Description: 更新分类基础信息
  66. // @author: Roc
  67. // @receiver m
  68. // @datetime 2024-12-04 17:01:51
  69. // @param cols []string
  70. // @return err error
  71. func (m *EdbPublicClassify) Update(cols []string) (err error) {
  72. err = global.DmSQL["data"].Select(cols).Updates(m).Error
  73. return
  74. }
  75. // GetEdbClassifyById
  76. // @Description: 根据id获取分类
  77. // @author: Roc
  78. // @receiver m
  79. // @datetime 2024-12-04 16:56:15
  80. // @param classifyId int
  81. // @return item *EdbPublicClassify
  82. // @return err error
  83. func (m EdbPublicClassify) GetEdbClassifyById(classifyId int) (item *EdbPublicClassify, err error) {
  84. sql := `SELECT * FROM edb_public_classify WHERE edb_public_classify_id=? `
  85. err = global.DmSQL["data"].Raw(sql, classifyId).First(&item).Error
  86. return
  87. }
  88. // GetEdbClassifyByIdList
  89. // @Description: 根据id列表获取分类列表
  90. // @author: Roc
  91. // @receiver m
  92. // @datetime 2024-12-04 16:56:15
  93. // @param classifyIdList []int
  94. // @return items []*EdbPublicClassify
  95. // @return err error
  96. func (m EdbPublicClassify) GetEdbClassifyByIdList(classifyIdList []int) (items []*EdbPublicClassify, err error) {
  97. if len(classifyIdList) <= 0 {
  98. return
  99. }
  100. sql := `SELECT * FROM edb_public_classify WHERE edb_public_classify_id in (?) `
  101. err = global.DmSQL["data"].Raw(sql, classifyIdList).Find(&items).Error
  102. return
  103. }
  104. // GetEdbClassifyListByParentId
  105. // @Description: 根据父级id获取下级分类列表
  106. // @author: Roc
  107. // @receiver m
  108. // @datetime 2024-12-03 13:57:48
  109. // @param parentId int
  110. // @param classifyType int8
  111. // @return items []*EdbPublicClassify
  112. // @return err error
  113. func (m EdbPublicClassify) GetEdbClassifyListByParentId(parentId int, classifyType int8) (items []*EdbPublicClassify, err error) {
  114. o := global.DmSQL["data"]
  115. sql := `SELECT * FROM edb_public_classify WHERE parent_id=? AND classify_type = ? order by sort asc,edb_public_classify_id asc `
  116. err = o.Raw(sql, parentId, classifyType).Find(&items).Error
  117. return
  118. }
  119. // GetEdbClassifyItemsByParentId
  120. // @Description: 根据父级id获取下级分类列表(结构型的)
  121. // @author: Roc
  122. // @receiver m
  123. // @datetime 2024-12-03 13:56:18
  124. // @param parentId int
  125. // @param classifyType int8
  126. // @return items []*EdbClassifyItems
  127. // @return err error
  128. func (m EdbPublicClassify) GetEdbClassifyItemsByParentId(parentId int, classifyType int8) (items []*EdbClassifyItems, err error) {
  129. list, err := m.GetEdbClassifyListByParentId(parentId, classifyType)
  130. if err != nil {
  131. return
  132. }
  133. for _, v := range list {
  134. items = append(items, v.ToEdbClassifyItems())
  135. }
  136. return
  137. }
  138. // GetEdbClassifyListByParentId
  139. // @Description: 根据父级id获取下级分类列表
  140. // @author: Roc
  141. // @receiver m
  142. // @datetime 2024-12-03 13:57:48
  143. // @param parentId int
  144. // @param classifyType int8
  145. // @return items []*EdbPublicClassify
  146. // @return err error
  147. func (m EdbPublicClassify) GetEdbClassifyListByType(classifyType int8) (items []*EdbPublicClassify, err error) {
  148. o := global.DmSQL["data"]
  149. sql := `SELECT * FROM edb_public_classify WHERE classify_type = ? order by sort asc,edb_public_classify_id asc `
  150. err = o.Raw(sql, classifyType).Find(&items).Error
  151. return
  152. }
  153. // GetAllEdbClassifyByType 根据类型获取分类列表
  154. func (m EdbPublicClassify) GetAllEdbClassifyByType(classifyType int8) (items []*EdbClassifyItems, err error) {
  155. list, err := m.GetEdbClassifyListByType(int8(classifyType))
  156. if err != nil {
  157. return
  158. }
  159. for _, v := range list {
  160. items = append(items, v.ToEdbClassifyItems())
  161. }
  162. return
  163. }
  164. func (m EdbPublicClassify) GetEdbClassifyCount(classifyName string, parentId int, classifyType uint8) (count int, err error) {
  165. sql := `SELECT COUNT(1) AS count FROM edb_public_classify WHERE parent_id=? AND edb_public_classify_name=? AND classify_type = ? `
  166. err = global.DmSQL["data"].Raw(sql, parentId, classifyName, classifyType).Scan(&count).Error
  167. return
  168. }
  169. // UpdateEdbClassifyNameAndNamePath
  170. // @Description: 更新分类信息
  171. // @author: Roc
  172. // @receiver m
  173. // @datetime 2024-12-05 09:27:33
  174. // @param cols []string
  175. // @param oldClassifyNamePath string
  176. // @param newClassifyNamePath string
  177. // @return err error
  178. func (m *EdbPublicClassify) UpdateEdbClassifyNameAndNamePath(cols []string, oldClassifyNamePath, newClassifyNamePath string) (err error) {
  179. tx := global.DmSQL["data"].Begin()
  180. defer func() {
  181. if err != nil {
  182. _ = tx.Rollback()
  183. return
  184. }
  185. _ = tx.Commit()
  186. }()
  187. // 变更分类信息
  188. err = tx.Select(cols).Updates(m).Error
  189. if err != nil {
  190. return
  191. }
  192. // 更改子分类的完整的路径
  193. if oldClassifyNamePath != `` && newClassifyNamePath != `` {
  194. sql := `UPDATE edb_public_classify SET edb_public_classify_name_path = REPLACE(edb_public_classify_name_path,?,?) WHERE edb_public_classify_id_path LIKE ?`
  195. err = tx.Exec(sql, oldClassifyNamePath, newClassifyNamePath, fmt.Sprint(m.EdbPublicClassifyIdPath+`,%`)).Error
  196. if err != nil {
  197. return
  198. }
  199. }
  200. return
  201. }
  202. // GetEdbClassifyMaxSort 获取分类下最大的排序数
  203. func (m EdbPublicClassify) GetEdbClassifyMaxSort(parentId int, classifyType uint8) (sort int, err error) {
  204. sql := `SELECT COALESCE(Max(sort), 0) AS sort FROM edb_public_classify WHERE parent_id=? AND classify_type=? `
  205. err = global.DmSQL["data"].Raw(sql, parentId, classifyType).Scan(&sort).Error
  206. return
  207. }
  208. // GetEdbInfoCountByClassifyIdList
  209. // @Description: 根据公共分类id集合获取名下指标数量
  210. // @author: Roc
  211. // @receiver m
  212. // @datetime 2024-12-05 09:59:56
  213. // @param classifyIdList []int
  214. // @return count int
  215. // @return err error
  216. func (m EdbPublicClassify) GetEdbInfoCountByClassifyIdList(classifyIdList []int) (count int, err error) {
  217. if len(classifyIdList) <= 0 {
  218. return
  219. }
  220. sql := `SELECT COUNT(1) total FROM edb_info WHERE edb_public_classify_id IN (?) `
  221. err = global.DmSQL["data"].Raw(sql, classifyIdList).Scan(&count).Error
  222. return
  223. }
  224. func (m *EdbPublicClassify) GetAllChildClassifyIdList() (items []int, err error) {
  225. sql := ` SELECT edb_public_classify_id FROM edb_public_classify WHERE edb_public_classify_id_path LIKE ? ORDER BY create_time DESC `
  226. err = global.DmSQL["data"].Raw(sql, fmt.Sprint(m.EdbPublicClassifyIdPath+`,%`)).Scan(&items).Error
  227. return
  228. }
  229. // BatchesDel
  230. // @Description: 根据分类id批量删除
  231. // @author: Roc
  232. // @receiver m
  233. // @datetime 2024-12-05 11:13:06
  234. // @param classifyIdList []int
  235. // @return err error
  236. func (m *EdbPublicClassify) BatchesDel(classifyIdList []int) (err error) {
  237. sql := ` DELETE FROM edb_public_classify WHERE edb_public_classify_id IN (?) `
  238. err = global.DmSQL["data"].Exec(sql, classifyIdList).Error
  239. return
  240. }
  241. // GetEdbPublicClassifyByParentIdAndName 根据父级ID和名称获取分类
  242. func GetEdbPublicClassifyByParentIdAndName(parentId int, classifyName string, classifyId int, classifyType uint8) (item *EdbClassify, err error) {
  243. sql := `SELECT * FROM edb_public_classify WHERE parent_id = ? AND edb_public_classify_name = ? AND edb_public_classify_id <> ? and classify_type=? LIMIT 1`
  244. err = global.DmSQL["data"].Raw(sql, parentId, classifyName, classifyId, classifyType).First(&item).Error
  245. return
  246. }