edb_info.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. package data
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_ETA_mobile_api/models/data_manage"
  6. "hongze/hongze_ETA_mobile_api/services/alarm_msg"
  7. "hongze/hongze_ETA_mobile_api/utils"
  8. "sort"
  9. "time"
  10. )
  11. // 获取频度的英文版
  12. func GetFrequencyEn(frequency string) (frequencyEn string) {
  13. switch frequency {
  14. case "日度":
  15. frequencyEn = "day"
  16. return
  17. case "周度":
  18. frequencyEn = "week"
  19. return
  20. case "旬度":
  21. frequencyEn = "ten days"
  22. return
  23. case "月度":
  24. frequencyEn = "month"
  25. return
  26. case "季度":
  27. frequencyEn = "quarter"
  28. return
  29. case "年度":
  30. frequencyEn = "year"
  31. return
  32. }
  33. return
  34. }
  35. func GetLeadUnitEn(unit string) (unitEn string) {
  36. switch unit {
  37. case "天":
  38. unitEn = "day"
  39. return
  40. case "周":
  41. unitEn = "week"
  42. return
  43. case "月":
  44. unitEn = "month"
  45. return
  46. case "季":
  47. unitEn = "quarter"
  48. return
  49. case "年":
  50. unitEn = "year"
  51. return
  52. }
  53. return
  54. }
  55. // EdbInfoRefreshAllFromBaseV3 全部刷新指标(切换到edb_lib服务)
  56. // @author Roc
  57. // @datetime 2022-09-16 11:04:44
  58. // @description 将原有的单个指标刷新,调整为批量多个指标刷新
  59. func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool) (err error) {
  60. var errmsg string
  61. defer func() {
  62. if err != nil {
  63. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  64. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  65. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  66. }
  67. }()
  68. // 获取关联的基础指标
  69. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
  70. if err != nil {
  71. return
  72. }
  73. var startDate string
  74. for _, bv := range newBaseEdbInfoArr {
  75. //source := bv.Source
  76. //edbInfoId := bv.EdbInfoId
  77. //edbCode := bv.EdbCode
  78. if bv.StartDate == "0000-00-00" {
  79. continue
  80. }
  81. //开始时间
  82. startDate = ``
  83. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  84. sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
  85. if err != nil {
  86. return err
  87. }
  88. startDate = sTime.Format(utils.FormatDate)
  89. } else {
  90. sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  91. if err != nil {
  92. return err
  93. }
  94. frequency := bv.Frequency
  95. var limitDay int
  96. switch frequency {
  97. case "日度":
  98. limitDay = utils.DATA_START_REFRESH_LIMIT
  99. case "周度":
  100. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  101. case "月度":
  102. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  103. case "季度":
  104. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  105. case "年度":
  106. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  107. default:
  108. limitDay = utils.DATA_START_REFRESH_LIMIT
  109. }
  110. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  111. }
  112. result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
  113. if err != nil {
  114. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
  115. errmsg = "RefreshBaseEdbData Err:" + err.Error()
  116. return err
  117. }
  118. if result.Ret != 200 {
  119. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  120. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  121. return fmt.Errorf("刷新失败, err:", errmsg)
  122. }
  123. //maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  124. //if err != nil {
  125. // if err.Error() == utils.ErrNoRow() { //找不到数据,那么就进入到下一条数据做处理
  126. // continue
  127. // }
  128. // return err
  129. //}
  130. //if maxAndMinItem != nil {
  131. // err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  132. // if err != nil {
  133. // return err
  134. // }
  135. //}
  136. fmt.Println("end newBaseEdbInfoArr:", bv, time.Now())
  137. }
  138. //刷新相关普通计算指标
  139. for _, v := range calculateArr {
  140. edbInfo := newCalculateMap[v]
  141. if edbInfo == nil {
  142. return err
  143. }
  144. //计算指标就不用开始时间了吧,因为存在说开始时间变更的情况
  145. startDate = ``
  146. if !refreshAll { //如果不是全部更新,那么以指标的开始时间作为刷新
  147. startDate = edbInfo.StartDate
  148. source := edbInfo.Source
  149. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  150. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  151. } else {
  152. if source == utils.DATA_SOURCE_CALCULATE {
  153. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  154. if err != nil {
  155. return err
  156. }
  157. frequency := edbInfo.Frequency
  158. var limitDay int
  159. switch frequency {
  160. case "日度":
  161. limitDay = utils.DATA_START_REFRESH_LIMIT
  162. case "周度":
  163. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  164. case "月度":
  165. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  166. case "季度":
  167. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  168. case "年度":
  169. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  170. default:
  171. limitDay = utils.DATA_START_REFRESH_LIMIT
  172. }
  173. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  174. }
  175. }
  176. }
  177. result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  178. if err != nil {
  179. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  180. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  181. return err
  182. }
  183. if result.Ret != 200 {
  184. fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  185. errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  186. return fmt.Errorf("刷新失败")
  187. }
  188. }
  189. //刷新相关预测计算指标
  190. for _, v := range predictCalculateArr {
  191. edbInfo := newPredictCalculateMap[v]
  192. if edbInfo == nil {
  193. return err
  194. }
  195. startDate = edbInfo.StartDate
  196. source := edbInfo.Source
  197. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  198. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  199. } else {
  200. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  201. startDate = ``
  202. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  203. startDate = edbInfo.StartDate
  204. } else {
  205. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  206. if err != nil {
  207. return err
  208. }
  209. frequency := edbInfo.Frequency
  210. var limitDay int
  211. switch frequency {
  212. case "日度":
  213. limitDay = utils.DATA_START_REFRESH_LIMIT
  214. case "周度":
  215. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  216. case "月度":
  217. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  218. case "季度":
  219. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  220. case "年度":
  221. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  222. default:
  223. limitDay = utils.DATA_START_REFRESH_LIMIT
  224. }
  225. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  226. }
  227. }
  228. }
  229. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  230. if err != nil {
  231. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  232. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  233. return err
  234. }
  235. if result.Ret != 200 {
  236. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  237. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  238. return fmt.Errorf("刷新失败")
  239. }
  240. }
  241. // 4、更新动态环差值
  242. {
  243. predictEdbInfoIdList := make([]int, 0)
  244. for _, v := range newBasePredictEdbInfoArr {
  245. predictEdbInfoIdList = append(predictEdbInfoIdList, v.EdbInfoId)
  246. }
  247. fmt.Println("predictEdbConfCalculateMappingDetailList:", predictEdbInfoIdList)
  248. predictEdbConfCalculateMappingDetailList, err := data_manage.GetPredictEdbConfCalculateMappingDetailListByEdbInfoId(predictEdbInfoIdList)
  249. if err != nil {
  250. errmsg = fmt.Sprint("更新动态环差值时,获取数据失败:" + err.Error())
  251. return fmt.Errorf("刷新失败, err:", errmsg)
  252. }
  253. for _, bv := range predictEdbConfCalculateMappingDetailList {
  254. result, err := RefreshEdbData(bv.EdbInfoId, utils.DATA_SOURCE_PREDICT, bv.EdbCode, "")
  255. if err != nil {
  256. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err", time.Now())
  257. errmsg = "RefreshBasePredictEdbData Err:" + err.Error()
  258. return err
  259. }
  260. if result.Ret != 200 {
  261. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  262. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  263. return fmt.Errorf("刷新失败, err:%s", errmsg)
  264. }
  265. fmt.Println("end predictEdbConfCalculateMappingDetailList:", bv, time.Now())
  266. }
  267. }
  268. //5、再次刷新相关预测计算指标
  269. for _, v := range predictCalculateArr {
  270. edbInfo := newPredictCalculateMap[v]
  271. if edbInfo == nil {
  272. return err
  273. }
  274. startDate = edbInfo.StartDate
  275. source := edbInfo.Source
  276. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  277. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  278. } else {
  279. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  280. startDate = ``
  281. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  282. startDate = edbInfo.StartDate
  283. } else {
  284. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  285. if err != nil {
  286. return err
  287. }
  288. frequency := edbInfo.Frequency
  289. var limitDay int
  290. switch frequency {
  291. case "日度":
  292. limitDay = utils.DATA_START_REFRESH_LIMIT
  293. case "周度":
  294. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  295. case "月度":
  296. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  297. case "季度":
  298. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  299. case "年度":
  300. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  301. default:
  302. limitDay = utils.DATA_START_REFRESH_LIMIT
  303. }
  304. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  305. }
  306. }
  307. }
  308. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  309. if err != nil {
  310. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  311. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  312. return err
  313. }
  314. if result.Ret != 200 {
  315. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  316. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  317. return fmt.Errorf("刷新失败")
  318. }
  319. }
  320. return err
  321. }
  322. // getRefreshEdbInfoList 获取待更新的指标(普通基础指标、普通运算指标,预测运算指标)
  323. func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
  324. calculateList, err := data_manage.GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList)
  325. if err != nil && err.Error() != utils.ErrNoRow() {
  326. err = errors.New("GetEdbInfoAllCalculate Err:" + err.Error())
  327. return
  328. }
  329. // 获取指标信息
  330. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  331. if err != nil {
  332. err = errors.New("GetEdbInfoAllCalGetEdbInfoByIdr:" + err.Error())
  333. return
  334. }
  335. baseEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 基础普通指标
  336. calculateInfoArr := make([]*data_manage.EdbInfo, 0) //基础运算指标
  337. basePredictEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 预测普通指标
  338. predictCalculateInfoArr := make([]*data_manage.EdbInfo, 0) //预测运算指标
  339. for _, baseEdbInfo := range edbInfoList {
  340. if baseEdbInfo.EdbInfoType == 0 { //普通指标
  341. switch baseEdbInfo.EdbType {
  342. case 1: //基础指标
  343. baseEdbInfoArr = append(baseEdbInfoArr, baseEdbInfo)
  344. case 2: //计算指标
  345. calculateList = append(calculateList, baseEdbInfo)
  346. }
  347. } else { //预测指标
  348. switch baseEdbInfo.EdbType {
  349. case 1: //基础指标
  350. basePredictEdbInfoArr = append(basePredictEdbInfoArr, baseEdbInfo)
  351. case 2: //计算指标
  352. predictCalculateInfoArr = append(predictCalculateInfoArr, baseEdbInfo)
  353. }
  354. }
  355. }
  356. // 计算指标
  357. for _, v := range calculateList {
  358. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  359. if tmpErr != nil {
  360. err = tmpErr
  361. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  362. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  363. return
  364. }
  365. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  366. switch tmpEdbInfo.EdbInfoType {
  367. case 0: //普通基础指标
  368. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  369. case 1: //预测基础指标
  370. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  371. }
  372. }
  373. for _, tmpEdbInfo := range getCalculateInfoArr {
  374. switch tmpEdbInfo.EdbInfoType {
  375. case 0: //普通运算指标
  376. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  377. case 1: //预测运算指标
  378. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  379. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  380. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  381. } else {
  382. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  383. }
  384. }
  385. }
  386. switch v.EdbInfoType {
  387. case 0: //普通运算指标
  388. calculateInfoArr = append(calculateInfoArr, v)
  389. case 1: //预测指标
  390. if v.EdbType == 1 { //预测普通指标
  391. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  392. } else {
  393. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  394. }
  395. }
  396. }
  397. // 预测计算指标
  398. for _, v := range predictCalculateInfoArr {
  399. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  400. if tmpErr != nil {
  401. err = tmpErr
  402. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  403. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  404. return
  405. }
  406. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  407. switch tmpEdbInfo.EdbInfoType {
  408. case 0: //普通基础指标
  409. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  410. case 1: //预测基础指标
  411. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  412. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  413. } else {
  414. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  415. }
  416. //basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  417. }
  418. }
  419. for _, tmpEdbInfo := range getCalculateInfoArr {
  420. switch tmpEdbInfo.EdbInfoType {
  421. case 0: //普通运算指标
  422. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  423. case 1: //预测运算指标
  424. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  425. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  426. } else {
  427. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  428. }
  429. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  430. }
  431. }
  432. switch v.EdbInfoType {
  433. case 0: //普通运算指标
  434. calculateInfoArr = append(calculateInfoArr, v)
  435. case 1: //预测指标
  436. if v.EdbType == 1 { //预测普通指标
  437. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  438. } else {
  439. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  440. }
  441. }
  442. }
  443. // 第一次的计算指标map
  444. newCalculateMap = make(map[int]*data_manage.EdbInfo)
  445. for _, v := range calculateInfoArr {
  446. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  447. calculateArr = append(calculateArr, v.EdbInfoId)
  448. }
  449. newCalculateMap[v.EdbInfoId] = v
  450. }
  451. // 基础预测指标
  452. if len(basePredictEdbInfoArr) > 0 {
  453. basePredictEdbInfoIdList := make([]int, 0)
  454. for _, v := range basePredictEdbInfoArr {
  455. basePredictEdbInfoIdList = append(basePredictEdbInfoIdList, v.EdbInfoId)
  456. }
  457. baseEdbInfoList, tmpErr := data_manage.GetPredictEdbInfoAllCalculate(basePredictEdbInfoIdList)
  458. if tmpErr != nil {
  459. err = tmpErr
  460. return
  461. }
  462. tmpCalculateList := make([]*data_manage.EdbInfo, 0)
  463. for _, v := range baseEdbInfoList {
  464. switch v.EdbType {
  465. case 1:
  466. baseEdbInfoArr = append(baseEdbInfoArr, v)
  467. case 2:
  468. // 如果不在第一次里面,那么在第二次 刷新预测指标的时候 需要加进去
  469. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  470. tmpCalculateList = append(tmpCalculateList, v)
  471. }
  472. }
  473. }
  474. // 这里是查询预测指标用到的 普通计算指标
  475. for _, v := range tmpCalculateList {
  476. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  477. if tmpErr != nil {
  478. err = tmpErr
  479. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  480. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  481. return
  482. }
  483. // 基础指标
  484. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  485. switch tmpEdbInfo.EdbInfoType {
  486. case 0: //普通基础指标
  487. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  488. case 1: //预测基础指标
  489. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  490. }
  491. }
  492. // 计算指标
  493. for _, tmpEdbInfo := range getCalculateInfoArr {
  494. switch tmpEdbInfo.EdbInfoType {
  495. case 0: //普通运算指标
  496. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  497. case 1: //预测运算指标
  498. if v.EdbType == 1 { //预测普通指标
  499. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  500. } else {
  501. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  502. }
  503. }
  504. }
  505. switch v.EdbInfoType {
  506. case 0: //普通运算指标
  507. calculateInfoArr = append(calculateInfoArr, v)
  508. case 1: //预测指标
  509. if v.EdbType == 1 { //预测普通指标
  510. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  511. } else { //预测运算指标
  512. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  513. }
  514. }
  515. }
  516. // 第二次计算指标的map
  517. for _, v := range calculateInfoArr {
  518. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  519. calculateArr = append(calculateArr, v.EdbInfoId)
  520. }
  521. newCalculateMap[v.EdbInfoId] = v
  522. }
  523. }
  524. // 普通基础指标去重
  525. newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  526. baseMap := make(map[int]int)
  527. for _, v := range baseEdbInfoArr {
  528. if _, ok := baseMap[v.EdbInfoId]; !ok {
  529. newBaseEdbInfoArr = append(newBaseEdbInfoArr, v)
  530. }
  531. baseMap[v.EdbInfoId] = v.EdbInfoId
  532. }
  533. // 普通计算指标的id
  534. sort.Ints(calculateArr)
  535. // 普通预测指标去重
  536. newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  537. basePredictMap := make(map[int]int)
  538. for _, v := range basePredictEdbInfoArr {
  539. if _, ok := basePredictMap[v.EdbInfoId]; !ok {
  540. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, v)
  541. }
  542. basePredictMap[v.EdbInfoId] = v.EdbInfoId
  543. }
  544. // 预测计算指标去重
  545. newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
  546. for _, v := range predictCalculateInfoArr {
  547. if _, ok := newPredictCalculateMap[v.EdbInfoId]; !ok {
  548. predictCalculateArr = append(predictCalculateArr, v.EdbInfoId)
  549. }
  550. newPredictCalculateMap[v.EdbInfoId] = v
  551. }
  552. // 预测计算指标的id
  553. sort.Ints(predictCalculateArr)
  554. return
  555. }