base_from_clarksons_index.go 18 KB

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