base_from_clarksons_index.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. package data_manage
  2. import (
  3. "eta/eta_api/utils"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "time"
  6. "github.com/beego/beego/v2/client/orm"
  7. )
  8. type BaseFromClarksonsIndex struct {
  9. BaseFromClarksonsIndexId int `orm:"column(base_from_clarksons_index_id);pk;auto"`
  10. ClassifyId int `description:"指标分类id"`
  11. IndexCode string `description:"指标编码"`
  12. IndexName string `description:"指标名称"`
  13. Unit string `description:"单位"`
  14. Frequency string `description:"频度"`
  15. StartDate string `description:"开始日期"`
  16. EndDate string `description:"结束日期"`
  17. Sort int `description:"排序"`
  18. CreateTime time.Time
  19. ModifyTime time.Time
  20. }
  21. type BaseFromClarksonsIndexOrm struct {
  22. BaseFromClarksonsIndexId int `orm:"pk"`
  23. EdbInfoId int `description:"指标库id"`
  24. ClassifyId int `description:"指标分类id"`
  25. IndexCode string `description:"指标编码"`
  26. IndexName string `description:"指标名称"`
  27. UniqueCode string `description:"唯一code"`
  28. Frequency string `description:"频度"`
  29. Unit string `description:"单位"`
  30. StartDate time.Time `description:"开始日期"`
  31. EndDate time.Time `description:"结束日期"`
  32. Sort int `description:"排序"`
  33. LatestDate time.Time `description:"最后更新时间"`
  34. EdbExist int `description:"edb是否存在"`
  35. ModifyTime time.Time
  36. }
  37. type BaseFromClarksonsIndexView struct {
  38. BaseFromClarksonsIndexId int `orm:"pk"`
  39. EdbInfoId int `description:"指标库id"`
  40. ClassifyId int `description:"指标分类id"`
  41. IndexCode string `description:"指标编码"`
  42. IndexName string `description:"指标名称"`
  43. UniqueCode string `description:"唯一code"`
  44. Frequency string `description:"频度"`
  45. Unit string `description:"单位"`
  46. StartDate string `description:"开始日期"`
  47. EndDate string `description:"结束日期"`
  48. Sort int `description:"排序"`
  49. LatestDate string `description:"最后更新时间"`
  50. EdbExist int `description:"edb是否存在"`
  51. ModifyTime string
  52. }
  53. type BaseFromClarksonsIndexList struct {
  54. BaseFromClarksonsIndexId int `orm:"pk"`
  55. IndexCode string // 指标编码
  56. IndexName string // 指标名称
  57. ClassifyId int // 分类Id
  58. Unit string // 单位
  59. Frequency string // 频度
  60. Describe string // 指标描述
  61. CreateTime string // 创建时间
  62. ModifyTime string // 修改时间
  63. DataList []*BaseFromClarksonsData
  64. Paging *paging.PagingItem `description:"分页数据"`
  65. }
  66. func (b *BaseFromClarksonsIndex) Update(cols []string) (err error) {
  67. o := orm.NewOrmUsingDB("data")
  68. _, err = o.Update(b, cols...)
  69. return
  70. }
  71. // GetClarksonsIndexByCondition 根据条件获取克拉克森指标列表
  72. func GetClarksonsIndexByCondition(condition string, pars []interface{}) (items []*BaseFromClarksonsIndex, err error) {
  73. o := orm.NewOrmUsingDB("data")
  74. sql := ` SELECT * FROM base_from_clarksons_index WHERE 1=1 `
  75. if condition != "" {
  76. sql += condition
  77. }
  78. sql += ` ORDER BY sort ASC, base_from_clarksons_index_id ASC`
  79. _, err = o.Raw(sql, pars).QueryRows(&items)
  80. return
  81. }
  82. // GetClarksonsIndexByCondition 根据条件获取克拉克森指标列表
  83. func GetClarksonsIndexByConditionAndFrequency(condition, frequency string, pars []interface{}) (items []*BaseFromClarksonsIndex, err error) {
  84. o := orm.NewOrmUsingDB("data")
  85. sql := ` SELECT * FROM base_from_clarksons_index WHERE 1=1 `
  86. if condition != "" {
  87. sql += condition
  88. }
  89. sql += ` AND frequency=?`
  90. sql += ` ORDER BY sort ASC, base_from_clarksons_index_id ASC`
  91. _, err = o.Raw(sql, pars, frequency).QueryRows(&items)
  92. return
  93. }
  94. func GetClarksonsIndexCountByCondition(condition string, pars []interface{}) (count int, err error) {
  95. o := orm.NewOrmUsingDB("data")
  96. sql := ` SELECT COUNT(*) AS count FROM base_from_clarksons_index WHERE 1=1 `
  97. if condition != "" {
  98. sql += condition
  99. }
  100. sql += ` ORDER BY sort ASC, base_from_clarksons_index_id ASC`
  101. err = o.Raw(sql, pars).QueryRow(&count)
  102. return
  103. }
  104. // GetClarksonsIndexAndEdbInfoByCondition 根据条件获取克拉克森index和指标库的信息
  105. func GetClarksonsIndexAndEdbInfoByCondition(condition string, pars []interface{}) (items []*BaseFromClarksonsIndexView, err error) {
  106. o := orm.NewOrmUsingDB("data")
  107. sql := ` SELECT b.*, e.edb_info_id FROM base_from_clarksons_index AS b LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=? WHERE 1=1 `
  108. if condition != "" {
  109. sql += condition
  110. }
  111. sql += ` ORDER BY sort ASC `
  112. _, err = o.Raw(sql, utils.DATA_SOURCE_SCI_HQ, pars).QueryRows(&items)
  113. return
  114. }
  115. // GetClarksonsIndexByIndexCode 根据指标编码获取指标信息
  116. func GetClarksonsIndexByIndexCode(indexCode string) (item *BaseFromClarksonsIndex, err error) {
  117. o := orm.NewOrmUsingDB("data")
  118. sql := ` SELECT * FROM base_from_clarksons_index WHERE index_code=? `
  119. err = o.Raw(sql, indexCode).QueryRow(&item)
  120. return
  121. }
  122. // GetClarksonsIndexByIndexId 根据指标id获取指标信息
  123. func GetClarksonsIndexByIndexId(indexId int) (item *BaseFromClarksonsIndex, err error) {
  124. o := orm.NewOrmUsingDB("data")
  125. sql := ` SELECT * FROM base_from_clarksons_index WHERE base_from_clarksons_index_id=? `
  126. err = o.Raw(sql, indexId).QueryRow(&item)
  127. return
  128. }
  129. // GetClarksonsIndexListByIndexIds 根据指标id获取指标信息
  130. func GetClarksonsIndexListByIndexIds(indexIds []int) (items []*BaseFromClarksonsIndex, err error) {
  131. if len(indexIds) == 0 {
  132. return
  133. }
  134. o := orm.NewOrmUsingDB("data")
  135. sql := ` SELECT * FROM base_from_clarksons_index WHERE base_from_clarksons_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  136. _, err = o.Raw(sql, indexIds).QueryRows(&items)
  137. return
  138. }
  139. // GetClarksonsIndexCountByClassifyIds 获取分类下指标的个数
  140. func GetClarksonsIndexCountByClassifyIds(classifyIds []int) (count int, err error) {
  141. o := orm.NewOrmUsingDB("data")
  142. num := len(classifyIds)
  143. if num <= 0 {
  144. return
  145. }
  146. sql := `SELECT COUNT(1) AS count FROM base_from_clarksons_index WHERE classify_id IN (` + utils.GetOrmInReplace(num) + `) `
  147. err = o.Raw(sql, classifyIds).QueryRow(&count)
  148. return
  149. }
  150. // GetClarksonsIndexByClassifyId 根据分类id获取克拉克森指标列表
  151. func GetClarksonsIndexByClassifyId(classifyIds []int, startSize, pageSize int) (items []*BaseFromClarksonsIndexView, err error) {
  152. itemsOrm := make([]*BaseFromClarksonsIndexOrm, 0)
  153. o := orm.NewOrmUsingDB("data")
  154. sql := ` SELECT b.*, e.edb_info_id,
  155. CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist
  156. FROM base_from_clarksons_index AS b
  157. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=101
  158. WHERE b.classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) ORDER BY b.sort ASC LIMIT ?,? `
  159. _, err = o.Raw(sql, classifyIds, startSize, pageSize).QueryRows(&itemsOrm)
  160. if err != nil {
  161. return
  162. }
  163. for _, v := range itemsOrm {
  164. viewItem := new(BaseFromClarksonsIndexView)
  165. viewItem.BaseFromClarksonsIndexId = v.BaseFromClarksonsIndexId
  166. viewItem.EdbInfoId = v.EdbInfoId
  167. viewItem.ClassifyId = v.ClassifyId
  168. viewItem.IndexCode = v.IndexCode
  169. viewItem.IndexName = v.IndexName
  170. viewItem.UniqueCode = v.UniqueCode
  171. viewItem.Frequency = v.Frequency
  172. viewItem.Unit = v.Unit
  173. viewItem.StartDate = v.StartDate.Format(utils.FormatDate)
  174. viewItem.EndDate = v.EndDate.Format(utils.FormatDate)
  175. viewItem.Sort = v.Sort
  176. viewItem.LatestDate = v.LatestDate.Format(utils.FormatDateTime)
  177. viewItem.EdbExist = v.EdbExist
  178. viewItem.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
  179. items = append(items, viewItem)
  180. }
  181. return
  182. }
  183. // GetClarksonsIndexCountByClassifyId 根据分类id获取克拉克森指标数量
  184. func GetClarksonsIndexCountByClassifyId(classifyIds []int) (count int, err error) {
  185. if len(classifyIds) == 0 {
  186. return
  187. }
  188. o := orm.NewOrmUsingDB("data")
  189. sql := ` SELECT COUNT(*) AS count FROM base_from_clarksons_index WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) `
  190. err = o.Raw(sql, classifyIds).QueryRow(&count)
  191. return
  192. }
  193. // GetClarksonsIndexCount 获取克拉克森指标数量
  194. func GetClarksonsIndexCount() (count int, err error) {
  195. o := orm.NewOrmUsingDB("data")
  196. sql := ` SELECT COUNT(*) AS count FROM base_from_clarksons_index `
  197. err = o.Raw(sql).QueryRow(&count)
  198. return
  199. }
  200. func GetClarksonsIndexByPage(startSize, pageSize int) (items []*BaseFromClarksonsIndexView, err error) {
  201. itemsOrm := make([]*BaseFromClarksonsIndexOrm, 0)
  202. o := orm.NewOrmUsingDB("data")
  203. sql := ` SELECT b.*, e.edb_info_id,
  204. CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist
  205. FROM base_from_clarksons_index AS b
  206. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=101
  207. ORDER BY b.modify_time DESC LIMIT ?,?`
  208. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&itemsOrm)
  209. if err != nil {
  210. return
  211. }
  212. for _, v := range itemsOrm {
  213. viewItem := new(BaseFromClarksonsIndexView)
  214. viewItem.BaseFromClarksonsIndexId = v.BaseFromClarksonsIndexId
  215. viewItem.EdbInfoId = v.EdbInfoId
  216. viewItem.ClassifyId = v.ClassifyId
  217. viewItem.IndexCode = v.IndexCode
  218. viewItem.IndexName = v.IndexName
  219. viewItem.UniqueCode = v.UniqueCode
  220. viewItem.Frequency = v.Frequency
  221. viewItem.Unit = v.Unit
  222. viewItem.StartDate = v.StartDate.Format(utils.FormatDate)
  223. viewItem.EndDate = v.EndDate.Format(utils.FormatDate)
  224. viewItem.Sort = v.Sort
  225. viewItem.LatestDate = v.LatestDate.Format(utils.FormatDateTime)
  226. viewItem.EdbExist = v.EdbExist
  227. viewItem.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
  228. items = append(items, viewItem)
  229. }
  230. return
  231. }
  232. // GetClarksonsIndexBaseInfoByClassifyId 根据分类id获取克拉克森指标列表
  233. func GetClarksonsIndexBaseInfoByClassifyId(classifyId int) (items []*BaseFromClarksonsIndexView, err error) {
  234. o := orm.NewOrmUsingDB("data")
  235. sql := ` SELECT base_from_clarksons_index_id, classify_id, index_code, index_name, CONCAT(classify_id, '_', base_from_clarksons_index_id) AS unique_code FROM base_from_clarksons_index WHERE classify_id = ? ORDER BY sort ASC `
  236. _, err = o.Raw(sql, classifyId).QueryRows(&items)
  237. return
  238. }
  239. // GetClarksonsIndexBaseInfoByClassifyId 根据分类id获取克拉克森指标列表
  240. func GetClarksonsIndexBaseInfoByCondition(condition string, pars []interface{}) (items []*BaseFromClarksonsIndex, err error) {
  241. o := orm.NewOrmUsingDB("data")
  242. sql := ` SELECT base_from_clarksons_index_id, index_code, index_name FROM base_from_clarksons_index WHERE 1=1 `
  243. if condition != "" {
  244. sql += condition
  245. }
  246. sql += ` ORDER BY sort ASC `
  247. _, err = o.Raw(sql, pars...).QueryRows(&items)
  248. return
  249. }
  250. func GetClarksonsDataMaxCount(condition string, pars []interface{}) (count int, err error) {
  251. o := orm.NewOrmUsingDB("data")
  252. sql := `SELECT MAX(t.num) AS count FROM ( SELECT COUNT(1) AS num FROM base_from_clarksons_index AS a INNER JOIN base_from_clarksons_data AS b ON a.index_code=b.index_code WHERE 1=1 `
  253. if condition != "" {
  254. sql += condition
  255. }
  256. sql += ` GROUP BY a.base_from_clarksons_index_id) AS t `
  257. err = o.Raw(sql, pars).QueryRow(&count)
  258. return
  259. }
  260. // GetClarksonsIndexMaxSortByClassifyId 根据分类id获取指标最大排序
  261. func GetClarksonsIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
  262. o := orm.NewOrmUsingDB("data")
  263. sql := `SELECT MAX(sort) FROM base_from_clarksons_index WHERE classify_id=? `
  264. err = o.Raw(sql, classifyId).QueryRow(&sort)
  265. return
  266. }
  267. func GetClarksonsFrequency(classifyId int) (items []*string, err error) {
  268. sql := `SELECT DISTINCT frequency FROM base_from_clarksons_index WHERE classify_id=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  269. o := orm.NewOrmUsingDB("data")
  270. _, err = o.Raw(sql, classifyId).QueryRows(&items)
  271. return
  272. }
  273. func GetClarksonsFrequencyByCondition(condition string, pars []interface{}) (items []*string, err error) {
  274. sql := `SELECT DISTINCT frequency FROM base_from_clarksons_index WHERE 1=1 `
  275. if condition != "" {
  276. sql += condition
  277. }
  278. sql += ` ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  279. o := orm.NewOrmUsingDB("data")
  280. _, err = o.Raw(sql, pars...).QueryRows(&items)
  281. return
  282. }
  283. func GetClarksonsFrequencyByCode(code string) (items []*string, err error) {
  284. sql := `SELECT DISTINCT frequency FROM base_from_clarksons_index WHERE index_code=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  285. o := orm.NewOrmUsingDB("data")
  286. _, err = o.Raw(sql, code).QueryRows(&items)
  287. return
  288. }
  289. // GetClarksonsClassifyMaxSortByClassifyIds 通过分类id获取对应分类的最大sort
  290. func GetClarksonsClassifyMaxSortByClassifyIds(classifyIds []int) (items []*BaseFromClarksonsClassifyMaxSort, err error) {
  291. if len(classifyIds) == 0 {
  292. return
  293. }
  294. o := orm.NewOrmUsingDB("data")
  295. sql := `SELECT bc.base_from_clarksons_classify_id, COALESCE(MAX(bi.sort), 0) AS max_sort FROM base_from_clarksons_classify AS bc
  296. LEFT JOIN base_from_clarksons_index AS bi
  297. ON bc.base_from_clarksons_classify_id=bi.classify_id
  298. WHERE bc.base_from_clarksons_classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `)
  299. GROUP BY bc.base_from_clarksons_classify_id
  300. `
  301. // sql = ` SELECT classify_id, MAX(sort) AS max_sort FROM base_from_clarksons_index WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) GROUP BY classify_id `
  302. _, err = o.Raw(sql, classifyIds).QueryRows(&items)
  303. return
  304. }
  305. func BatchModifyClarksonsIndexClassify(items []*BaseFromClarksonsIndex) (err error) {
  306. o := orm.NewOrmUsingDB("data")
  307. sql := `UPDATE base_from_clarksons_index SET classify_id=?, sort=? WHERE base_from_clarksons_index_id=? `
  308. p, err := o.Raw(sql).Prepare()
  309. if err != nil {
  310. return
  311. }
  312. defer func() {
  313. p.Close()
  314. }()
  315. for _, v := range items {
  316. _, err = p.Exec(v.ClassifyId, v.Sort, v.BaseFromClarksonsIndexId)
  317. if err != nil {
  318. return
  319. }
  320. }
  321. return
  322. }
  323. // MoveDownClarksonsIndexBySort 往下移动
  324. func MoveDownClarksonsIndexBySort(classifyId, prevSort, currentSort int) (err error) {
  325. o := orm.NewOrmUsingDB("data")
  326. sql := `update base_from_clarksons_index set sort = sort - 1 where classify_id=? and sort <= ? and sort> ? `
  327. _, err = o.Raw(sql, classifyId, prevSort, currentSort).Exec()
  328. return
  329. }
  330. // MoveUpClarksonsIndexBySort 往上移动
  331. func MoveUpClarksonsIndexBySort(classifyId, nextSort, currentSort int) (err error) {
  332. o := orm.NewOrmUsingDB("data")
  333. sql := `update base_from_clarksons_index set sort = sort + 1 where classify_id=? and sort >= ? and sort< ?`
  334. _, err = o.Raw(sql, classifyId, nextSort, currentSort).Exec()
  335. return
  336. }
  337. func DeleteClarksonsIndexById(indexId int) (err error) {
  338. o := orm.NewOrmUsingDB("data")
  339. to, err := o.Begin()
  340. if err != nil {
  341. return
  342. }
  343. defer func() {
  344. if err != nil {
  345. _ = to.Rollback()
  346. } else {
  347. _ = to.Commit()
  348. }
  349. }()
  350. sql := `DELETE FROM base_from_clarksons_index WHERE base_from_clarksons_index_id=? `
  351. _, err = to.Raw(sql, indexId).Exec()
  352. if err != nil {
  353. return
  354. }
  355. sql = `DELETE FROM base_from_clarksons_data WHERE base_from_clarksons_index_id=? `
  356. _, err = to.Raw(sql, indexId).Exec()
  357. if err != nil {
  358. return
  359. }
  360. return
  361. }
  362. func DeleteClarksonsIndexByIds(indexIds []int) (err error) {
  363. if len(indexIds) == 0 {
  364. return
  365. }
  366. o := orm.NewOrmUsingDB("data")
  367. to, err := o.Begin()
  368. if err != nil {
  369. return
  370. }
  371. defer func() {
  372. if err != nil {
  373. _ = to.Rollback()
  374. } else {
  375. _ = to.Commit()
  376. }
  377. }()
  378. sql := `DELETE FROM base_from_clarksons_index WHERE base_from_clarksons_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  379. _, err = o.Raw(sql, indexIds).Exec()
  380. if err != nil {
  381. return
  382. }
  383. sql = `DELETE FROM base_from_clarksons_data WHERE base_from_clarksons_index_id IN (` + utils.GetOrmInReplace(len(indexIds)) + `) `
  384. _, err = o.Raw(sql, indexIds).Exec()
  385. if err != nil {
  386. return
  387. }
  388. return
  389. }
  390. // MoveClarksonsIndex 移动指标分类
  391. func MoveClarksonsIndex(indexId, classifyId int) (err error) {
  392. o := orm.NewOrmUsingDB("data")
  393. sql := ` UPDATE base_from_clarksons_index
  394. SET
  395. classify_id = ?, modify_time=NOW()
  396. WHERE base_from_clarksons_index_id = ?`
  397. _, err = o.Raw(sql, classifyId, indexId).Exec()
  398. return
  399. }
  400. // GetClarksonsIndexMinSortByClassifyId 获取最小不等于0的排序
  401. func GetClarksonsIndexMinSortByClassifyId(classifyId int) (sort int, err error) {
  402. o := orm.NewOrmUsingDB("data")
  403. sql := `SELECT min(sort) FROM base_from_clarksons_index WHERE classify_id=? and sort <> 0 `
  404. err = o.Raw(sql, classifyId).QueryRow(&sort)
  405. return
  406. }
  407. // GetClarksonsIndexInfoCount 分页查询指标信息行数
  408. func GetClarksonsIndexInfoCount(condition string, pars []interface{}) (count int, err error) {
  409. o := orm.NewOrmUsingDB("data")
  410. sql := ` SELECT count(1) FROM base_from_clarksons_index WHERE index_code not in (select edb_code from edb_info) `
  411. if condition != "" {
  412. sql += condition
  413. }
  414. err = o.Raw(sql, pars).QueryRow(&count)
  415. return
  416. }
  417. // GetClarksonsIndexInfoPage 分页查询指标信息
  418. func GetClarksonsIndexInfoPage(condition string, pars []interface{}) (items []*BaseFromRzdIndexAndData, err error) {
  419. o := orm.NewOrmUsingDB("data")
  420. sql := ` SELECT * FROM base_from_clarksons_index WHERE index_code not in (select edb_code from edb_info) `
  421. if condition != "" {
  422. sql += condition
  423. }
  424. _, err = o.Raw(sql, pars).QueryRows(&items)
  425. return
  426. }
  427. func GetClarksonsIndex(condition string, pars interface{}) (items []*BaseFromClarksonsIndexView, err error) {
  428. o := orm.NewOrmUsingDB("data")
  429. sql := ` SELECT * FROM base_from_clarksons_index WHERE 1=1 `
  430. if condition != "" {
  431. sql += condition
  432. }
  433. sql += `ORDER BY base_from_clarksons_index_id ASC `
  434. _, err = o.Raw(sql, pars).QueryRows(&items)
  435. return
  436. }
  437. func GetClarksonsIndexLatestDate(indexCode string) (ModifyTime string, err error) {
  438. o := orm.NewOrmUsingDB("data")
  439. sql := ` SELECT modify_time FROM base_from_clarksons_data WHERE index_code=? ORDER BY modify_time DESC limit 1 `
  440. err = o.Raw(sql, indexCode).QueryRow(&ModifyTime)
  441. return
  442. }