base_from_sci_hq_index.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. package data_manage
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "time"
  6. )
  7. type BaseFromSciHqIndex struct {
  8. BaseFromSciHqIndexId int `orm:"pk" gorm:"primaryKey"`
  9. ClassifyId int `description:"指标分类id"`
  10. IndexCode string `description:"指标编码"`
  11. IndexName string `description:"指标名称"`
  12. Unit string `description:"单位"`
  13. Frequency string `description:"频度"`
  14. StartDate string `description:"开始日期"`
  15. EndDate string `description:"结束日期"`
  16. Sort int `description:"排序"`
  17. LatestValue float64 `description:"最新值"`
  18. LatestDate time.Time `description:"最后更新时间"`
  19. TerminalCode string
  20. FilePath string `json:"-"`
  21. CreateTime time.Time
  22. ModifyTime time.Time
  23. }
  24. type BaseFromSciHqIndexView struct {
  25. BaseFromSciHqIndexId int `orm:"pk" gorm:"primaryKey"`
  26. EdbInfoId int `description:"指标库id"`
  27. ClassifyId int `description:"指标分类id"`
  28. IndexCode string `description:"指标编码"`
  29. IndexName string `description:"指标名称"`
  30. UniqueCode string `description:"唯一code"`
  31. Frequency string `description:"频度"`
  32. Unit string `description:"单位"`
  33. StartDate string `description:"开始日期"`
  34. EndDate string `description:"结束日期"`
  35. Sort int `description:"排序"`
  36. LatestValue float64 `description:"最新值"`
  37. LatestDate string `description:"最后更新时间"`
  38. EdbExist int `description:"edb是否存在"`
  39. ModifyTime string
  40. }
  41. func (b *BaseFromSciHqIndex) Update(cols []string) (err error) {
  42. o := global.DbMap[utils.DbNameIndex]
  43. err = o.Model(b).Select(cols).Updates(b).Error
  44. return
  45. }
  46. // GetSciHqIndexByCondition 根据条件获取卓创红期指标列表
  47. func GetSciHqIndexByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndex, err error) {
  48. o := global.DbMap[utils.DbNameIndex]
  49. sql := ` SELECT * FROM base_from_sci_hq_index WHERE 1=1 `
  50. if condition != "" {
  51. sql += condition
  52. }
  53. sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
  54. err = o.Raw(sql, pars...).Find(&items).Error
  55. return
  56. }
  57. // GetSciHqIndexByCondition 根据条件获取卓创红期指标列表
  58. func GetSciHqIndexByConditionAndFrequency(condition, frequency string, pars []interface{}) (items []*BaseFromSciHqIndex, err error) {
  59. o := global.DbMap[utils.DbNameIndex]
  60. sql := ` SELECT * FROM base_from_sci_hq_index WHERE 1=1 `
  61. if condition != "" {
  62. sql += condition
  63. }
  64. sql += ` AND frequency=?`
  65. sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
  66. err = o.Raw(sql, pars, frequency).Find(&items).Error
  67. return
  68. }
  69. func GetSciHqIndexCountByCondition(condition string, pars []interface{}) (count int, err error) {
  70. o := global.DbMap[utils.DbNameIndex]
  71. sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index WHERE 1=1 `
  72. if condition != "" {
  73. sql += condition
  74. }
  75. sql += ` ORDER BY sort ASC, base_from_sci_hq_index_id ASC`
  76. err = o.Raw(sql, pars...).Scan(&count).Error
  77. return
  78. }
  79. // GetSciHqIndexAndEdbInfoByCondition 根据条件获取卓创红期index和指标库的信息
  80. func GetSciHqIndexAndEdbInfoByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndexView, err error) {
  81. wherePars := make([]interface{}, 0)
  82. wherePars = append(wherePars, utils.DATA_SOURCE_SCI_HQ)
  83. wherePars = append(wherePars, pars...)
  84. o := global.DbMap[utils.DbNameIndex]
  85. sql := ` SELECT b.*, e.edb_info_id FROM base_from_sci_hq_index AS b LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=? WHERE 1=1 `
  86. if condition != "" {
  87. sql += condition
  88. }
  89. sql += ` ORDER BY sort ASC `
  90. err = o.Raw(sql, wherePars...).Find(&items).Error
  91. return
  92. }
  93. // GetSciHqIndexByIndexCode 根据指标编码获取指标信息
  94. func GetSciHqIndexByIndexCode(indexCode string) (item *BaseFromSciHqIndex, err error) {
  95. o := global.DbMap[utils.DbNameIndex]
  96. sql := ` SELECT * FROM base_from_sci_hq_index WHERE index_code=? `
  97. err = o.Raw(sql, indexCode).First(&item).Error
  98. return
  99. }
  100. // GetSciHqIndexByIndexId 根据指标id获取指标信息
  101. func GetSciHqIndexByIndexId(indexId int) (item *BaseFromSciHqIndex, err error) {
  102. o := global.DbMap[utils.DbNameIndex]
  103. sql := ` SELECT * FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id=? `
  104. err = o.Raw(sql, indexId).First(&item).Error
  105. return
  106. }
  107. // GetSciHqIndexListByIndexIds 根据指标id获取指标信息
  108. func GetSciHqIndexListByIndexIds(indexIds []int) (items []*BaseFromSciHqIndex, err error) {
  109. if len(indexIds) == 0 {
  110. return
  111. }
  112. o := global.DbMap[utils.DbNameIndex]
  113. sql := ` SELECT * FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  114. err = o.Raw(sql, indexIds).Find(&items).Error
  115. return
  116. }
  117. // GetSciHqIndexCountByClassifyIds 获取分类下指标的个数
  118. func GetSciHqIndexCountByClassifyIds(classifyIds []int) (count int, err error) {
  119. o := global.DbMap[utils.DbNameIndex]
  120. num := len(classifyIds)
  121. if num <= 0 {
  122. return
  123. }
  124. sql := `SELECT COUNT(1) AS count FROM base_from_sci_hq_index WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
  125. err = o.Raw(sql, classifyIds).Scan(&count).Error
  126. return
  127. }
  128. // GetSciHqIndexByClassifyId 根据分类id获取卓创红期指标列表
  129. func GetSciHqIndexByClassifyId(classifyIds []int, startSize, pageSize int) (items []*BaseFromSciHqIndexView, err error) {
  130. o := global.DbMap[utils.DbNameIndex]
  131. sql := ` SELECT b.*, e.edb_info_id,
  132. CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist
  133. FROM base_from_sci_hq_index AS b
  134. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=88
  135. WHERE b.classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) ORDER BY b.sort ASC LIMIT ?,? `
  136. err = o.Raw(sql, classifyIds, startSize, pageSize).Find(&items).Error
  137. return
  138. }
  139. // GetSciHqIndexCountByClassifyId 根据分类id获取卓创红期指标数量
  140. func GetSciHqIndexCountByClassifyId(classifyIds []int) (count int, err error) {
  141. if len(classifyIds) == 0 {
  142. return
  143. }
  144. o := global.DbMap[utils.DbNameIndex]
  145. sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) `
  146. err = o.Raw(sql, classifyIds).Scan(&count).Error
  147. return
  148. }
  149. // GetSciHqIndexCount 获取卓创红期指标数量
  150. func GetSciHqIndexCount() (count int, err error) {
  151. o := global.DbMap[utils.DbNameIndex]
  152. sql := ` SELECT COUNT(*) AS count FROM base_from_sci_hq_index `
  153. err = o.Raw(sql).Scan(&count).Error
  154. return
  155. }
  156. func GetSciHqIndexByPage(startSize, pageSize int) (items []*BaseFromSciHqIndexView, err error) {
  157. o := global.DbMap[utils.DbNameIndex]
  158. sql := ` SELECT b.*, e.edb_info_id,
  159. CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist
  160. FROM base_from_sci_hq_index AS b
  161. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=88
  162. ORDER BY b.modify_time DESC LIMIT ?,?`
  163. err = o.Raw(sql, startSize, pageSize).Find(&items).Error
  164. return
  165. }
  166. // GetSciHqIndexBaseInfoByClassifyId 根据分类id获取卓创红期指标列表
  167. func GetSciHqIndexBaseInfoByClassifyId(classifyId int) (items []*BaseFromSciHqIndexView, err error) {
  168. o := global.DbMap[utils.DbNameIndex]
  169. sql := ` SELECT base_from_sci_hq_index_id, classify_id, index_code, index_name, CONCAT(classify_id, '_', base_from_sci_hq_index_id) AS unique_code FROM base_from_sci_hq_index WHERE classify_id = ? ORDER BY sort ASC `
  170. err = o.Raw(sql, classifyId).Find(&items).Error
  171. return
  172. }
  173. // GetSciHqIndexBaseInfoByClassifyId 根据分类id获取卓创红期指标列表
  174. func GetSciHqIndexBaseInfoByCondition(condition string, pars []interface{}) (items []*BaseFromSciHqIndex, err error) {
  175. o := global.DbMap[utils.DbNameIndex]
  176. sql := ` SELECT base_from_sci_hq_index_id, index_code, index_name FROM base_from_sci_hq_index WHERE 1=1 `
  177. if condition != "" {
  178. sql += condition
  179. }
  180. sql += ` ORDER BY sort ASC `
  181. err = o.Raw(sql, pars...).Find(&items).Error
  182. return
  183. }
  184. func GetSciHqDataMaxCount(condition string, pars []interface{}) (count int, err error) {
  185. o := global.DbMap[utils.DbNameIndex]
  186. sql := `SELECT COALESCE(MAX(t.num), 0) AS count FROM ( SELECT COUNT(1) AS num FROM base_from_sci_hq_index AS a INNER JOIN base_from_sci_hq_data AS b ON a.index_code=b.index_code WHERE 1=1 `
  187. if condition != "" {
  188. sql += condition
  189. }
  190. sql += ` GROUP BY a.base_from_sci_hq_index_id) AS t `
  191. err = o.Raw(sql, pars...).Scan(&count).Error
  192. return
  193. }
  194. // GetSciHqIndexMaxSortByClassifyId 根据分类id获取指标最大排序
  195. func GetSciHqIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
  196. o := global.DbMap[utils.DbNameIndex]
  197. sql := `SELECT COALESCE(MAX(sort), 0) AS sort FROM base_from_sci_index WHERE classify_id=? `
  198. err = o.Raw(sql, classifyId).Scan(&sort).Error
  199. return
  200. }
  201. func GetSciHqFrequency(classifyId int) (items []*string, err error) {
  202. sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE classify_id=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  203. o := global.DbMap[utils.DbNameIndex]
  204. err = o.Raw(sql, classifyId).Find(&items).Error
  205. return
  206. }
  207. func GetSciHqFrequencyByCondition(condition string, pars []interface{}) (items []*string, err error) {
  208. sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE 1=1 `
  209. if condition != "" {
  210. sql += condition
  211. }
  212. sql += ` ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  213. o := global.DbMap[utils.DbNameIndex]
  214. err = o.Raw(sql, pars...).Find(&items).Error
  215. return
  216. }
  217. func GetSciHqFrequencyByCode(code string) (items []*string, err error) {
  218. sql := `SELECT DISTINCT frequency FROM base_from_sci_hq_index WHERE index_code=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  219. o := global.DbMap[utils.DbNameIndex]
  220. err = o.Raw(sql, code).Find(&items).Error
  221. return
  222. }
  223. // GetSciHqClassifyMaxSortByClassifyIds 通过分类id获取对应分类的最大sort
  224. func GetSciHqClassifyMaxSortByClassifyIds(classifyIds []int) (items []*BaseFromSciHqClassifyMaxSort, err error) {
  225. if len(classifyIds) == 0 {
  226. return
  227. }
  228. o := global.DbMap[utils.DbNameIndex]
  229. sql := `SELECT bc.classify_id, COALESCE(MAX(bi.sort), 0) AS max_sort FROM base_from_sci_hq_classify AS bc
  230. LEFT JOIN base_from_sci_hq_index AS bi
  231. ON bc.classify_id=bi.classify_id
  232. WHERE bc.classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `)
  233. GROUP BY bc.classify_id
  234. `
  235. // sql = ` SELECT classify_id, MAX(sort) AS max_sort FROM base_from_sci_hq_index WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) GROUP BY classify_id `
  236. err = o.Raw(sql, classifyIds).Find(&items).Error
  237. return
  238. }
  239. func BatchModifySciHqIndexClassify(items []*BaseFromSciHqIndex) (err error) {
  240. o := global.DbMap[utils.DbNameIndex]
  241. sql := `UPDATE base_from_sci_hq_index SET classify_id=?, sort=? WHERE base_from_sci_hq_index_id=? `
  242. for _, v := range items {
  243. err = o.Exec(sql, v.ClassifyId, v.Sort, v.BaseFromSciHqIndexId).Error
  244. if err != nil {
  245. return
  246. }
  247. }
  248. return
  249. }
  250. // MoveDownSciHqIndexBySort 往下移动
  251. func MoveDownSciHqIndexBySort(classifyId, prevSort, currentSort int) (err error) {
  252. o := global.DbMap[utils.DbNameIndex]
  253. sql := `update base_from_sci_hq_index set sort = sort - 1 where classify_id=? and sort <= ? and sort> ? `
  254. err = o.Exec(sql, classifyId, prevSort, currentSort).Error
  255. return
  256. }
  257. // MoveUpSciHqIndexBySort 往上移动
  258. func MoveUpSciHqIndexBySort(classifyId, nextSort, currentSort int) (err error) {
  259. o := global.DbMap[utils.DbNameIndex]
  260. sql := `update base_from_sci_hq_index set sort = sort + 1 where classify_id=? and sort >= ? and sort< ?`
  261. err = o.Exec(sql, classifyId, nextSort, currentSort).Error
  262. return
  263. }
  264. func DeleteSciHqIndexById(indexId int) (err error) {
  265. o := global.DbMap[utils.DbNameIndex]
  266. tx := o.Begin()
  267. if tx.Error != nil {
  268. return tx.Error
  269. }
  270. defer func() {
  271. if err != nil {
  272. _ = tx.Rollback()
  273. } else {
  274. _ = tx.Commit()
  275. }
  276. }()
  277. sql := `DELETE FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id=? `
  278. err = tx.Exec(sql, indexId).Error
  279. if err != nil {
  280. return
  281. }
  282. sql = `DELETE FROM base_from_sci_hq_data WHERE base_from_sci_hq_index_id=? `
  283. err = tx.Exec(sql, indexId).Error
  284. if err != nil {
  285. return
  286. }
  287. return
  288. }
  289. func DeleteSciHqIndexByIds(indexIds []int) (err error) {
  290. if len(indexIds) == 0 {
  291. return
  292. }
  293. o := global.DbMap[utils.DbNameIndex]
  294. tx := o.Begin()
  295. if tx.Error != nil {
  296. return tx.Error
  297. }
  298. defer func() {
  299. if err != nil {
  300. _ = tx.Rollback()
  301. } else {
  302. _ = tx.Commit()
  303. }
  304. }()
  305. sql := `DELETE FROM base_from_sci_hq_index WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  306. err = tx.Exec(sql, indexIds).Error
  307. if err != nil {
  308. return
  309. }
  310. sql = `DELETE FROM base_from_sci_hq_data WHERE base_from_sci_hq_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  311. err = tx.Exec(sql, indexIds).Error
  312. if err != nil {
  313. return
  314. }
  315. return
  316. }
  317. // MoveSciHqIndex 移动指标分类
  318. func MoveSciHqIndex(indexId, classifyId int) (err error) {
  319. o := global.DbMap[utils.DbNameIndex]
  320. sql := ` UPDATE base_from_sci_hq_index
  321. SET
  322. classify_id = ?, modify_time=NOW()
  323. WHERE base_from_sci_hq_index_id = ?`
  324. err = o.Exec(sql, classifyId, indexId).Error
  325. return
  326. }
  327. // GetSciHqIndexMinSortByClassifyId 获取最小不等于0的排序
  328. func GetSciHqIndexMinSortByClassifyId(classifyId int) (sort int, err error) {
  329. o := global.DbMap[utils.DbNameIndex]
  330. sql := `SELECT min(sort) FROM base_from_sci_hq_index WHERE classify_id=? and sort <> 0 `
  331. err = o.Raw(sql, classifyId).Scan(&sort).Error
  332. return
  333. }