ai_predict_model_classify.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. package data_manage
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. // AiPredictModelClassify 同花顺高频数据-分类
  10. type AiPredictModelClassify struct {
  11. AiPredictModelClassifyId int `gorm:"primaryKey;column:ai_predict_model_classify_id;"`
  12. UniqueCode string `description:"唯一编码"`
  13. ClassifyName string `description:"分类名称"`
  14. ClassifyNameEn string `description:"英文分类名称"`
  15. ParentId int `description:"父级ID"`
  16. Level int `description:"层级"`
  17. LevelPath string `description:"层级路径"`
  18. Sort int `description:"排序"`
  19. RootId int `description:"顶级分类ID"`
  20. SysUserId int `description:"创建人ID"`
  21. SysUserRealName string `description:"创建人姓名"`
  22. CreateTime time.Time `description:"创建时间"`
  23. ModifyTime time.Time `description:"修改时间"`
  24. }
  25. func (m *AiPredictModelClassify) TableName() string {
  26. return "ai_predict_model_classify"
  27. }
  28. type AiPredictModelClassifyCols struct {
  29. PrimaryId string
  30. UniqueCode string
  31. ClassifyName string
  32. ClassifyNameEn string
  33. ParentId string
  34. Level string
  35. LevelPath string
  36. Sort string
  37. RootId string
  38. SysUserId string
  39. SysUserRealName string
  40. CreateTime string
  41. ModifyTime string
  42. }
  43. func (m *AiPredictModelClassify) Cols() AiPredictModelClassifyCols {
  44. return AiPredictModelClassifyCols{
  45. PrimaryId: "ai_predict_model_classify_id",
  46. UniqueCode: "unique_code",
  47. ClassifyName: "classify_name",
  48. ClassifyNameEn: "classify_name_en",
  49. ParentId: "parent_id",
  50. Level: "level",
  51. LevelPath: "level_path",
  52. Sort: "sort",
  53. RootId: "root_id",
  54. SysUserId: "sys_user_id",
  55. SysUserRealName: "sys_user_real_name",
  56. CreateTime: "create_time",
  57. ModifyTime: "modify_time",
  58. }
  59. }
  60. func (m *AiPredictModelClassify) Create() (err error) {
  61. err = global.DbMap[utils.DbNameIndex].Create(m).Error
  62. return
  63. }
  64. func (m *AiPredictModelClassify) CreateMulti(items []*AiPredictModelClassify) (err error) {
  65. if len(items) == 0 {
  66. return
  67. }
  68. err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, utils.MultiAddNum).Error
  69. return
  70. }
  71. func (m *AiPredictModelClassify) Update(cols []string) (err error) {
  72. err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
  73. return
  74. }
  75. func (m *AiPredictModelClassify) Remove() (err error) {
  76. o := global.DbMap[utils.DbNameIndex]
  77. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  78. err = o.Exec(sql, m.AiPredictModelClassifyId).Error
  79. return
  80. }
  81. func (m *AiPredictModelClassify) MultiRemove(ids []int) (err error) {
  82. if len(ids) == 0 {
  83. return
  84. }
  85. o := global.DbMap[utils.DbNameIndex]
  86. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  87. err = o.Exec(sql, ids).Error
  88. return
  89. }
  90. func (m *AiPredictModelClassify) RemoveByCondition(condition string, pars []interface{}) (err error) {
  91. if condition == "" {
  92. return
  93. }
  94. o := global.DbMap[utils.DbNameIndex]
  95. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
  96. err = o.Exec(sql, pars...).Error
  97. return
  98. }
  99. func (m *AiPredictModelClassify) GetItemById(id int) (item *AiPredictModelClassify, err error) {
  100. o := global.DbMap[utils.DbNameIndex]
  101. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  102. err = o.Raw(sql, id).First(&item).Error
  103. return
  104. }
  105. func (m *AiPredictModelClassify) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *AiPredictModelClassify, err error) {
  106. o := global.DbMap[utils.DbNameIndex]
  107. order := ``
  108. if orderRule != "" {
  109. order = ` ORDER BY ` + orderRule
  110. }
  111. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
  112. err = o.Raw(sql, pars...).First(&item).Error
  113. return
  114. }
  115. func (m *AiPredictModelClassify) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  116. o := global.DbMap[utils.DbNameIndex]
  117. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  118. err = o.Raw(sql, pars...).Scan(&count).Error
  119. return
  120. }
  121. func (m *AiPredictModelClassify) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*AiPredictModelClassify, err error) {
  122. o := global.DbMap[utils.DbNameIndex]
  123. fields := strings.Join(fieldArr, ",")
  124. if len(fieldArr) == 0 {
  125. fields = `*`
  126. }
  127. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  128. if orderRule != "" {
  129. order = ` ORDER BY ` + orderRule
  130. }
  131. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  132. err = o.Raw(sql, pars...).Find(&items).Error
  133. return
  134. }
  135. func (m *AiPredictModelClassify) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*AiPredictModelClassify, err error) {
  136. o := global.DbMap[utils.DbNameIndex]
  137. fields := strings.Join(fieldArr, ",")
  138. if len(fieldArr) == 0 {
  139. fields = `*`
  140. }
  141. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  142. if orderRule != "" {
  143. order = ` ORDER BY ` + orderRule
  144. }
  145. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  146. pars = append(pars, startSize, pageSize)
  147. err = o.Exec(sql, pars...).Find(&items).Error
  148. return
  149. }
  150. // AiPredictModelClassifyItem 同花顺高频数据信息
  151. type AiPredictModelClassifyItem struct {
  152. ClassifyId int `description:"分类ID"`
  153. ClassifyName string `description:"分类名称"`
  154. ClassifyNameEn string `description:"英文分类名称"`
  155. ParentId int `description:"父级ID"`
  156. Level int `description:"层级"`
  157. Sort int `description:"排序"`
  158. LevelPath string `description:"层级路径"`
  159. UniqueCode string `description:"唯一编码"`
  160. Children []*AiPredictModelClassifyItem `description:"子分类"`
  161. }
  162. func (m *AiPredictModelClassify) Format2Item() (item *AiPredictModelClassifyItem) {
  163. item = new(AiPredictModelClassifyItem)
  164. item.ClassifyId = m.AiPredictModelClassifyId
  165. item.ClassifyName = m.ClassifyName
  166. item.ClassifyNameEn = m.ClassifyNameEn
  167. item.ParentId = m.ParentId
  168. item.Level = m.Level
  169. item.Sort = m.Sort
  170. item.LevelPath = m.LevelPath
  171. item.UniqueCode = m.UniqueCode
  172. item.Children = make([]*AiPredictModelClassifyItem, 0)
  173. return
  174. }
  175. type AiPredictModelClassifyAddReq struct {
  176. ClassifyName string `description:"分类名称"`
  177. ParentId int `description:"父级ID, 第一级传0"`
  178. Level int `description:"层级, 第一级传0, 其余传上一级的层级"`
  179. }
  180. type AiPredictModelClassifyEditReq struct {
  181. ClassifyId int `description:"分类ID"`
  182. ClassifyName string `description:"分类名称"`
  183. }
  184. func (m *AiPredictModelClassify) GetSortMax(parentId int) (sort int, err error) {
  185. o := global.DbMap[utils.DbNameIndex]
  186. sql := fmt.Sprintf(`SELECT MAX(%s) FROM %s WHERE %s = ?`, m.Cols().Sort, m.TableName(), m.Cols().ParentId)
  187. err = o.Raw(sql, parentId).Scan(&sort).Error
  188. return
  189. }
  190. type AiPredictModelClassifyRemoveReq struct {
  191. ClassifyId int `description:"分类ID"`
  192. IndexId int `description:"标的ID"`
  193. }
  194. type AiPredictModelClassifyListResp struct {
  195. AllNodes []*AiPredictModelClassifyListItem `description:"分类节点"`
  196. }
  197. type AiPredictModelClassifyListItem struct {
  198. NodeType int `description:"节点类型: 0-分类; 1-指标"`
  199. NodeName string `description:"节点名称"`
  200. ClassifyId int `description:"分类ID"`
  201. ClassifyName string `description:"分类名称"`
  202. IndexId int `description:"指标ID"`
  203. IndexCode string `description:"指标编码"`
  204. IndexName string `description:"指标名称"`
  205. ParentId int `description:"父级ID"`
  206. Level int `description:"层级"`
  207. Sort int `description:"排序"`
  208. UniqueCode string `description:"唯一编码, 指标为IndexCode"`
  209. Children []*AiPredictModelClassifyListItem `description:"子分类"`
  210. }
  211. type AiPredictModelClassifyMoveReq struct {
  212. ClassifyId int `description:"分类ID"`
  213. ParentClassifyId int `description:"父级分类ID"`
  214. PrevClassifyId int `description:"上一个兄弟节点分类ID"`
  215. NextClassifyId int `description:"下一个兄弟节点分类ID"`
  216. ItemId int `description:"指标ID, 如果指标ID有值,则移动对象为指标,否则认为移动对象为分类"`
  217. PrevItemId int `description:"上一个指标ID"`
  218. NextItemId int `description:"下一个指标ID"`
  219. }
  220. func GetAiPredictModelClassifyById(classifyId int) (item *AiPredictModelClassify, err error) {
  221. o := global.DbMap[utils.DbNameIndex]
  222. sql := `SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = ?`
  223. err = o.Raw(sql, classifyId).First(&item).Error
  224. return
  225. }
  226. func GetAiPredictModelClassifyByRootIdLevel(rootId int, orderStr string) (items []*AiPredictModelClassify, err error) {
  227. o := global.DbMap[utils.DbNameIndex]
  228. sql := ` SELECT * FROM ai_predict_model_classify WHERE root_id = ? `
  229. if orderStr != "" {
  230. sql += orderStr
  231. } else {
  232. sql += ` order by level desc, sort asc, ai_predict_model_classify_id asc`
  233. }
  234. err = o.Raw(sql, rootId).Find(&items).Error
  235. return
  236. }
  237. // UpdateAiPredictModelClassifySortByParentId 根据父类id更新排序
  238. func UpdateAiPredictModelClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string) (err error) {
  239. o := global.DbMap[utils.DbNameIndex]
  240. sql := ` update ai_predict_model_classify set sort = ` + updateSort + ` WHERE parent_id = ? AND sort > ? `
  241. if classifyId > 0 {
  242. sql += ` or ( ai_predict_model_classify_id > ` + fmt.Sprint(classifyId) + ` and sort = ` + fmt.Sprint(nowSort) + `)`
  243. }
  244. err = o.Exec(sql, parentId, nowSort).Error
  245. return
  246. }
  247. // GetFirstAiPredictModelClassifyByParentId 获取当前父级分类下,且排序数相同 的排序第一条的数据
  248. func GetFirstAiPredictModelClassifyByParentId(parentId int) (item *AiPredictModelClassify, err error) {
  249. o := global.DbMap[utils.DbNameIndex]
  250. sql := ` SELECT * FROM ai_predict_model_classify WHERE parent_id = ? order by sort asc,ai_predict_model_classify_id asc limit 1`
  251. err = o.Raw(sql, parentId).First(&item).Error
  252. return
  253. }
  254. func UpdateAiPredictModelClassifyChildByParentClassifyId(classifyIds []int, rootId int, levelStep int) (err error) {
  255. o := global.DbMap[utils.DbNameIndex]
  256. var pars []interface{}
  257. pars = append(pars, rootId, levelStep)
  258. pars = append(pars, classifyIds)
  259. // 更新相关联的二级分类的parentId,和classify_name_second
  260. sql := `UPDATE ai_predict_model_classify SET root_id = ?, level = level+? where ai_predict_model_classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `)`
  261. err = o.Exec(sql, pars...).Error
  262. if err != nil {
  263. return
  264. }
  265. return
  266. }
  267. // GetAiPredictModelIndexCountByClassifyId 获取目录下(包含子目录)的指标数量
  268. func GetAiPredictModelIndexCountByClassifyId(classifyId int) (count int, err error) {
  269. o := global.DbMap[utils.DbNameIndex]
  270. sql := `SELECT COUNT(1) AS count FROM ai_predict_model_index AS a
  271. WHERE a.classify_id IN(
  272. SELECT t.ai_predict_model_classify_id FROM
  273. (
  274. SELECT rd.*
  275. FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
  276. (SELECT @pid := ?) pd
  277. WHERE FIND_IN_SET(parent_id, @pid) > 0
  278. AND @pid := CONCAT(@pid, ',', ai_predict_model_classify_id)
  279. UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
  280. )AS t
  281. )`
  282. err = o.Raw(sql, classifyId).Scan(&count).Error
  283. return
  284. }
  285. // GetAiPredictModelClassifyCountByClassifyId 获取目录下子目录数量
  286. func GetAiPredictModelClassifyCountByClassifyId(chartClassifyId int) (count int, err error) {
  287. o := global.DbMap[utils.DbNameIndex]
  288. sql := `SELECT COUNT(1) AS count FROM (
  289. SELECT rd.*
  290. FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
  291. (SELECT @pid := ?) pd
  292. WHERE FIND_IN_SET(parent_id, @pid) > 0
  293. AND @pid := CONCAT(@pid, ',', ai_predict_model_classify_id)
  294. UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
  295. )AS t
  296. WHERE t.ai_predict_model_classify_id <> ?`
  297. err = o.Raw(sql, chartClassifyId, chartClassifyId).Scan(&count).Error
  298. return
  299. }
  300. // RemoveAiPredictModelClassify 删除分类及子分类
  301. func RemoveAiPredictModelClassify(classifyId int) (err error) {
  302. o := global.DbMap[utils.DbNameIndex]
  303. sql := `DELETE FROM ai_predict_model_classify
  304. WHERE ai_predict_model_classify_id IN(
  305. SELECT t.ai_predict_model_classify_id FROM
  306. (
  307. SELECT rd.*
  308. FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
  309. (SELECT @pid := ?) pd
  310. WHERE FIND_IN_SET(parent_id, @pid) > 0
  311. AND @pid := CONCAT(@pid, ',', ai_predict_model_classify_id)
  312. UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
  313. )AS t
  314. )`
  315. err = o.Exec(sql, classifyId).Error
  316. return
  317. }