edb_info.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package models
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "time"
  6. )
  7. type EdbInfo struct {
  8. EdbInfoId int `orm:"column(edb_info_id);pk"`
  9. SourceName string `description:"来源名称"`
  10. Source int `description:"来源id"`
  11. EdbCode string `description:"指标编码"`
  12. EdbName string `description:"指标名称"`
  13. EdbNameSource string `description:"指标名称来源"`
  14. Frequency string `description:"频率"`
  15. Unit string `description:"单位"`
  16. StartDate string `description:"起始日期"`
  17. EndDate string `description:"终止日期"`
  18. ClassifyId int `description:"分类id"`
  19. SysUserId int
  20. SysUserRealName string
  21. UniqueCode string `description:"指标唯一编码"`
  22. CreateTime time.Time
  23. ModifyTime time.Time
  24. MinValue float64 `description:"指标最小值"`
  25. MaxValue float64 `description:"指标最大值"`
  26. CalculateFormula string `description:"计算公式"`
  27. EdbType int `description:"指标类型:1:基础指标,2:计算指标"`
  28. Sort int `description:"排序字段"`
  29. MoveType int `description:"移动方式:1:领先(默认),2:滞后"`
  30. MoveFrequency string `description:"移动频度"`
  31. NoUpdate int8 `description:"是否停止更新,0:继续更新;1:停止更新"`
  32. ServerUrl string `description:"服务器地址"`
  33. }
  34. // AddEdbInfo 添加指标
  35. func AddEdbInfo(item *EdbInfo) (lastId int64, err error) {
  36. o := orm.NewOrm()
  37. lastId, err = o.Insert(item)
  38. return
  39. }
  40. // EdbInfoList 指标数据列表
  41. type EdbInfoList struct {
  42. EdbInfoId int `orm:"column(edb_info_id);pk"`
  43. SourceName string `description:"来源名称"`
  44. Source int `description:"来源id"`
  45. EdbCode string `description:"指标编码"`
  46. EdbName string `description:"指标名称"`
  47. Frequency string `description:"频率"`
  48. Unit string `description:"单位"`
  49. StartDate string `description:"起始日期"`
  50. EndDate string `description:"终止日期"`
  51. ClassifyId int `description:"分类id"`
  52. UniqueCode string `description:"指标唯一编码"`
  53. SysUserId int `description:"创建人id"`
  54. SysUserRealName string `description:"创建人姓名"`
  55. ModifyTime string `description:"最新修改时间"`
  56. EdbNameAlias string `json:"-" description:"指标名称,别名"`
  57. EdbType int `description:"指标类型:1:基础指标,2:计算指标"`
  58. DataList []*EdbData
  59. }
  60. // GetEdbInfoByName 根据指标名称获取所有的指标数据列表
  61. func GetEdbInfoByName(edbName string) (items []*EdbInfoList, err error) {
  62. o := orm.NewOrm()
  63. sql := ` SELECT * FROM edb_info WHERE edb_name=? `
  64. _, err = o.Raw(sql, edbName).QueryRows(&items)
  65. return
  66. }
  67. // ModifyEdbInfoNameSource 根据来源修改指标名称
  68. func ModifyEdbInfoNameSource(edbNameSource string, edbInfoId int) (err error) {
  69. o := orm.NewOrm()
  70. sql := ` UPDATE edb_info SET edb_name_source=? WHERE edb_info_id = ? `
  71. _, err = o.Raw(sql, edbNameSource, edbInfoId).Exec()
  72. return
  73. }
  74. // GetEdbInfoById 根据指标id获取指标信息
  75. func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
  76. o := orm.NewOrm()
  77. sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
  78. err = o.Raw(sql, edbInfoId).QueryRow(&item)
  79. return
  80. }
  81. // Update 更新EdbInfo信息
  82. func (edbInfo *EdbInfo) Update(cols []string) (err error) {
  83. o := orm.NewOrm()
  84. _, err = o.Update(edbInfo, cols...)
  85. return
  86. }
  87. // EdbInfoSearchData
  88. type EdbInfoSearchData struct {
  89. EdbDataId int `description:"数据ID"`
  90. DataTime string `description:"数据日期"`
  91. Value float64 `description:"数据"`
  92. }
  93. // GetEdbDataListAll 获取指标数据列表 order:1升序,其余值为降序
  94. func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchData, err error) {
  95. o := orm.NewOrm()
  96. sql := ``
  97. tableName := GetEdbDataTableName(source)
  98. sql = ` SELECT * FROM %s WHERE 1=1 `
  99. sql = fmt.Sprintf(sql, tableName)
  100. if condition != "" {
  101. sql += condition
  102. }
  103. if order == 1 {
  104. sql += ` ORDER BY data_time ASC `
  105. } else {
  106. sql += ` ORDER BY data_time DESC `
  107. }
  108. _, err = o.Raw(sql, pars).QueryRows(&item)
  109. return
  110. }
  111. // EdbInfoMaxAndMinInfo 指标最新数据记录结构体
  112. type EdbInfoMaxAndMinInfo struct {
  113. MinDate string `description:"最小日期"`
  114. MaxDate string `description:"最大日期"`
  115. MinValue float64 `description:"最小值"`
  116. MaxValue float64 `description:"最大值"`
  117. LatestValue float64 `description:"最新值"`
  118. }
  119. // GetEdbInfoMaxAndMinInfo 获取指标的最新数据记录信息
  120. func GetEdbInfoMaxAndMinInfo(source int, edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  121. o := orm.NewOrm()
  122. sql := ``
  123. tableName := GetEdbDataTableName(source)
  124. sql = ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM %s WHERE edb_code=? `
  125. sql = fmt.Sprintf(sql, tableName)
  126. err = o.Raw(sql, edbCode).QueryRow(&item)
  127. var latest_value float64
  128. sql = ` SELECT value AS latest_value FROM %s WHERE edb_code=? ORDER BY data_time DESC LIMIT 1 `
  129. sql = fmt.Sprintf(sql, tableName)
  130. err = o.Raw(sql, edbCode).QueryRow(&latest_value)
  131. item.LatestValue = latest_value
  132. return
  133. }
  134. // ModifyEdbInfoMaxAndMinInfo 修改指标的最新数据信息
  135. func ModifyEdbInfoMaxAndMinInfo(edbInfoId int, item *EdbInfoMaxAndMinInfo) (err error) {
  136. o := orm.NewOrm()
  137. sql := ` UPDATE edb_info SET start_date=?,end_date=?,min_value=?,max_value=?,is_update=2,latest_date=?,latest_value=?,modify_time=NOW() WHERE edb_info_id=? `
  138. _, err = o.Raw(sql, item.MinDate, item.MaxDate, item.MinValue, item.MaxValue, item.MaxDate, item.LatestValue, edbInfoId).Exec()
  139. return
  140. }
  141. // GetEdbDataCount 获取edb指标数据的数量; order:1升序,其余值为降序
  142. func GetEdbDataCount(condition string, pars []interface{}, source int) (count int, err error) {
  143. o := orm.NewOrm()
  144. sql := ``
  145. tableName := GetEdbDataTableName(source)
  146. sql = ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 `
  147. sql = fmt.Sprintf(sql, tableName)
  148. if condition != "" {
  149. sql += condition
  150. }
  151. err = o.Raw(sql, pars).QueryRow(&count)
  152. return
  153. }
  154. // GetLastEdbData 获取最近的一条指标数据
  155. func GetLastEdbData(condition string, pars []interface{}, source int) (item *EdbInfoSearchData, err error) {
  156. o := orm.NewOrm()
  157. sql := ``
  158. tableName := GetEdbDataTableName(source)
  159. sql = ` SELECT * FROM %s WHERE 1=1 `
  160. sql = fmt.Sprintf(sql, tableName)
  161. if condition != "" {
  162. sql += condition
  163. }
  164. sql += ` ORDER BY data_time DESC `
  165. err = o.Raw(sql, pars).QueryRow(&item)
  166. return
  167. }
  168. // GetEdbInfoByEdbCode 根据指标code获取指标信息
  169. func GetEdbInfoByEdbCode(source int, edbCode string) (item *EdbInfo, err error) {
  170. o := orm.NewOrm()
  171. sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code=? `
  172. err = o.Raw(sql, source, edbCode).QueryRow(&item)
  173. return
  174. }
  175. // GetEdbInfoOnlyByEdbCode 仅根据指标code获取指标信息
  176. func GetEdbInfoOnlyByEdbCode(edbCode string) (item *EdbInfo, err error) {
  177. o := orm.NewOrm()
  178. sql := ` SELECT * FROM edb_info WHERE edb_code=? `
  179. err = o.Raw(sql, edbCode).QueryRow(&item)
  180. return
  181. }
  182. // GetEdbInfoCalculateListByCondition 获取指标关系列表
  183. func GetEdbInfoCalculateListByCondition(condition string, pars []interface{}) (items []*EdbInfoCalculateMapping, err error) {
  184. o := orm.NewOrm()
  185. sql := ` SELECT * FROM edb_info_calculate_mapping WHERE 1=1 `
  186. if condition != "" {
  187. sql += condition
  188. }
  189. _, err = o.Raw(sql, pars).QueryRows(&items)
  190. return
  191. }
  192. // GetEdbInfoCalculateCountByCondition 获取关联指标数量
  193. func GetEdbInfoCalculateCountByCondition(condition string, pars []interface{}) (count int, err error) {
  194. o := orm.NewOrm()
  195. sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_mapping WHERE 1=1 `
  196. if condition != "" {
  197. sql += condition
  198. }
  199. err = o.Raw(sql, pars).QueryRow(&count)
  200. return
  201. }
  202. //优化版本-处理数据精度问题
  203. type EdbInfoSearchDataV1 struct {
  204. EdbDataId int `description:"数据ID"`
  205. DataTime string `description:"数据日期"`
  206. Value string `description:"数据"`
  207. }
  208. //优化版本-处理数据精度问题
  209. func GetEdbDataListAllV1(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchDataV1, err error) {
  210. o := orm.NewOrm()
  211. sql := ``
  212. tableName := GetEdbDataTableName(source)
  213. sql = ` SELECT * FROM %s WHERE 1=1 `
  214. sql = fmt.Sprintf(sql, tableName)
  215. if condition != "" {
  216. sql += condition
  217. }
  218. if order == 1 {
  219. sql += ` ORDER BY data_time ASC `
  220. } else {
  221. sql += ` ORDER BY data_time DESC `
  222. }
  223. _, err = o.Raw(sql, pars).QueryRows(&item)
  224. return
  225. }
  226. // GetEdbInfoByCondition 获取指标列表
  227. func GetEdbInfoByCondition(condition string, pars []interface{}, order int) (item []*EdbInfo, err error) {
  228. o := orm.NewOrm()
  229. sql := ` SELECT * FROM edb_info WHERE 1=1 `
  230. if condition != "" {
  231. sql += condition
  232. }
  233. if order == 1 {
  234. sql += ` ORDER BY end_date ASC `
  235. } else {
  236. sql += ` ORDER BY edb_info_id ASC `
  237. }
  238. _, err = o.Raw(sql, pars).QueryRows(&item)
  239. return
  240. }