Browse Source

事件日历添加指标引用

xyxie 10 months ago
parent
commit
1c6f3739b4

+ 2 - 0
controllers/fe_calendar/fe_calendar_matter.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
 	"eta/eta_api/models/fe_calendar"
+	"eta/eta_api/services/data"
 	"eta/eta_api/utils"
 	"fmt"
 	"strings"
@@ -323,6 +324,7 @@ func (this *FeCalendarMatterController) Save() {
 		return
 	}
 
+	_ = data.SaveCalendarEdbInfoRelation(req.ChartPermissionId, req.MatterDate, editMatters, removeMatters)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 16 - 1
models/data_manage/edb_info_relation.go

@@ -39,9 +39,16 @@ func GetEdbInfoRelationByReferObjectId(referObjectId int, referObjectType int) (
 	return
 }
 
+// GetEdbInfoRelationByReferObjectIds 查询引用的指标ID
+func GetEdbInfoRelationByReferObjectIds(referObjectIds []int, referObjectType int) (items []*EdbInfoRelation, err error) {
+	o := orm.NewOrmUsingDB("data")
+	msql := ` SELECT * FROM edb_info_relation WHERE refer_object_id in (` + utils.GetOrmInReplace(len(referObjectIds)) + `) AND refer_object_type=?`
+	_, err = o.Raw(msql, referObjectIds, referObjectType).QueryRows(&items)
+	return
+}
+
 // 新增记录
 func AddOrUpdateEdbInfoRelation(relationList []*EdbInfoRelation, deleteIds []int, refreshEdbInfoIds []int, indexCodeList []string) (err error) {
-
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
 		return
@@ -90,3 +97,11 @@ func AddOrUpdateEdbInfoRelation(relationList []*EdbInfoRelation, deleteIds []int
 	// todo 由此被禁用的计算指标是否能恢复刷新
 	return
 }
+
+// 删除指标引用内容
+func DeleteEdbRelationByObjectIds(referObjectIds []int, referObjectType int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM edb_info_relation WHERE refer_object_id in (` + utils.GetOrmInReplace(len(referObjectIds)) + `) AND refer_object_type=?`
+	_, err = o.Raw(sql, referObjectIds, referObjectType).Exec()
+	return
+}

+ 126 - 0
services/data/edb_info_relation.go

@@ -2,6 +2,7 @@ package data
 
 import (
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/fe_calendar"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/sandbox"
 	"eta/eta_api/utils"
@@ -113,3 +114,128 @@ func SaveSandBoxEdbInfoRelation(sandBoxId int, sandBoxContent string) (err error
 	err = saveEdbInfoRelation(edbInfoIds, sandBoxId, utils.EDB_RELATION_SANDBOX, 0)
 	return
 }
+
+// SaveCalendarEdbInfoRelation 添加/编辑 事件日历指标引用
+func SaveCalendarEdbInfoRelation(chartPermissionId int, matterDate string, editMatters, removeMatters []*fe_calendar.FeCalendarMatter) (err error) {
+
+	//整理相关的事件ID
+	matterIds := make([]int, 0)
+	updateMatterMap := make(map[int]*fe_calendar.FeCalendarMatter)
+	deleteMatterMap := make(map[int]struct{})
+	for _, matter := range removeMatters {
+		deleteMatterMap[matter.FeCalendarMatterId] = struct{}{}
+		matterIds = append(matterIds, matter.FeCalendarMatterId)
+	}
+	for _, matter := range editMatters {
+		updateMatterMap[matter.FeCalendarMatterId] = matter
+		matterIds = append(matterIds, matter.FeCalendarMatterId)
+	}
+
+	//删除ID,先删除
+	deleteRelationIds := make([]int, 0)
+	if len(matterIds) > 0 {
+		relationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(matterIds, utils.EDB_RELATION_CALENDAR)
+		if e != nil {
+			err = fmt.Errorf("查询事件日历指标引用失败,%s", e.Error())
+			return
+		}
+		for _, relation := range relationList {
+			if _, ok := deleteMatterMap[relation.ReferObjectId]; ok {
+				deleteRelationIds = append(deleteRelationIds, relation.EdbInfoRelationId)
+			}
+			if newMatter, ok := updateMatterMap[relation.ReferObjectId]; ok {
+				if relation.EdbInfoId != newMatter.EdbInfoId {
+					deleteRelationIds = append(deleteRelationIds, relation.EdbInfoRelationId)
+				}
+			}
+		}
+	}
+	if len(deleteRelationIds) > 0 {
+		err = data_manage.DeleteEdbRelationByObjectIds(deleteRelationIds, utils.EDB_RELATION_CALENDAR)
+		if err != nil {
+			err = fmt.Errorf("删除事件日历指标引用失败,%s", err.Error())
+			return
+		}
+	}
+
+	// 获取已有事项
+	matterOb := new(fe_calendar.FeCalendarMatter)
+	cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, fe_calendar.FeCalendarMatterCols.ChartPermissionId, fe_calendar.FeCalendarMatterCols.MatterDate)
+	pars := make([]interface{}, 0)
+	pars = append(pars, chartPermissionId, matterDate)
+	order := fmt.Sprintf(`%s ASC`, fe_calendar.FeCalendarMatterCols.Sort)
+	matters, e := matterOb.GetItemsByCondition(cond, pars, []string{}, order)
+	if e != nil {
+		err = fmt.Errorf("查询事件日历事项失败,%s", e.Error())
+		return
+	}
+	// 循环查询matters
+	edbInfoIds := make([]int, 0)
+	refreshIds := make([]int, 0)
+	indexCodeList := make([]string, 0)
+
+	newMatterIds := make([]int, 0)
+	for _, matter := range matters {
+		newMatterIds = append(newMatterIds, matter.FeCalendarMatterId)
+		edbInfoIds = append(edbInfoIds, matter.EdbInfoId)
+	}
+
+	// 查询指标信息
+	edbInfoList, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
+	if e != nil {
+		err = fmt.Errorf("查询指标信息失败,%s", e.Error())
+		return
+	}
+	// 只统计钢联化工和wind来源的指标
+	addEdbInfoIdMap := make(map[int]*data_manage.EdbInfo)
+	for _, edbInfo := range edbInfoList {
+		if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			continue
+		}
+		refreshIds = append(refreshIds, edbInfo.EdbInfoId)
+		addEdbInfoIdMap[edbInfo.EdbInfoId] = edbInfo
+		if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			indexCodeList = append(indexCodeList, edbInfo.EdbCode)
+		}
+	}
+	relationMap := make(map[int]struct{})
+	if len(newMatterIds) > 0 {
+		//查询已有的matters
+		relationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(newMatterIds, utils.EDB_RELATION_CALENDAR)
+		if e != nil {
+			err = fmt.Errorf("查询事件日历指标引用失败,%s", e.Error())
+			return
+		}
+		for _, relation := range relationList {
+			relationMap[relation.ReferObjectId] = struct{}{}
+		}
+	}
+	addList := make([]*data_manage.EdbInfoRelation, 0)
+	nowTime := time.Now()
+	for _, matter := range matters {
+		_, ok1 := relationMap[matter.FeCalendarMatterId]
+		edbInfo, ok2 := addEdbInfoIdMap[matter.EdbInfoId]
+		if !ok1 && ok2 {
+			tmp := &data_manage.EdbInfoRelation{
+				ReferObjectId:      matter.FeCalendarMatterId,
+				ReferObjectType:    utils.EDB_RELATION_CALENDAR,
+				ReferObjectSubType: 0,
+				EdbInfoId:          edbInfo.EdbInfoId,
+				EdbName:            edbInfo.EdbName,
+				Source:             edbInfo.Source,
+				EdbCode:            edbInfo.EdbCode,
+				CreateTime:         nowTime,
+				ModifyTime:         nowTime,
+			}
+			addList = append(addList, tmp)
+		}
+	}
+
+	//更新指标刷新状态为启用
+	err = data_manage.AddOrUpdateEdbInfoRelation(addList, deleteRelationIds, refreshIds, indexCodeList)
+	if err != nil {
+		err = fmt.Errorf("删除不再需要的引用关系失败,%s", err.Error())
+		return
+	}
+	return
+}