chart_framework.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. package data_manage
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. )
  11. // ChartFramework 图库框架表
  12. type ChartFramework struct {
  13. ChartFrameworkId int `gorm:"column(chart_framework_id);primaryKey" description:"框架ID"`
  14. FrameworkCode string `gorm:"column(framework_code)" description:"框架唯一编码"`
  15. FrameworkName string `gorm:"column(framework_name)" description:"框架名称"`
  16. FrameworkImg string `gorm:"column(framework_img)" description:"框架图片"`
  17. FrameworkContent string `gorm:"column(framework_content)" description:"框架内容"`
  18. IsPublic int `gorm:"column(is_public)" description:"是否公开:0-私有;1-公开"`
  19. PublicTime time.Time `gorm:"column(public_time)" description:"公开时间"`
  20. Sort int `gorm:"column(sort)" description:"排序"`
  21. AdminId int `gorm:"column(admin_id)" description:"创建人ID"`
  22. AdminName string `gorm:"column(admin_name)" description:"创建人姓名"`
  23. CreateTime time.Time `gorm:"column(create_time)" description:"创建时间"`
  24. ModifyTime time.Time `gorm:"column(modify_time)" description:"更新时间"`
  25. }
  26. func (m *ChartFramework) TableName() string {
  27. return "chart_framework"
  28. }
  29. func (m *ChartFramework) PrimaryId() string {
  30. return ChartFrameworkColumns.ChartFrameworkId
  31. }
  32. var ChartFrameworkColumns = struct {
  33. ChartFrameworkId string
  34. FrameworkCode string
  35. FrameworkName string
  36. FrameworkImg string
  37. FrameworkContent string
  38. IsPublic string
  39. PublicTime string
  40. Sort string
  41. AdminId string
  42. AdminName string
  43. CreateTime string
  44. ModifyTime string
  45. }{
  46. ChartFrameworkId: "chart_framework_id",
  47. FrameworkCode: "framework_code",
  48. FrameworkName: "framework_name",
  49. FrameworkImg: "framework_img",
  50. FrameworkContent: "framework_content",
  51. IsPublic: "is_public",
  52. PublicTime: "public_time",
  53. Sort: "sort",
  54. AdminId: "admin_id",
  55. AdminName: "admin_name",
  56. CreateTime: "create_time",
  57. ModifyTime: "modify_time",
  58. }
  59. // Create 创建单个 ChartFramework 记录
  60. func (m *ChartFramework) Create() (err error) {
  61. o := global.DbMap[utils.DbNameIndex]
  62. err = o.Create(m).Error
  63. return
  64. }
  65. // CreateMulti 批量创建 ChartFramework 记录
  66. func (m *ChartFramework) CreateMulti(items []*ChartFramework) (err error) {
  67. if len(items) == 0 {
  68. return
  69. }
  70. o := global.DbMap[utils.DbNameIndex]
  71. err = o.CreateInBatches(items, utils.MultiAddNum).Error
  72. return
  73. }
  74. // Update 更新指定字段的 ChartFramework 记录
  75. func (m *ChartFramework) Update(cols []string) (err error) {
  76. o := global.DbMap[utils.DbNameIndex]
  77. err = o.Model(m).Select(cols).Updates(m).Error
  78. return
  79. }
  80. // Del 删除单个 ChartFramework 记录
  81. func (m *ChartFramework) Del() (err error) {
  82. o := global.DbMap[utils.DbNameIndex]
  83. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
  84. err = o.Exec(sql, m.ChartFrameworkId).Error
  85. return
  86. }
  87. // GetItemById 根据ID获取单个 ChartFramework 记录
  88. func (m *ChartFramework) GetItemById(id int) (item *ChartFramework, err error) {
  89. o := global.DbMap[utils.DbNameIndex]
  90. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
  91. err = o.Raw(sql, id).First(&item).Error
  92. return
  93. }
  94. // GetItemByCondition 根据条件获取单个 ChartFramework 记录
  95. func (m *ChartFramework) GetItemByCondition(condition string, pars []interface{}) (item *ChartFramework, err error) {
  96. o := global.DbMap[utils.DbNameIndex]
  97. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
  98. err = o.Raw(sql, pars...).First(&item).Error
  99. return
  100. }
  101. // GetCountByCondition 根据条件获取 ChartFramework 记录数量
  102. func (m *ChartFramework) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  103. o := global.DbMap[utils.DbNameIndex]
  104. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  105. err = o.Raw(sql, pars...).Scan(&count).Error
  106. return
  107. }
  108. // GetItemsByCondition 根据条件获取多条 ChartFramework 记录
  109. func (m *ChartFramework) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartFramework, err error) {
  110. o := global.DbMap[utils.DbNameIndex]
  111. fields := strings.Join(fieldArr, ",")
  112. if len(fieldArr) == 0 {
  113. fields = `*`
  114. }
  115. order := `ORDER BY create_time DESC`
  116. if orderRule != "" {
  117. order = ` ORDER BY ` + orderRule
  118. }
  119. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  120. err = o.Raw(sql, pars...).Find(&items).Error
  121. return
  122. }
  123. // GetPageItemsByCondition 根据条件分页获取 ChartFramework 记录
  124. func (m *ChartFramework) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartFramework, err error) {
  125. o := global.DbMap[utils.DbNameIndex]
  126. fields := strings.Join(fieldArr, ",")
  127. if len(fieldArr) == 0 {
  128. fields = `*`
  129. }
  130. order := `ORDER BY create_time DESC`
  131. if orderRule != "" {
  132. order = ` ORDER BY ` + orderRule
  133. }
  134. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  135. err = o.Raw(sql, append(pars, startSize, pageSize)...).Find(&items).Error
  136. return
  137. }
  138. func (m *ChartFramework) CreateFrameworkAndNodes(item *ChartFramework, nodes []*ChartFrameworkNode) (err error) {
  139. o := global.DbMap[utils.DbNameIndex]
  140. tx := o.Begin()
  141. defer func() {
  142. if err != nil {
  143. _ = tx.Rollback()
  144. return
  145. }
  146. _ = tx.Commit()
  147. }()
  148. err = tx.Create(item).Error
  149. if err != nil {
  150. err = fmt.Errorf("insert framework err: %s", err.Error())
  151. return
  152. }
  153. newId := item.ChartFrameworkId
  154. if len(nodes) > 0 {
  155. for _, n := range nodes {
  156. n.ChartFrameworkId = newId
  157. }
  158. err = tx.CreateInBatches(nodes, utils.MultiAddNum).Error
  159. if err != nil {
  160. err = fmt.Errorf("insert multi nodes err: %s", err.Error())
  161. return
  162. }
  163. }
  164. return
  165. }
  166. func (m *ChartFramework) EditFrameworkAndNodes(item *ChartFramework, updateCols []string, nodes []*ChartFrameworkNode) (err error) {
  167. o := global.DbMap[utils.DbNameIndex]
  168. tx := o.Begin()
  169. defer func() {
  170. if err != nil {
  171. _ = tx.Rollback()
  172. return
  173. }
  174. _ = tx.Commit()
  175. }()
  176. err = tx.Model(item).Select(updateCols).Updates(item).Error
  177. if err != nil {
  178. err = fmt.Errorf("framework update err: %s", err.Error())
  179. return
  180. }
  181. sql := `DELETE FROM chart_framework_node WHERE chart_framework_id = ?`
  182. err = tx.Exec(sql, item.ChartFrameworkId).Error
  183. if err != nil {
  184. err = fmt.Errorf("clear nodes err: %s", err.Error())
  185. return
  186. }
  187. if len(nodes) > 0 {
  188. err = tx.CreateInBatches(nodes, utils.MultiAddNum).Error
  189. if err != nil {
  190. err = fmt.Errorf("insert multi nodes err: %s", err.Error())
  191. return
  192. }
  193. }
  194. return
  195. }
  196. func (m *ChartFramework) RemoveFrameworkAndNodes(frameworkId int) (err error) {
  197. o := global.DbMap[utils.DbNameIndex]
  198. tx := o.Begin()
  199. defer func() {
  200. if err != nil {
  201. _ = tx.Rollback()
  202. return
  203. }
  204. _ = tx.Commit()
  205. }()
  206. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
  207. err = tx.Exec(sql, frameworkId).Error
  208. if err != nil {
  209. err = fmt.Errorf("delete framework err: %s", err.Error())
  210. return
  211. }
  212. sql = `DELETE FROM chart_framework_node WHERE chart_framework_id = ?`
  213. err = tx.Exec(sql, frameworkId).Error
  214. if err != nil {
  215. err = fmt.Errorf("clear nodes err: %s", err.Error())
  216. return
  217. }
  218. return
  219. }
  220. // ChartFrameworkAddReq 图库框架新增请求体
  221. type ChartFrameworkAddReq struct {
  222. FrameworkName string `description:"框架名称"`
  223. FrameworkImg string `description:"框架图片"`
  224. FrameworkContent string `description:"框架内容"`
  225. Nodes []ChartFrameworkNodeReq `description:"框架节点"`
  226. }
  227. // ChartFrameworkNodeReq 图库框架节点请求体
  228. type ChartFrameworkNodeReq struct {
  229. MyChartClassifyId int `description:"我的图表分类ID"`
  230. NodeId string `description:"节点ID"`
  231. NodeName string `description:"节点名称"`
  232. }
  233. // ChartFrameworkEditReq 图库框架编辑请求体
  234. type ChartFrameworkEditReq struct {
  235. ChartFrameworkId int `description:"图库框架ID"`
  236. ChartFrameworkAddReq
  237. }
  238. // ChartFrameworkRemoveReq 图库框架移除请求体
  239. type ChartFrameworkRemoveReq struct {
  240. ChartFrameworkId int `description:"图库框架ID"`
  241. }
  242. // ChartFrameworkRenameReq 图库框架重命名请求体
  243. type ChartFrameworkRenameReq struct {
  244. ChartFrameworkId int `description:"图库框架ID"`
  245. FrameworkName string `description:"框架名称"`
  246. }
  247. // ChartFrameworkEditPublicReq 图库框架编辑公开请求体
  248. type ChartFrameworkEditPublicReq struct {
  249. ChartFrameworkId int `description:"图库框架ID"`
  250. IsPublic int `description:"0-隐藏公开; 1-公开"`
  251. }
  252. // ChartFrameworkMoveReq 图库框架移动排序请求体
  253. type ChartFrameworkMoveReq struct {
  254. ChartFrameworkId int `description:"图库框架ID"`
  255. PrevChartFrameworkId int `description:"上一个框架ID"`
  256. NextChartFrameworkId int `description:"下一个框架ID"`
  257. }
  258. // UpdateChartFrameworkSort 更新我的图库框架排序
  259. func UpdateChartFrameworkSort(adminId, frameworkId, current int, updates string) (err error) {
  260. o := global.DbMap[utils.DbNameIndex]
  261. sql := fmt.Sprintf(`UPDATE chart_framework SET sort = %s WHERE admin_id = ? and sort > ?`, updates)
  262. if frameworkId > 0 {
  263. sql += ` OR (chart_framework_id > ` + strconv.Itoa(frameworkId) + ` AND sort = ` + strconv.Itoa(current) + `)`
  264. }
  265. err = o.Exec(sql, adminId, current).Error
  266. return
  267. }
  268. // GetFirstChartFramework 获取我的图库框架排首位的数据
  269. func GetFirstChartFramework(adminId int) (item *ChartFramework, err error) {
  270. o := global.DbMap[utils.DbNameIndex]
  271. sql := `SELECT * FROM chart_framework WHERE admin_id = ? ORDER BY sort ASC,chart_framework_id ASC LIMIT 1`
  272. err = o.Raw(sql, adminId).First(&item).Error
  273. return
  274. }
  275. // ChartFrameworkItem 图库框架表信息
  276. type ChartFrameworkItem struct {
  277. ChartFrameworkId int `description:"框架ID"`
  278. FrameworkCode string `description:"框架唯一编码"`
  279. FrameworkName string `description:"框架名称"`
  280. FrameworkImg string `description:"框架图片"`
  281. FrameworkContent string `description:"框架内容"`
  282. IsPublic int `description:"是否公开:0-私有;1-公开"`
  283. PublicTime string `description:"公开时间"`
  284. Sort int `description:"排序"`
  285. AdminId int `description:"创建人ID"`
  286. AdminName string `description:"创建人姓名"`
  287. CreateTime string `description:"创建时间"`
  288. ModifyTime string `description:"更新时间"`
  289. Nodes []*ChartFrameworkNodeItem `description:"框架节点"`
  290. }
  291. // FormatChartFramework2Item 格式化框架信息
  292. func FormatChartFramework2Item(origin *ChartFramework, nodes []*ChartFrameworkNodeItem) (item *ChartFrameworkItem) {
  293. if origin == nil {
  294. return
  295. }
  296. item = new(ChartFrameworkItem)
  297. item.ChartFrameworkId = origin.ChartFrameworkId
  298. item.FrameworkCode = origin.FrameworkCode
  299. item.FrameworkName = origin.FrameworkName
  300. item.FrameworkImg = origin.FrameworkImg
  301. item.FrameworkContent = origin.FrameworkContent
  302. item.IsPublic = origin.IsPublic
  303. item.PublicTime = utils.TimeTransferString(utils.FormatDateTime, origin.PublicTime)
  304. item.Sort = origin.Sort
  305. item.AdminId = origin.AdminId
  306. item.AdminName = origin.AdminName
  307. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
  308. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
  309. item.Nodes = nodes
  310. return
  311. }
  312. // ChartFrameworkPublicMenuItem 公开框架目录
  313. type ChartFrameworkPublicMenuItem struct {
  314. AdminId int `description:"创建人ID"`
  315. MenuName string `description:"目录名称"`
  316. Frameworks []*ChartFrameworkItem `description:"框架列表"`
  317. }
  318. // ChartFrameworkListResp 图库框架分页列表
  319. type ChartFrameworkListResp struct {
  320. Paging *paging.PagingItem
  321. List []*ChartFrameworkItem
  322. }