edb_info.go 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562
  1. package data
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_mobile/models/data_manage"
  6. "eta/eta_mobile/services/alarm_msg"
  7. "eta/eta_mobile/services/elastic"
  8. "eta/eta_mobile/utils"
  9. "fmt"
  10. "sort"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // EdbInfoRefreshAllFromBaseV2 全部刷新指标(切换到edb_lib服务)
  16. func EdbInfoRefreshAllFromBaseV2(edbInfoId int, refreshAll bool) (err error, isAsync bool) {
  17. var errmsg string
  18. defer func() {
  19. if err != nil {
  20. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  21. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  22. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  23. }
  24. }()
  25. err, isAsync = EdbInfoRefreshAllFromBaseV3([]int{edbInfoId}, refreshAll, false)
  26. return
  27. //// 获取关联的基础指标
  28. //newBaseEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoList(edbInfoId)
  29. //if err != nil {
  30. // return
  31. //}
  32. //
  33. //var startDate string
  34. //for _, bv := range newBaseEdbInfoArr {
  35. // //source := bv.Source
  36. // //edbInfoId := bv.EdbInfoId
  37. // //edbCode := bv.EdbCode
  38. // if bv.StartDate == "0000-00-00" {
  39. // continue
  40. // }
  41. // //开始时间
  42. // startDate = ``
  43. // if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  44. // sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
  45. // if err != nil {
  46. // return err
  47. // }
  48. // startDate = sTime.Format(utils.FormatDate)
  49. // } else {
  50. // sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  51. // if err != nil {
  52. // return err
  53. // }
  54. // frequency := bv.Frequency
  55. // var limitDay int
  56. // switch frequency {
  57. // case "日度":
  58. // limitDay = utils.DATA_START_REFRESH_LIMIT
  59. // case "周度":
  60. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  61. // case "月度":
  62. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  63. // case "季度":
  64. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  65. // case "年度":
  66. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  67. // default:
  68. // limitDay = utils.DATA_START_REFRESH_LIMIT
  69. // }
  70. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  71. // }
  72. // result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
  73. // if err != nil {
  74. // fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
  75. // errmsg = "RefreshBaseEdbData Err:" + err.Error()
  76. // return err
  77. // }
  78. // if result.Ret != 200 {
  79. // fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  80. // errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  81. // return fmt.Errorf("刷新失败, err:", errmsg)
  82. // }
  83. //
  84. // //maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  85. // //if err != nil {
  86. // // if err.Error() == utils.ErrNoRow() { //找不到数据,那么就进入到下一条数据做处理
  87. // // continue
  88. // // }
  89. // // return err
  90. // //}
  91. // //if maxAndMinItem != nil {
  92. // // err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  93. // // if err != nil {
  94. // // return err
  95. // // }
  96. // //}
  97. // fmt.Println("end newBaseEdbInfoArr:", bv, time.Now())
  98. //}
  99. //
  100. ////刷新相关普通计算指标
  101. //for _, v := range calculateArr {
  102. // edbInfo := newCalculateMap[v]
  103. // if edbInfo == nil {
  104. // return err
  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, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  117. // if err != nil {
  118. // return err
  119. // }
  120. // frequency := edbInfo.Frequency
  121. // var limitDay int
  122. // switch frequency {
  123. // case "日度":
  124. // limitDay = utils.DATA_START_REFRESH_LIMIT
  125. // case "周度":
  126. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  127. // case "月度":
  128. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  129. // case "季度":
  130. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  131. // case "年度":
  132. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  133. // default:
  134. // limitDay = utils.DATA_START_REFRESH_LIMIT
  135. // }
  136. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  137. // }
  138. // }
  139. // }
  140. //
  141. // result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  142. // if err != nil {
  143. // fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  144. // errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  145. // return err
  146. // }
  147. // if result.Ret != 200 {
  148. // fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  149. // errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  150. // return fmt.Errorf("刷新失败")
  151. // }
  152. //}
  153. //
  154. ////刷新相关预测计算指标
  155. //for _, v := range predictCalculateArr {
  156. // edbInfo := newPredictCalculateMap[v]
  157. // if edbInfo == nil {
  158. // return err
  159. // }
  160. // startDate = edbInfo.StartDate
  161. // source := edbInfo.Source
  162. // if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  163. // startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  164. // } else {
  165. // if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  166. // startDate = ``
  167. // if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  168. // startDate = edbInfo.StartDate
  169. // } else {
  170. // sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  171. // if err != nil {
  172. // return err
  173. // }
  174. // frequency := edbInfo.Frequency
  175. // var limitDay int
  176. // switch frequency {
  177. // case "日度":
  178. // limitDay = utils.DATA_START_REFRESH_LIMIT
  179. // case "周度":
  180. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  181. // case "月度":
  182. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  183. // case "季度":
  184. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  185. // case "年度":
  186. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  187. // default:
  188. // limitDay = utils.DATA_START_REFRESH_LIMIT
  189. // }
  190. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  191. // }
  192. // }
  193. // }
  194. //
  195. // result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  196. // if err != nil {
  197. // fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  198. // errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  199. // return err
  200. // }
  201. // if result.Ret != 200 {
  202. // fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  203. // errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  204. // return fmt.Errorf("刷新失败")
  205. // }
  206. //}
  207. //return err
  208. }
  209. // 获取频度的英文版
  210. func GetFrequencyEn(frequency string) (frequencyEn string) {
  211. switch frequency {
  212. case "日度":
  213. frequencyEn = "day"
  214. return
  215. case "周度":
  216. frequencyEn = "week"
  217. return
  218. case "旬度":
  219. frequencyEn = "ten days"
  220. return
  221. case "月度":
  222. frequencyEn = "month"
  223. return
  224. case "季度":
  225. frequencyEn = "quarter"
  226. return
  227. case "年度":
  228. frequencyEn = "year"
  229. return
  230. }
  231. return
  232. }
  233. func GetLeadUnitEn(unit string) (unitEn string) {
  234. switch unit {
  235. case "天":
  236. unitEn = "day"
  237. return
  238. case "周":
  239. unitEn = "week"
  240. return
  241. case "月":
  242. unitEn = "month"
  243. return
  244. case "季":
  245. unitEn = "quarter"
  246. return
  247. case "年":
  248. unitEn = "year"
  249. return
  250. }
  251. return
  252. }
  253. // EdbInfoRefreshAllFromBaseV3 全部刷新指标(切换到edb_lib服务)
  254. // @author Roc
  255. // @datetime 2022-09-16 11:04:44
  256. // @description 将原有的单个指标刷新,调整为批量多个指标刷新
  257. //func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool) (err error) {
  258. // var errmsg string
  259. // defer func() {
  260. // if err != nil {
  261. // fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  262. // go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  263. // //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  264. // }
  265. // }()
  266. //
  267. // // 获取关联的基础指标
  268. // newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
  269. // if err != nil {
  270. // return
  271. // }
  272. // var startDate string
  273. // for _, bv := range newBaseEdbInfoArr {
  274. // //source := bv.Source
  275. // //edbInfoId := bv.EdbInfoId
  276. // //edbCode := bv.EdbCode
  277. // if bv.StartDate == "0000-00-00" {
  278. // continue
  279. // }
  280. // //开始时间
  281. // startDate = ``
  282. // if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  283. // sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
  284. // if err != nil {
  285. // return err
  286. // }
  287. // startDate = sTime.Format(utils.FormatDate)
  288. // } else {
  289. // sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  290. // if err != nil {
  291. // return err
  292. // }
  293. // frequency := bv.Frequency
  294. // var limitDay int
  295. // switch frequency {
  296. // case "日度":
  297. // limitDay = utils.DATA_START_REFRESH_LIMIT
  298. // case "周度":
  299. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  300. // case "月度":
  301. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  302. // case "季度":
  303. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  304. // case "年度":
  305. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  306. // default:
  307. // limitDay = utils.DATA_START_REFRESH_LIMIT
  308. // }
  309. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  310. // }
  311. // result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
  312. // if err != nil {
  313. // fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
  314. // errmsg = "RefreshBaseEdbData Err:" + err.Error()
  315. // return err
  316. // }
  317. // if result.Ret != 200 {
  318. // fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  319. // errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  320. // return fmt.Errorf("刷新失败, err:", errmsg)
  321. // }
  322. //
  323. // //maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  324. // //if err != nil {
  325. // // if err.Error() == utils.ErrNoRow() { //找不到数据,那么就进入到下一条数据做处理
  326. // // continue
  327. // // }
  328. // // return err
  329. // //}
  330. // //if maxAndMinItem != nil {
  331. // // err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  332. // // if err != nil {
  333. // // return err
  334. // // }
  335. // //}
  336. // fmt.Println("end newBaseEdbInfoArr:", bv, time.Now())
  337. // }
  338. //
  339. // //刷新相关普通计算指标
  340. // for _, v := range calculateArr {
  341. // edbInfo := newCalculateMap[v]
  342. // if edbInfo == nil {
  343. // return err
  344. // }
  345. //
  346. // //计算指标就不用开始时间了吧,因为存在说开始时间变更的情况
  347. // startDate = ``
  348. // if !refreshAll { //如果不是全部更新,那么以指标的开始时间作为刷新
  349. // startDate = edbInfo.StartDate
  350. // source := edbInfo.Source
  351. // if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  352. // startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  353. // } else {
  354. // if source == utils.DATA_SOURCE_CALCULATE {
  355. // sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  356. // if err != nil {
  357. // return err
  358. // }
  359. // frequency := edbInfo.Frequency
  360. // var limitDay int
  361. // switch frequency {
  362. // case "日度":
  363. // limitDay = utils.DATA_START_REFRESH_LIMIT
  364. // case "周度":
  365. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  366. // case "月度":
  367. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  368. // case "季度":
  369. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  370. // case "年度":
  371. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  372. // default:
  373. // limitDay = utils.DATA_START_REFRESH_LIMIT
  374. // }
  375. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  376. // }
  377. // }
  378. // }
  379. //
  380. // result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  381. // if err != nil {
  382. // fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  383. // errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  384. // return err
  385. // }
  386. // if result.Ret != 200 {
  387. // fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  388. // errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  389. // return fmt.Errorf("刷新失败")
  390. // }
  391. // }
  392. //
  393. // //刷新相关预测计算指标
  394. // for _, v := range predictCalculateArr {
  395. // edbInfo := newPredictCalculateMap[v]
  396. // if edbInfo == nil {
  397. // return err
  398. // }
  399. // startDate = edbInfo.StartDate
  400. // source := edbInfo.Source
  401. // if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  402. // startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  403. // } else {
  404. // if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  405. // startDate = ``
  406. // if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  407. // startDate = edbInfo.StartDate
  408. // } else {
  409. // sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  410. // if err != nil {
  411. // return err
  412. // }
  413. // frequency := edbInfo.Frequency
  414. // var limitDay int
  415. // switch frequency {
  416. // case "日度":
  417. // limitDay = utils.DATA_START_REFRESH_LIMIT
  418. // case "周度":
  419. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  420. // case "月度":
  421. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  422. // case "季度":
  423. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  424. // case "年度":
  425. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  426. // default:
  427. // limitDay = utils.DATA_START_REFRESH_LIMIT
  428. // }
  429. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  430. // }
  431. // }
  432. // }
  433. //
  434. // result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  435. // if err != nil {
  436. // fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  437. // errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  438. // return err
  439. // }
  440. // if result.Ret != 200 {
  441. // fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  442. // errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  443. // return fmt.Errorf("刷新失败")
  444. // }
  445. // }
  446. //
  447. // // 4、更新动态环差值
  448. // {
  449. // predictEdbInfoIdList := make([]int, 0)
  450. // for _, v := range newBasePredictEdbInfoArr {
  451. // predictEdbInfoIdList = append(predictEdbInfoIdList, v.EdbInfoId)
  452. // }
  453. // fmt.Println("predictEdbConfCalculateMappingDetailList:", predictEdbInfoIdList)
  454. // predictEdbConfCalculateMappingDetailList, err := data_manage.GetPredictEdbConfCalculateMappingDetailListByEdbInfoId(predictEdbInfoIdList)
  455. // if err != nil {
  456. // errmsg = fmt.Sprint("更新动态环差值时,获取数据失败:" + err.Error())
  457. // return fmt.Errorf("刷新失败, err:", errmsg)
  458. // }
  459. // for _, bv := range predictEdbConfCalculateMappingDetailList {
  460. // result, err := RefreshEdbData(bv.EdbInfoId, utils.DATA_SOURCE_PREDICT, bv.EdbCode, "")
  461. // if err != nil {
  462. // fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err", time.Now())
  463. // errmsg = "RefreshBasePredictEdbData Err:" + err.Error()
  464. // return err
  465. // }
  466. // if result.Ret != 200 {
  467. // fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  468. // errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  469. // return fmt.Errorf("刷新失败, err:%s", errmsg)
  470. // }
  471. // fmt.Println("end predictEdbConfCalculateMappingDetailList:", bv, time.Now())
  472. // }
  473. // }
  474. //
  475. // //5、再次刷新相关预测计算指标
  476. // for _, v := range predictCalculateArr {
  477. // edbInfo := newPredictCalculateMap[v]
  478. // if edbInfo == nil {
  479. // return err
  480. // }
  481. // startDate = edbInfo.StartDate
  482. // source := edbInfo.Source
  483. // if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  484. // startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  485. // } else {
  486. // if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  487. // startDate = ``
  488. // if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  489. // startDate = edbInfo.StartDate
  490. // } else {
  491. // sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  492. // if err != nil {
  493. // return err
  494. // }
  495. // frequency := edbInfo.Frequency
  496. // var limitDay int
  497. // switch frequency {
  498. // case "日度":
  499. // limitDay = utils.DATA_START_REFRESH_LIMIT
  500. // case "周度":
  501. // limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  502. // case "月度":
  503. // limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  504. // case "季度":
  505. // limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  506. // case "年度":
  507. // limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  508. // default:
  509. // limitDay = utils.DATA_START_REFRESH_LIMIT
  510. // }
  511. // startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  512. // }
  513. // }
  514. // }
  515. //
  516. // result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  517. // if err != nil {
  518. // fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  519. // errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  520. // return err
  521. // }
  522. // if result.Ret != 200 {
  523. // fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  524. // errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  525. // return fmt.Errorf("刷新失败")
  526. // }
  527. // }
  528. //
  529. // return err
  530. //}
  531. // EdbInfoRefreshAllFromBaseV3 全部刷新指标(切换到edb_lib服务)
  532. // @author Roc
  533. // @datetime 2022-09-16 11:04:44
  534. // @description 将原有的单个指标刷新,调整为批量多个指标刷新
  535. func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll, isSync bool) (err error, isAsync bool) {
  536. var errmsg string
  537. defer func() {
  538. if err != nil {
  539. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  540. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  541. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  542. }
  543. }()
  544. // 获取关联的基础指标
  545. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
  546. if err != nil {
  547. return
  548. }
  549. // 需要刷新的指标数量
  550. totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
  551. if totalEdbInfo <= 20 || isSync {
  552. err = edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  553. } else {
  554. isAsync = true
  555. go edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  556. }
  557. return
  558. }
  559. func edbInfoRefreshAll(refreshAll bool, newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) (err error) {
  560. var errmsg string
  561. defer func() {
  562. if err != nil {
  563. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  564. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  565. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  566. }
  567. }()
  568. var startDate string
  569. for _, bv := range newBaseEdbInfoArr {
  570. //source := bv.Source
  571. //edbInfoId := bv.EdbInfoId
  572. //edbCode := bv.EdbCode
  573. if bv.StartDate == "0000-00-00" {
  574. continue
  575. }
  576. //开始时间
  577. startDate = ``
  578. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  579. sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
  580. if err != nil {
  581. return err
  582. }
  583. startDate = sTime.Format(utils.FormatDate)
  584. } else {
  585. sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  586. if err != nil {
  587. return err
  588. }
  589. frequency := bv.Frequency
  590. var limitDay int
  591. switch frequency {
  592. case "日度":
  593. limitDay = utils.DATA_START_REFRESH_LIMIT
  594. case "周度":
  595. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  596. case "月度":
  597. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  598. case "季度":
  599. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  600. case "年度":
  601. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  602. default:
  603. limitDay = utils.DATA_START_REFRESH_LIMIT
  604. }
  605. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  606. }
  607. result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
  608. if err != nil {
  609. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
  610. errmsg = "RefreshBaseEdbData Err:" + err.Error()
  611. return err
  612. }
  613. if result.Ret != 200 {
  614. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  615. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  616. return fmt.Errorf("刷新失败, err:", errmsg)
  617. }
  618. //maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  619. //if err != nil {
  620. // if err.Error() == utils.ErrNoRow() { //找不到数据,那么就进入到下一条数据做处理
  621. // continue
  622. // }
  623. // return err
  624. //}
  625. //if maxAndMinItem != nil {
  626. // err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  627. // if err != nil {
  628. // return err
  629. // }
  630. //}
  631. fmt.Println("end newBaseEdbInfoArr:", bv, time.Now())
  632. }
  633. //刷新相关普通计算指标
  634. for _, v := range calculateArr {
  635. edbInfo := newCalculateMap[v]
  636. if edbInfo == nil {
  637. return err
  638. }
  639. //计算指标就不用开始时间了吧,因为存在说开始时间变更的情况
  640. startDate = ``
  641. if !refreshAll { //如果不是全部更新,那么以指标的开始时间作为刷新
  642. startDate = edbInfo.StartDate
  643. source := edbInfo.Source
  644. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  645. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  646. } else {
  647. if source == utils.DATA_SOURCE_CALCULATE {
  648. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  649. if err != nil {
  650. return err
  651. }
  652. frequency := edbInfo.Frequency
  653. var limitDay int
  654. switch frequency {
  655. case "日度":
  656. limitDay = utils.DATA_START_REFRESH_LIMIT
  657. case "周度":
  658. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  659. case "月度":
  660. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  661. case "季度":
  662. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  663. case "年度":
  664. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  665. default:
  666. limitDay = utils.DATA_START_REFRESH_LIMIT
  667. }
  668. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  669. }
  670. }
  671. }
  672. result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  673. if err != nil {
  674. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  675. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  676. return err
  677. }
  678. if result.Ret != 200 {
  679. fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  680. errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  681. return fmt.Errorf("刷新失败")
  682. }
  683. }
  684. //刷新相关预测计算指标
  685. for _, v := range predictCalculateArr {
  686. edbInfo := newPredictCalculateMap[v]
  687. if edbInfo == nil {
  688. return err
  689. }
  690. startDate = edbInfo.StartDate
  691. source := edbInfo.Source
  692. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  693. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  694. } else {
  695. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  696. startDate = ``
  697. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  698. startDate = edbInfo.StartDate
  699. } else {
  700. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  701. if err != nil {
  702. return err
  703. }
  704. frequency := edbInfo.Frequency
  705. var limitDay int
  706. switch frequency {
  707. case "日度":
  708. limitDay = utils.DATA_START_REFRESH_LIMIT
  709. case "周度":
  710. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  711. case "月度":
  712. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  713. case "季度":
  714. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  715. case "年度":
  716. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  717. default:
  718. limitDay = utils.DATA_START_REFRESH_LIMIT
  719. }
  720. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  721. }
  722. }
  723. }
  724. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  725. if err != nil {
  726. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  727. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  728. return err
  729. }
  730. if result.Ret != 200 {
  731. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  732. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  733. return fmt.Errorf("刷新失败")
  734. }
  735. }
  736. // 4、更新动态环差值
  737. {
  738. predictEdbInfoIdList := make([]int, 0)
  739. for _, v := range newBasePredictEdbInfoArr {
  740. predictEdbInfoIdList = append(predictEdbInfoIdList, v.EdbInfoId)
  741. }
  742. fmt.Println("predictEdbConfCalculateMappingDetailList:", predictEdbInfoIdList)
  743. predictEdbConfCalculateMappingDetailList, err := data_manage.GetPredictEdbConfCalculateMappingDetailListByEdbInfoId(predictEdbInfoIdList)
  744. if err != nil {
  745. errmsg = fmt.Sprint("更新动态环差值时,获取数据失败:" + err.Error())
  746. return fmt.Errorf("刷新失败, err:", errmsg)
  747. }
  748. for _, bv := range predictEdbConfCalculateMappingDetailList {
  749. result, err := RefreshEdbData(bv.EdbInfoId, utils.DATA_SOURCE_PREDICT, bv.EdbCode, "")
  750. if err != nil {
  751. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err", time.Now())
  752. errmsg = "RefreshBasePredictEdbData Err:" + err.Error()
  753. return err
  754. }
  755. if result.Ret != 200 {
  756. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  757. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  758. return fmt.Errorf("刷新失败, err:%s", errmsg)
  759. }
  760. fmt.Println("end predictEdbConfCalculateMappingDetailList:", bv, time.Now())
  761. }
  762. }
  763. //5、再次刷新相关预测计算指标
  764. for _, v := range predictCalculateArr {
  765. edbInfo := newPredictCalculateMap[v]
  766. if edbInfo == nil {
  767. return err
  768. }
  769. startDate = edbInfo.StartDate
  770. source := edbInfo.Source
  771. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  772. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  773. } else {
  774. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  775. startDate = ``
  776. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  777. startDate = edbInfo.StartDate
  778. } else {
  779. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  780. if err != nil {
  781. return err
  782. }
  783. frequency := edbInfo.Frequency
  784. var limitDay int
  785. switch frequency {
  786. case "日度":
  787. limitDay = utils.DATA_START_REFRESH_LIMIT
  788. case "周度":
  789. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  790. case "月度":
  791. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  792. case "季度":
  793. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  794. case "年度":
  795. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  796. default:
  797. limitDay = utils.DATA_START_REFRESH_LIMIT
  798. }
  799. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  800. }
  801. }
  802. }
  803. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  804. if err != nil {
  805. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  806. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  807. return err
  808. }
  809. if result.Ret != 200 {
  810. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  811. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  812. return fmt.Errorf("刷新失败")
  813. }
  814. }
  815. return err
  816. }
  817. // getRefreshEdbInfoList 获取待更新的指标(普通基础指标、普通运算指标,预测运算指标)
  818. func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
  819. calculateList, err := data_manage.GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList)
  820. if err != nil && err.Error() != utils.ErrNoRow() {
  821. err = errors.New("GetEdbInfoAllCalculate Err:" + err.Error())
  822. return
  823. }
  824. // 获取指标信息
  825. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  826. if err != nil {
  827. err = errors.New("GetEdbInfoAllCalGetEdbInfoByIdr:" + err.Error())
  828. return
  829. }
  830. baseEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 基础普通指标
  831. calculateInfoArr := make([]*data_manage.EdbInfo, 0) //基础运算指标
  832. basePredictEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 预测普通指标
  833. predictCalculateInfoArr := make([]*data_manage.EdbInfo, 0) //预测运算指标
  834. for _, baseEdbInfo := range edbInfoList {
  835. if baseEdbInfo.EdbInfoType == 0 { //普通指标
  836. switch baseEdbInfo.EdbType {
  837. case 1: //基础指标
  838. baseEdbInfoArr = append(baseEdbInfoArr, baseEdbInfo)
  839. case 2: //计算指标
  840. calculateList = append(calculateList, baseEdbInfo)
  841. }
  842. } else { //预测指标
  843. switch baseEdbInfo.EdbType {
  844. case 1: //基础指标
  845. basePredictEdbInfoArr = append(basePredictEdbInfoArr, baseEdbInfo)
  846. case 2: //计算指标
  847. predictCalculateInfoArr = append(predictCalculateInfoArr, baseEdbInfo)
  848. }
  849. }
  850. }
  851. // 计算指标
  852. for _, v := range calculateList {
  853. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  854. if tmpErr != nil {
  855. err = tmpErr
  856. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  857. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  858. return
  859. }
  860. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  861. switch tmpEdbInfo.EdbInfoType {
  862. case 0: //普通基础指标
  863. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  864. case 1: //预测基础指标
  865. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  866. }
  867. }
  868. for _, tmpEdbInfo := range getCalculateInfoArr {
  869. switch tmpEdbInfo.EdbInfoType {
  870. case 0: //普通运算指标
  871. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  872. case 1: //预测运算指标
  873. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  874. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  875. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  876. } else {
  877. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  878. }
  879. }
  880. }
  881. switch v.EdbInfoType {
  882. case 0: //普通运算指标
  883. calculateInfoArr = append(calculateInfoArr, v)
  884. case 1: //预测指标
  885. if v.EdbType == 1 { //预测普通指标
  886. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  887. } else {
  888. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  889. }
  890. }
  891. }
  892. // 预测计算指标
  893. for _, v := range predictCalculateInfoArr {
  894. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  895. if tmpErr != nil {
  896. err = tmpErr
  897. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  898. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  899. return
  900. }
  901. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  902. switch tmpEdbInfo.EdbInfoType {
  903. case 0: //普通基础指标
  904. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  905. case 1: //预测基础指标
  906. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  907. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  908. } else {
  909. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  910. }
  911. //basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  912. }
  913. }
  914. for _, tmpEdbInfo := range getCalculateInfoArr {
  915. switch tmpEdbInfo.EdbInfoType {
  916. case 0: //普通运算指标
  917. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  918. case 1: //预测运算指标
  919. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  920. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  921. } else {
  922. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  923. }
  924. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  925. }
  926. }
  927. switch v.EdbInfoType {
  928. case 0: //普通运算指标
  929. calculateInfoArr = append(calculateInfoArr, v)
  930. case 1: //预测指标
  931. if v.EdbType == 1 { //预测普通指标
  932. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  933. } else {
  934. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  935. }
  936. }
  937. }
  938. // 第一次的计算指标map
  939. newCalculateMap = make(map[int]*data_manage.EdbInfo)
  940. for _, v := range calculateInfoArr {
  941. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  942. calculateArr = append(calculateArr, v.EdbInfoId)
  943. }
  944. newCalculateMap[v.EdbInfoId] = v
  945. }
  946. // 基础预测指标
  947. if len(basePredictEdbInfoArr) > 0 {
  948. basePredictEdbInfoIdList := make([]int, 0)
  949. for _, v := range basePredictEdbInfoArr {
  950. basePredictEdbInfoIdList = append(basePredictEdbInfoIdList, v.EdbInfoId)
  951. }
  952. baseEdbInfoList, tmpErr := data_manage.GetPredictEdbInfoAllCalculate(basePredictEdbInfoIdList)
  953. if tmpErr != nil {
  954. err = tmpErr
  955. return
  956. }
  957. tmpCalculateList := make([]*data_manage.EdbInfo, 0)
  958. for _, v := range baseEdbInfoList {
  959. switch v.EdbType {
  960. case 1:
  961. baseEdbInfoArr = append(baseEdbInfoArr, v)
  962. case 2:
  963. // 如果不在第一次里面,那么在第二次 刷新预测指标的时候 需要加进去
  964. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  965. tmpCalculateList = append(tmpCalculateList, v)
  966. }
  967. }
  968. }
  969. // 这里是查询预测指标用到的 普通计算指标
  970. for _, v := range tmpCalculateList {
  971. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  972. if tmpErr != nil {
  973. err = tmpErr
  974. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  975. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  976. return
  977. }
  978. // 基础指标
  979. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  980. switch tmpEdbInfo.EdbInfoType {
  981. case 0: //普通基础指标
  982. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  983. case 1: //预测基础指标
  984. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  985. }
  986. }
  987. // 计算指标
  988. for _, tmpEdbInfo := range getCalculateInfoArr {
  989. switch tmpEdbInfo.EdbInfoType {
  990. case 0: //普通运算指标
  991. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  992. case 1: //预测运算指标
  993. if v.EdbType == 1 { //预测普通指标
  994. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  995. } else {
  996. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  997. }
  998. }
  999. }
  1000. switch v.EdbInfoType {
  1001. case 0: //普通运算指标
  1002. calculateInfoArr = append(calculateInfoArr, v)
  1003. case 1: //预测指标
  1004. if v.EdbType == 1 { //预测普通指标
  1005. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  1006. } else { //预测运算指标
  1007. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  1008. }
  1009. }
  1010. }
  1011. // 第二次计算指标的map
  1012. for _, v := range calculateInfoArr {
  1013. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  1014. calculateArr = append(calculateArr, v.EdbInfoId)
  1015. }
  1016. newCalculateMap[v.EdbInfoId] = v
  1017. }
  1018. }
  1019. // 普通基础指标去重
  1020. newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  1021. baseMap := make(map[int]int)
  1022. for _, v := range baseEdbInfoArr {
  1023. if _, ok := baseMap[v.EdbInfoId]; !ok {
  1024. newBaseEdbInfoArr = append(newBaseEdbInfoArr, v)
  1025. }
  1026. baseMap[v.EdbInfoId] = v.EdbInfoId
  1027. }
  1028. // 普通计算指标的id
  1029. sort.Ints(calculateArr)
  1030. // 普通预测指标去重
  1031. newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  1032. basePredictMap := make(map[int]int)
  1033. for _, v := range basePredictEdbInfoArr {
  1034. if _, ok := basePredictMap[v.EdbInfoId]; !ok {
  1035. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, v)
  1036. }
  1037. basePredictMap[v.EdbInfoId] = v.EdbInfoId
  1038. }
  1039. // 预测计算指标去重
  1040. newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
  1041. for _, v := range predictCalculateInfoArr {
  1042. if _, ok := newPredictCalculateMap[v.EdbInfoId]; !ok {
  1043. predictCalculateArr = append(predictCalculateArr, v.EdbInfoId)
  1044. }
  1045. newPredictCalculateMap[v.EdbInfoId] = v
  1046. }
  1047. // 预测计算指标的id
  1048. sort.Ints(predictCalculateArr)
  1049. return
  1050. }
  1051. // AddOrEditEdbInfoToEs 添加/修改ES中的指标
  1052. func AddOrEditEdbInfoToEs(edbInfoId int) {
  1053. //添加es
  1054. itemInfo, _ := data_manage.GetEdbInfoByCondition("AND edb_info_id=?", []interface{}{edbInfoId})
  1055. go elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
  1056. }
  1057. // DeleteEdbInfoToEs 删除ES中的指标
  1058. func DeleteEdbInfoToEs(edbInfoId int) {
  1059. //添加es
  1060. go elastic.EsDeleteEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(edbInfoId))
  1061. }
  1062. // EdbInfoAdd 添加指标到指标库
  1063. func EdbInfoAdd(source, classifyId int, edbCode, edbName, frequency, unit, startDate, endDate string, sysUserId int, sysUserRealName string) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
  1064. isSendEmail = true
  1065. //判断指标名称是否存在
  1066. var condition string
  1067. var pars []interface{}
  1068. //condition += " AND source=? "
  1069. //pars = append(pars, source)
  1070. condition += " AND edb_name=? "
  1071. pars = append(pars, edbName)
  1072. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1073. if err != nil {
  1074. errMsg = "判断指标名称是否存在失败"
  1075. err = errors.New("判断指标名称是否存在失败,Err:" + err.Error())
  1076. return
  1077. }
  1078. if count > 0 {
  1079. errMsg = "指标名称已存在,请重新填写"
  1080. err = errors.New(errMsg)
  1081. isSendEmail = false
  1082. return
  1083. }
  1084. edbInfo = new(data_manage.EdbInfo)
  1085. edbInfo.Source = source
  1086. sourceNameMap := map[int]string{
  1087. utils.DATA_SOURCE_THS: "同花顺",
  1088. utils.DATA_SOURCE_WIND: "wind",
  1089. utils.DATA_SOURCE_PB: "彭博",
  1090. utils.DATA_SOURCE_PB_FINANCE: "彭博财务",
  1091. utils.DATA_SOURCE_MANUAL: "手工数据",
  1092. utils.DATA_SOURCE_LZ: "隆众",
  1093. utils.DATA_SOURCE_YS: "SMM",
  1094. utils.DATA_SOURCE_GL: "钢联",
  1095. utils.DATA_SOURCE_ZZ: "郑商所",
  1096. utils.DATA_SOURCE_DL: "大商所",
  1097. utils.DATA_SOURCE_SH: "上期所",
  1098. utils.DATA_SOURCE_CFFEX: "中金所",
  1099. utils.DATA_SOURCE_SHFE: "上期能源",
  1100. utils.DATA_SOURCE_GIE: "欧洲天然气",
  1101. utils.DATA_SOURCE_LT: "路透",
  1102. utils.DATA_SOURCE_COAL: "中国煤炭网",
  1103. utils.DATA_SOURCE_GOOGLE_TRAVEL: "our world in data",
  1104. utils.DATA_SOURCE_MYSTEEL_CHEMICAL: "钢联化工",
  1105. utils.DATA_SOURCE_EIA_STEO: "EIA STEO报告",
  1106. utils.DATA_SOURCE_COM_TRADE: "UN",
  1107. utils.DATA_SOURCE_SCI: "SCI",
  1108. utils.DATA_SOURCE_BAIINFO: "BAIINFO",
  1109. utils.DATA_SOURCE_STOCK_PLANT: "存量装置",
  1110. utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
  1111. utils.DATA_SOURCE_FUBAO: "富宝数据",
  1112. }
  1113. sourceName, ok := sourceNameMap[source]
  1114. if !ok {
  1115. errMsg = "指标来源异常"
  1116. err = errors.New(errMsg)
  1117. return
  1118. }
  1119. edbInfo.SourceName = sourceName
  1120. edbType := 1 //基础指标
  1121. if source == utils.DATA_SOURCE_STOCK_PLANT {
  1122. edbType = 2 //计算指标
  1123. }
  1124. //从缓存中获取
  1125. serverUrl := ``
  1126. if edbInfo.Source == utils.DATA_SOURCE_WIND {
  1127. windCacheKey := utils.CACHE_WIND_URL + ":" + edbCode
  1128. serverUrl, _ = utils.Rc.RedisString(windCacheKey)
  1129. if serverUrl == `` {
  1130. if len(utils.Hz_Data_WIND_Url_List) >= 1 {
  1131. serverUrl = utils.Hz_Data_WIND_Url_List[len(utils.Hz_Data_WIND_Url_List)-1] //默认是最后一个服务器地址
  1132. }
  1133. }
  1134. }
  1135. //获取该层级下最大的排序数
  1136. maxSort, err := GetEdbClassifyMaxSort(classifyId, 0)
  1137. if err != nil {
  1138. errMsg = "获取失败"
  1139. err = errors.New("查询排序信息失败,Err:" + err.Error())
  1140. return
  1141. }
  1142. edbInfo.EdbCode = edbCode
  1143. edbInfo.EdbName = edbName
  1144. edbInfo.EdbNameSource = edbName
  1145. edbInfo.Frequency = frequency
  1146. edbInfo.Unit = unit
  1147. edbInfo.StartDate = startDate
  1148. edbInfo.EndDate = endDate
  1149. edbInfo.ClassifyId = classifyId
  1150. edbInfo.SysUserId = sysUserId
  1151. edbInfo.SysUserRealName = sysUserRealName
  1152. edbInfo.CreateTime = time.Now()
  1153. edbInfo.ModifyTime = time.Now()
  1154. edbInfo.ServerUrl = serverUrl
  1155. edbInfo.Sort = maxSort + 1
  1156. edbInfo.DataDateType = `交易日`
  1157. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1158. edbInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  1159. itemVal, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  1160. if itemVal != nil && err == nil {
  1161. edbInfo.MaxValue = itemVal.MaxValue
  1162. edbInfo.MinValue = itemVal.MinValue
  1163. }
  1164. edbInfo.EdbType = edbType
  1165. edbInfoId, err := data_manage.AddEdbInfo(edbInfo)
  1166. if err != nil {
  1167. errMsg = "保存失败"
  1168. err = errors.New("保存失败,Err:" + err.Error())
  1169. return
  1170. }
  1171. edbInfo.EdbInfoId = int(edbInfoId)
  1172. //保存数据
  1173. data_manage.ModifyEdbInfoDataStatus(edbInfoId, source, edbCode)
  1174. //处理同名指标
  1175. //{
  1176. // edbNameList, tmpErr := data_manage.GetEdbInfoByName(edbName)
  1177. // if tmpErr != nil {
  1178. // errMsg = "保存失败"
  1179. // err = errors.New("获取指标信息失败,Err:" + tmpErr.Error())
  1180. // return
  1181. // }
  1182. // if len(edbNameList) >= 2 {
  1183. // for _, v := range edbNameList {
  1184. // edbName := v.EdbName + "(" + v.SourceName + ")"
  1185. // err = data_manage.ModifyEdbInfoNameSource(edbName, v.EdbInfoId)
  1186. // if err != nil {
  1187. // errMsg = "保存失败"
  1188. // err = errors.New("修改指标名称失败,Err:" + err.Error())
  1189. // return
  1190. // }
  1191. // }
  1192. // }
  1193. //}
  1194. //上传到ES
  1195. //indexName := utils.DATA_INDEX_NAME
  1196. //docId := strconv.Itoa(int(edbInfoId))
  1197. //
  1198. //go data.EsAddOrEditEdbInfo(indexName, docId, edbInfo)
  1199. maxAndMinItem, _ := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  1200. if maxAndMinItem != nil {
  1201. err = data_manage.ModifyEdbInfoMaxAndMinInfo(int(edbInfoId), maxAndMinItem)
  1202. }
  1203. //添加es
  1204. AddOrEditEdbInfoToEs(int(edbInfoId))
  1205. return
  1206. }
  1207. // TraceEdbInfoByEdbInfoId 指标追溯
  1208. func TraceEdbInfoByEdbInfoId(edbInfoId int) (traceEdbInfo data_manage.TraceEdbInfoResp, err error) {
  1209. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  1210. if err != nil {
  1211. return
  1212. }
  1213. edbInfoRuleMap := make(map[int]string, 0)
  1214. edbMappingMap := make(map[int][]*data_manage.EdbInfoCalculateMappingInfo)
  1215. //edbInfoRuleMap[edbInfoId] = getEdbRuleTitle(edbInfo)
  1216. traceEdbInfo = data_manage.TraceEdbInfoResp{
  1217. //EdbInfoId: edbInfo.EdbInfoId,
  1218. EdbInfoId: edbInfoId,
  1219. EdbName: edbInfo.EdbName,
  1220. }
  1221. findIdMap := make(map[int]int)
  1222. findIdMap[edbInfoId] = edbInfoId
  1223. existMap := make(map[int]data_manage.TraceEdbInfoResp)
  1224. traceEdbInfo.Child, err = traceEdbInfoByEdbInfoId(edbInfoId, traceEdbInfo, edbInfoRuleMap, findIdMap, existMap, edbMappingMap)
  1225. edbInfoIdList := make([]int, 0)
  1226. for _, v := range findIdMap {
  1227. edbInfoIdList = append(edbInfoIdList, v)
  1228. }
  1229. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  1230. if err != nil {
  1231. return
  1232. }
  1233. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  1234. for _, tmpEdbInfo := range edbInfoList {
  1235. edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo
  1236. }
  1237. traceEdbInfo, err = handleTraceEdbInfo(traceEdbInfo, 0, edbInfoMap, edbMappingMap)
  1238. return
  1239. }
  1240. // traceEdbInfoByEdbInfoId 指标追溯
  1241. func traceEdbInfoByEdbInfoId(edbInfoId int, traceEdbInfo data_manage.TraceEdbInfoResp, edbInfoRuleMap map[int]string, findIdMap map[int]int, existMap map[int]data_manage.TraceEdbInfoResp, edbMappingMap map[int][]*data_manage.EdbInfoCalculateMappingInfo) (child []data_manage.TraceEdbInfoResp, err error) {
  1242. traceEdbInfo, ok := existMap[edbInfoId]
  1243. if ok {
  1244. return
  1245. }
  1246. child = make([]data_manage.TraceEdbInfoResp, 0)
  1247. edbInfoMappingList, err := data_manage.GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId)
  1248. edbMappingMap[edbInfoId] = edbInfoMappingList
  1249. for _, v := range edbInfoMappingList {
  1250. tmpEdbInfoId := v.FromEdbInfoId
  1251. tmpTraceEdbInfo := data_manage.TraceEdbInfoResp{
  1252. EdbInfoId: tmpEdbInfoId,
  1253. //EdbName: v.EdbName,
  1254. //RuleTitle: edbInfoRuleMap[v.EdbInfoId],
  1255. //Child: make([]data_manage.TraceEdbInfoResp, 0),
  1256. }
  1257. if v.EdbType == 2 { // 计算指标
  1258. // 查过了就不查了
  1259. if _, ok2 := findIdMap[tmpEdbInfoId]; !ok2 {
  1260. tmpTraceEdbInfo.Child, err = traceEdbInfoByEdbInfoId(tmpEdbInfoId, tmpTraceEdbInfo, edbInfoRuleMap, findIdMap, existMap, edbMappingMap)
  1261. }
  1262. //else {
  1263. // tmpTraceEdbInfo = existMap[v.EdbInfoId]
  1264. //}
  1265. }
  1266. child = append(child, tmpTraceEdbInfo)
  1267. findIdMap[tmpEdbInfoId] = tmpEdbInfoId
  1268. //existMap[v.EdbInfoId] = tmpTraceEdbInfo
  1269. }
  1270. existMap[edbInfoId] = traceEdbInfo
  1271. return
  1272. }
  1273. func handleTraceEdbInfo(traceEdbInfoResp data_manage.TraceEdbInfoResp, parentEdbInfoId int, edbInfoMap map[int]*data_manage.EdbInfo, edbMappingMap map[int][]*data_manage.EdbInfoCalculateMappingInfo) (newTraceEdbInfoResp data_manage.TraceEdbInfoResp, err error) {
  1274. edbInfo, ok := edbInfoMap[traceEdbInfoResp.EdbInfoId]
  1275. if !ok {
  1276. err = errors.New("指标异常")
  1277. return
  1278. }
  1279. var parentEdbInfo *data_manage.EdbInfo
  1280. if parentEdbInfoId > 0 {
  1281. parentEdbInfo, ok = edbInfoMap[parentEdbInfoId]
  1282. if !ok {
  1283. err = errors.New("指标异常")
  1284. return
  1285. }
  1286. }
  1287. //traceEdbInfoResp.EdbName = edbInfo.EdbName
  1288. traceEdbInfoResp.EdbName, traceEdbInfoResp.RuleTitle = getEdbRuleTitle(edbInfo, parentEdbInfo, traceEdbInfoResp.Child, edbInfoMap, edbMappingMap)
  1289. if traceEdbInfoResp.Child != nil && len(traceEdbInfoResp.Child) > 0 {
  1290. for k, v := range traceEdbInfoResp.Child {
  1291. traceEdbInfoResp.Child[k], err = handleTraceEdbInfo(v, traceEdbInfoResp.EdbInfoId, edbInfoMap, edbMappingMap)
  1292. if err != nil {
  1293. return
  1294. }
  1295. }
  1296. }
  1297. newTraceEdbInfoResp = traceEdbInfoResp
  1298. return
  1299. }
  1300. // getEdbRule 获取规则名称
  1301. func getEdbRuleTitle(edbInfo, parentEdbInfo *data_manage.EdbInfo, childList []data_manage.TraceEdbInfoResp, edbInfoMap map[int]*data_manage.EdbInfo, edbMappingMap map[int][]*data_manage.EdbInfoCalculateMappingInfo) (edbName, ruleTitle string) {
  1302. edbName = edbInfo.EdbName
  1303. ruleTitle = `来源于` + edbInfo.SourceName
  1304. if edbInfo.EdbType == 1 {
  1305. // 基础指标的话,直接返回来源名称
  1306. //ruleTitle = `来源于`+edbInfo.SourceName
  1307. return
  1308. }
  1309. if parentEdbInfo != nil {
  1310. edbMappingList, ok := edbMappingMap[parentEdbInfo.EdbInfoId]
  1311. if !ok {
  1312. edbMappingList = []*data_manage.EdbInfoCalculateMappingInfo{}
  1313. }
  1314. // 指标名称
  1315. switch parentEdbInfo.Source {
  1316. case utils.DATA_SOURCE_CALCULATE, utils.DATA_SOURCE_PREDICT_CALCULATE:
  1317. for _, v := range edbMappingList {
  1318. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1319. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, v.FromTag)
  1320. }
  1321. }
  1322. case utils.DATA_SOURCE_CALCULATE_ZJPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_ZJPJ, utils.DATA_SOURCE_CALCULATE_LJZTBPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ: // 直接拼接 ,累计值同比拼接
  1323. for _, v := range edbMappingList {
  1324. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1325. tmpName := ``
  1326. if v.FromTag == `A` {
  1327. tmpName = `拼接日期前`
  1328. } else if v.FromTag == `B` {
  1329. tmpName = `拼接日期后`
  1330. }
  1331. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, tmpName)
  1332. }
  1333. }
  1334. case utils.DATA_SOURCE_CALCULATE_NHCC, utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC: //计算指标(拟合残差)
  1335. for _, v := range edbMappingList {
  1336. //(需对上游指标+自变量,领先10天/因变量)
  1337. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1338. tmpName := ``
  1339. if v.FromTag == `A` {
  1340. tmpName = fmt.Sprintf(`自变量,领先%d天`, v.MoveValue)
  1341. } else if v.FromTag == `B` {
  1342. tmpName = `因变量`
  1343. }
  1344. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, tmpName)
  1345. }
  1346. }
  1347. case utils.DATA_SOURCE_CALCULATE_CORRELATION: // 滚动相关性
  1348. for _, v := range edbMappingList {
  1349. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1350. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, v.FromTag)
  1351. }
  1352. }
  1353. }
  1354. }
  1355. // 规则
  1356. switch edbInfo.Source {
  1357. case utils.DATA_SOURCE_CALCULATE, utils.DATA_SOURCE_PREDICT_CALCULATE:
  1358. ruleTitle = "=" + edbInfo.CalculateFormula
  1359. case utils.DATA_SOURCE_CALCULATE_LJZZY, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZZY:
  1360. ruleTitle = `累计转月值计算`
  1361. case utils.DATA_SOURCE_CALCULATE_TBZ, utils.DATA_SOURCE_PREDICT_CALCULATE_TBZ:
  1362. ruleTitle = `同比值计算`
  1363. case utils.DATA_SOURCE_CALCULATE_TCZ, utils.DATA_SOURCE_PREDICT_CALCULATE_TCZ:
  1364. ruleTitle = `同差值计算`
  1365. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_PREDICT_CALCULATE_NSZYDPJJS:
  1366. ruleTitle = fmt.Sprintf("N数值移动均值计算(N=%s)", edbInfo.CalculateFormula)
  1367. case utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_PREDICT_CALCULATE_HBZ:
  1368. ruleTitle = fmt.Sprintf("N数值环比值计算(N=%s)", edbInfo.CalculateFormula)
  1369. case utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_PREDICT_CALCULATE_HCZ:
  1370. ruleTitle = fmt.Sprintf("N数值环差值计算(N=%s)", edbInfo.CalculateFormula)
  1371. case utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_PREDICT_CALCULATE_TIME_SHIFT:
  1372. moveType := `领先`
  1373. if edbInfo.MoveType == 2 {
  1374. moveType = "滞后"
  1375. }
  1376. ruleTitle = fmt.Sprintf("时间移位计算(%s%s%s)", moveType, edbInfo.CalculateFormula, edbInfo.MoveFrequency)
  1377. case utils.DATA_SOURCE_CALCULATE_BP, utils.DATA_SOURCE_PREDICT_CALCULATE_BP: // 变频
  1378. childFrequency := ``
  1379. if len(childList) > 0 {
  1380. if childEdbInfo, ok := edbInfoMap[childList[0].EdbInfoId]; ok {
  1381. childFrequency = childEdbInfo.Frequency
  1382. }
  1383. }
  1384. ruleTitle = fmt.Sprintf("升频计算(%s转%s)", childFrequency, edbInfo.Frequency)
  1385. case utils.DATA_SOURCE_CALCULATE_ZJPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_ZJPJ: // 直接拼接
  1386. ruleTitle = fmt.Sprintf("直接拼接计算(%s)", edbInfo.CalculateFormula)
  1387. case utils.DATA_SOURCE_CALCULATE_LJZTBPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ: // 累计值同比拼
  1388. ruleTitle = fmt.Sprintf("累计值同比值拼接计算(%s)", edbInfo.CalculateFormula)
  1389. case utils.DATA_SOURCE_PYTHON:
  1390. ruleTitle = `代码运算`
  1391. case utils.DATA_SOURCE_CALCULATE_CJJX, utils.DATA_SOURCE_PREDICT_CALCULATE_CJJX:
  1392. ruleTitle = fmt.Sprintf("超季节性计算(N=%s,%s)", edbInfo.CalculateFormula, edbInfo.Calendar)
  1393. case utils.DATA_SOURCE_CALCULATE_NHCC, utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC: //计算指标(拟合残差)
  1394. var startDate, endDate string
  1395. dateList := strings.Split(edbInfo.CalculateFormula, ",")
  1396. if len(dateList) == 2 {
  1397. startDate = dateList[0]
  1398. endDate = dateList[1]
  1399. }
  1400. ruleTitle = fmt.Sprintf("拟合残差计算(%s至%s)", startDate, endDate)
  1401. case utils.DATA_SOURCE_CALCULATE_ADJUST:
  1402. ruleTitle = `数据调整`
  1403. case utils.DATA_SOURCE_CALCULATE_NH, utils.DATA_SOURCE_PREDICT_CALCULATE_NH:
  1404. ruleTitle = `年化计算`
  1405. case utils.DATA_SOURCE_CALCULATE_KSZS, utils.DATA_SOURCE_PREDICT_CALCULATE_KSZS: // 扩散指数->53
  1406. type KszsConfig struct {
  1407. DateType int `description:"扩散指标日期;1:全部指标日期并集;2:部分指标日期并集"`
  1408. CheckList []string `description:"选中的数据,A,B,C"`
  1409. }
  1410. var config KszsConfig
  1411. err := json.Unmarshal([]byte(edbInfo.CalculateFormula), &config)
  1412. if err != nil {
  1413. return
  1414. }
  1415. var startDate, endDate time.Time
  1416. childEdbInfoIdList := make([]int, 0)
  1417. if config.DateType == 1 {
  1418. for _, v := range childList {
  1419. childEdbInfoIdList = append(childEdbInfoIdList, v.EdbInfoId)
  1420. }
  1421. } else {
  1422. edbMappingList, ok := edbMappingMap[parentEdbInfo.EdbInfoId]
  1423. if !ok {
  1424. edbMappingList = []*data_manage.EdbInfoCalculateMappingInfo{}
  1425. }
  1426. tagMap := make(map[string]int)
  1427. for _, v := range edbMappingList {
  1428. tagMap[v.FromTag] = v.FromEdbInfoId
  1429. }
  1430. for _, v := range config.CheckList {
  1431. if tmpEdbInfoId, ok := tagMap[v]; ok {
  1432. childEdbInfoIdList = append(childEdbInfoIdList, tmpEdbInfoId)
  1433. }
  1434. }
  1435. }
  1436. for _, v := range childEdbInfoIdList {
  1437. if childEdbInfo, ok := edbInfoMap[v]; ok {
  1438. tmpStartDate, tmpErr := time.ParseInLocation(utils.FormatDate, childEdbInfo.StartDate, time.Local)
  1439. if tmpErr != nil {
  1440. return
  1441. }
  1442. if startDate.IsZero() || startDate.After(tmpStartDate) {
  1443. startDate = tmpStartDate
  1444. }
  1445. tmpEndDate, tmpErr := time.ParseInLocation(utils.FormatDate, childEdbInfo.EndDate, time.Local)
  1446. if tmpErr != nil {
  1447. return
  1448. }
  1449. if endDate.IsZero() || endDate.Before(tmpEndDate) {
  1450. endDate = tmpEndDate
  1451. }
  1452. }
  1453. }
  1454. ruleTitle = fmt.Sprintf("扩散指数计算(%s至%s)", startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate))
  1455. case utils.DATA_SOURCE_STOCK_PLANT:
  1456. ruleTitle = `来源于装置分析`
  1457. case utils.DATA_SOURCE_CALCULATE_CORRELATION:
  1458. type EdbCalculateFormula struct {
  1459. BaseCalculateValue int `description:"基础计算窗口"`
  1460. BaseCalculateUnit string `description:"基础计算频度"`
  1461. LeadValue int `description:"领先期数"`
  1462. LeadUnit string `description:"频度"`
  1463. CalculateValue int `description:"计算窗口"`
  1464. CalculateUnit string `description:"计算频度"`
  1465. }
  1466. var correlationConf EdbCalculateFormula
  1467. err := json.Unmarshal([]byte(edbInfo.CalculateFormula), &correlationConf)
  1468. if err != nil {
  1469. return
  1470. }
  1471. ruleTitle = fmt.Sprintf("滚动相关性(计算窗口%d%s,B领先A%d%s)", correlationConf.CalculateValue, correlationConf.CalculateUnit, correlationConf.LeadValue, correlationConf.LeadUnit)
  1472. case utils.DATA_SOURCE_CALCULATE_JP, utils.DATA_SOURCE_PREDICT_CALCULATE_JP:
  1473. childFrequency := ``
  1474. if len(childList) > 0 {
  1475. if childEdbInfo, ok := edbInfoMap[childList[0].EdbInfoId]; ok {
  1476. childFrequency = childEdbInfo.Frequency
  1477. }
  1478. }
  1479. ruleTitle = fmt.Sprintf("降频计算(%s转%s,%s)", childFrequency, edbInfo.Frequency, edbInfo.CalculateFormula)
  1480. }
  1481. return
  1482. }