edb_info.go 20 KB

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