edb_info_relation.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package data
  2. import (
  3. "eta/eta_api/models/data_manage"
  4. "eta/eta_api/models/fe_calendar"
  5. "eta/eta_api/services/alarm_msg"
  6. "eta/eta_api/services/sandbox"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "time"
  10. )
  11. // SaveChartEdbInfoRelation 添加/编辑图表指标引用关联记录
  12. func SaveChartEdbInfoRelation(edbInfoIds []int, chartInfo *data_manage.ChartInfo) (err error) {
  13. //更新指标刷新状态为启用
  14. err = saveEdbInfoRelation(edbInfoIds, chartInfo.ChartInfoId, utils.EDB_RELATION_CHART, chartInfo.Source)
  15. return
  16. }
  17. // saveEdbInfoRelation 添加/编辑图表指标引用关联记录
  18. func saveEdbInfoRelation(edbInfoIds []int, objectId, objectType, objectSubType int) (err error) {
  19. // 实现添加引用记录的逻辑
  20. if len(edbInfoIds) == 0 {
  21. return
  22. }
  23. defer func() {
  24. if err != nil {
  25. tips := "实现添加引用记录的逻辑-添加/编辑图表指标引用关联记录失败, ErrMsg:\n" + err.Error()
  26. utils.FileLog.Info(tips)
  27. go alarm_msg.SendAlarmMsg(tips, 3)
  28. }
  29. }()
  30. refreshIds := make([]int, 0)
  31. indexCodeList := make([]string, 0)
  32. // 查询指标信息
  33. edbInfoList, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
  34. if e != nil {
  35. err = fmt.Errorf("查询指标信息失败,%s", e.Error())
  36. return
  37. }
  38. // 只统计钢联化工和wind来源的指标
  39. for _, edbInfo := range edbInfoList {
  40. if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  41. continue
  42. }
  43. refreshIds = append(refreshIds, edbInfo.EdbInfoId)
  44. if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  45. indexCodeList = append(indexCodeList, edbInfo.EdbCode)
  46. }
  47. }
  48. // 循转组装引用
  49. // 查询已有的引用关系
  50. existList, e := data_manage.GetEdbInfoRelationByReferObjectId(objectId, objectType)
  51. if e != nil {
  52. err = fmt.Errorf("查询已有的引用关系失败,%s", e.Error())
  53. return
  54. }
  55. deleteMap := make(map[int]bool)
  56. relationMap := make(map[int]bool)
  57. for _, exist := range existList {
  58. deleteMap[exist.EdbInfoId] = true
  59. relationMap[exist.EdbInfoId] = true
  60. }
  61. // 新增不存在的引用关系
  62. // 删除不再需要的引用关系
  63. nowTime := time.Now()
  64. addList := make([]*data_manage.EdbInfoRelation, 0)
  65. deleteRelationIds := make([]int, 0)
  66. for _, edbInfo := range edbInfoList {
  67. if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  68. continue
  69. }
  70. if _, ok := relationMap[edbInfo.EdbInfoId]; ok {
  71. delete(deleteMap, edbInfo.EdbInfoId)
  72. } else {
  73. tmp := &data_manage.EdbInfoRelation{
  74. ReferObjectId: objectId,
  75. ReferObjectType: objectType,
  76. ReferObjectSubType: objectSubType,
  77. EdbInfoId: edbInfo.EdbInfoId,
  78. EdbName: edbInfo.EdbName,
  79. Source: edbInfo.Source,
  80. EdbCode: edbInfo.EdbCode,
  81. CreateTime: nowTime,
  82. ModifyTime: nowTime,
  83. }
  84. addList = append(addList, tmp)
  85. }
  86. }
  87. // 删除不再需要的引用关系
  88. for deleteId, _ := range deleteMap {
  89. deleteRelationIds = append(deleteRelationIds, deleteId)
  90. }
  91. //更新指标刷新状态为启用
  92. err = data_manage.AddOrUpdateEdbInfoRelation(addList, deleteRelationIds, refreshIds, indexCodeList)
  93. if err != nil {
  94. err = fmt.Errorf("删除不再需要的引用关系失败,%s", err.Error())
  95. return
  96. }
  97. return
  98. }
  99. // SaveSandBoxEdbInfoRelation 添加/编辑 eta逻辑图指标引用
  100. func SaveSandBoxEdbInfoRelation(sandBoxId int, sandBoxContent string) (err error) {
  101. edbInfoIds, err := sandbox.GetSandBoxEdbIdsByContent(sandBoxContent)
  102. if err != nil {
  103. return
  104. }
  105. if len(edbInfoIds) == 0 {
  106. return
  107. }
  108. //更新指标刷新状态为启用
  109. err = saveEdbInfoRelation(edbInfoIds, sandBoxId, utils.EDB_RELATION_SANDBOX, 0)
  110. return
  111. }
  112. // SaveCalendarEdbInfoRelation 添加/编辑 事件日历指标引用
  113. func SaveCalendarEdbInfoRelation(chartPermissionId int, matterDate string, editMatters, removeMatters []*fe_calendar.FeCalendarMatter) (err error) {
  114. //整理相关的事件ID
  115. matterIds := make([]int, 0)
  116. updateMatterMap := make(map[int]*fe_calendar.FeCalendarMatter)
  117. deleteMatterMap := make(map[int]struct{})
  118. for _, matter := range removeMatters {
  119. deleteMatterMap[matter.FeCalendarMatterId] = struct{}{}
  120. matterIds = append(matterIds, matter.FeCalendarMatterId)
  121. }
  122. for _, matter := range editMatters {
  123. updateMatterMap[matter.FeCalendarMatterId] = matter
  124. matterIds = append(matterIds, matter.FeCalendarMatterId)
  125. }
  126. //删除ID,先删除
  127. deleteRelationIds := make([]int, 0)
  128. if len(matterIds) > 0 {
  129. relationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(matterIds, utils.EDB_RELATION_CALENDAR)
  130. if e != nil {
  131. err = fmt.Errorf("查询事件日历指标引用失败,%s", e.Error())
  132. return
  133. }
  134. for _, relation := range relationList {
  135. if _, ok := deleteMatterMap[relation.ReferObjectId]; ok {
  136. deleteRelationIds = append(deleteRelationIds, relation.EdbInfoRelationId)
  137. }
  138. if newMatter, ok := updateMatterMap[relation.ReferObjectId]; ok {
  139. if relation.EdbInfoId != newMatter.EdbInfoId {
  140. deleteRelationIds = append(deleteRelationIds, relation.EdbInfoRelationId)
  141. }
  142. }
  143. }
  144. }
  145. if len(deleteRelationIds) > 0 {
  146. err = data_manage.DeleteEdbRelationByObjectIds(deleteRelationIds, utils.EDB_RELATION_CALENDAR)
  147. if err != nil {
  148. err = fmt.Errorf("删除事件日历指标引用失败,%s", err.Error())
  149. return
  150. }
  151. deleteRelationIds = make([]int, 0)
  152. }
  153. // 获取已有事项
  154. matterOb := new(fe_calendar.FeCalendarMatter)
  155. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, fe_calendar.FeCalendarMatterCols.ChartPermissionId, fe_calendar.FeCalendarMatterCols.MatterDate)
  156. pars := make([]interface{}, 0)
  157. pars = append(pars, chartPermissionId, matterDate)
  158. order := fmt.Sprintf(`%s ASC`, fe_calendar.FeCalendarMatterCols.Sort)
  159. matters, e := matterOb.GetItemsByCondition(cond, pars, []string{}, order)
  160. if e != nil {
  161. err = fmt.Errorf("查询事件日历事项失败,%s", e.Error())
  162. return
  163. }
  164. // 循环查询matters
  165. edbInfoIds := make([]int, 0)
  166. refreshIds := make([]int, 0)
  167. indexCodeList := make([]string, 0)
  168. newMatterIds := make([]int, 0)
  169. for _, matter := range matters {
  170. newMatterIds = append(newMatterIds, matter.FeCalendarMatterId)
  171. edbInfoIds = append(edbInfoIds, matter.EdbInfoId)
  172. }
  173. // 查询指标信息
  174. edbInfoList, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
  175. if e != nil {
  176. err = fmt.Errorf("查询指标信息失败,%s", e.Error())
  177. return
  178. }
  179. // 只统计钢联化工和wind来源的指标
  180. addEdbInfoIdMap := make(map[int]*data_manage.EdbInfo)
  181. for _, edbInfo := range edbInfoList {
  182. if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  183. continue
  184. }
  185. refreshIds = append(refreshIds, edbInfo.EdbInfoId)
  186. addEdbInfoIdMap[edbInfo.EdbInfoId] = edbInfo
  187. if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  188. indexCodeList = append(indexCodeList, edbInfo.EdbCode)
  189. }
  190. }
  191. relationMap := make(map[int]struct{})
  192. if len(newMatterIds) > 0 {
  193. //查询已有的matters
  194. relationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(newMatterIds, utils.EDB_RELATION_CALENDAR)
  195. if e != nil {
  196. err = fmt.Errorf("查询事件日历指标引用失败,%s", e.Error())
  197. return
  198. }
  199. for _, relation := range relationList {
  200. relationMap[relation.ReferObjectId] = struct{}{}
  201. }
  202. }
  203. addList := make([]*data_manage.EdbInfoRelation, 0)
  204. nowTime := time.Now()
  205. for _, matter := range matters {
  206. _, ok1 := relationMap[matter.FeCalendarMatterId]
  207. edbInfo, ok2 := addEdbInfoIdMap[matter.EdbInfoId]
  208. if !ok1 && ok2 {
  209. tmp := &data_manage.EdbInfoRelation{
  210. ReferObjectId: matter.FeCalendarMatterId,
  211. ReferObjectType: utils.EDB_RELATION_CALENDAR,
  212. ReferObjectSubType: 0,
  213. EdbInfoId: edbInfo.EdbInfoId,
  214. EdbName: edbInfo.EdbName,
  215. Source: edbInfo.Source,
  216. EdbCode: edbInfo.EdbCode,
  217. CreateTime: nowTime,
  218. ModifyTime: nowTime,
  219. }
  220. addList = append(addList, tmp)
  221. }
  222. }
  223. //更新指标刷新状态为启用
  224. err = data_manage.AddOrUpdateEdbInfoRelation(addList, deleteRelationIds, refreshIds, indexCodeList)
  225. if err != nil {
  226. err = fmt.Errorf("删除不再需要的引用关系失败,%s", err.Error())
  227. return
  228. }
  229. return
  230. }