edb_info.go 9.8 KB

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