Procházet zdrojové kódy

fix: 报告或签同时审批

hsun před 1 rokem
rodič
revize
215a91dad6

+ 6 - 1
controllers/report_approve/report_approve.go

@@ -586,11 +586,16 @@ func (this *ReportApproveController) Approve() {
 	}
 
 	// 通过审批
-	if e = services.PassReportApprove(approveItem, recordItem, sysUser.AdminId); e != nil {
+	tips, e := services.PassReportApprove(approveItem, recordItem, sysUser.AdminId)
+	if e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "通过审批失败, Err: " + e.Error()
 		return
 	}
+	if tips != "" {
+		br.Msg = tips
+		return
+	}
 
 	br.Ret = 200
 	br.Success = true

+ 2 - 2
models/report_approve/report_approve.go

@@ -278,7 +278,7 @@ func GetApprovingReportApproveCount(cond string, pars []interface{}) (count int,
 	o := orm.NewOrmUsingDB("rddp")
 	base := fmt.Sprintf(`SELECT a.report_approve_record_id
 		FROM report_approve_record AS a
-		JOIN report_approve AS b ON a.report_approve_id = b.report_approve_id
+		JOIN report_approve AS b ON a.report_approve_id = b.report_approve_id AND a.node_id = b.curr_node_id
 		WHERE 1 = 1 %s`, cond)
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM (%s) t`, base)
 	err = o.Raw(sql, pars).QueryRow(&count)
@@ -294,7 +294,7 @@ func GetApprovingReportApprovePageList(cond string, pars []interface{}, orderRul
 	}
 	sql := fmt.Sprintf(`SELECT a.report_approve_record_id, a.state AS record_state, b.*
 		FROM report_approve_record AS a
-		JOIN report_approve AS b ON a.report_approve_id = b.report_approve_id
+		JOIN report_approve AS b ON a.report_approve_id = b.report_approve_id AND a.node_id = b.curr_node_id
 		WHERE 1 = 1 %s %s
 		LIMIT ?,?`, cond, order)
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)

+ 9 - 2
services/report_approve.go

@@ -397,7 +397,7 @@ func updateReportApproveState(reportType, reportId, approveId, state int) (err e
 }
 
 // PassReportApprove 通过审批
-func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, sysAdminId int) (err error) {
+func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, sysAdminId int) (tips string, err error) {
 	if approveItem == nil {
 		err = fmt.Errorf("审批信息有误")
 		return
@@ -432,7 +432,7 @@ func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *re
 		nodeMap[v.ReportApproveNodeId] = v
 	}
 
-	// 取出当前节点
+	// 取出审批记录的节点
 	currNodeItem := nodeMap[recordItem.NodeId]
 	if currNodeItem == nil {
 		err = fmt.Errorf("当前节点信息有误")
@@ -581,6 +581,13 @@ func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *re
 
 	// 或签
 	if currNode.ApproveType == report_approve.NodeApproveTypeAny {
+		// 需检查一下审批的当前节点和记录的节点是否匹配, 不匹配可能是因为另外的审批人已通过, 所以此处应给提示
+		// 前端也有做相应的判断,但是两个人同时进入审批详情页时就可能出现这种情况
+		if approveItem.CurrNodeId != recordItem.NodeId {
+			tips = "该节点已完成审批, 请刷新页面"
+			return
+		}
+
 		if e = recordItem.Update(recordCols); e != nil {
 			err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
 			return