ai_predict_model_classify.go 17 KB

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