predict_edb_info.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package data_manage
  2. import (
  3. "eta/eta_mobile/controllers"
  4. "eta/eta_mobile/models"
  5. "eta/eta_mobile/models/data_manage"
  6. "eta/eta_mobile/services/data"
  7. "eta/eta_mobile/utils"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. )
  10. // PredictEdbInfoController 预测指标
  11. type PredictEdbInfoController struct {
  12. controllers.BaseAuthController
  13. }
  14. // List
  15. // @Title 指标数据列表接口
  16. // @Description 指标数据列表接口
  17. // @Param PageSize query int true "每页数据条数"
  18. // @Param CurrentIndex query int true "当前页页码,从1开始"
  19. // @Param EdbInfoId query int true "指标id"
  20. // @Param KeyWord query string false "搜索关键词:指标ID/指标名称"
  21. // @Success 200 {object} data_manage.EdbInfoListResp
  22. // @router /predict_edb_info/list [get]
  23. func (this *PredictEdbInfoController) List() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. edbInfoId, _ := this.GetInt("EdbInfoId")
  30. keyWord := this.GetString("KeyWord")
  31. pageSize, _ := this.GetInt("PageSize")
  32. currentIndex, _ := this.GetInt("CurrentIndex")
  33. var total int
  34. page := paging.GetPaging(currentIndex, pageSize, total)
  35. var startSize int
  36. if pageSize <= 0 {
  37. pageSize = utils.PageSize20
  38. }
  39. if currentIndex <= 0 {
  40. currentIndex = 1
  41. }
  42. startSize = paging.StartIndex(currentIndex, pageSize)
  43. var condition string
  44. var pars []interface{}
  45. // 指标类型,0:普通指标,1:预测指标
  46. condition += " AND edb_info_type=? "
  47. pars = append(pars, 1)
  48. if edbInfoId > 0 {
  49. condition += " AND edb_info_id=? "
  50. pars = append(pars, edbInfoId)
  51. }
  52. if keyWord != "" {
  53. condition += ` AND ( edb_code LIKE '%` + keyWord + `%' OR edb_name LIKE '%` + keyWord + `%' )`
  54. //pars = append(pars, keyWord)
  55. //pars = append(pars, keyWord)
  56. }
  57. resp := data_manage.EdbInfoListResp{}
  58. if condition == "" {
  59. item := new(data_manage.EdbInfoList)
  60. resp.Paging = page
  61. resp.Item = item
  62. br.Ret = 200
  63. br.Success = true
  64. br.Msg = "获取成功"
  65. return
  66. }
  67. //获取指标信息
  68. edbInfoItem, err := data_manage.GetEdbInfoByCondition(condition, pars)
  69. if err != nil && err.Error() != utils.ErrNoRow() {
  70. br.Success = true
  71. br.Msg = "获取指标信息失败"
  72. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  73. return
  74. }
  75. if edbInfoItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  76. item := new(data_manage.EdbInfoList)
  77. resp.Paging = page
  78. resp.Item = item
  79. br.Ret = 200
  80. br.Success = true
  81. br.Msg = "获取成功"
  82. return
  83. }
  84. //获取英文频度
  85. edbInfoItem.FrequencyEn = data.GetFrequencyEn(edbInfoItem.Frequency)
  86. //查询目录
  87. resultList, _ := data_manage.GetClassifyAllByClassifyId(edbInfoItem.ClassifyId)
  88. // 未来的指标预测数据
  89. predictDataList := make([]*data_manage.EdbData, 0)
  90. var existCondition string
  91. var existPars []interface{}
  92. existCondition += " AND edb_info_id=? "
  93. existPars = append(existPars, edbInfoId)
  94. //查询出所有的关联指标
  95. sourceEdbInfoCalculateMappingList, err := data_manage.GetEdbInfoCalculateListByCondition(existCondition, existPars)
  96. if err != nil {
  97. br.Msg = "获取失败"
  98. br.ErrMsg = "获取预测指标关联信息失败,Err:" + err.Error()
  99. return
  100. }
  101. if len(sourceEdbInfoCalculateMappingList) <= 0 {
  102. br.Msg = "获取失败"
  103. br.ErrMsg = "查找预测指标关联信息失败"
  104. return
  105. }
  106. if edbInfoItem.EdbType == 1 { //普通的预测指标
  107. // 查找该预测指标配置
  108. predictEdbConfList, err := data_manage.GetPredictEdbConfListById(edbInfoId)
  109. if err != nil && err.Error() != utils.ErrNoRow() {
  110. br.Msg = "获取失败"
  111. br.ErrMsg = "获取预测指标配置信息失败,Err:" + err.Error()
  112. return
  113. }
  114. if len(predictEdbConfList) == 0 {
  115. br.Msg = "找不到该预测指标配置"
  116. br.ErrMsg = "找不到该预测指标配置"
  117. return
  118. }
  119. predictEdbConf := predictEdbConfList[0]
  120. //预测数据的配置
  121. edbInfoItem.RuleType = predictEdbConf.RuleType
  122. edbInfoItem.FixedValue = predictEdbConf.FixedValue
  123. // 来源指标
  124. //sourceEdbInfoId := sourceEdbInfoCalculateMappingList[0].FromEdbInfoId
  125. sourceEdbInfoId := predictEdbConf.SourceEdbInfoId
  126. sourceEdbInfoItem, err := data_manage.GetEdbInfoById(sourceEdbInfoId)
  127. if err != nil {
  128. br.Msg = "获取来源指标信息失败"
  129. br.ErrMsg = "获取来源指标信息失败"
  130. if err.Error() != utils.ErrNoRow() {
  131. br.ErrMsg = "获取来源指标信息失败,Err:" + err.Error()
  132. }
  133. br.Success = true
  134. return
  135. }
  136. //获取指标数据(实际已生成)
  137. {
  138. var dataCondition string
  139. var dataPars []interface{}
  140. dataCondition += ` AND edb_info_id=? `
  141. dataPars = append(dataPars, sourceEdbInfoItem.EdbInfoId)
  142. dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, sourceEdbInfoItem.Source)
  143. if err != nil && err.Error() != utils.ErrNoRow() {
  144. br.Msg = "获取指标信息失败"
  145. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  146. return
  147. }
  148. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  149. dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, sourceEdbInfoItem.Source, pageSize, startSize)
  150. if err != nil {
  151. br.Msg = "获取指标信息失败"
  152. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  153. return
  154. }
  155. edbInfoItem.DataList = dataList
  156. }
  157. // 第一页才需要 获取预测指标未来的数据
  158. if currentIndex == 1 {
  159. allDataList, err := data_manage.GetEdbDataList(sourceEdbInfoItem.Source, sourceEdbInfoItem.EdbInfoId, "", "")
  160. if err != nil {
  161. br.Msg = "获取失败"
  162. br.Msg = "获取失败,Err:" + err.Error()
  163. return
  164. }
  165. predictEdbConfDataList := make([]data_manage.PredictEdbConfAndData, 0)
  166. for _, v := range predictEdbConfList {
  167. predictEdbConfDataList = append(predictEdbConfDataList, data_manage.PredictEdbConfAndData{
  168. ConfigId: v.ConfigId,
  169. PredictEdbInfoId: v.PredictEdbInfoId,
  170. SourceEdbInfoId: v.SourceEdbInfoId,
  171. RuleType: v.RuleType,
  172. FixedValue: v.FixedValue,
  173. Value: v.Value,
  174. EndDate: v.EndDate,
  175. ModifyTime: v.ModifyTime,
  176. CreateTime: v.CreateTime,
  177. DataList: make([]*data_manage.EdbDataList, 0),
  178. })
  179. }
  180. tmpPredictDataList, _, _, err, _ := data.GetChartPredictEdbInfoDataListByConfList(predictEdbConfDataList, sourceEdbInfoItem.LatestDate, sourceEdbInfoItem.LatestDate, edbInfoItem.EndDate, sourceEdbInfoItem.Frequency, edbInfoItem.DataDateType, allDataList)
  181. if err != nil {
  182. br.Msg = "获取预测指标数据失败"
  183. br.ErrMsg = "获取预测指标数据失败" + err.Error()
  184. return
  185. }
  186. lenTmpPredictDataList := len(tmpPredictDataList)
  187. if lenTmpPredictDataList > 0 {
  188. for i := lenTmpPredictDataList - 1; i >= 0; i-- {
  189. v := tmpPredictDataList[i]
  190. predictDataList = append(predictDataList, &data_manage.EdbData{
  191. EdbDataId: v.EdbDataId,
  192. EdbInfoId: v.EdbInfoId,
  193. DataTime: v.DataTime,
  194. Value: v.Value,
  195. })
  196. }
  197. }
  198. }
  199. } else {
  200. //获取指标数据(实际已生成)
  201. {
  202. var dataCondition string
  203. var dataPars []interface{}
  204. dataCondition += ` AND edb_info_id=? AND data_time <= ? `
  205. dataPars = append(dataPars, edbInfoItem.EdbInfoId, edbInfoItem.LatestDate)
  206. dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source)
  207. if err != nil && err.Error() != utils.ErrNoRow() {
  208. br.Msg = "获取指标信息失败"
  209. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  210. return
  211. }
  212. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  213. dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, pageSize, startSize)
  214. if err != nil {
  215. br.Msg = "获取指标信息失败"
  216. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  217. return
  218. }
  219. edbInfoItem.DataList = dataList
  220. }
  221. // 第一页才需要 获取预测指标未来的数据
  222. if currentIndex == 1 {
  223. var dataCondition string
  224. var dataPars []interface{}
  225. dataCondition += ` AND edb_info_id=? AND data_time > ? `
  226. dataPars = append(dataPars, edbInfoItem.EdbInfoId, edbInfoItem.LatestDate)
  227. predictDataList, err = data_manage.GetAllEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source)
  228. if err != nil {
  229. br.Msg = "获取指标信息失败"
  230. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  231. return
  232. }
  233. if err != nil {
  234. br.Msg = "获取预测指标数据失败"
  235. br.ErrMsg = "获取预测指标数据失败" + err.Error()
  236. return
  237. }
  238. }
  239. }
  240. // 如果预测数据没有,那么返回空数组
  241. if predictDataList == nil {
  242. predictDataList = make([]*data_manage.EdbData, 0)
  243. }
  244. edbInfoItem.PredictDataList = predictDataList
  245. // 如果实际数据没有,那么返回空数组
  246. if edbInfoItem.DataList == nil {
  247. edbInfoItem.DataList = make([]*data_manage.EdbData, 0)
  248. }
  249. resp.Paging = page
  250. resp.Item = edbInfoItem
  251. resp.ClassifyList = resultList
  252. br.Ret = 200
  253. br.Success = true
  254. br.Msg = "获取成功"
  255. br.Data = resp
  256. }