predict_edb_info.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  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. predictDataList := make([]*data_manage.EdbData, 0)
  88. var existCondition string
  89. var existPars []interface{}
  90. existCondition += " AND edb_info_id=? "
  91. existPars = append(existPars, edbInfoId)
  92. //查询出所有的关联指标
  93. sourceEdbInfoCalculateMappingList, err := data_manage.GetEdbInfoCalculateListByCondition(existCondition, existPars)
  94. if err != nil {
  95. br.Msg = "获取失败"
  96. br.ErrMsg = "获取预测指标关联信息失败,Err:" + err.Error()
  97. return
  98. }
  99. if len(sourceEdbInfoCalculateMappingList) <= 0 {
  100. br.Msg = "获取失败"
  101. br.ErrMsg = "查找预测指标关联信息失败"
  102. return
  103. }
  104. if edbInfoItem.EdbType == 1 { //普通的预测指标
  105. // 查找该预测指标配置
  106. predictEdbConfList, err := data_manage.GetPredictEdbConfListById(edbInfoId)
  107. if err != nil && err.Error() != utils.ErrNoRow() {
  108. br.Msg = "获取失败"
  109. br.ErrMsg = "获取预测指标配置信息失败,Err:" + err.Error()
  110. return
  111. }
  112. if len(predictEdbConfList) == 0 {
  113. br.Msg = "找不到该预测指标配置"
  114. br.ErrMsg = "找不到该预测指标配置"
  115. return
  116. }
  117. predictEdbConf := predictEdbConfList[0]
  118. //预测数据的配置
  119. edbInfoItem.RuleType = predictEdbConf.RuleType
  120. edbInfoItem.FixedValue = predictEdbConf.FixedValue
  121. // 来源指标
  122. //sourceEdbInfoId := sourceEdbInfoCalculateMappingList[0].FromEdbInfoId
  123. sourceEdbInfoId := predictEdbConf.SourceEdbInfoId
  124. sourceEdbInfoItem, err := data_manage.GetEdbInfoById(sourceEdbInfoId)
  125. if err != nil {
  126. br.Msg = "获取来源指标信息失败"
  127. br.ErrMsg = "获取来源指标信息失败"
  128. if err.Error() != utils.ErrNoRow() {
  129. br.ErrMsg = "获取来源指标信息失败,Err:" + err.Error()
  130. }
  131. br.Success = true
  132. return
  133. }
  134. //获取指标数据(实际已生成)
  135. {
  136. var dataCondition string
  137. var dataPars []interface{}
  138. dataCondition += ` AND edb_info_id=? `
  139. dataPars = append(dataPars, sourceEdbInfoItem.EdbInfoId)
  140. dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, sourceEdbInfoItem.Source)
  141. if err != nil && err.Error() != utils.ErrNoRow() {
  142. br.Msg = "获取指标信息失败"
  143. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  144. return
  145. }
  146. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  147. dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, sourceEdbInfoItem.Source, pageSize, startSize)
  148. if err != nil {
  149. br.Msg = "获取指标信息失败"
  150. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  151. return
  152. }
  153. edbInfoItem.DataList = dataList
  154. }
  155. // 第一页才需要 获取预测指标未来的数据
  156. if currentIndex == 1 {
  157. allDataList, err := data_manage.GetEdbDataList(sourceEdbInfoItem.Source, sourceEdbInfoItem.EdbInfoId, "", "")
  158. if err != nil {
  159. br.Msg = "获取失败"
  160. br.Msg = "获取失败,Err:" + err.Error()
  161. return
  162. }
  163. predictEdbConfDataList := make([]data_manage.PredictEdbConfAndData, 0)
  164. for _, v := range predictEdbConfList {
  165. predictEdbConfDataList = append(predictEdbConfDataList, data_manage.PredictEdbConfAndData{
  166. ConfigId: v.ConfigId,
  167. PredictEdbInfoId: v.PredictEdbInfoId,
  168. SourceEdbInfoId: v.SourceEdbInfoId,
  169. RuleType: v.RuleType,
  170. FixedValue: v.FixedValue,
  171. Value: v.Value,
  172. EndDate: v.EndDate,
  173. ModifyTime: v.ModifyTime,
  174. CreateTime: v.CreateTime,
  175. DataList: make([]*data_manage.EdbDataList, 0),
  176. })
  177. }
  178. tmpPredictDataList, _, _, err, _ := data.GetChartPredictEdbInfoDataListByConfList(predictEdbConfDataList, sourceEdbInfoItem.LatestDate, sourceEdbInfoItem.LatestDate, edbInfoItem.EndDate, sourceEdbInfoItem.Frequency, edbInfoItem.DataDateType, allDataList)
  179. if err != nil {
  180. br.Msg = "获取预测指标数据失败"
  181. br.ErrMsg = "获取预测指标数据失败" + err.Error()
  182. return
  183. }
  184. lenTmpPredictDataList := len(tmpPredictDataList)
  185. if lenTmpPredictDataList > 0 {
  186. for i := lenTmpPredictDataList - 1; i >= 0; i-- {
  187. v := tmpPredictDataList[i]
  188. predictDataList = append(predictDataList, &data_manage.EdbData{
  189. EdbDataId: v.EdbDataId,
  190. EdbInfoId: v.EdbInfoId,
  191. DataTime: v.DataTime,
  192. Value: v.Value,
  193. })
  194. }
  195. }
  196. }
  197. } else {
  198. //获取指标数据(实际已生成)
  199. {
  200. var dataCondition string
  201. var dataPars []interface{}
  202. dataCondition += ` AND edb_info_id=? AND data_time <= ? `
  203. dataPars = append(dataPars, edbInfoItem.EdbInfoId, edbInfoItem.LatestDate)
  204. dataCount, err := data_manage.GetEdbDataCountByCondition(dataCondition, dataPars, edbInfoItem.Source)
  205. if err != nil && err.Error() != utils.ErrNoRow() {
  206. br.Msg = "获取指标信息失败"
  207. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  208. return
  209. }
  210. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  211. dataList, err := data_manage.GetEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source, pageSize, startSize)
  212. if err != nil {
  213. br.Msg = "获取指标信息失败"
  214. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  215. return
  216. }
  217. edbInfoItem.DataList = dataList
  218. }
  219. // 第一页才需要 获取预测指标未来的数据
  220. if currentIndex == 1 {
  221. var dataCondition string
  222. var dataPars []interface{}
  223. dataCondition += ` AND edb_info_id=? AND data_time > ? `
  224. dataPars = append(dataPars, edbInfoItem.EdbInfoId, edbInfoItem.LatestDate)
  225. predictDataList, err = data_manage.GetAllEdbDataListByCondition(dataCondition, dataPars, edbInfoItem.Source)
  226. if err != nil {
  227. br.Msg = "获取指标信息失败"
  228. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  229. return
  230. }
  231. if err != nil {
  232. br.Msg = "获取预测指标数据失败"
  233. br.ErrMsg = "获取预测指标数据失败" + err.Error()
  234. return
  235. }
  236. }
  237. }
  238. // 如果预测数据没有,那么返回空数组
  239. if predictDataList == nil {
  240. predictDataList = make([]*data_manage.EdbData, 0)
  241. }
  242. edbInfoItem.PredictDataList = predictDataList
  243. // 如果实际数据没有,那么返回空数组
  244. if edbInfoItem.DataList == nil {
  245. edbInfoItem.DataList = make([]*data_manage.EdbData, 0)
  246. }
  247. //查询目录
  248. classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfoItem.ClassifyId)
  249. if err != nil {
  250. br.Msg = err.Error()
  251. br.ErrMsg = errMsg
  252. return
  253. }
  254. resp.Paging = page
  255. resp.Item = edbInfoItem
  256. resp.ClassifyList = classifyList
  257. br.Ret = 200
  258. br.Success = true
  259. br.Msg = "获取成功"
  260. br.Data = resp
  261. }