edb_info.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package data_manage
  2. import (
  3. sql2 "database/sql"
  4. "eta/eta_hub/global"
  5. "eta/eta_hub/utils"
  6. "fmt"
  7. "strings"
  8. "time"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. )
  11. type EdbInfo struct {
  12. EdbInfoId int `orm:"column(edb_info_id);pk"`
  13. EdbInfoType int `description:"指标类型,0:普通指标,1:预测指标"`
  14. SourceName string `description:"来源名称"`
  15. Source int `description:"来源ID"`
  16. EdbCode string `description:"指标编码"`
  17. EdbName string `description:"指标名称"`
  18. EdbNameEn string `description:"英文指标名称"`
  19. EdbNameSource string `description:"指标名称来源"`
  20. Frequency string `description:"频率"`
  21. Unit string `description:"单位"`
  22. UnitEn string `description:"英文单位"`
  23. StartDate string `description:"起始日期"`
  24. EndDate string `description:"终止日期"`
  25. EndValue float64 `description:"终止值"`
  26. ClassifyId int `description:"分类ID"`
  27. SysUserId int `description:"创建人ID"`
  28. SysUserRealName string `description:"创建人姓名"`
  29. UniqueCode string `description:"指标唯一编码"`
  30. CreateTime time.Time `description:"创建时间"`
  31. ModifyTime time.Time `description:"更新时间"`
  32. MinValue float64 `description:"指标最小值"`
  33. MaxValue float64 `description:"指标最大值"`
  34. CalculateFormula string `description:"计算公式"`
  35. EdbType int `description:"指标类型:1:基础指标,2:计算指标"`
  36. Sort int `description:"排序字段"`
  37. LatestDate string `description:"数据最新日期"`
  38. LatestValue float64 `description:"数据最新值"`
  39. MoveType int `description:"移动方式:1:领先(默认),2:滞后"`
  40. MoveFrequency string `description:"移动频度"`
  41. NoUpdate int8 `description:"是否停止更新,0:继续更新;1:停止更新"`
  42. ServerUrl string `description:"服务器地址"`
  43. ChartImage string `description:"图表图片"`
  44. Calendar string `description:"公历/农历" orm:"default(公历);"`
  45. DataDateType string `orm:"column(data_date_type);size(255);null;default(交易日)"`
  46. ManualSave int `description:"是否有手动保存过上下限: 0-否; 1-是"`
  47. TerminalCode string `description:"终端编码,用于配置在机器上"`
  48. DataUpdateTime string `description:"最近一次数据发生变化的时间"`
  49. ErDataUpdateDate time.Time `description:"本次更新,数据发生变化的最早日期"`
  50. SourceIndexName string `description:"数据源中的指标名称"`
  51. SubSource int `description:"子数据来源:0:经济数据库,1:日期序列"`
  52. SubSourceName string `description:"子数据来源名称"`
  53. IndicatorCode string `description:"指标代码"`
  54. StockCode string `description:"证券代码"`
  55. Extra string `description:"指标的额外配置"`
  56. }
  57. func (m *EdbInfo) GetItemsByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string) (items []*EdbInfo, err error) {
  58. //o := orm.NewOrmUsingDB("data")
  59. fields := strings.Join(fieldArr, ",")
  60. if len(fieldArr) == 0 {
  61. fields = `*`
  62. }
  63. order := `ORDER BY create_time DESC`
  64. if orderRule != "" {
  65. order = ` ORDER BY ` + orderRule
  66. }
  67. sql := fmt.Sprintf(`SELECT %s FROM edb_info WHERE 1=1 %s %s`, fields, cond, order)
  68. err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
  69. return
  70. }
  71. func (m *EdbInfo) GetItemsPageByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*EdbInfo, err error) {
  72. //o := orm.NewOrmUsingDB("data")
  73. fields := strings.Join(fieldArr, ",")
  74. if len(fieldArr) == 0 {
  75. fields = `*`
  76. }
  77. order := `ORDER BY create_time DESC`
  78. if orderRule != "" {
  79. order = ` ORDER BY ` + orderRule
  80. }
  81. sql := fmt.Sprintf(`SELECT %s FROM edb_info WHERE 1=1 %s %s`, fields, cond, order)
  82. sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize)
  83. err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
  84. return
  85. }
  86. func (m *EdbInfo) GetItemsTotal(cond string, pars []interface{}) (total int, err error) {
  87. var totalNull sql2.NullInt64
  88. //o := orm.NewOrmUsingDB("data")
  89. sql := fmt.Sprintf(`SELECT COUNT(*) FROM edb_info WHERE 1=1 %s`, cond)
  90. err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&totalNull).Error
  91. if err != nil {
  92. return
  93. }
  94. total = int(totalNull.Int64)
  95. return
  96. }
  97. func (m *EdbInfo) GetItemByUniCode(code string) (item *EdbInfo, err error) {
  98. //o := orm.NewOrmUsingDB("data")
  99. sql := fmt.Sprintf(`SELECT * FROM edb_info WHERE unique_code = ? LIMIT 1`)
  100. err = global.DbMap[utils.DbNameIndex].Raw(sql, code).First(&item).Error
  101. return
  102. }
  103. func (m *EdbInfo) GetItemByEdbCode(code string) (item *EdbInfo, err error) {
  104. //o := orm.NewOrmUsingDB("data")
  105. sql := fmt.Sprintf(`SELECT * FROM edb_info WHERE edb_code = ? LIMIT 1`)
  106. err = global.DbMap[utils.DbNameIndex].Raw(sql, code).First(&item).Error
  107. return
  108. }
  109. // EdbInfoItem 指标信息
  110. type EdbInfoItem struct {
  111. EdbInfoId int `description:"指标信息ID"`
  112. UniqueCode string `description:"指标唯一编码"`
  113. EdbCode string `description:"指标编码"`
  114. EdbInfoType int `description:"指标类型: 0-普通指标; 1-预测指标"`
  115. EdbType int `description:"指标类型: 1-基础指标; 2-计算指标"`
  116. EdbName string `description:"指标名称"`
  117. ClassifyId int `description:"分类ID"`
  118. Source int `description:"来源ID"`
  119. SourceName string `description:"来源名称"`
  120. Frequency string `description:"频率"`
  121. Unit string `description:"单位"`
  122. StartDate string `description:"起始日期"`
  123. EndDate string `description:"终止日期"`
  124. MinValue float64 `description:"指标最小值"`
  125. MaxValue float64 `description:"指标最大值"`
  126. LatestDate string `description:"数据最新日期"`
  127. LatestValue float64 `description:"数据最新值"`
  128. ChartImage string `description:"图表图片"`
  129. Calendar string `description:"公历/农历"`
  130. DataDateType string `description:"数据日期类型: 交易日/自然日"`
  131. Sort int `description:"排序"`
  132. NoUpdate int `description:"是否停更: 0-继续更新; 1-停止更新"`
  133. CreateTime string `description:"创建时间"`
  134. ModifyTime string `description:"更新时间"`
  135. SysUserRealName string `description:"创建人姓名"`
  136. ErDataUpdateDate string `description:"本次更新,数据发生变化的最早日期"`
  137. //EdbData []*EdbDataItem `description:"指标数据"`
  138. ClassifyList []*EdbClassifyIdItems `description:"分类列表"`
  139. }
  140. type EdbInfoItemResp struct {
  141. List []*EdbInfoItem `description:"指标列表"`
  142. Paging *paging.PagingItem `description:"分页"`
  143. }
  144. func FormatEdbInfo2Item(origin *EdbInfo) (item *EdbInfoItem) {
  145. if origin == nil {
  146. return
  147. }
  148. item = new(EdbInfoItem)
  149. item.EdbInfoId = origin.EdbInfoId
  150. item.EdbInfoType = origin.EdbInfoType
  151. item.SourceName = origin.SourceName
  152. item.Source = origin.Source
  153. item.EdbCode = origin.EdbCode
  154. item.EdbName = origin.EdbName
  155. item.Frequency = origin.Frequency
  156. item.Unit = origin.Unit
  157. item.StartDate = origin.StartDate
  158. item.EndDate = origin.EndDate
  159. item.ClassifyId = origin.ClassifyId
  160. item.UniqueCode = origin.UniqueCode
  161. item.MinValue = origin.MinValue
  162. item.MaxValue = origin.MaxValue
  163. item.EdbType = origin.EdbType
  164. item.Sort = origin.Sort
  165. item.LatestDate = origin.LatestDate
  166. item.LatestValue = origin.LatestValue
  167. item.NoUpdate = int(origin.NoUpdate)
  168. item.ChartImage = origin.ChartImage
  169. item.Calendar = origin.Calendar
  170. item.DataDateType = origin.DataDateType
  171. item.SysUserRealName = origin.SysUserRealName
  172. item.ErDataUpdateDate = utils.TimeTransferString(utils.FormatDate, origin.ErDataUpdateDate)
  173. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
  174. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
  175. //item.EdbData = edbData
  176. return
  177. }
  178. // TraceEdbInfoResp 指标追溯数据返回
  179. type TraceEdbInfoMoreResp struct {
  180. EdbInfoId int `description:"指标id"`
  181. EdbCode string `description:"指标编码"`
  182. EdbInfoType int `description:"指标类型: 0-普通指标; 1-预测指标"`
  183. EdbName string `description:"指标名称"`
  184. EdbType int `description:"指标类型: 1-基础指标; 2-计算指标"`
  185. RuleTitle string `description:"指标规则"`
  186. UniqueCode string `description:"唯一编码"`
  187. Frequency string `description:"频率"`
  188. Unit string `description:"单位"`
  189. EndDate string `description:"终止日期"`
  190. EndValue float64 `description:"终止值"`
  191. LatestDate string `description:"最新日期"`
  192. LatestValue float64 `description:"最新值"`
  193. Child []TraceEdbInfoMoreResp `description:"下级来源"`
  194. EdbInfo *EdbInfo `description:"指标信息" json:"-"`
  195. }
  196. type TraceEdbInfoResp struct {
  197. EdbInfoId int `description:"指标id"`
  198. EdbCode string `description:"指标编码"`
  199. EdbInfoType int `description:"指标类型: 0-普通指标; 1-预测指标"`
  200. EdbName string `description:"指标名称"`
  201. EdbType int `description:"指标类型: 1-基础指标; 2-计算指标"`
  202. RuleTitle string `description:"指标规则"`
  203. UniqueCode string `description:"唯一编码"`
  204. ClassifyId int `description:"分类ID"`
  205. Child []TraceEdbInfoResp `description:"下级来源"`
  206. EdbInfo *EdbInfo `description:"指标信息" json:"-"`
  207. }
  208. func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
  209. //o := orm.NewOrmUsingDB("data")
  210. sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
  211. err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
  212. return
  213. }
  214. // GetEdbInfoByIdList 根据指标id集合 获取 指标列表
  215. func GetEdbInfoByIdList(edbInfoIdList []int) (items []*EdbInfo, err error) {
  216. num := len(edbInfoIdList)
  217. if num <= 0 {
  218. return
  219. }
  220. //o := orm.NewOrmUsingDB("data")
  221. sql := ` SELECT * FROM edb_info WHERE edb_info_id in (` + utils.GetOrmInReplace(num) + `) `
  222. err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoIdList).Find(&items).Error
  223. return
  224. }
  225. // GetEdbInfoByEdbCodeList 根据指标code集合获取指标列表
  226. func GetEdbInfoByEdbCodeList(source int, edbCodeList []string) (items []*EdbInfo, err error) {
  227. num := len(edbCodeList)
  228. if num <= 0 {
  229. return
  230. }
  231. //o := orm.NewOrmUsingDB("data")
  232. sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code in (` + utils.GetOrmInReplace(num) + `) `
  233. err = global.DbMap[utils.DbNameIndex].Raw(sql, source, edbCodeList).Find(&items).Error
  234. return
  235. }
  236. type BaseEdbInfoItemResp struct {
  237. List []*BaseEdbInfoItem `description:"指标列表"`
  238. Paging *paging.PagingItem `description:"分页"`
  239. }
  240. // BaseEdbInfoItem 指标信息
  241. type BaseEdbInfoItem struct {
  242. UniqueCode string `description:"指标唯一编码"`
  243. EdbCode string `description:"指标编码"`
  244. EdbName string `description:"指标名称"`
  245. SourceName string `description:"来源名称"`
  246. Frequency string `description:"频率"`
  247. Unit string `description:"单位"`
  248. StartDate string `description:"起始日期"`
  249. EndDate string `description:"终止日期"`
  250. ClassifyList []*EdbClassifyIdItems `description:"分类列表"`
  251. }
  252. func FormatEdbInfo2BaseItem(origin *EdbInfo) (item *BaseEdbInfoItem) {
  253. if origin == nil {
  254. return
  255. }
  256. item = new(BaseEdbInfoItem)
  257. item.SourceName = origin.SourceName
  258. item.EdbCode = origin.EdbCode
  259. item.EdbName = origin.EdbName
  260. item.Frequency = origin.Frequency
  261. item.Unit = origin.Unit
  262. item.StartDate = origin.StartDate
  263. item.EndDate = origin.EndDate
  264. item.UniqueCode = origin.UniqueCode
  265. //item.EdbData = edbData
  266. return
  267. }