edb_info.go 19 KB

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