edb_info.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  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. EdbInfoType int `description:"指标类型,0:普通指标,1:预测指标"`
  36. EdbNameEn string `description:"英文指标名称"`
  37. UnitEn string `description:"英文单位"`
  38. LatestDate string `description:"数据最新日期"`
  39. LatestValue float64 `description:"数据最新值"`
  40. ChartImage string `description:"图表图片"`
  41. }
  42. // AddEdbInfo 添加指标
  43. func AddEdbInfo(item *EdbInfo) (lastId int64, err error) {
  44. o := orm.NewOrm()
  45. lastId, err = o.Insert(item)
  46. return
  47. }
  48. // EdbInfoList 指标数据列表
  49. type EdbInfoList struct {
  50. EdbInfoId int `orm:"column(edb_info_id);pk"`
  51. SourceName string `description:"来源名称"`
  52. Source int `description:"来源id"`
  53. EdbCode string `description:"指标编码"`
  54. EdbName string `description:"指标名称"`
  55. Frequency string `description:"频率"`
  56. Unit string `description:"单位"`
  57. StartDate string `description:"起始日期"`
  58. EndDate string `description:"终止日期"`
  59. ClassifyId int `description:"分类id"`
  60. UniqueCode string `description:"指标唯一编码"`
  61. SysUserId int `description:"创建人id"`
  62. SysUserRealName string `description:"创建人姓名"`
  63. ModifyTime string `description:"最新修改时间"`
  64. EdbNameAlias string `json:"-" description:"指标名称,别名"`
  65. EdbType int `description:"指标类型:1:基础指标,2:计算指标"`
  66. DataList []*EdbData
  67. }
  68. // GetEdbInfoByName 根据指标名称获取所有的指标数据列表
  69. func GetEdbInfoByName(edbName string) (items []*EdbInfoList, err error) {
  70. o := orm.NewOrm()
  71. sql := ` SELECT * FROM edb_info WHERE edb_name=? `
  72. _, err = o.Raw(sql, edbName).QueryRows(&items)
  73. return
  74. }
  75. // ModifyEdbInfoNameSource 根据来源修改指标名称
  76. func ModifyEdbInfoNameSource(edbNameSource string, edbInfoId int) (err error) {
  77. o := orm.NewOrm()
  78. sql := ` UPDATE edb_info SET edb_name_source=? WHERE edb_info_id = ? `
  79. _, err = o.Raw(sql, edbNameSource, edbInfoId).Exec()
  80. return
  81. }
  82. // GetEdbInfoById 根据指标id获取指标信息
  83. func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
  84. o := orm.NewOrm()
  85. sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
  86. err = o.Raw(sql, edbInfoId).QueryRow(&item)
  87. return
  88. }
  89. // Update 更新EdbInfo信息
  90. func (edbInfo *EdbInfo) Update(cols []string) (err error) {
  91. o := orm.NewOrm()
  92. _, err = o.Update(edbInfo, cols...)
  93. return
  94. }
  95. // EdbInfoSearchData
  96. type EdbInfoSearchData struct {
  97. EdbDataId int `description:"数据ID"`
  98. DataTime string `description:"数据日期"`
  99. Value float64 `description:"数据"`
  100. }
  101. // GetEdbDataListAll 获取指标数据列表 order:1升序,其余值为降序
  102. func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchData, err error) {
  103. o := orm.NewOrm()
  104. sql := ``
  105. tableName := GetEdbDataTableName(source)
  106. sql = ` SELECT * FROM %s WHERE 1=1 `
  107. sql = fmt.Sprintf(sql, tableName)
  108. if condition != "" {
  109. sql += condition
  110. }
  111. if order == 1 {
  112. sql += ` ORDER BY data_time ASC `
  113. } else {
  114. sql += ` ORDER BY data_time DESC `
  115. }
  116. _, err = o.Raw(sql, pars).QueryRows(&item)
  117. return
  118. }
  119. // GetEdbDataListAllByTo 根据事务链接获取指标数据列表 order:1升序,其余值为降序
  120. func GetEdbDataListAllByTo(to orm.TxOrmer, condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchData, err error) {
  121. sql := ``
  122. tableName := GetEdbDataTableName(source)
  123. sql = ` SELECT * FROM %s WHERE 1=1 `
  124. sql = fmt.Sprintf(sql, tableName)
  125. if condition != "" {
  126. sql += condition
  127. }
  128. if order == 1 {
  129. sql += ` ORDER BY data_time ASC `
  130. } else {
  131. sql += ` ORDER BY data_time DESC `
  132. }
  133. _, err = to.Raw(sql, pars).QueryRows(&item)
  134. return
  135. }
  136. // EdbInfoMaxAndMinInfo 指标最新数据记录结构体
  137. type EdbInfoMaxAndMinInfo struct {
  138. MinDate string `description:"最小日期"`
  139. MaxDate string `description:"最大日期"`
  140. MinValue float64 `description:"最小值"`
  141. MaxValue float64 `description:"最大值"`
  142. LatestValue float64 `description:"最新值"`
  143. LatestDate string `description:"实际数据最新日期"`
  144. }
  145. // GetEdbInfoMaxAndMinInfo 获取指标的最新数据记录信息
  146. func GetEdbInfoMaxAndMinInfo(source int, edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  147. o := orm.NewOrm()
  148. sql := ``
  149. tableName := GetEdbDataTableName(source)
  150. 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=? `
  151. sql = fmt.Sprintf(sql, tableName)
  152. err = o.Raw(sql, edbCode).QueryRow(&item)
  153. var latest_value float64
  154. sql = ` SELECT value AS latest_value FROM %s WHERE edb_code=? ORDER BY data_time DESC LIMIT 1 `
  155. sql = fmt.Sprintf(sql, tableName)
  156. err = o.Raw(sql, edbCode).QueryRow(&latest_value)
  157. item.LatestValue = latest_value
  158. return
  159. }
  160. // ModifyEdbInfoMaxAndMinInfo 修改指标的最新数据信息
  161. func ModifyEdbInfoMaxAndMinInfo(edbInfoId int, item *EdbInfoMaxAndMinInfo) (err error) {
  162. o := orm.NewOrm()
  163. 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=? `
  164. _, err = o.Raw(sql, item.MinDate, item.MaxDate, item.MinValue, item.MaxValue, item.MaxDate, item.LatestValue, edbInfoId).Exec()
  165. return
  166. }
  167. // GetEdbDataCount 获取edb指标数据的数量; order:1升序,其余值为降序
  168. func GetEdbDataCount(condition string, pars []interface{}, source int) (count int, err error) {
  169. o := orm.NewOrm()
  170. sql := ``
  171. tableName := GetEdbDataTableName(source)
  172. sql = ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 `
  173. sql = fmt.Sprintf(sql, tableName)
  174. if condition != "" {
  175. sql += condition
  176. }
  177. err = o.Raw(sql, pars).QueryRow(&count)
  178. return
  179. }
  180. // GetLastEdbData 获取最近的一条指标数据
  181. func GetLastEdbData(condition string, pars []interface{}, source int) (item *EdbInfoSearchData, err error) {
  182. o := orm.NewOrm()
  183. sql := ``
  184. tableName := GetEdbDataTableName(source)
  185. sql = ` SELECT * FROM %s WHERE 1=1 `
  186. sql = fmt.Sprintf(sql, tableName)
  187. if condition != "" {
  188. sql += condition
  189. }
  190. sql += ` ORDER BY data_time DESC `
  191. err = o.Raw(sql, pars).QueryRow(&item)
  192. return
  193. }
  194. // GetEdbInfoByEdbCode 根据指标code获取指标信息
  195. func GetEdbInfoByEdbCode(source int, edbCode string) (item *EdbInfo, err error) {
  196. o := orm.NewOrm()
  197. sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code=? `
  198. err = o.Raw(sql, source, edbCode).QueryRow(&item)
  199. return
  200. }
  201. // GetEdbInfoOnlyByEdbCode 仅根据指标code获取指标信息
  202. func GetEdbInfoOnlyByEdbCode(edbCode string) (item *EdbInfo, err error) {
  203. o := orm.NewOrm()
  204. sql := ` SELECT * FROM edb_info WHERE edb_code=? `
  205. err = o.Raw(sql, edbCode).QueryRow(&item)
  206. return
  207. }
  208. // GetEdbInfoCalculateListByCondition 获取指标关系列表
  209. func GetEdbInfoCalculateListByCondition(condition string, pars []interface{}) (items []*EdbInfoCalculateMapping, err error) {
  210. o := orm.NewOrm()
  211. sql := ` SELECT * FROM edb_info_calculate_mapping WHERE 1=1 `
  212. if condition != "" {
  213. sql += condition
  214. }
  215. _, err = o.Raw(sql, pars).QueryRows(&items)
  216. return
  217. }
  218. // GetEdbInfoCalculateCountByCondition 获取关联指标数量
  219. func GetEdbInfoCalculateCountByCondition(condition string, pars []interface{}) (count int, err error) {
  220. o := orm.NewOrm()
  221. sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_mapping WHERE 1=1 `
  222. if condition != "" {
  223. sql += condition
  224. }
  225. err = o.Raw(sql, pars).QueryRow(&count)
  226. return
  227. }
  228. //优化版本-处理数据精度问题
  229. type EdbInfoSearchDataV1 struct {
  230. EdbDataId int `description:"数据ID"`
  231. DataTime string `description:"数据日期"`
  232. Value string `description:"数据"`
  233. }
  234. //优化版本-处理数据精度问题
  235. func GetEdbDataListAllV1(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchDataV1, err error) {
  236. o := orm.NewOrm()
  237. sql := ``
  238. tableName := GetEdbDataTableName(source)
  239. sql = ` SELECT * FROM %s WHERE 1=1 `
  240. sql = fmt.Sprintf(sql, tableName)
  241. if condition != "" {
  242. sql += condition
  243. }
  244. if order == 1 {
  245. sql += ` ORDER BY data_time ASC `
  246. } else {
  247. sql += ` ORDER BY data_time DESC `
  248. }
  249. _, err = o.Raw(sql, pars).QueryRows(&item)
  250. return
  251. }
  252. // GetEdbDataListAllV1ByTo 通过事务链接获取数据列表
  253. func GetEdbDataListAllV1ByTo(to orm.TxOrmer, condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchDataV1, err error) {
  254. sql := ``
  255. tableName := GetEdbDataTableName(source)
  256. sql = ` SELECT * FROM %s WHERE 1=1 `
  257. sql = fmt.Sprintf(sql, tableName)
  258. if condition != "" {
  259. sql += condition
  260. }
  261. if order == 1 {
  262. sql += ` ORDER BY data_time ASC `
  263. } else {
  264. sql += ` ORDER BY data_time DESC `
  265. }
  266. _, err = to.Raw(sql, pars).QueryRows(&item)
  267. return
  268. }
  269. // GetEdbInfoByCondition 获取指标列表
  270. func GetEdbInfoByCondition(condition string, pars []interface{}, order int) (item []*EdbInfo, err error) {
  271. o := orm.NewOrm()
  272. sql := ` SELECT * FROM edb_info WHERE 1=1 `
  273. if condition != "" {
  274. sql += condition
  275. }
  276. if order == 1 {
  277. sql += ` ORDER BY end_date ASC `
  278. } else {
  279. sql += ` ORDER BY edb_info_id ASC `
  280. }
  281. _, err = o.Raw(sql, pars).QueryRows(&item)
  282. return
  283. }
  284. // UnifiedModifyEdbInfoMaxAndMinInfo 统一修改指标的最大最小值
  285. func UnifiedModifyEdbInfoMaxAndMinInfo(edbInfo *EdbInfo) (err error, errMsg string) {
  286. // 修改最大最小值
  287. maxAndMinItem, err := GetEdbInfoMaxAndMinInfo(edbInfo.Source, edbInfo.EdbCode)
  288. if err != nil {
  289. if err.Error() == utils.ErrNoRow() {
  290. err = nil
  291. return
  292. }
  293. errMsg = "刷新指标失败!"
  294. err = errors.New("获取指标最大最小值失败,err:" + err.Error())
  295. return
  296. }
  297. if maxAndMinItem != nil {
  298. err = ModifyEdbInfoMaxAndMinInfo(edbInfo.EdbInfoId, maxAndMinItem)
  299. if err != nil {
  300. errMsg = "刷新指标失败!"
  301. err = errors.New("修改指标最大最小值失败,err:" + err.Error())
  302. return
  303. }
  304. }
  305. // 修改关联的预测指标
  306. go ModifyPredictEdbInfoMaxAndMinInfoBySourceEdbInfoId(edbInfo.EdbInfoId, maxAndMinItem)
  307. return
  308. }
  309. // UnifiedModifyPredictEdbInfoMaxAndMinInfo 统一修改预测运算指标的最大最小值
  310. func UnifiedModifyPredictEdbInfoMaxAndMinInfo(edbInfo *EdbInfo, latestDateStr string, latestValue float64) (err error, errMsg string) {
  311. // 修改最大最小值
  312. maxAndMinItem, err := GetEdbInfoMaxAndMinInfo(edbInfo.Source, edbInfo.EdbCode)
  313. if err != nil {
  314. if err.Error() == utils.ErrNoRow() {
  315. err = nil
  316. return
  317. }
  318. errMsg = "刷新指标失败!"
  319. err = errors.New("获取指标最大最小值失败,err:" + err.Error())
  320. return
  321. }
  322. if maxAndMinItem != nil {
  323. maxAndMinItem.LatestDate = latestDateStr
  324. maxAndMinItem.LatestValue = latestValue
  325. err = ModifyPredictEdbInfoMaxAndMinInfo(edbInfo.EdbInfoId, maxAndMinItem)
  326. if err != nil {
  327. errMsg = "刷新指标失败!"
  328. err = errors.New("修改指标最大最小值失败,err:" + err.Error())
  329. return
  330. }
  331. }
  332. return
  333. }
  334. // GetChartPredictEdbInfoDataList 获取图表的预测指标的未来数据
  335. func GetChartPredictEdbInfoDataList(predictEdbConf PredictEdbConf, latestDateStr string, lastDataValue float64, endDateStr, frequency string, order int) (predictEdbInfoData []*EdbInfoSearchData, err error) {
  336. endDate, err := time.ParseInLocation(utils.FormatDate, endDateStr, time.Local)
  337. if err != nil {
  338. return
  339. }
  340. latestDate, err := time.ParseInLocation(utils.FormatDate, latestDateStr, time.Local)
  341. if err != nil {
  342. return
  343. }
  344. // 开始预测数据的时间
  345. startDate := latestDate
  346. dataValue := lastDataValue
  347. if predictEdbConf.RuleType == 2 {
  348. dataValue = predictEdbConf.FixedValue
  349. }
  350. //获取后面的预测数据
  351. dayList := getPredictEdbDayList(startDate, endDate, frequency)
  352. predictEdbInfoData = make([]*EdbInfoSearchData, 0)
  353. // order:1升序,其余值为降序
  354. if order == 1 {
  355. for k, v := range dayList {
  356. predictEdbInfoData = append(predictEdbInfoData, &EdbInfoSearchData{
  357. EdbDataId: predictEdbConf.PredictEdbInfoId + 10000000000 + k,
  358. DataTime: v.Format(utils.FormatDate),
  359. Value: dataValue,
  360. })
  361. }
  362. } else {
  363. lenDayList := len(dayList)
  364. if lenDayList > 0 {
  365. for i := lenDayList - 1; i >= 0; i-- {
  366. v := dayList[i]
  367. predictEdbInfoData = append(predictEdbInfoData, &EdbInfoSearchData{
  368. EdbDataId: predictEdbConf.PredictEdbInfoId + 10000000000 + i,
  369. DataTime: v.Format(utils.FormatDate),
  370. Value: dataValue,
  371. })
  372. }
  373. }
  374. }
  375. return
  376. }
  377. // GetPredictEdbDayList 获取预测指标日期列表
  378. func getPredictEdbDayList(startDate, endDate time.Time, frequency string) (dayList []time.Time) {
  379. //if !utils.InArrayByStr([]string{"日度", "周度", "月度"}, frequency)
  380. switch frequency {
  381. case "日度":
  382. for currDate := startDate.AddDate(0, 0, 1); currDate.Before(endDate) || currDate.Equal(endDate); currDate = currDate.AddDate(0, 0, 1) {
  383. //周六、日排除
  384. if currDate.Weekday() == time.Sunday || currDate.Weekday() == time.Saturday {
  385. continue
  386. }
  387. dayList = append(dayList, currDate)
  388. }
  389. case "周度":
  390. //nextDate := startDate.AddDate(0, 0, 7)
  391. for currDate := startDate.AddDate(0, 0, 7); currDate.Before(endDate) || currDate.Equal(endDate); currDate = currDate.AddDate(0, 0, 7) {
  392. dayList = append(dayList, currDate)
  393. }
  394. case "月度":
  395. for currDate := startDate; currDate.Before(endDate) || currDate.Equal(endDate); {
  396. currDate = time.Date(currDate.Year(), currDate.Month(), 1, 0, 0, 0, 0, time.Now().Location()).AddDate(0, 2, -1)
  397. if !currDate.After(endDate) {
  398. dayList = append(dayList, currDate)
  399. }
  400. }
  401. }
  402. return
  403. }
  404. // GetPredictDataListByPredictEdbInfoId 根据预测指标id获取预测指标的数据,order:1升序,其余值为降序
  405. func GetPredictDataListByPredictEdbInfoId(edbInfoId, order int, startDate string) (dataList []*EdbInfoSearchData, sourceEdbInfoItem *EdbInfo, predictEdbConf *PredictEdbConf, err error, errMsg string) {
  406. edbInfo, err := GetEdbInfoById(edbInfoId)
  407. if err != nil {
  408. errMsg = `获取预测指标信息失败`
  409. return
  410. }
  411. return GetPredictDataListByPredictEdbInfo(edbInfo, order, startDate)
  412. }
  413. // GetPredictDataListByPredictEdbInfo 根据预测指标信息获取预测指标的数据,order:1升序,其余值为降序
  414. func GetPredictDataListByPredictEdbInfo(edbInfo *EdbInfo, order int, startDate string) (dataList []*EdbInfoSearchData, sourceEdbInfoItem *EdbInfo, predictEdbConf *PredictEdbConf, err error, errMsg string) {
  415. // 查找该预测指标配置
  416. predictEdbConf, err = GetPredictEdbConfById(edbInfo.EdbInfoId)
  417. if err != nil && err.Error() != utils.ErrNoRow() {
  418. errMsg = "获取预测指标配置信息失败"
  419. return
  420. }
  421. if predictEdbConf == nil {
  422. errMsg = "获取预测指标配置信息失败"
  423. err = errors.New(errMsg)
  424. return
  425. }
  426. // 来源指标
  427. sourceEdbInfoItem, err = GetEdbInfoById(predictEdbConf.SourceEdbInfoId)
  428. if err != nil {
  429. if err.Error() == utils.ErrNoRow() {
  430. errMsg = "找不到来源指标信息"
  431. err = errors.New(errMsg)
  432. }
  433. return
  434. }
  435. //获取指标数据(实际已生成)
  436. var condition string
  437. var pars []interface{}
  438. condition += " AND edb_info_id=? "
  439. pars = append(pars, sourceEdbInfoItem.EdbInfoId)
  440. if startDate != "" {
  441. condition += " AND data_time>=? "
  442. pars = append(pars, startDate)
  443. }
  444. dataList, err = GetEdbDataListAll(condition, pars, sourceEdbInfoItem.Source, order)
  445. if err != nil {
  446. return
  447. }
  448. // 获取预测指标未来的数据
  449. predictDataList := make([]*EdbInfoSearchData, 0)
  450. endDateStr := edbInfo.EndDate //预测指标的结束日期
  451. predictDataList, err = GetChartPredictEdbInfoDataList(*predictEdbConf, sourceEdbInfoItem.LatestDate, sourceEdbInfoItem.LatestValue, endDateStr, edbInfo.Frequency, order)
  452. if err != nil {
  453. return
  454. }
  455. dataList = append(dataList, predictDataList...)
  456. if len(predictDataList) > 0 {
  457. tmpValue := predictDataList[0]
  458. // 如果最大值 小于 预测值,那么将预测值作为最大值数据返回
  459. if edbInfo.MaxValue < tmpValue.Value {
  460. edbInfo.MaxValue = tmpValue.Value
  461. }
  462. // 如果最小值 大于 预测值,那么将预测值作为最小值数据返回
  463. if edbInfo.MinValue > tmpValue.Value {
  464. edbInfo.MinValue = tmpValue.Value
  465. }
  466. }
  467. return
  468. }
  469. // GetPredictEdbDataListAll 获取该预测指标所有的数据 ,order:1升序,其余值为降序
  470. func GetPredictEdbDataListAll(edbInfo *EdbInfo, order int) (items []*EdbInfoSearchData, err error) {
  471. if edbInfo.Source == utils.DATA_SOURCE_PREDICT { //普通的预测指标是没有入库数据的,直接往配置里面获取
  472. items, _, _, err, _ = GetPredictDataListByPredictEdbInfo(edbInfo, 1, "")
  473. } else {
  474. var condition string
  475. var pars []interface{}
  476. condition += " AND edb_info_id=? "
  477. pars = append(pars, edbInfo.EdbInfoId)
  478. items, err = GetEdbDataListAll(condition, pars, edbInfo.Source, order)
  479. }
  480. return
  481. }
  482. // GetPredictEdbDataListAllByStartDate 根据开始日期获取该预测指标所有的数据 ,order:1升序,其余值为降序
  483. func GetPredictEdbDataListAllByStartDate(edbInfo *EdbInfo, order int, startDate string) (items []*EdbInfoSearchData, err error) {
  484. if edbInfo.Source == utils.DATA_SOURCE_PREDICT { //普通的预测指标是没有入库数据的,直接往配置里面获取
  485. items, _, _, err, _ = GetPredictDataListByPredictEdbInfo(edbInfo, 1, startDate)
  486. } else {
  487. var condition string
  488. var pars []interface{}
  489. condition += " AND edb_info_id=? "
  490. pars = append(pars, edbInfo.EdbInfoId)
  491. if startDate != "" {
  492. condition += " AND data_time>=? "
  493. pars = append(pars, startDate)
  494. }
  495. items, err = GetEdbDataListAll(condition, pars, edbInfo.Source, order)
  496. }
  497. return
  498. }
  499. // ModifyPredictEdbInfoMaxAndMinInfo 修改预测指标的最新数据信息
  500. func ModifyPredictEdbInfoMaxAndMinInfo(edbInfoId int, item *EdbInfoMaxAndMinInfo) (err error) {
  501. o := orm.NewOrm()
  502. 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=? `
  503. _, err = o.Raw(sql, item.MinDate, item.MaxDate, item.MinValue, item.MaxValue, item.LatestDate, item.LatestValue, edbInfoId).Exec()
  504. return
  505. }
  506. // ModifyCalculateEdbInfo 修改计算指标信息
  507. func ModifyCalculateEdbInfo(edbName, frequency, unit, calculateFormula string, classifyId, edbInfoId int) (err error) {
  508. o := orm.NewOrmUsingDB("data")
  509. sql := ` UPDATE edb_info
  510. SET
  511. edb_name =?,
  512. edb_name_source =?,
  513. frequency = ?,
  514. unit = ?,
  515. classify_id = ?,
  516. calculate_formula=?,
  517. modify_time = NOW()
  518. WHERE edb_info_id = ?`
  519. _, err = o.Raw(sql, edbName, edbName, frequency, unit, classifyId, calculateFormula, edbInfoId).Exec()
  520. return
  521. }