edb_info.go 65 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889
  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, isRefreshTop 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, isRefreshTop)
  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. // EdbInfoRefreshAllFromBaseV3Bak 全部刷新指标(切换到edb_lib服务)
  254. // @author Roc
  255. // @datetime 2022-09-16 11:04:44
  256. // @description 将原有的单个指标刷新,调整为批量多个指标刷新
  257. // DeprecatedTime 2023-10-23 09:38:19废弃
  258. // Deprecated
  259. func EdbInfoRefreshAllFromBaseV3Bak(edbInfoIdList []int, refreshAll, isSync bool) (err error, isAsync bool) {
  260. var errmsg string
  261. defer func() {
  262. if err != nil {
  263. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  264. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  265. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  266. }
  267. }()
  268. // 获取关联的基础指标
  269. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
  270. if err != nil {
  271. return
  272. }
  273. // 需要刷新的指标数量
  274. totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
  275. if totalEdbInfo <= 20 || isSync {
  276. err = edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  277. } else {
  278. isAsync = true
  279. go edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  280. }
  281. return
  282. }
  283. // EdbInfoRefreshAllFromBaseV3
  284. //
  285. // @Description: 全部刷新指标(切换到edb_lib服务)
  286. // @author: Roc
  287. // @datetime 2023-10-23 09:57:55
  288. // @param edbInfoIdList []int
  289. // @param refreshAll bool
  290. // @param isSync bool 是否同步执行
  291. // @param isRefreshTop bool 是否刷新上面的指标
  292. // @return err error
  293. // @return isAsync bool 是否异步刷新
  294. func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll, isSync, isRefreshTop bool) (err error, isAsync bool) {
  295. var errmsg string
  296. defer func() {
  297. if err != nil {
  298. fmt.Println("EdbInfoRefreshAllFromBaseV3 Err:" + err.Error() + ";errmsg:" + errmsg)
  299. go alarm_msg.SendAlarmMsg("EdbInfoRefreshAllFromBaseV3,Err"+err.Error()+";errMsg:"+errmsg, 3)
  300. }
  301. }()
  302. var newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo
  303. var newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo
  304. var calculateArr, predictCalculateArr []int
  305. // 获取关联指标
  306. if isRefreshTop {
  307. // 获取所有关联的指标,上下所有的指标
  308. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg = getRefreshEdbInfoListByIds(edbInfoIdList)
  309. if err != nil {
  310. return
  311. }
  312. } else {
  313. // 获取溯源的指标
  314. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr = getEdbInfoIdList(edbInfoIdList)
  315. }
  316. // 需要刷新的指标数量
  317. totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
  318. if totalEdbInfo <= 20 || isSync {
  319. err = edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  320. } else {
  321. isAsync = true
  322. go edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  323. }
  324. return
  325. }
  326. // getEdbInfoIdList
  327. // @Description: 获取待更新的指标列表
  328. // @author: Roc
  329. // @datetime 2023-12-01 16:19:42
  330. // @param edbInfoIdList []int
  331. // @return newBaseEdbInfoArr []*data_manage.EdbInfo
  332. // @return newBasePredictEdbInfoArr []*data_manage.EdbInfo
  333. // @return newCalculateMap map[int]*data_manage.EdbInfo
  334. // @return newPredictCalculateMap map[int]*data_manage.EdbInfo
  335. // @return calculateArr []int
  336. // @return predictCalculateArr []int
  337. func getEdbInfoIdList(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) {
  338. traceEdbInfoList, err := TraceEdbInfoByEdbInfoIdList(edbInfoIdList)
  339. if err != nil {
  340. return
  341. }
  342. // existEdbInfoIdMap 已经处理了的指标id map
  343. existEdbInfoIdMap := make(map[int]int)
  344. // 基础指标
  345. newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  346. newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  347. newBaseMap := make(map[int]*data_manage.EdbInfo)
  348. newPredictBaseMap := make(map[int]*data_manage.EdbInfo)
  349. // 计算指标
  350. newCalculateMap = make(map[int]*data_manage.EdbInfo)
  351. newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
  352. calculateArr = make([]int, 0)
  353. predictCalculateArr = make([]int, 0)
  354. // 获取关联指标
  355. for _, traceEdbInfo := range traceEdbInfoList {
  356. tmpBaseEdbInfoArr, tmpBasePredictEdbInfoArr, tmpCalculateMap, tmpPredictCalculateMap, _, _ := getRefreshEdbInfoListByTraceEdbInfo(traceEdbInfo, existEdbInfoIdMap)
  357. // 普通基础指标
  358. for _, edbInfo := range tmpBaseEdbInfoArr {
  359. if _, ok := newBaseMap[edbInfo.EdbInfoId]; !ok {
  360. newBaseMap[edbInfo.EdbInfoId] = edbInfo
  361. newBaseEdbInfoArr = append(newBaseEdbInfoArr, edbInfo)
  362. }
  363. }
  364. // 预测基础指标
  365. for _, edbInfo := range tmpBasePredictEdbInfoArr {
  366. if _, ok := newPredictBaseMap[edbInfo.EdbInfoId]; !ok {
  367. newPredictBaseMap[edbInfo.EdbInfoId] = edbInfo
  368. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, edbInfo)
  369. }
  370. }
  371. // 普通计算指标
  372. for _, edbInfo := range tmpCalculateMap {
  373. if _, ok := newCalculateMap[edbInfo.EdbInfoId]; !ok {
  374. newCalculateMap[edbInfo.EdbInfoId] = edbInfo
  375. calculateArr = append(calculateArr, edbInfo.EdbInfoId)
  376. }
  377. }
  378. // 预测计算指标
  379. for _, edbInfo := range tmpPredictCalculateMap {
  380. if _, ok := newPredictCalculateMap[edbInfo.EdbInfoId]; !ok {
  381. newPredictCalculateMap[edbInfo.EdbInfoId] = edbInfo
  382. predictCalculateArr = append(predictCalculateArr, edbInfo.EdbInfoId)
  383. }
  384. }
  385. }
  386. // 普通计算指标的id
  387. sort.Ints(calculateArr)
  388. // 预测计算指标的id
  389. sort.Ints(predictCalculateArr)
  390. return
  391. }
  392. // getRefreshEdbInfoListByTraceEdbInfo
  393. //
  394. // @Description: 根据溯源获取关联指标
  395. // @author: Roc
  396. // @datetime2023-10-23 10:55:01
  397. // @param traceEdbInfo data_manage.TraceEdbInfoResp
  398. // @param existEdbInfoIdMap map[int]int
  399. // @return newBaseEdbInfoArr []*data_manage.EdbInfo
  400. // @return newBasePredictEdbInfoArr []*data_manage.EdbInfo
  401. // @return newCalculateMap map[int]*data_manage.EdbInfo
  402. // @return newPredictCalculateMap map[int]*data_manage.EdbInfo
  403. // @return calculateArr []int
  404. // @return predictCalculateArr []int
  405. func getRefreshEdbInfoListByTraceEdbInfo(traceEdbInfo data_manage.TraceEdbInfoResp, existEdbInfoIdMap map[int]int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) {
  406. newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  407. newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  408. newCalculateMap = make(map[int]*data_manage.EdbInfo)
  409. newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
  410. calculateArr = make([]int, 0)
  411. predictCalculateArr = make([]int, 0)
  412. _, ok := existEdbInfoIdMap[traceEdbInfo.EdbInfoId]
  413. if ok {
  414. return
  415. }
  416. existEdbInfoIdMap[traceEdbInfo.EdbInfoId] = traceEdbInfo.EdbInfoId
  417. switch traceEdbInfo.EdbInfoType {
  418. //0-普通指标; 1-预测指标
  419. case 0: // 0-普通指标
  420. if traceEdbInfo.EdbType == 1 { //1-基础指标
  421. newBaseEdbInfoArr = append(newBaseEdbInfoArr, traceEdbInfo.EdbInfo)
  422. } else if traceEdbInfo.EdbType == 2 { //2-计算指标
  423. newCalculateMap[traceEdbInfo.EdbInfoId] = traceEdbInfo.EdbInfo
  424. calculateArr = append(calculateArr, traceEdbInfo.EdbInfoId)
  425. }
  426. case 1: // 1-预测指标
  427. if traceEdbInfo.EdbType == 1 { //1-基础指标
  428. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, traceEdbInfo.EdbInfo)
  429. } else if traceEdbInfo.EdbType == 2 { //2-计算指标
  430. newPredictCalculateMap[traceEdbInfo.EdbInfoId] = traceEdbInfo.EdbInfo
  431. predictCalculateArr = append(predictCalculateArr, traceEdbInfo.EdbInfoId)
  432. }
  433. }
  434. if traceEdbInfo.Child != nil && len(traceEdbInfo.Child) > 0 {
  435. for _, v := range traceEdbInfo.Child {
  436. tmpBaseEdbInfoArr, tmpPredictEdbInfoArr, tmpCalculateMap, tmpPredictCalculateMap, tmpCalculateArr, tmpPredictCalculateArr := getRefreshEdbInfoListByTraceEdbInfo(v, existEdbInfoIdMap)
  437. newBaseEdbInfoArr = append(newBaseEdbInfoArr, tmpBaseEdbInfoArr...)
  438. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, tmpPredictEdbInfoArr...)
  439. for k, tmpEdbInfo := range tmpCalculateMap {
  440. newCalculateMap[k] = tmpEdbInfo
  441. }
  442. for k, tmpEdbInfo := range tmpPredictCalculateMap {
  443. newPredictCalculateMap[k] = tmpEdbInfo
  444. }
  445. calculateArr = append(calculateArr, tmpCalculateArr...)
  446. predictCalculateArr = append(predictCalculateArr, tmpPredictCalculateArr...)
  447. }
  448. }
  449. return
  450. }
  451. func edbInfoRefreshAll(refreshAll bool, newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) (err error) {
  452. var errmsg string
  453. defer func() {
  454. if err != nil {
  455. fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
  456. go alarm_msg.SendAlarmMsg("EdbInfoRefreshFromBaseV2,Err"+err.Error()+";errMsg:"+errmsg, 3)
  457. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "EdbInfoRefreshFromBase:"+errmsg, utils.EmailSendToUsers)
  458. }
  459. }()
  460. var startDate string
  461. for _, bv := range newBaseEdbInfoArr {
  462. //source := bv.Source
  463. //edbInfoId := bv.EdbInfoId
  464. //edbCode := bv.EdbCode
  465. if bv.StartDate == "0000-00-00" {
  466. continue
  467. }
  468. //开始时间
  469. startDate = ``
  470. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  471. sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
  472. if err != nil {
  473. return err
  474. }
  475. startDate = sTime.Format(utils.FormatDate)
  476. } else {
  477. sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  478. if err != nil {
  479. return err
  480. }
  481. frequency := bv.Frequency
  482. var limitDay int
  483. switch frequency {
  484. case "日度":
  485. limitDay = utils.DATA_START_REFRESH_LIMIT
  486. case "周度":
  487. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  488. case "月度":
  489. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  490. case "季度":
  491. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  492. case "年度":
  493. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  494. default:
  495. limitDay = utils.DATA_START_REFRESH_LIMIT
  496. }
  497. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  498. }
  499. result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.SubSource, bv.EdbCode, startDate)
  500. if err != nil {
  501. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
  502. errmsg = "RefreshBaseEdbData Err:" + err.Error()
  503. return err
  504. }
  505. if result.Ret != 200 {
  506. fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  507. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  508. return fmt.Errorf("刷新失败, err:", errmsg)
  509. }
  510. //maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  511. //if err != nil {
  512. // if err.Error() == utils.ErrNoRow() { //找不到数据,那么就进入到下一条数据做处理
  513. // continue
  514. // }
  515. // return err
  516. //}
  517. //if maxAndMinItem != nil {
  518. // err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  519. // if err != nil {
  520. // return err
  521. // }
  522. //}
  523. fmt.Println("end newBaseEdbInfoArr:", bv, time.Now())
  524. }
  525. //刷新相关普通计算指标
  526. for _, v := range calculateArr {
  527. edbInfo := newCalculateMap[v]
  528. if edbInfo == nil {
  529. return err
  530. }
  531. //计算指标就不用开始时间了吧,因为存在说开始时间变更的情况
  532. startDate = ``
  533. if !refreshAll { //如果不是全部更新,那么以指标的开始时间作为刷新
  534. startDate = edbInfo.StartDate
  535. source := edbInfo.Source
  536. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  537. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  538. } else {
  539. if source == utils.DATA_SOURCE_CALCULATE {
  540. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  541. if err != nil {
  542. return err
  543. }
  544. frequency := edbInfo.Frequency
  545. var limitDay int
  546. switch frequency {
  547. case "日度":
  548. limitDay = utils.DATA_START_REFRESH_LIMIT
  549. case "周度":
  550. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  551. case "月度":
  552. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  553. case "季度":
  554. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  555. case "年度":
  556. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  557. default:
  558. limitDay = utils.DATA_START_REFRESH_LIMIT
  559. }
  560. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  561. }
  562. }
  563. }
  564. result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  565. if err != nil {
  566. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  567. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  568. return err
  569. }
  570. if result.Ret != 200 {
  571. fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  572. errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  573. return fmt.Errorf("刷新失败")
  574. }
  575. }
  576. //刷新相关预测计算指标
  577. for _, v := range predictCalculateArr {
  578. edbInfo := newPredictCalculateMap[v]
  579. if edbInfo == nil {
  580. return err
  581. }
  582. startDate = edbInfo.StartDate
  583. source := edbInfo.Source
  584. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  585. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  586. } else {
  587. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  588. startDate = ``
  589. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  590. startDate = edbInfo.StartDate
  591. } else {
  592. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  593. if err != nil {
  594. return err
  595. }
  596. frequency := edbInfo.Frequency
  597. var limitDay int
  598. switch frequency {
  599. case "日度":
  600. limitDay = utils.DATA_START_REFRESH_LIMIT
  601. case "周度":
  602. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  603. case "月度":
  604. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  605. case "季度":
  606. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  607. case "年度":
  608. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  609. default:
  610. limitDay = utils.DATA_START_REFRESH_LIMIT
  611. }
  612. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  613. }
  614. }
  615. }
  616. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  617. if err != nil {
  618. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  619. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  620. return err
  621. }
  622. if result.Ret != 200 {
  623. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  624. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  625. return fmt.Errorf("刷新失败")
  626. }
  627. }
  628. // 4、更新动态环差值
  629. {
  630. predictEdbInfoIdList := make([]int, 0)
  631. for _, v := range newBasePredictEdbInfoArr {
  632. predictEdbInfoIdList = append(predictEdbInfoIdList, v.EdbInfoId)
  633. }
  634. fmt.Println("predictEdbConfCalculateMappingDetailList:", predictEdbInfoIdList)
  635. predictEdbConfCalculateMappingDetailList, err := data_manage.GetPredictEdbConfCalculateMappingDetailListByEdbInfoId(predictEdbInfoIdList)
  636. if err != nil {
  637. errmsg = fmt.Sprint("更新动态环差值时,获取数据失败:" + err.Error())
  638. return fmt.Errorf("刷新失败, err:", errmsg)
  639. }
  640. for _, bv := range predictEdbConfCalculateMappingDetailList {
  641. result, err := RefreshEdbData(bv.EdbInfoId, utils.DATA_SOURCE_PREDICT, utils.DATA_SUB_SOURCE_EDB, bv.EdbCode, "")
  642. if err != nil {
  643. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err", time.Now())
  644. errmsg = "RefreshBasePredictEdbData Err:" + err.Error()
  645. return err
  646. }
  647. if result.Ret != 200 {
  648. fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  649. errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  650. return fmt.Errorf("刷新失败, err:%s", errmsg)
  651. }
  652. fmt.Println("end predictEdbConfCalculateMappingDetailList:", bv, time.Now())
  653. }
  654. }
  655. //5、再次刷新相关预测计算指标
  656. for _, v := range predictCalculateArr {
  657. edbInfo := newPredictCalculateMap[v]
  658. if edbInfo == nil {
  659. return err
  660. }
  661. startDate = edbInfo.StartDate
  662. source := edbInfo.Source
  663. if startDate == "" || startDate == "0000-00-00" { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
  664. startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
  665. } else {
  666. if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
  667. startDate = ``
  668. if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
  669. startDate = edbInfo.StartDate
  670. } else {
  671. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  672. if err != nil {
  673. return err
  674. }
  675. frequency := edbInfo.Frequency
  676. var limitDay int
  677. switch frequency {
  678. case "日度":
  679. limitDay = utils.DATA_START_REFRESH_LIMIT
  680. case "周度":
  681. limitDay = utils.DATA_START_REFRESH_LIMIT * 7
  682. case "月度":
  683. limitDay = utils.DATA_START_REFRESH_LIMIT * 30
  684. case "季度":
  685. limitDay = utils.DATA_START_REFRESH_LIMIT * 90
  686. case "年度":
  687. limitDay = utils.DATA_START_REFRESH_LIMIT * 365
  688. default:
  689. limitDay = utils.DATA_START_REFRESH_LIMIT
  690. }
  691. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  692. }
  693. }
  694. }
  695. result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  696. if err != nil {
  697. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  698. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  699. return err
  700. }
  701. if result.Ret != 200 {
  702. fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  703. errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  704. return fmt.Errorf("刷新失败")
  705. }
  706. }
  707. return err
  708. }
  709. // getRefreshEdbInfoList 获取待更新的指标(普通基础指标、普通运算指标,预测运算指标)
  710. func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
  711. calculateList, err := data_manage.GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList)
  712. if err != nil && err.Error() != utils.ErrNoRow() {
  713. err = errors.New("GetEdbInfoAllCalculate Err:" + err.Error())
  714. return
  715. }
  716. // 获取指标信息
  717. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  718. if err != nil {
  719. err = errors.New("GetEdbInfoAllCalGetEdbInfoByIdr:" + err.Error())
  720. return
  721. }
  722. baseEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 基础普通指标
  723. calculateInfoArr := make([]*data_manage.EdbInfo, 0) //基础运算指标
  724. basePredictEdbInfoArr := make([]*data_manage.EdbInfo, 0) // 预测普通指标
  725. predictCalculateInfoArr := make([]*data_manage.EdbInfo, 0) //预测运算指标
  726. for _, baseEdbInfo := range edbInfoList {
  727. if baseEdbInfo.EdbInfoType == 0 { //普通指标
  728. switch baseEdbInfo.EdbType {
  729. case 1: //基础指标
  730. baseEdbInfoArr = append(baseEdbInfoArr, baseEdbInfo)
  731. case 2: //计算指标
  732. calculateList = append(calculateList, baseEdbInfo)
  733. }
  734. } else { //预测指标
  735. switch baseEdbInfo.EdbType {
  736. case 1: //基础指标
  737. basePredictEdbInfoArr = append(basePredictEdbInfoArr, baseEdbInfo)
  738. case 2: //计算指标
  739. predictCalculateInfoArr = append(predictCalculateInfoArr, baseEdbInfo)
  740. }
  741. }
  742. }
  743. // 计算指标
  744. for _, v := range calculateList {
  745. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  746. if tmpErr != nil {
  747. err = tmpErr
  748. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  749. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  750. return
  751. }
  752. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  753. switch tmpEdbInfo.EdbInfoType {
  754. case 0: //普通基础指标
  755. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  756. case 1: //预测基础指标
  757. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  758. }
  759. }
  760. for _, tmpEdbInfo := range getCalculateInfoArr {
  761. switch tmpEdbInfo.EdbInfoType {
  762. case 0: //普通运算指标
  763. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  764. case 1: //预测运算指标
  765. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  766. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  767. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  768. } else {
  769. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  770. }
  771. }
  772. }
  773. switch v.EdbInfoType {
  774. case 0: //普通运算指标
  775. calculateInfoArr = append(calculateInfoArr, v)
  776. case 1: //预测指标
  777. if v.EdbType == 1 { //预测普通指标
  778. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  779. } else {
  780. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  781. }
  782. }
  783. }
  784. // 预测计算指标
  785. for _, v := range predictCalculateInfoArr {
  786. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  787. if tmpErr != nil {
  788. err = tmpErr
  789. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  790. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  791. return
  792. }
  793. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  794. switch tmpEdbInfo.EdbInfoType {
  795. case 0: //普通基础指标
  796. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  797. case 1: //预测基础指标
  798. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  799. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  800. } else {
  801. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  802. }
  803. //basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  804. }
  805. }
  806. for _, tmpEdbInfo := range getCalculateInfoArr {
  807. switch tmpEdbInfo.EdbInfoType {
  808. case 0: //普通运算指标
  809. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  810. case 1: //预测运算指标
  811. if tmpEdbInfo.EdbType == 1 { //预测普通指标
  812. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  813. } else {
  814. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  815. }
  816. //predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  817. }
  818. }
  819. switch v.EdbInfoType {
  820. case 0: //普通运算指标
  821. calculateInfoArr = append(calculateInfoArr, v)
  822. case 1: //预测指标
  823. if v.EdbType == 1 { //预测普通指标
  824. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  825. } else {
  826. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  827. }
  828. }
  829. }
  830. // 第一次的计算指标map
  831. newCalculateMap = make(map[int]*data_manage.EdbInfo)
  832. for _, v := range calculateInfoArr {
  833. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  834. calculateArr = append(calculateArr, v.EdbInfoId)
  835. }
  836. newCalculateMap[v.EdbInfoId] = v
  837. }
  838. // 基础预测指标
  839. if len(basePredictEdbInfoArr) > 0 {
  840. basePredictEdbInfoIdList := make([]int, 0)
  841. for _, v := range basePredictEdbInfoArr {
  842. basePredictEdbInfoIdList = append(basePredictEdbInfoIdList, v.EdbInfoId)
  843. }
  844. baseEdbInfoList, tmpErr := data_manage.GetPredictEdbInfoAllCalculate(basePredictEdbInfoIdList)
  845. if tmpErr != nil {
  846. err = tmpErr
  847. return
  848. }
  849. tmpCalculateList := make([]*data_manage.EdbInfo, 0)
  850. for _, v := range baseEdbInfoList {
  851. switch v.EdbType {
  852. case 1:
  853. baseEdbInfoArr = append(baseEdbInfoArr, v)
  854. case 2:
  855. // 如果不在第一次里面,那么在第二次 刷新预测指标的时候 需要加进去
  856. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  857. tmpCalculateList = append(tmpCalculateList, v)
  858. }
  859. }
  860. }
  861. // 这里是查询预测指标用到的 普通计算指标
  862. for _, v := range tmpCalculateList {
  863. getBaseEdbInfoArr, getCalculateInfoArr, tmpErr := data_manage.GetRefreshEdbInfoFromBase(v.EdbInfoId, v.Source)
  864. if tmpErr != nil {
  865. err = tmpErr
  866. fmt.Println("GetRefreshEdbInfoFromBase err:" + err.Error())
  867. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  868. return
  869. }
  870. // 基础指标
  871. for _, tmpEdbInfo := range getBaseEdbInfoArr {
  872. switch tmpEdbInfo.EdbInfoType {
  873. case 0: //普通基础指标
  874. baseEdbInfoArr = append(baseEdbInfoArr, tmpEdbInfo)
  875. case 1: //预测基础指标
  876. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  877. }
  878. }
  879. // 计算指标
  880. for _, tmpEdbInfo := range getCalculateInfoArr {
  881. switch tmpEdbInfo.EdbInfoType {
  882. case 0: //普通运算指标
  883. calculateInfoArr = append(calculateInfoArr, tmpEdbInfo)
  884. case 1: //预测运算指标
  885. if v.EdbType == 1 { //预测普通指标
  886. basePredictEdbInfoArr = append(basePredictEdbInfoArr, tmpEdbInfo)
  887. } else {
  888. predictCalculateInfoArr = append(predictCalculateInfoArr, tmpEdbInfo)
  889. }
  890. }
  891. }
  892. switch v.EdbInfoType {
  893. case 0: //普通运算指标
  894. calculateInfoArr = append(calculateInfoArr, v)
  895. case 1: //预测指标
  896. if v.EdbType == 1 { //预测普通指标
  897. basePredictEdbInfoArr = append(basePredictEdbInfoArr, v)
  898. } else { //预测运算指标
  899. predictCalculateInfoArr = append(predictCalculateInfoArr, v)
  900. }
  901. }
  902. }
  903. // 第二次计算指标的map
  904. for _, v := range calculateInfoArr {
  905. if _, ok := newCalculateMap[v.EdbInfoId]; !ok {
  906. calculateArr = append(calculateArr, v.EdbInfoId)
  907. }
  908. newCalculateMap[v.EdbInfoId] = v
  909. }
  910. }
  911. // 普通基础指标去重
  912. newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  913. baseMap := make(map[int]int)
  914. for _, v := range baseEdbInfoArr {
  915. if _, ok := baseMap[v.EdbInfoId]; !ok {
  916. newBaseEdbInfoArr = append(newBaseEdbInfoArr, v)
  917. }
  918. baseMap[v.EdbInfoId] = v.EdbInfoId
  919. }
  920. // 普通计算指标的id
  921. sort.Ints(calculateArr)
  922. // 普通预测指标去重
  923. newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
  924. basePredictMap := make(map[int]int)
  925. for _, v := range basePredictEdbInfoArr {
  926. if _, ok := basePredictMap[v.EdbInfoId]; !ok {
  927. newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, v)
  928. }
  929. basePredictMap[v.EdbInfoId] = v.EdbInfoId
  930. }
  931. // 预测计算指标去重
  932. newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
  933. for _, v := range predictCalculateInfoArr {
  934. if _, ok := newPredictCalculateMap[v.EdbInfoId]; !ok {
  935. predictCalculateArr = append(predictCalculateArr, v.EdbInfoId)
  936. }
  937. newPredictCalculateMap[v.EdbInfoId] = v
  938. }
  939. // 预测计算指标的id
  940. sort.Ints(predictCalculateArr)
  941. return
  942. }
  943. // AddOrEditEdbInfoToEs 添加/修改ES中的指标
  944. func AddOrEditEdbInfoToEs(edbInfoId int) {
  945. //添加es
  946. itemInfo, _ := data_manage.GetEdbInfoByCondition("AND edb_info_id=?", []interface{}{edbInfoId})
  947. go elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
  948. }
  949. // DeleteEdbInfoToEs 删除ES中的指标
  950. func DeleteEdbInfoToEs(edbInfoId int) {
  951. //添加es
  952. go elastic.EsDeleteEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(edbInfoId))
  953. }
  954. // EdbInfoAdd 添加指标到指标库
  955. func EdbInfoAdd(source, subSource, classifyId int, edbCode, edbName, frequency, unit, startDate, endDate string, sysUserId int, sysUserRealName string) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
  956. isSendEmail = true
  957. //判断指标名称是否存在
  958. var condition string
  959. var pars []interface{}
  960. //condition += " AND source=? "
  961. //pars = append(pars, source)
  962. condition += " AND edb_name=? "
  963. pars = append(pars, edbName)
  964. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  965. if err != nil {
  966. errMsg = "判断指标名称是否存在失败"
  967. err = errors.New("判断指标名称是否存在失败,Err:" + err.Error())
  968. return
  969. }
  970. if count > 0 {
  971. errMsg = "指标名称已存在,请重新填写"
  972. err = errors.New(errMsg)
  973. isSendEmail = false
  974. return
  975. }
  976. edbInfo = new(data_manage.EdbInfo)
  977. edbInfo.Source = source
  978. sourceNameMap := map[int]string{
  979. utils.DATA_SOURCE_THS: "同花顺",
  980. utils.DATA_SOURCE_WIND: "wind",
  981. utils.DATA_SOURCE_PB: "彭博",
  982. utils.DATA_SOURCE_PB_FINANCE: "彭博财务",
  983. utils.DATA_SOURCE_MANUAL: "手工数据",
  984. utils.DATA_SOURCE_LZ: "隆众",
  985. utils.DATA_SOURCE_YS: "SMM",
  986. utils.DATA_SOURCE_GL: "钢联",
  987. utils.DATA_SOURCE_ZZ: "郑商所",
  988. utils.DATA_SOURCE_DL: "大商所",
  989. utils.DATA_SOURCE_SH: "上期所",
  990. utils.DATA_SOURCE_CFFEX: "中金所",
  991. utils.DATA_SOURCE_SHFE: "上期能源",
  992. utils.DATA_SOURCE_GIE: "欧洲天然气",
  993. utils.DATA_SOURCE_LT: "路透",
  994. utils.DATA_SOURCE_COAL: "中国煤炭市场网",
  995. utils.DATA_SOURCE_GOOGLE_TRAVEL: "our world in data",
  996. utils.DATA_SOURCE_MYSTEEL_CHEMICAL: "钢联化工",
  997. utils.DATA_SOURCE_EIA_STEO: "EIA STEO报告",
  998. utils.DATA_SOURCE_COM_TRADE: "UN",
  999. utils.DATA_SOURCE_SCI: "SCI",
  1000. utils.DATA_SOURCE_BAIINFO: "BAIINFO",
  1001. utils.DATA_SOURCE_STOCK_PLANT: "存量装置",
  1002. utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
  1003. utils.DATA_SOURCE_FUBAO: "富宝数据",
  1004. utils.DATA_SOURCE_GFEX: "广期所",
  1005. }
  1006. sourceName, ok := sourceNameMap[source]
  1007. if !ok {
  1008. edbSource := data_manage.EdbSourceIdMap[source]
  1009. if edbSource != nil {
  1010. sourceName = edbSource.SourceName
  1011. }
  1012. if sourceName == "" {
  1013. errMsg = "指标来源异常"
  1014. err = errors.New(errMsg)
  1015. return
  1016. }
  1017. }
  1018. edbInfo.SourceName = sourceName
  1019. edbType := 1 //基础指标
  1020. if source == utils.DATA_SOURCE_STOCK_PLANT {
  1021. edbType = 2 //计算指标
  1022. }
  1023. //从缓存中获取
  1024. serverUrl := ``
  1025. if edbInfo.Source == utils.DATA_SOURCE_WIND {
  1026. windCacheKey := utils.CACHE_WIND_URL + ":" + edbCode
  1027. serverUrl, _ = utils.Rc.RedisString(windCacheKey)
  1028. if serverUrl == `` {
  1029. if len(utils.Hz_Data_WIND_Url_List) >= 1 {
  1030. serverUrl = utils.Hz_Data_WIND_Url_List[len(utils.Hz_Data_WIND_Url_List)-1] //默认是最后一个服务器地址
  1031. }
  1032. }
  1033. }
  1034. //获取该层级下最大的排序数
  1035. maxSort, err := GetEdbClassifyMaxSort(classifyId, 0)
  1036. if err != nil {
  1037. errMsg = "获取失败"
  1038. err = errors.New("查询排序信息失败,Err:" + err.Error())
  1039. return
  1040. }
  1041. edbInfo.EdbCode = edbCode
  1042. edbInfo.EdbName = edbName
  1043. edbInfo.EdbNameSource = edbName
  1044. edbInfo.Frequency = frequency
  1045. edbInfo.Unit = unit
  1046. edbInfo.StartDate = startDate
  1047. edbInfo.EndDate = endDate
  1048. edbInfo.ClassifyId = classifyId
  1049. edbInfo.SysUserId = sysUserId
  1050. edbInfo.SysUserRealName = sysUserRealName
  1051. edbInfo.CreateTime = time.Now()
  1052. edbInfo.ModifyTime = time.Now()
  1053. edbInfo.ServerUrl = serverUrl
  1054. edbInfo.Sort = maxSort + 1
  1055. edbInfo.DataDateType = `交易日`
  1056. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1057. edbInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  1058. itemVal, err := data_manage.GetEdbInfoMaxAndMinInfo(source, subSource, edbCode)
  1059. if itemVal != nil && err == nil {
  1060. edbInfo.MaxValue = itemVal.MaxValue
  1061. edbInfo.MinValue = itemVal.MinValue
  1062. }
  1063. edbInfo.EdbType = edbType
  1064. edbInfoId, err := data_manage.AddEdbInfo(edbInfo)
  1065. if err != nil {
  1066. errMsg = "保存失败"
  1067. err = errors.New("保存失败,Err:" + err.Error())
  1068. return
  1069. }
  1070. edbInfo.EdbInfoId = int(edbInfoId)
  1071. //保存数据
  1072. data_manage.ModifyEdbInfoDataStatus(edbInfoId, source, subSource, edbCode)
  1073. //处理同名指标
  1074. //{
  1075. // edbNameList, tmpErr := data_manage.GetEdbInfoByName(edbName)
  1076. // if tmpErr != nil {
  1077. // errMsg = "保存失败"
  1078. // err = errors.New("获取指标信息失败,Err:" + tmpErr.Error())
  1079. // return
  1080. // }
  1081. // if len(edbNameList) >= 2 {
  1082. // for _, v := range edbNameList {
  1083. // edbName := v.EdbName + "(" + v.SourceName + ")"
  1084. // err = data_manage.ModifyEdbInfoNameSource(edbName, v.EdbInfoId)
  1085. // if err != nil {
  1086. // errMsg = "保存失败"
  1087. // err = errors.New("修改指标名称失败,Err:" + err.Error())
  1088. // return
  1089. // }
  1090. // }
  1091. // }
  1092. //}
  1093. //上传到ES
  1094. //indexName := utils.DATA_INDEX_NAME
  1095. //docId := strconv.Itoa(int(edbInfoId))
  1096. //
  1097. //go data.EsAddOrEditEdbInfo(indexName, docId, edbInfo)
  1098. maxAndMinItem, _ := data_manage.GetEdbInfoMaxAndMinInfo(source, subSource, edbCode)
  1099. if maxAndMinItem != nil {
  1100. err = data_manage.ModifyEdbInfoMaxAndMinInfo(int(edbInfoId), maxAndMinItem)
  1101. }
  1102. //添加es
  1103. AddOrEditEdbInfoToEs(int(edbInfoId))
  1104. return
  1105. }
  1106. // TraceEdbInfoByEdbInfoIdList 指标追溯
  1107. func TraceEdbInfoByEdbInfoIdList(edbInfoIdList []int) (traceEdbInfoList []data_manage.TraceEdbInfoResp, err error) {
  1108. traceEdbInfoList = make([]data_manage.TraceEdbInfoResp, 0)
  1109. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  1110. if err != nil {
  1111. return
  1112. }
  1113. edbInfoRuleMap := make(map[int]string, 0)
  1114. edbMappingMap := make(map[int][]*data_manage.EdbInfoCalculateMappingInfo)
  1115. findIdMap := make(map[int]int)
  1116. existMap := make(map[int]data_manage.TraceEdbInfoResp)
  1117. for _, edbInfo := range edbInfoList {
  1118. findIdMap[edbInfo.EdbInfoId] = edbInfo.EdbInfoId
  1119. //edbInfoRuleMap[edbInfoId] = getEdbRuleTitle(edbInfo)
  1120. traceEdbInfo := data_manage.TraceEdbInfoResp{
  1121. //EdbInfoId: edbInfo.EdbInfoId,
  1122. EdbInfoId: edbInfo.EdbInfoId,
  1123. EdbInfoType: edbInfo.EdbInfoType,
  1124. EdbName: edbInfo.EdbName,
  1125. EdbType: edbInfo.EdbType,
  1126. //Source: edbInfo.Source,
  1127. UniqueCode: edbInfo.UniqueCode,
  1128. ClassifyId: edbInfo.ClassifyId,
  1129. EdbInfo: edbInfo,
  1130. }
  1131. traceEdbInfo.Child, err = traceEdbInfoByEdbInfoId(edbInfo.EdbInfoId, traceEdbInfo, edbInfoRuleMap, findIdMap, existMap, edbMappingMap)
  1132. traceEdbInfoList = append(traceEdbInfoList, traceEdbInfo)
  1133. }
  1134. //findEdbInfoIdList := make([]int, 0)
  1135. //for _, v := range findIdMap {
  1136. // findEdbInfoIdList = append(findEdbInfoIdList, v)
  1137. //}
  1138. //findEdbInfoList, err := data_manage.GetEdbInfoByIdList(findEdbInfoIdList)
  1139. //if err != nil {
  1140. // return
  1141. //}
  1142. //edbInfoMap := make(map[int]*data_manage.EdbInfo)
  1143. //for _, tmpEdbInfo := range findEdbInfoList {
  1144. // edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo
  1145. //}
  1146. //for k, traceEdbInfo := range traceEdbInfoList {
  1147. // traceEdbInfoList[k], err = handleTraceEdbInfo(traceEdbInfo, 0, edbInfoMap, edbMappingMap)
  1148. //}
  1149. return
  1150. }
  1151. // TraceEdbInfoByEdbInfoId 指标追溯
  1152. func TraceEdbInfoByEdbInfoId(edbInfoId int) (traceEdbInfo data_manage.TraceEdbInfoResp, err error) {
  1153. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  1154. if err != nil {
  1155. return
  1156. }
  1157. edbInfoRuleMap := make(map[int]string, 0)
  1158. edbMappingMap := make(map[int][]*data_manage.EdbInfoCalculateMappingInfo)
  1159. //edbInfoRuleMap[edbInfoId] = getEdbRuleTitle(edbInfo)
  1160. traceEdbInfo = data_manage.TraceEdbInfoResp{
  1161. //EdbInfoId: edbInfo.EdbInfoId,
  1162. EdbInfoId: edbInfoId,
  1163. EdbName: edbInfo.EdbName,
  1164. EdbInfo: edbInfo,
  1165. }
  1166. findIdMap := make(map[int]int)
  1167. findIdMap[edbInfoId] = edbInfoId
  1168. existMap := make(map[int]data_manage.TraceEdbInfoResp)
  1169. traceEdbInfo.Child, err = traceEdbInfoByEdbInfoId(edbInfoId, traceEdbInfo, edbInfoRuleMap, findIdMap, existMap, edbMappingMap)
  1170. edbInfoIdList := make([]int, 0)
  1171. for _, v := range findIdMap {
  1172. edbInfoIdList = append(edbInfoIdList, v)
  1173. }
  1174. edbInfoList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  1175. if err != nil {
  1176. return
  1177. }
  1178. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  1179. for _, tmpEdbInfo := range edbInfoList {
  1180. edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo
  1181. }
  1182. traceEdbInfo, err = handleTraceEdbInfo(traceEdbInfo, 0, edbInfoMap, edbMappingMap)
  1183. return
  1184. }
  1185. // traceEdbInfoByEdbInfoId 指标追溯
  1186. 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) {
  1187. traceEdbInfo, ok := existMap[edbInfoId]
  1188. if ok {
  1189. return
  1190. }
  1191. child = make([]data_manage.TraceEdbInfoResp, 0)
  1192. edbInfoMappingList, err := data_manage.GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId)
  1193. if err != nil {
  1194. err = fmt.Errorf("GetEdbInfoCalculateMappingListByEdbInfoId err: %s", err.Error())
  1195. return
  1196. }
  1197. // 指标信息map
  1198. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  1199. if len(edbInfoMappingList) > 0 {
  1200. fromEdbInfoIdList := make([]int, 0)
  1201. for _, v := range edbInfoMappingList {
  1202. fromEdbInfoIdList = append(fromEdbInfoIdList, v.FromEdbInfoId)
  1203. }
  1204. edbInfoList, tmpErr := data_manage.GetEdbInfoByIdList(fromEdbInfoIdList)
  1205. if tmpErr != nil {
  1206. err = fmt.Errorf("traceEdbInfoByEdbInfoId GetEdbInfoByIdList err: %s", tmpErr.Error())
  1207. return
  1208. }
  1209. for _, v := range edbInfoList {
  1210. edbInfoMap[v.EdbInfoId] = v
  1211. }
  1212. }
  1213. edbMappingMap[edbInfoId] = edbInfoMappingList
  1214. for _, v := range edbInfoMappingList {
  1215. tmpEdbInfoId := v.FromEdbInfoId
  1216. tmpTraceEdbInfo := data_manage.TraceEdbInfoResp{
  1217. EdbInfoId: tmpEdbInfoId,
  1218. EdbInfo: edbInfoMap[v.FromEdbInfoId],
  1219. //EdbName: v.EdbName,
  1220. //RuleTitle: edbInfoRuleMap[v.EdbInfoId],
  1221. //Child: make([]data_manage.TraceEdbInfoResp, 0),
  1222. }
  1223. // 计算指标/预测指标继续溯源
  1224. if edbInfoId != v.FromEdbInfoId && (v.FromEdbType == 2 || v.FromEdbInfoType == 1) {
  1225. // 查过了就不查了
  1226. if _, ok2 := findIdMap[tmpEdbInfoId]; !ok2 {
  1227. tmpTraceEdbInfo.Child, err = traceEdbInfoByEdbInfoId(tmpEdbInfoId, tmpTraceEdbInfo, edbInfoRuleMap, findIdMap, existMap, edbMappingMap)
  1228. }
  1229. //else {
  1230. // tmpTraceEdbInfo = existMap[v.EdbInfoId]
  1231. //}
  1232. }
  1233. child = append(child, tmpTraceEdbInfo)
  1234. findIdMap[tmpEdbInfoId] = tmpEdbInfoId
  1235. //existMap[v.EdbInfoId] = tmpTraceEdbInfo
  1236. }
  1237. existMap[edbInfoId] = traceEdbInfo
  1238. return
  1239. }
  1240. 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) {
  1241. edbInfo, ok := edbInfoMap[traceEdbInfoResp.EdbInfoId]
  1242. if !ok {
  1243. err = errors.New("指标异常")
  1244. return
  1245. }
  1246. var parentEdbInfo *data_manage.EdbInfo
  1247. if parentEdbInfoId > 0 {
  1248. parentEdbInfo, ok = edbInfoMap[parentEdbInfoId]
  1249. if !ok {
  1250. err = errors.New("指标异常")
  1251. return
  1252. }
  1253. }
  1254. //traceEdbInfoResp.EdbName = edbInfo.EdbName
  1255. traceEdbInfoResp.EdbName, traceEdbInfoResp.RuleTitle = getEdbRuleTitle(edbInfo, parentEdbInfo, traceEdbInfoResp.Child, edbInfoMap, edbMappingMap)
  1256. if traceEdbInfoResp.Child != nil && len(traceEdbInfoResp.Child) > 0 {
  1257. for k, v := range traceEdbInfoResp.Child {
  1258. traceEdbInfoResp.Child[k], err = handleTraceEdbInfo(v, traceEdbInfoResp.EdbInfoId, edbInfoMap, edbMappingMap)
  1259. if err != nil {
  1260. return
  1261. }
  1262. }
  1263. }
  1264. newTraceEdbInfoResp = traceEdbInfoResp
  1265. return
  1266. }
  1267. // getEdbRule 获取规则名称
  1268. 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) {
  1269. edbName = edbInfo.EdbName
  1270. ruleTitle = `来源于` + edbInfo.SourceName
  1271. if edbInfo.EdbType == 1 {
  1272. // 基础指标的话,直接返回来源名称
  1273. //ruleTitle = `来源于`+edbInfo.SourceName
  1274. return
  1275. }
  1276. if parentEdbInfo != nil {
  1277. edbMappingList, ok := edbMappingMap[parentEdbInfo.EdbInfoId]
  1278. if !ok {
  1279. edbMappingList = []*data_manage.EdbInfoCalculateMappingInfo{}
  1280. }
  1281. // 指标名称
  1282. switch parentEdbInfo.Source {
  1283. case utils.DATA_SOURCE_CALCULATE, utils.DATA_SOURCE_PREDICT_CALCULATE:
  1284. for _, v := range edbMappingList {
  1285. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1286. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, v.FromTag)
  1287. }
  1288. }
  1289. case utils.DATA_SOURCE_CALCULATE_ZJPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_ZJPJ, utils.DATA_SOURCE_CALCULATE_LJZTBPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ: // 直接拼接 ,累计值同比拼接
  1290. for _, v := range edbMappingList {
  1291. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1292. tmpName := ``
  1293. if v.FromTag == `A` {
  1294. tmpName = `拼接日期前`
  1295. } else if v.FromTag == `B` {
  1296. tmpName = `拼接日期后`
  1297. }
  1298. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, tmpName)
  1299. }
  1300. }
  1301. case utils.DATA_SOURCE_CALCULATE_NHCC, utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC: //计算指标(拟合残差)
  1302. for _, v := range edbMappingList {
  1303. //(需对上游指标+自变量,领先10天/因变量)
  1304. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1305. tmpName := ``
  1306. if v.FromTag == `A` {
  1307. tmpName = fmt.Sprintf(`自变量,领先%d天`, v.MoveValue)
  1308. } else if v.FromTag == `B` {
  1309. tmpName = `因变量`
  1310. }
  1311. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, tmpName)
  1312. }
  1313. }
  1314. case utils.DATA_SOURCE_CALCULATE_CORRELATION: // 滚动相关性
  1315. for _, v := range edbMappingList {
  1316. if v.FromEdbInfoId == edbInfo.EdbInfoId {
  1317. edbName = fmt.Sprintf("%s(%s)", edbInfo.EdbName, v.FromTag)
  1318. }
  1319. }
  1320. }
  1321. }
  1322. // 规则
  1323. switch edbInfo.Source {
  1324. case utils.DATA_SOURCE_CALCULATE, utils.DATA_SOURCE_PREDICT_CALCULATE:
  1325. ruleTitle = "=" + edbInfo.CalculateFormula
  1326. case utils.DATA_SOURCE_CALCULATE_LJZZY, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZZY:
  1327. ruleTitle = `累计转月值计算`
  1328. case utils.DATA_SOURCE_CALCULATE_TBZ, utils.DATA_SOURCE_PREDICT_CALCULATE_TBZ:
  1329. ruleTitle = `同比值计算`
  1330. case utils.DATA_SOURCE_CALCULATE_TCZ, utils.DATA_SOURCE_PREDICT_CALCULATE_TCZ:
  1331. ruleTitle = `同差值计算`
  1332. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_PREDICT_CALCULATE_NSZYDPJJS:
  1333. ruleTitle = fmt.Sprintf("N数值移动均值计算(N=%s)", edbInfo.CalculateFormula)
  1334. case utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_PREDICT_CALCULATE_HBZ:
  1335. ruleTitle = fmt.Sprintf("N数值环比值计算(N=%s)", edbInfo.CalculateFormula)
  1336. case utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_PREDICT_CALCULATE_HCZ:
  1337. ruleTitle = fmt.Sprintf("N数值环差值计算(N=%s)", edbInfo.CalculateFormula)
  1338. case utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_PREDICT_CALCULATE_TIME_SHIFT:
  1339. moveType := `领先`
  1340. if edbInfo.MoveType == 2 {
  1341. moveType = "滞后"
  1342. }
  1343. ruleTitle = fmt.Sprintf("时间移位计算(%s%s%s)", moveType, edbInfo.CalculateFormula, edbInfo.MoveFrequency)
  1344. case utils.DATA_SOURCE_CALCULATE_BP, utils.DATA_SOURCE_PREDICT_CALCULATE_BP: // 变频
  1345. childFrequency := ``
  1346. if len(childList) > 0 {
  1347. if childEdbInfo, ok := edbInfoMap[childList[0].EdbInfoId]; ok {
  1348. childFrequency = childEdbInfo.Frequency
  1349. }
  1350. }
  1351. ruleTitle = fmt.Sprintf("升频计算(%s转%s)", childFrequency, edbInfo.Frequency)
  1352. case utils.DATA_SOURCE_CALCULATE_ZJPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_ZJPJ: // 直接拼接
  1353. ruleTitle = fmt.Sprintf("直接拼接计算(%s)", edbInfo.CalculateFormula)
  1354. case utils.DATA_SOURCE_CALCULATE_LJZTBPJ, utils.DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ: // 累计值同比拼
  1355. ruleTitle = fmt.Sprintf("累计值同比值拼接计算(%s)", edbInfo.CalculateFormula)
  1356. case utils.DATA_SOURCE_PYTHON:
  1357. ruleTitle = `代码运算`
  1358. case utils.DATA_SOURCE_CALCULATE_CJJX, utils.DATA_SOURCE_PREDICT_CALCULATE_CJJX:
  1359. ruleTitle = fmt.Sprintf("超季节性计算(N=%s,%s)", edbInfo.CalculateFormula, edbInfo.Calendar)
  1360. case utils.DATA_SOURCE_CALCULATE_NHCC, utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC: //计算指标(拟合残差)
  1361. var startDate, endDate string
  1362. dateList := strings.Split(edbInfo.CalculateFormula, ",")
  1363. if len(dateList) == 2 {
  1364. startDate = dateList[0]
  1365. endDate = dateList[1]
  1366. }
  1367. ruleTitle = fmt.Sprintf("拟合残差计算(%s至%s)", startDate, endDate)
  1368. case utils.DATA_SOURCE_CALCULATE_ADJUST:
  1369. ruleTitle = `数据调整`
  1370. case utils.DATA_SOURCE_CALCULATE_NH, utils.DATA_SOURCE_PREDICT_CALCULATE_NH:
  1371. ruleTitle = `年化计算`
  1372. case utils.DATA_SOURCE_CALCULATE_KSZS, utils.DATA_SOURCE_PREDICT_CALCULATE_KSZS: // 扩散指数->53
  1373. type KszsConfig struct {
  1374. DateType int `description:"扩散指标日期;1:全部指标日期并集;2:部分指标日期并集"`
  1375. CheckList []string `description:"选中的数据,A,B,C"`
  1376. }
  1377. var config KszsConfig
  1378. err := json.Unmarshal([]byte(edbInfo.CalculateFormula), &config)
  1379. if err != nil {
  1380. return
  1381. }
  1382. var startDate, endDate time.Time
  1383. childEdbInfoIdList := make([]int, 0)
  1384. if config.DateType == 1 {
  1385. for _, v := range childList {
  1386. childEdbInfoIdList = append(childEdbInfoIdList, v.EdbInfoId)
  1387. }
  1388. } else {
  1389. edbMappingList, ok := edbMappingMap[parentEdbInfo.EdbInfoId]
  1390. if !ok {
  1391. edbMappingList = []*data_manage.EdbInfoCalculateMappingInfo{}
  1392. }
  1393. tagMap := make(map[string]int)
  1394. for _, v := range edbMappingList {
  1395. tagMap[v.FromTag] = v.FromEdbInfoId
  1396. }
  1397. for _, v := range config.CheckList {
  1398. if tmpEdbInfoId, ok := tagMap[v]; ok {
  1399. childEdbInfoIdList = append(childEdbInfoIdList, tmpEdbInfoId)
  1400. }
  1401. }
  1402. }
  1403. for _, v := range childEdbInfoIdList {
  1404. if childEdbInfo, ok := edbInfoMap[v]; ok {
  1405. tmpStartDate, tmpErr := time.ParseInLocation(utils.FormatDate, childEdbInfo.StartDate, time.Local)
  1406. if tmpErr != nil {
  1407. return
  1408. }
  1409. if startDate.IsZero() || startDate.After(tmpStartDate) {
  1410. startDate = tmpStartDate
  1411. }
  1412. tmpEndDate, tmpErr := time.ParseInLocation(utils.FormatDate, childEdbInfo.EndDate, time.Local)
  1413. if tmpErr != nil {
  1414. return
  1415. }
  1416. if endDate.IsZero() || endDate.Before(tmpEndDate) {
  1417. endDate = tmpEndDate
  1418. }
  1419. }
  1420. }
  1421. ruleTitle = fmt.Sprintf("扩散指数计算(%s至%s)", startDate.Format(utils.FormatDate), endDate.Format(utils.FormatDate))
  1422. case utils.DATA_SOURCE_STOCK_PLANT:
  1423. ruleTitle = `来源于装置分析`
  1424. case utils.DATA_SOURCE_CALCULATE_CORRELATION:
  1425. type EdbCalculateFormula struct {
  1426. BaseCalculateValue int `description:"基础计算窗口"`
  1427. BaseCalculateUnit string `description:"基础计算频度"`
  1428. LeadValue int `description:"领先期数"`
  1429. LeadUnit string `description:"频度"`
  1430. CalculateValue int `description:"计算窗口"`
  1431. CalculateUnit string `description:"计算频度"`
  1432. }
  1433. var correlationConf EdbCalculateFormula
  1434. err := json.Unmarshal([]byte(edbInfo.CalculateFormula), &correlationConf)
  1435. if err != nil {
  1436. return
  1437. }
  1438. ruleTitle = fmt.Sprintf("滚动相关性(计算窗口%d%s,B领先A%d%s)", correlationConf.CalculateValue, correlationConf.CalculateUnit, correlationConf.LeadValue, correlationConf.LeadUnit)
  1439. case utils.DATA_SOURCE_CALCULATE_JP, utils.DATA_SOURCE_PREDICT_CALCULATE_JP:
  1440. childFrequency := ``
  1441. if len(childList) > 0 {
  1442. if childEdbInfo, ok := edbInfoMap[childList[0].EdbInfoId]; ok {
  1443. childFrequency = childEdbInfo.Frequency
  1444. }
  1445. }
  1446. ruleTitle = fmt.Sprintf("降频计算(%s转%s,%s)", childFrequency, edbInfo.Frequency, edbInfo.CalculateFormula)
  1447. }
  1448. return
  1449. }
  1450. // EdbInfoAdd 添加指标到指标库
  1451. func EdbInfoWsdAdd(item *data_manage.EdbInfo) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
  1452. isSendEmail = true
  1453. //判断指标名称是否存在
  1454. var condition string
  1455. var pars []interface{}
  1456. condition += " AND edb_name=? "
  1457. pars = append(pars, item.EdbName)
  1458. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1459. if err != nil {
  1460. errMsg = "判断指标名称是否存在失败"
  1461. err = errors.New("判断指标名称是否存在失败,Err:" + err.Error())
  1462. return
  1463. }
  1464. if count > 0 {
  1465. errMsg = "指标名称已存在,请重新填写"
  1466. err = errors.New(errMsg)
  1467. isSendEmail = false
  1468. return
  1469. }
  1470. source := item.Source
  1471. edbInfo = new(data_manage.EdbInfo)
  1472. edbInfo.Source = source
  1473. sourceNameMap := map[int]string{
  1474. utils.DATA_SOURCE_THS: "同花顺",
  1475. utils.DATA_SOURCE_WIND: "wind",
  1476. utils.DATA_SOURCE_PB: "彭博",
  1477. utils.DATA_SOURCE_PB_FINANCE: "彭博财务",
  1478. utils.DATA_SOURCE_MANUAL: "手工数据",
  1479. utils.DATA_SOURCE_LZ: "隆众",
  1480. utils.DATA_SOURCE_YS: "SMM",
  1481. utils.DATA_SOURCE_GL: "钢联",
  1482. utils.DATA_SOURCE_ZZ: "郑商所",
  1483. utils.DATA_SOURCE_DL: "大商所",
  1484. utils.DATA_SOURCE_SH: "上期所",
  1485. utils.DATA_SOURCE_CFFEX: "中金所",
  1486. utils.DATA_SOURCE_SHFE: "上期能源",
  1487. utils.DATA_SOURCE_GIE: "欧洲天然气",
  1488. utils.DATA_SOURCE_LT: "路透",
  1489. utils.DATA_SOURCE_COAL: "中国煤炭市场网",
  1490. utils.DATA_SOURCE_GOOGLE_TRAVEL: "our world in data",
  1491. utils.DATA_SOURCE_MYSTEEL_CHEMICAL: "钢联化工",
  1492. utils.DATA_SOURCE_EIA_STEO: "EIA STEO报告",
  1493. utils.DATA_SOURCE_COM_TRADE: "UN",
  1494. utils.DATA_SOURCE_SCI: "SCI",
  1495. utils.DATA_SOURCE_BAIINFO: "BAIINFO",
  1496. utils.DATA_SOURCE_STOCK_PLANT: "存量装置",
  1497. utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
  1498. utils.DATA_SOURCE_FUBAO: "富宝数据",
  1499. }
  1500. sourceName, ok := sourceNameMap[source]
  1501. if !ok {
  1502. edbSource := data_manage.EdbSourceIdMap[source]
  1503. if edbSource != nil {
  1504. sourceName = edbSource.SourceName
  1505. }
  1506. if sourceName == "" {
  1507. errMsg = "指标来源异常"
  1508. err = errors.New(errMsg)
  1509. return
  1510. }
  1511. }
  1512. edbInfo.SourceName = sourceName
  1513. edbType := 1 //基础指标
  1514. if source == utils.DATA_SOURCE_STOCK_PLANT {
  1515. edbType = 2 //计算指标
  1516. }
  1517. //从缓存中获取
  1518. serverUrl := ``
  1519. if edbInfo.Source == utils.DATA_SOURCE_WIND {
  1520. windCacheKey := utils.CACHE_WIND_URL + ":" + item.EdbCode
  1521. serverUrl, _ = utils.Rc.RedisString(windCacheKey)
  1522. if serverUrl == `` {
  1523. if len(utils.Hz_Data_WIND_Url_List) >= 1 {
  1524. serverUrl = utils.Hz_Data_WIND_Url_List[len(utils.Hz_Data_WIND_Url_List)-1] //默认是最后一个服务器地址
  1525. }
  1526. }
  1527. }
  1528. //获取该层级下最大的排序数
  1529. maxSort, err := GetEdbClassifyMaxSort(item.ClassifyId, 0)
  1530. if err != nil {
  1531. errMsg = "获取失败"
  1532. err = errors.New("查询排序信息失败,Err:" + err.Error())
  1533. return
  1534. }
  1535. edbInfo.EdbCode = item.EdbCode
  1536. edbInfo.EdbName = item.EdbName
  1537. edbInfo.EdbNameSource = item.EdbName
  1538. edbInfo.Frequency = item.Frequency
  1539. edbInfo.Unit = item.Unit
  1540. edbInfo.ClassifyId = item.ClassifyId
  1541. edbInfo.SysUserId = item.SysUserId
  1542. edbInfo.SysUserRealName = item.SysUserRealName
  1543. edbInfo.CreateTime = time.Now()
  1544. edbInfo.ModifyTime = time.Now()
  1545. edbInfo.ServerUrl = serverUrl
  1546. edbInfo.Sort = maxSort + 1
  1547. edbInfo.DataDateType = `交易日`
  1548. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1549. edbInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  1550. edbInfo.EdbType = edbType
  1551. edbInfo.SubSource = item.SubSource
  1552. edbInfo.SubSourceName = "日期序列"
  1553. edbInfo.IndicatorCode = item.IndicatorCode
  1554. edbInfo.StockCode = item.StockCode
  1555. edbInfoId, err := data_manage.AddEdbInfo(edbInfo)
  1556. if err != nil {
  1557. errMsg = "保存失败"
  1558. err = errors.New("保存失败,Err:" + err.Error())
  1559. return
  1560. }
  1561. edbInfo.EdbInfoId = int(edbInfoId)
  1562. //保存数据
  1563. err = data_manage.ModifyEdbInfoWindWsdDataStatus(source, item.SubSource, edbInfoId, item.EdbCode)
  1564. if err != nil {
  1565. errMsg = "保存失败"
  1566. err = errors.New("修改数据对应指标ID失败,Err:" + err.Error())
  1567. return
  1568. }
  1569. maxAndMinItem, _ := data_manage.GetEdbInfoWsdMaxAndMinInfo(source, item.SubSource, item.EdbCode)
  1570. if maxAndMinItem != nil {
  1571. err = data_manage.ModifyEdbInfoMaxAndMinInfo(int(edbInfoId), maxAndMinItem)
  1572. }
  1573. //添加es
  1574. AddOrEditEdbInfoToEs(int(edbInfoId))
  1575. return
  1576. }
  1577. // BatchRefreshEdbByEdbIds 批量刷新指标
  1578. func BatchRefreshEdbByEdbIds(edbIdList []int, redisKey string, refreshKeys []string) (syncing bool, err error) {
  1579. if len(edbIdList) <= 0 {
  1580. return
  1581. }
  1582. // 设置刷新缓存
  1583. if redisKey != `` {
  1584. // 设置最多10分钟缓存
  1585. utils.Rc.SetNX(redisKey, 1, time.Minute*10)
  1586. }
  1587. // 获取需要刷新的指标列表
  1588. newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr := getEdbInfoIdList(edbIdList)
  1589. // 需要刷新的指标数量
  1590. totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
  1591. // 关联指标过多的时候, 异步刷新
  1592. if totalEdbInfo > 20 {
  1593. syncing = true
  1594. go func() {
  1595. defer func() {
  1596. if err != nil {
  1597. alarm_msg.SendAlarmMsg("BatchRefreshEdbByEdbIds, ErrMsg: "+err.Error(), 3)
  1598. }
  1599. }()
  1600. err = edbInfoRefreshAll(false, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  1601. if redisKey != `` {
  1602. _ = utils.Rc.Delete(redisKey)
  1603. }
  1604. if len(refreshKeys) > 0 {
  1605. for _, v := range refreshKeys {
  1606. _ = utils.Rc.Delete(v)
  1607. }
  1608. }
  1609. }()
  1610. return
  1611. }
  1612. // 同步刷新
  1613. err = edbInfoRefreshAll(false, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
  1614. if redisKey != `` {
  1615. _ = utils.Rc.Delete(redisKey)
  1616. }
  1617. if len(refreshKeys) > 0 {
  1618. for _, v := range refreshKeys {
  1619. _ = utils.Rc.Delete(v)
  1620. }
  1621. }
  1622. return
  1623. }
  1624. // EdbInfoSmmApiAdd 添加指标到指标库
  1625. func EdbInfoSmmApiAdd(item *data_manage.EdbInfo) (edbInfo *data_manage.EdbInfo, err error, errMsg string, isSendEmail bool) {
  1626. isSendEmail = true
  1627. //判断指标名称是否存在
  1628. var condition string
  1629. var pars []interface{}
  1630. condition += " AND edb_name=? "
  1631. pars = append(pars, item.EdbName)
  1632. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1633. if err != nil {
  1634. errMsg = "判断指标名称是否存在失败"
  1635. err = errors.New("判断指标名称是否存在失败,Err:" + err.Error())
  1636. return
  1637. }
  1638. if count > 0 {
  1639. errMsg = "指标名称已存在,请重新填写"
  1640. err = errors.New(errMsg)
  1641. isSendEmail = false
  1642. return
  1643. }
  1644. source := item.Source
  1645. edbInfo = new(data_manage.EdbInfo)
  1646. edbInfo.Source = source
  1647. sourceNameMap := map[int]string{
  1648. utils.DATA_SOURCE_THS: "同花顺",
  1649. utils.DATA_SOURCE_WIND: "wind",
  1650. utils.DATA_SOURCE_PB: "彭博",
  1651. utils.DATA_SOURCE_PB_FINANCE: "彭博财务",
  1652. utils.DATA_SOURCE_MANUAL: "手工数据",
  1653. utils.DATA_SOURCE_LZ: "隆众",
  1654. utils.DATA_SOURCE_YS: "SMM",
  1655. utils.DATA_SOURCE_GL: "钢联",
  1656. utils.DATA_SOURCE_ZZ: "郑商所",
  1657. utils.DATA_SOURCE_DL: "大商所",
  1658. utils.DATA_SOURCE_SH: "上期所",
  1659. utils.DATA_SOURCE_CFFEX: "中金所",
  1660. utils.DATA_SOURCE_SHFE: "上期能源",
  1661. utils.DATA_SOURCE_GIE: "欧洲天然气",
  1662. utils.DATA_SOURCE_LT: "路透",
  1663. utils.DATA_SOURCE_COAL: "中国煤炭市场网",
  1664. utils.DATA_SOURCE_GOOGLE_TRAVEL: "our world in data",
  1665. utils.DATA_SOURCE_MYSTEEL_CHEMICAL: "钢联",
  1666. utils.DATA_SOURCE_EIA_STEO: "EIA STEO报告",
  1667. utils.DATA_SOURCE_COM_TRADE: "UN",
  1668. utils.DATA_SOURCE_SCI: "SCI",
  1669. utils.DATA_SOURCE_BAIINFO: "BAIINFO",
  1670. utils.DATA_SOURCE_STOCK_PLANT: "存量装置",
  1671. utils.DATA_SOURCE_NATIONAL_STATISTICS: "国家统计局",
  1672. utils.DATA_SOURCE_FUBAO: "富宝数据",
  1673. }
  1674. sourceName, ok := sourceNameMap[source]
  1675. if !ok {
  1676. edbSource := data_manage.EdbSourceIdMap[source]
  1677. if edbSource != nil {
  1678. sourceName = edbSource.SourceName
  1679. }
  1680. if sourceName == "" {
  1681. errMsg = "指标来源异常"
  1682. err = errors.New(errMsg)
  1683. return
  1684. }
  1685. }
  1686. edbInfo.SourceName = sourceName
  1687. edbType := 1 //基础指标
  1688. if source == utils.DATA_SOURCE_STOCK_PLANT {
  1689. edbType = 2 //计算指标
  1690. }
  1691. //从缓存中获取
  1692. serverUrl := ``
  1693. if edbInfo.Source == utils.DATA_SOURCE_WIND {
  1694. windCacheKey := utils.CACHE_WIND_URL + ":" + item.EdbCode
  1695. serverUrl, _ = utils.Rc.RedisString(windCacheKey)
  1696. if serverUrl == `` {
  1697. if len(utils.Hz_Data_WIND_Url_List) >= 1 {
  1698. serverUrl = utils.Hz_Data_WIND_Url_List[len(utils.Hz_Data_WIND_Url_List)-1] //默认是最后一个服务器地址
  1699. }
  1700. }
  1701. }
  1702. //获取该层级下最大的排序数
  1703. maxSort, err := GetEdbClassifyMaxSort(item.ClassifyId, 0)
  1704. if err != nil {
  1705. errMsg = "获取失败"
  1706. err = errors.New("查询排序信息失败,Err:" + err.Error())
  1707. return
  1708. }
  1709. edbInfo.EdbCode = item.EdbCode
  1710. edbInfo.EdbName = item.EdbName
  1711. edbInfo.EdbNameSource = item.EdbName
  1712. edbInfo.Frequency = item.Frequency
  1713. edbInfo.Unit = item.Unit
  1714. edbInfo.ClassifyId = item.ClassifyId
  1715. edbInfo.SysUserId = item.SysUserId
  1716. edbInfo.SysUserRealName = item.SysUserRealName
  1717. edbInfo.CreateTime = time.Now()
  1718. edbInfo.ModifyTime = time.Now()
  1719. edbInfo.ServerUrl = serverUrl
  1720. edbInfo.Sort = maxSort + 1
  1721. edbInfo.DataDateType = `交易日`
  1722. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  1723. edbInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  1724. edbInfo.EdbType = edbType
  1725. edbInfo.SubSource = item.SubSource
  1726. edbInfo.SubSourceName = ""
  1727. edbInfo.IndicatorCode = item.IndicatorCode
  1728. edbInfo.StockCode = item.StockCode
  1729. edbInfoId, err := data_manage.AddEdbInfo(edbInfo)
  1730. if err != nil {
  1731. errMsg = "保存失败"
  1732. err = errors.New("保存失败,Err:" + err.Error())
  1733. return
  1734. }
  1735. edbInfo.EdbInfoId = int(edbInfoId)
  1736. //保存数据
  1737. err = data_manage.ModifyEdbInfoWindWsdDataStatus(source, item.SubSource, edbInfoId, item.EdbCode)
  1738. if err != nil {
  1739. errMsg = "保存失败"
  1740. err = errors.New("修改数据对应指标ID失败,Err:" + err.Error())
  1741. return
  1742. }
  1743. maxAndMinItem, _ := data_manage.GetEdbInfoWsdMaxAndMinInfo(source, item.SubSource, item.EdbCode)
  1744. if maxAndMinItem != nil {
  1745. err = data_manage.ModifyEdbInfoMaxAndMinInfo(int(edbInfoId), maxAndMinItem)
  1746. }
  1747. //添加es
  1748. AddOrEditEdbInfoToEs(int(edbInfoId))
  1749. return
  1750. }