edb_relation.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. package services
  2. import (
  3. "encoding/json"
  4. "eta/eta_task/models/data_manage"
  5. "eta/eta_task/models/data_manage/cross_variety"
  6. "eta/eta_task/models/fe_calendar"
  7. "eta/eta_task/models/sandbox"
  8. "eta/eta_task/services/alarm_msg"
  9. "eta/eta_task/utils"
  10. "fmt"
  11. "time"
  12. )
  13. func InitEdbRelation() {
  14. //InitChartEdbRelation()
  15. //InitChartCrossVariety()
  16. //initCalendarIndicatorRelation()
  17. initSandBoxEdbRelation()
  18. }
  19. func InitChartEdbRelation() {
  20. fmt.Println("开始处理图表中的指标引用")
  21. var err error
  22. var addNum int
  23. defer func() {
  24. if err != nil {
  25. msg := fmt.Sprintf("初始化指标在图表中的引用失败 InitChartEdbRelation err: %v", err)
  26. utils.FileLog.Info(msg)
  27. fmt.Println(msg)
  28. go alarm_msg.SendAlarmMsg(msg, 3)
  29. }
  30. }()
  31. //查询chart_edb_mapping 表
  32. total, err := data_manage.GetChartEdbMappingTotal()
  33. if err != nil {
  34. err = fmt.Errorf("查询图表关联指标失败 err: %v", err)
  35. return
  36. }
  37. if total == 0 {
  38. return
  39. }
  40. //分页查询,每次处理500条记录
  41. pageSize := 500
  42. totalPage := (total + pageSize - 1) / pageSize // 使用整数除法,并添加一页以防有余数
  43. addList := make([]*data_manage.EdbInfoRelation, 0)
  44. //查询图表列表
  45. for i := 0; i < totalPage; i += 1 {
  46. startSize := i * pageSize
  47. list, e := data_manage.GetChartEdbMappingList(startSize, pageSize)
  48. if e != nil {
  49. err = fmt.Errorf("查询图表关联指标列表失败 Err:%s", e)
  50. return
  51. }
  52. if len(list) == 0 {
  53. break
  54. }
  55. edbInfoIds := make([]int, 0)
  56. for _, v := range list {
  57. edbInfoIds = append(edbInfoIds, v.EdbInfoId)
  58. }
  59. // 查询指标信息表
  60. edbInfoList, e := data_manage.GetEdbInfoByIdListAndSource(edbInfoIds, []int{utils.DATA_SOURCE_WIND, utils.DATA_SOURCE_MYSTEEL_CHEMICAL})
  61. if e != nil {
  62. err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
  63. return
  64. }
  65. if len(edbInfoList) == 0 {
  66. continue
  67. }
  68. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  69. for _, v := range edbInfoList {
  70. edbInfoMap[v.EdbInfoId] = v
  71. }
  72. // 筛选有用的图表
  73. finalList := make([]*data_manage.ChartEdbMapping, 0)
  74. chartIds := make([]int, 0)
  75. for _, v := range list {
  76. if _, ok2 := edbInfoMap[v.EdbInfoId]; !ok2 {
  77. continue
  78. }
  79. finalList = append(finalList, v)
  80. chartIds = append(chartIds, v.ChartInfoId)
  81. }
  82. if len(chartIds) == 0 {
  83. continue
  84. }
  85. // 查询图表信息
  86. chartInfoList, e := data_manage.GetChartInfoByChartInfoIds(chartIds)
  87. if e != nil {
  88. err = fmt.Errorf("查询图表信息列表失败 Err:%s", e)
  89. return
  90. }
  91. chartInfoMap := make(map[int]*data_manage.ChartInfo)
  92. for _, v := range chartInfoList {
  93. chartInfoMap[v.ChartInfoId] = v
  94. }
  95. //查询引用关系列表,
  96. chartEdbRelationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(chartIds, utils.EDB_RELATION_CHART)
  97. if e != nil {
  98. err = fmt.Errorf("查询图表引用关系列表失败 Err:%s", e)
  99. return
  100. }
  101. existRelationMap := make(map[string]struct{})
  102. for _, v := range chartEdbRelationList {
  103. name := fmt.Sprintf("%d-%d", v.ReferObjectId, v.EdbInfoId)
  104. existRelationMap[name] = struct{}{}
  105. }
  106. for _, v := range finalList {
  107. nowTime := time.Now()
  108. name := fmt.Sprintf("%d-%d", v.ChartInfoId, v.EdbInfoId)
  109. if _, ok := existRelationMap[name]; !ok {
  110. //查询图表信息
  111. chartInfo, ok1 := chartInfoMap[v.ChartInfoId]
  112. if !ok1 {
  113. continue
  114. }
  115. edbInfo, ok2 := edbInfoMap[v.EdbInfoId]
  116. if !ok2 {
  117. continue
  118. }
  119. //todo 引用时间
  120. tmp := &data_manage.EdbInfoRelation{
  121. ReferObjectId: v.ChartInfoId,
  122. ReferObjectType: utils.EDB_RELATION_CHART,
  123. ReferObjectSubType: chartInfo.Source,
  124. EdbInfoId: v.EdbInfoId,
  125. EdbName: edbInfo.EdbName,
  126. Source: edbInfo.Source,
  127. EdbCode: edbInfo.EdbCode,
  128. CreateTime: nowTime,
  129. ModifyTime: nowTime,
  130. RelationTime: v.CreateTime,
  131. }
  132. addList = append(addList, tmp)
  133. existRelationMap[name] = struct{}{}
  134. if len(addList) > pageSize {
  135. err = data_manage.AddEdbInfoRelationMulti(addList)
  136. if err != nil {
  137. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  138. return
  139. }
  140. addNum += len(addList)
  141. addList = make([]*data_manage.EdbInfoRelation, 0)
  142. }
  143. }
  144. }
  145. }
  146. //拿到500个数据ID,判断相关的引用记录,如果已存在则直接过滤,不存在则新增
  147. if len(addList) > 0 {
  148. err = data_manage.AddEdbInfoRelationMulti(addList)
  149. if err != nil {
  150. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  151. return
  152. }
  153. addNum += len(addList)
  154. }
  155. fmt.Printf("图表指标引用记录处理完成, 新增%d条记录\n", addNum)
  156. return
  157. }
  158. // InitChartCrossVariety 处理特殊图表,跨品种分析图表
  159. func InitChartCrossVariety() {
  160. fmt.Println("开始跨品种分析图表中的指标引用")
  161. var addNum int
  162. var err error
  163. defer func() {
  164. if err != nil {
  165. msg := fmt.Sprintf("初始化指标在跨品种分析图表中的引用失败 InitChartCrossVariety err: %v", err)
  166. utils.FileLog.Info(msg)
  167. fmt.Println(msg)
  168. go alarm_msg.SendAlarmMsg(msg, 3)
  169. }
  170. }()
  171. total, err := cross_variety.GetChartInfoCrossVarietyTotal()
  172. if err != nil {
  173. err = fmt.Errorf("查询图表关联指标失败 err: %v", err)
  174. return
  175. }
  176. if total == 0 {
  177. return
  178. }
  179. //分页查询,每次处理500条记录
  180. pageSize := 500
  181. totalPage := (total + pageSize - 1) / pageSize // 使用整数除法,并添加一页以防有余数
  182. addList := make([]*data_manage.EdbInfoRelation, 0)
  183. //查询图表列表
  184. for i := 0; i < totalPage; i += 1 {
  185. startSize := i * pageSize
  186. list, e := cross_variety.GetChartInfoCrossVarietyList(startSize, pageSize)
  187. if e != nil {
  188. err = fmt.Errorf("查询图表关联指标列表失败 Err:%s", e)
  189. return
  190. }
  191. if len(list) == 0 {
  192. break
  193. }
  194. chartIds := make([]int, 0)
  195. tagIds := make([]int, 0)
  196. tagIdsMap := make(map[int]struct{})
  197. tagChartMap := make(map[int][]*cross_variety.ChartInfoCrossVariety)
  198. for _, v := range list {
  199. if _, ok := tagIdsMap[v.ChartXTagId]; !ok {
  200. tagIds = append(tagIds, v.ChartXTagId)
  201. tagIdsMap[v.ChartXTagId] = struct{}{}
  202. }
  203. if _, ok := tagIdsMap[v.ChartYTagId]; !ok {
  204. tagIds = append(tagIds, v.ChartYTagId)
  205. tagIdsMap[v.ChartYTagId] = struct{}{}
  206. }
  207. if chartCross, ok := tagChartMap[v.ChartXTagId]; ok {
  208. chartCross = append(chartCross, v)
  209. tagChartMap[v.ChartXTagId] = chartCross
  210. } else {
  211. chartCross = make([]*cross_variety.ChartInfoCrossVariety, 0)
  212. chartCross = append(chartCross, v)
  213. tagChartMap[v.ChartXTagId] = chartCross
  214. }
  215. if chartCross, ok := tagChartMap[v.ChartYTagId]; ok {
  216. chartCross = append(chartCross, v)
  217. tagChartMap[v.ChartYTagId] = chartCross
  218. } else {
  219. chartCross = make([]*cross_variety.ChartInfoCrossVariety, 0)
  220. chartCross = append(chartCross, v)
  221. tagChartMap[v.ChartYTagId] = chartCross
  222. }
  223. }
  224. chartTagVarietyList, e := cross_variety.GetChartTagVarietyEdbInfoIdsByTagIds(tagIds)
  225. if e != nil {
  226. err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
  227. return
  228. }
  229. edbInfoIds := make([]int, 0)
  230. chartTagVarietyMap := make(map[int][]*cross_variety.ChartTagVariety)
  231. for _, v := range chartTagVarietyList {
  232. if tagList, ok := chartTagVarietyMap[v.EdbInfoId]; ok {
  233. tagList = append(tagList, v)
  234. chartTagVarietyMap[v.EdbInfoId] = tagList
  235. } else {
  236. tagList = make([]*cross_variety.ChartTagVariety, 0)
  237. tagList = append(tagList, v)
  238. chartTagVarietyMap[v.EdbInfoId] = tagList
  239. }
  240. edbInfoIds = append(edbInfoIds, v.EdbInfoId)
  241. }
  242. // 查询指标信息表
  243. edbInfoList, e := data_manage.GetEdbInfoByIdListAndSource(edbInfoIds, []int{utils.DATA_SOURCE_WIND, utils.DATA_SOURCE_MYSTEEL_CHEMICAL})
  244. if e != nil {
  245. err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
  246. return
  247. }
  248. if len(edbInfoList) == 0 {
  249. continue
  250. }
  251. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  252. chartInfoCrossMap := make(map[int]struct{})
  253. chartInfoCrossList := make([]*cross_variety.ChartInfoCrossVariety, 0)
  254. edbCrossMap := make(map[int][]*cross_variety.ChartInfoCrossVariety)
  255. for _, v := range edbInfoList {
  256. edbInfoMap[v.EdbInfoId] = v
  257. if tagList, ok := chartTagVarietyMap[v.EdbInfoId]; ok {
  258. for _, tag := range tagList {
  259. if chartCross, ok2 := tagChartMap[tag.ChartTagId]; ok2 {
  260. for _, crossItem := range chartCross {
  261. if _, ok3 := chartInfoCrossMap[crossItem.ChartInfoId]; !ok3 {
  262. chartInfoCrossMap[crossItem.ChartInfoId] = struct{}{}
  263. chartInfoCrossList = append(chartInfoCrossList, crossItem)
  264. chartIds = append(chartIds, crossItem.ChartInfoId)
  265. }
  266. }
  267. }
  268. }
  269. }
  270. edbCrossMap[v.EdbInfoId] = chartInfoCrossList
  271. chartInfoCrossMap = make(map[int]struct{})
  272. chartInfoCrossList = make([]*cross_variety.ChartInfoCrossVariety, 0)
  273. }
  274. /*// 查询图表信息
  275. chartInfoList, e := data_manage.GetChartInfoByChartInfoIds(chartIds)
  276. if e != nil {
  277. err = fmt.Errorf("查询图表信息列表失败 Err:%s", e)
  278. return
  279. }
  280. chartInfoMap := make(map[int]*data_manage.ChartInfo)
  281. for _, v := range chartInfoList {
  282. chartInfoMap[v.ChartInfoId] = v
  283. }
  284. */
  285. //查询引用关系列表,
  286. chartEdbRelationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(chartIds, utils.EDB_RELATION_CHART)
  287. if e != nil {
  288. err = fmt.Errorf("查询图表引用关系列表失败 Err:%s", e)
  289. return
  290. }
  291. existRelationMap := make(map[string]struct{})
  292. for _, v := range chartEdbRelationList {
  293. name := fmt.Sprintf("%d-%d", v.ReferObjectId, v.EdbInfoId)
  294. existRelationMap[name] = struct{}{}
  295. }
  296. for edbInfoId, chartCrossList := range edbCrossMap {
  297. nowTime := time.Now()
  298. for _, item := range chartCrossList {
  299. name := fmt.Sprintf("%d-%d", item.ChartInfoId, edbInfoId)
  300. if _, ok1 := existRelationMap[name]; !ok1 {
  301. edbInfo, ok2 := edbInfoMap[edbInfoId]
  302. if !ok2 {
  303. continue
  304. }
  305. //todo 引用时间
  306. tmp := &data_manage.EdbInfoRelation{
  307. ReferObjectId: item.ChartInfoId,
  308. ReferObjectType: utils.EDB_RELATION_CHART,
  309. ReferObjectSubType: utils.CHART_SOURCE_CROSS_HEDGING,
  310. EdbInfoId: edbInfoId,
  311. EdbName: edbInfo.EdbName,
  312. Source: edbInfo.Source,
  313. EdbCode: edbInfo.EdbCode,
  314. CreateTime: nowTime,
  315. ModifyTime: nowTime,
  316. RelationTime: item.CreateTime,
  317. }
  318. addList = append(addList, tmp)
  319. existRelationMap[name] = struct{}{}
  320. if len(addList) > pageSize {
  321. err = data_manage.AddEdbInfoRelationMulti(addList)
  322. if err != nil {
  323. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  324. return
  325. }
  326. addNum += len(addList)
  327. addList = make([]*data_manage.EdbInfoRelation, 0)
  328. }
  329. }
  330. }
  331. }
  332. }
  333. //拿到500个数据ID,判断相关的引用记录,如果已存在则直接过滤,不存在则新增
  334. if len(addList) > 0 {
  335. err = data_manage.AddEdbInfoRelationMulti(addList)
  336. if err != nil {
  337. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  338. return
  339. }
  340. addNum += len(addList)
  341. }
  342. fmt.Printf("跨品种分析图表指标引用记录处理完成, 新增%d条记录\n", addNum)
  343. return
  344. }
  345. // 初始化事件日历中的指标引用
  346. func initCalendarIndicatorRelation() {
  347. fmt.Println("开始处理事件日历中的指标引用")
  348. var addNum int
  349. var err error
  350. defer func() {
  351. if err != nil {
  352. msg := fmt.Sprintf("初始化指标在事件日历中的引用失败 initCalendarIndicatorRelation err: %v", err)
  353. utils.FileLog.Info(msg)
  354. fmt.Println(msg)
  355. go alarm_msg.SendAlarmMsg(msg, 3)
  356. }
  357. }()
  358. //查询chart_edb_mapping 表
  359. obj := new(fe_calendar.FeCalendarMatter)
  360. condition := " AND edb_info_id > 0"
  361. total, err := obj.GetCountByCondition(condition, []interface{}{})
  362. if err != nil {
  363. err = fmt.Errorf("查询事件日历关联指标失败 err: %v", err)
  364. return
  365. }
  366. if total == 0 {
  367. return
  368. }
  369. //分页查询,每次处理500条记录
  370. pageSize := 500
  371. totalPage := (total + pageSize - 1) / pageSize // 使用整数除法,并添加一页以防有余数
  372. addList := make([]*data_manage.EdbInfoRelation, 0)
  373. //查询图表列表
  374. for i := 0; i < totalPage; i += 1 {
  375. startSize := i * pageSize
  376. list, e := obj.GetPageItemsByCondition(condition, []interface{}{}, []string{}, "", startSize, pageSize)
  377. if e != nil {
  378. err = fmt.Errorf("查询事件日历关联指标列表失败 Err:%s", e)
  379. return
  380. }
  381. if len(list) == 0 {
  382. break
  383. }
  384. edbInfoIds := make([]int, 0)
  385. edbInfoMatterMap := make(map[int][]*fe_calendar.FeCalendarMatter)
  386. for _, v := range list {
  387. edbInfoIds = append(edbInfoIds, v.EdbInfoId)
  388. items, ok := edbInfoMatterMap[v.EdbInfoId]
  389. if ok {
  390. items = append(items, v)
  391. edbInfoMatterMap[v.EdbInfoId] = items
  392. } else {
  393. items = make([]*fe_calendar.FeCalendarMatter, 0)
  394. items = append(items, v)
  395. edbInfoMatterMap[v.EdbInfoId] = items
  396. }
  397. }
  398. // 查询指标信息表
  399. edbInfoList, e := data_manage.GetEdbInfoByIdListAndSource(edbInfoIds, []int{utils.DATA_SOURCE_WIND, utils.DATA_SOURCE_MYSTEEL_CHEMICAL})
  400. if e != nil {
  401. err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
  402. return
  403. }
  404. if len(edbInfoList) == 0 {
  405. continue
  406. }
  407. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  408. matterIds := make([]int, 0)
  409. for _, v := range edbInfoList {
  410. edbInfoMap[v.EdbInfoId] = v
  411. items, ok := edbInfoMatterMap[v.EdbInfoId]
  412. if ok {
  413. for _, item := range items {
  414. matterIds = append(matterIds, item.FeCalendarMatterId)
  415. }
  416. }
  417. }
  418. //查询引用关系列表,
  419. chartEdbRelationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(matterIds, utils.EDB_RELATION_CALENDAR)
  420. if e != nil {
  421. err = fmt.Errorf("查询图表引用关系列表失败 Err:%s", e)
  422. return
  423. }
  424. existRelationMap := make(map[string]struct{})
  425. for _, v := range chartEdbRelationList {
  426. name := fmt.Sprintf("%d-%d", v.ReferObjectId, v.EdbInfoId)
  427. existRelationMap[name] = struct{}{}
  428. }
  429. for edbInfoId, edbInfo := range edbInfoMap {
  430. nowTime := time.Now()
  431. items, ok := edbInfoMatterMap[edbInfoId]
  432. if ok {
  433. for _, v := range items {
  434. name := fmt.Sprintf("%d-%d", v.FeCalendarMatterId, v.EdbInfoId)
  435. if _, ok1 := existRelationMap[name]; !ok1 {
  436. //todo 引用时间
  437. tmp := &data_manage.EdbInfoRelation{
  438. ReferObjectId: v.FeCalendarMatterId,
  439. ReferObjectType: utils.EDB_RELATION_CALENDAR,
  440. EdbInfoId: v.EdbInfoId,
  441. EdbName: edbInfo.EdbName,
  442. Source: edbInfo.Source,
  443. EdbCode: edbInfo.EdbCode,
  444. CreateTime: nowTime,
  445. ModifyTime: nowTime,
  446. RelationTime: v.CreateTime,
  447. }
  448. addList = append(addList, tmp)
  449. existRelationMap[name] = struct{}{}
  450. if len(addList) > pageSize {
  451. err = data_manage.AddEdbInfoRelationMulti(addList)
  452. if err != nil {
  453. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  454. return
  455. }
  456. addNum += len(addList)
  457. addList = make([]*data_manage.EdbInfoRelation, 0)
  458. }
  459. }
  460. }
  461. }
  462. }
  463. }
  464. //拿到500个数据ID,判断相关的引用记录,如果已存在则直接过滤,不存在则新增
  465. if len(addList) > 0 {
  466. err = data_manage.AddEdbInfoRelationMulti(addList)
  467. if err != nil {
  468. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  469. return
  470. }
  471. addNum += len(addList)
  472. }
  473. fmt.Printf("事件日历指标引用记录处理完成, 新增%d条记录\n", addNum)
  474. return
  475. }
  476. // 处理逻辑图中的指标引用
  477. func initSandBoxEdbRelation() {
  478. fmt.Println("开始处理逻辑图中的指标引用")
  479. var err error
  480. var addNum int
  481. defer func() {
  482. if err != nil {
  483. msg := fmt.Sprintf("初始化指标在逻辑图中的引用失败 initSandBoxEdbRelation err: %v", err)
  484. utils.FileLog.Info(msg)
  485. fmt.Println(msg)
  486. go alarm_msg.SendAlarmMsg(msg, 3)
  487. }
  488. }()
  489. condition := " AND is_delete = 0"
  490. total, err := sandbox.GetSandboxListCountByCondition(condition, []interface{}{})
  491. if err != nil {
  492. err = fmt.Errorf("查询逻辑图总数失败 err: %v", err)
  493. return
  494. }
  495. if total == 0 {
  496. return
  497. }
  498. //分页查询,每次处理500条记录
  499. pageSize := 100
  500. totalPage := (total + pageSize - 1) / pageSize // 使用整数除法,并添加一页以防有余数
  501. addList := make([]*data_manage.EdbInfoRelation, 0)
  502. //查询图表列表
  503. for i := 0; i < totalPage; i += 1 {
  504. startSize := i * pageSize
  505. list, e := sandbox.GetSandboxListByCondition(condition, []interface{}{}, startSize, pageSize)
  506. if e != nil {
  507. err = fmt.Errorf("查询逻辑图列表失败 Err:%s", e)
  508. return
  509. }
  510. if len(list) == 0 {
  511. break
  512. }
  513. edbInfoIds := make([]int, 0)
  514. edbSandboxMap := make(map[int][]*sandbox.Sandbox)
  515. for _, v := range list {
  516. if v.Content == "" {
  517. continue
  518. }
  519. edbInfoIdsTmp, e := getSandBoxEdbIdsByContent(v.Content)
  520. if e != nil {
  521. continue
  522. //err = fmt.Errorf("查询逻辑图关联的指标Id失败 Err:%s", e)
  523. //return
  524. }
  525. for _, edbId := range edbInfoIdsTmp {
  526. edbInfoIds = append(edbInfoIds, edbId)
  527. edbSandboxMap[edbId] = append(edbSandboxMap[edbId], v)
  528. }
  529. }
  530. if len(edbInfoIds) <= 0 {
  531. continue
  532. }
  533. // 查询指标信息表
  534. edbInfoList, e := data_manage.GetEdbInfoByIdListAndSource(edbInfoIds, []int{utils.DATA_SOURCE_WIND, utils.DATA_SOURCE_MYSTEEL_CHEMICAL})
  535. if e != nil {
  536. err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
  537. return
  538. }
  539. if len(edbInfoList) == 0 {
  540. continue
  541. }
  542. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  543. sandboxIds := make([]int, 0)
  544. for _, v := range edbInfoList {
  545. edbInfoMap[v.EdbInfoId] = v
  546. if items, ok := edbSandboxMap[v.EdbInfoId]; ok {
  547. for _, item := range items {
  548. sandboxIds = append(sandboxIds, item.SandboxId)
  549. }
  550. }
  551. }
  552. //查询引用关系列表,
  553. chartEdbRelationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(sandboxIds, utils.EDB_RELATION_SANDBOX)
  554. if e != nil {
  555. err = fmt.Errorf("查询逻辑图引用关系列表失败 Err:%s", e)
  556. return
  557. }
  558. existRelationMap := make(map[string]struct{})
  559. for _, v := range chartEdbRelationList {
  560. name := fmt.Sprintf("%d-%d", v.ReferObjectId, v.EdbInfoId)
  561. existRelationMap[name] = struct{}{}
  562. }
  563. for edbInfoId, sandboxList := range edbSandboxMap {
  564. nowTime := time.Now()
  565. for _, v := range sandboxList {
  566. name := fmt.Sprintf("%d-%d", v.SandboxId, edbInfoId)
  567. if _, ok := existRelationMap[name]; !ok {
  568. edbInfo, ok2 := edbInfoMap[edbInfoId]
  569. if !ok2 {
  570. continue
  571. }
  572. //todo 引用时间
  573. tmp := &data_manage.EdbInfoRelation{
  574. ReferObjectId: v.SandboxId,
  575. ReferObjectType: utils.EDB_RELATION_SANDBOX,
  576. EdbInfoId: edbInfoId,
  577. EdbName: edbInfo.EdbName,
  578. Source: edbInfo.Source,
  579. EdbCode: edbInfo.EdbCode,
  580. CreateTime: nowTime,
  581. ModifyTime: nowTime,
  582. RelationTime: v.CreateTime,
  583. }
  584. addList = append(addList, tmp)
  585. existRelationMap[name] = struct{}{}
  586. if len(addList) > pageSize {
  587. err = data_manage.AddEdbInfoRelationMulti(addList)
  588. if err != nil {
  589. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  590. return
  591. }
  592. addNum += len(addList)
  593. addList = make([]*data_manage.EdbInfoRelation, 0)
  594. }
  595. }
  596. }
  597. }
  598. }
  599. //拿到500个数据ID,判断相关的引用记录,如果已存在则直接过滤,不存在则新增
  600. if len(addList) > 0 {
  601. err = data_manage.AddEdbInfoRelationMulti(addList)
  602. if err != nil {
  603. err = fmt.Errorf("新增引用记录失败 Err:%s", err)
  604. return
  605. }
  606. addNum += len(addList)
  607. }
  608. fmt.Printf("逻辑图指标引用记录处理完成, 新增%d条记录\n", addNum)
  609. return
  610. }
  611. func getSandBoxEdbIdsByContent(content string) (edbInfoIds []int, err error) {
  612. var contentInfo sandbox.ContentDataStruct
  613. err = json.Unmarshal([]byte(content), &contentInfo)
  614. if err != nil {
  615. err = fmt.Errorf("json.Unmarshal err:%s", err.Error())
  616. return
  617. }
  618. // 遍历所有节点
  619. for _, node := range contentInfo.Cells {
  620. if node.Data == nil {
  621. continue
  622. }
  623. for _, v := range node.Data.LinkData {
  624. if v.Type == 1 {
  625. edbInfoIds = append(edbInfoIds, v.Id)
  626. }
  627. }
  628. }
  629. return
  630. }