Browse Source

修复数据管理和报告审批模块的几个竞争条件问题

- 在数据管理模块中,修复了图表和指标映射时的竞态条件,确保实体存在且ID大于0- 在报告审批流程中,增加了对已存在审批流的判断逻辑,要求实体存在且ID大于0
- 修改了报告审批模块中事务开始的数据库连接,从"data"改为"rddp"
Roc 5 months ago
parent
commit
61b4c48524

+ 14 - 9
controllers/data_manage/multiple_graph_config.go

@@ -681,7 +681,7 @@ func (this *ChartInfoController) MultipleGraphConfigSaveChart() {
 	err = nil
 	var isAdd bool
 	var chartInfoId int
-	if multipleGraphConfigChartMapping == nil {
+	if multipleGraphConfigChartMapping == nil || multipleGraphConfigChartMapping.Id <= 0 {
 		isAdd = true
 	} else {
 		chartInfo, err := data_manage.GetChartInfoById(multipleGraphConfigChartMapping.ChartInfoId)
@@ -691,7 +691,7 @@ func (this *ChartInfoController) MultipleGraphConfigSaveChart() {
 			return
 		}
 		// 说明图还在,没有被删除
-		if chartInfo != nil {
+		if chartInfo != nil && chartInfo.ChartInfoId > 0 {
 			chartInfoId = multipleGraphConfigChartMapping.ChartInfoId
 			req.ChartName = chartInfo.ChartName
 			req.ClassifyId = chartInfo.ChartClassifyId
@@ -1014,7 +1014,7 @@ func CopyMultipleGraphConfigSaveChart(req request.SaveMultipleGraphChartReq, thi
 	}
 
 	multipleGraphConfigChartMapping, err := data_manage.GetMultipleGraphConfigChartMappingByIdAndSource(req.MultipleGraphConfigId, req.Source)
-	if err != nil && !utils.IsErrNoRow(err) {
+	if err != nil {
 		br.Msg = `保存失败`
 		br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
 		return
@@ -1022,13 +1022,18 @@ func CopyMultipleGraphConfigSaveChart(req request.SaveMultipleGraphChartReq, thi
 
 	// 原图
 	oldChartInfo, err := data_manage.GetChartInfoById(multipleGraphConfigChartMapping.ChartInfoId)
-	if err != nil && !utils.IsErrNoRow(err) {
-		br.Msg = `保存失败`
-		br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
+	if err != nil {
+		if !utils.IsErrNoRow(err) {
+			br.Msg = `保存失败`
+			br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
+			return
+		}
+		br.Msg = "原图不存在"
+		br.IsSendEmail = false
 		return
 	}
 	// 说明图还在,没有被删除
-	if oldChartInfo == nil {
+	if oldChartInfo == nil || oldChartInfo.ChartInfoId <= 0 {
 		br.Msg = "原图不存在"
 		br.IsSendEmail = false
 	}
@@ -1279,7 +1284,7 @@ func (this *ChartInfoController) MultipleGraphConfigSaveEdb() {
 	err = nil
 	var isAdd bool
 	var edbInfoId int
-	if multipleGraphConfigEdbMapping == nil {
+	if multipleGraphConfigEdbMapping == nil || multipleGraphConfigEdbMapping.MultipleGraphConfigId <= 0 {
 		isAdd = true
 	} else {
 		edbInfo, err := data_manage.GetEdbInfoById(multipleGraphConfigEdbMapping.EdbInfoId)
@@ -1289,7 +1294,7 @@ func (this *ChartInfoController) MultipleGraphConfigSaveEdb() {
 			return
 		}
 		// 说明指标还在,没有被删除
-		if edbInfo != nil && !req.IsSaveAs {
+		if edbInfo != nil && edbInfo.EdbInfoId > 0 && !req.IsSaveAs {
 			edbInfoId = multipleGraphConfigEdbMapping.EdbInfoId
 			req.EdbName = edbInfo.EdbName
 			req.ClassifyId = edbInfo.ClassifyId

+ 1 - 1
controllers/report_approve/report_approve_flow.go

@@ -394,7 +394,7 @@ func (this *ReportApproveFlowController) Edit() {
 			br.ErrMsg = "获取审批流是否已存在失败, Err: " + e.Error()
 			return
 		}
-		if exist != nil {
+		if exist != nil && exist.ReportApproveFlowId > 0 {
 			br.Msg = "该分类已有审批流, 请勿重复添加"
 			return
 		}

+ 1 - 1
models/report_approve/report_approve_flow.go

@@ -423,7 +423,7 @@ func (m *ReportApproveFlow) UpdateFlowAndNodes(flowItem *ReportApproveFlow, node
 	//	prevNode = v
 	//}
 
-	tx := global.DmSQL["data"].Begin()
+	tx := global.DmSQL["rddp"].Begin()
 	prevNodes := make([]*ReportApproveNode, 0)
 	defer func() {
 		if err != nil {