Browse Source

add:审批列表

zqbao 6 tháng trước cách đây
mục cha
commit
747e9d3040

+ 34 - 49
controllers/bi_approve/bi_approve.go

@@ -4,11 +4,14 @@ import (
 	"encoding/json"
 	"eta_gn/eta_api/controllers"
 	"eta_gn/eta_api/models"
+	biapprove2 "eta_gn/eta_api/models/bi_approve"
 	"eta_gn/eta_api/models/bi_approve/request"
+	"eta_gn/eta_api/models/bi_approve/response"
 	biapprove "eta_gn/eta_api/services/bi_approve"
 	"eta_gn/eta_api/utils"
 	"fmt"
-	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 type BiApproveController struct {
@@ -41,6 +44,7 @@ func (this *BiApproveController) List() {
 		this.ServeJSON()
 	}()
 
+	sysUser := this.SysUser
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
 	listType, _ := this.GetInt("ListType")
@@ -48,72 +52,53 @@ func (this *BiApproveController) List() {
 	timeType, _ := this.GetInt("TimeType")
 	startTime := this.GetString("StartTime")
 	endTime := this.GetString("EndTime")
-	// sortField, _ := this.GetInt("SortField")
-	// sortRule, _ := this.GetInt("SortRule")
+	sortField, _ := this.GetInt("SortField")
+	sortRule, _ := this.GetInt("SortRule")
 	classifyId, _ := this.GetInt("ClassifyId")
 	keyword := this.GetString("Keyword")
 
-	var pars []interface{}
-	var condition string
-
 	if pageSize <= 0 {
 		pageSize = utils.PageSize10
 	}
 	if currentIndex <= 0 {
 		currentIndex = 1
 	}
+	startSize := paging.StartIndex(currentIndex, pageSize)
 
-	if classifyId > 0 {
-		condition += ` AND classify_id = ? `
-		pars = append(pars, classifyId)
-	}
-	if keyword != "" {
-		condition += ` AND bi_title LIKE ? `
-		pars = utils.GetLikeKeywordPars(pars, keyword, 1)
-	}
-	if approveState > 0 {
-		condition += ` AND a.state = ? `
-		pars = append(pars, approveState)
-	}
-	if startTime != "" && endTime != "" {
-		_, err := time.Parse(utils.FormatDate, startTime)
-		if err != nil {
-			br.Msg = "开始时间格式错误"
-			return
-		}
-		endTime, err := time.Parse(utils.FormatDate, endTime)
-		endTime = endTime.AddDate(0, 0, 1)
-		switch timeType {
-		case 1:
-			condition += ` AND create_time BETWEEN ? AND ? `
-			pars = append(pars, startTime, endTime)
-		case 2:
-			condition += ` AND approve_time BETWEEN ? AND ? `
-			pars = append(pars, startTime, endTime)
-		case 3:
-			condition += ` AND approve_time BETWEEN ? AND ? `
-			pars = append(pars, startTime, endTime)
-		default:
-			br.Msg = "时间类型错误"
-			return
-		}
-	}
-
+	var list []*biapprove2.BiApproveItemOrm
+	var total int
+	var msg string
+	var err error
 	switch listType {
 	case 1:
-		condition += ` AND a.state = 1 AND a.approve_user_id = ?`
-		pars = append(pars, this.SysUser.AdminId)
+		list, total, msg, err = biapprove.ProcessingBiApprove(sysUser.AdminId, classifyId, timeType, sortField, sortRule, startSize, pageSize, sysUser.RealName, startTime, endTime, keyword)
 	case 2:
-		condition += ` AND a.state IN (2,3) AND a.approve_user_id = ?`
-		pars = append(pars, this.SysUser.AdminId)
+		list, total, msg, err = biapprove.SolvedBiApprove(sysUser.AdminId, classifyId, timeType, sortField, sortRule, approveState, startSize, pageSize, sysUser.RealName, startTime, endTime, keyword)
 	case 3:
-		condition += ` AND a.state = ? `
-		pars = append(pars, this.GetSession("username"))
+		list, total, msg, err = biapprove.MyApplyBiApproves(sysUser.AdminId, classifyId, timeType, sortField, sortRule, approveState, startSize, pageSize, sysUser.RealName, startTime, endTime, keyword)
 	default:
 		br.Msg = "列表类型错误"
 		return
 	}
+	if err != nil {
+		if msg != "" {
+			br.Msg = msg
+		} else {
+			br.Msg = "获取审批列表失败"
+		}
+		br.ErrMsg = "获取审批列表失败, Err: " + err.Error()
+		return
+	}
+
+	resp := new(response.BiApproveListResp)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp.List = list
+	resp.Paging = page
 
+	br.Msg = "获取审批列表成功"
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
 }
 
 // list
@@ -177,7 +162,7 @@ func (this *BiApproveController) Approve() {
 	}
 	if req.BiApproveId <= 0 {
 		br.Msg = "参数有误"
-		br.ErrMsg = fmt.Sprintf("参数有误, ReportApproveId: %d", req.BiApproveId)
+		br.ErrMsg = fmt.Sprintf("参数有误, BiApproveId: %d", req.BiApproveId)
 		return
 	}
 

+ 130 - 0
models/bi_approve/bi_approve.go

@@ -2,6 +2,7 @@ package biapprove
 
 import (
 	"eta_gn/eta_api/global"
+	"fmt"
 	"time"
 )
 
@@ -23,6 +24,63 @@ type BiApprove struct {
 	ModifyTime    time.Time `gorm:"column:update_time"`
 }
 
+var BiApproveCols = struct {
+	BiApproveId   string
+	BiId          string
+	BiTitle       string
+	ClassifyId    string
+	State         string //  '审批状态:1-待审批;2-已审批;3-已驳回;4-已撤回'
+	FlowId        string
+	FlowVersion   string
+	StartNodeId   string
+	CurrNodeId    string
+	ApplyUserId   string
+	ApplyUserName string
+	ApproveRemark string
+	ApproveTime   string
+	CreateTime    string
+	ModifyTime    string
+}{
+	BiApproveId:   "bi_approve_id",
+	BiId:          "bi_id",
+	BiTitle:       "bi_title",
+	ClassifyId:    "classify_id",
+	State:         "state",
+	FlowId:        "flow_id",
+	FlowVersion:   "flow_version",
+	StartNodeId:   "start_node_id",
+	CurrNodeId:    "curr_node_id",
+	ApplyUserId:   "apply_user_id",
+	ApplyUserName: "apply_user_name",
+	ApproveRemark: "approve_remark",
+	ApproveTime:   "approve_time",
+	CreateTime:    "create_time",
+	ModifyTime:    "modify_time",
+}
+
+type BiApproveItemOrm struct {
+	BiApproveId       int       `description:"审批ID"`
+	BiApproveRecordId int       `description:"审批记录ID"`
+	BiId              int       `description:"报告ID"`
+	BiTitle           string    `description:"报告标题"`
+	ClassifyId        int       `description:"分类ID"`
+	State             int       `description:"审批状态:1-待审批;2-已审批;3-已驳回;4-已撤回"`
+	RecordState       int       `description:"审批记录状态:1-待审批;2-已通过;3-已驳回"`
+	FlowId            int       `description:"审批流ID"`
+	FlowVersion       int       `description:"审批流版本"`
+	StartNodeId       int       `description:"开始节点ID"`
+	CurrNodeId        int       `description:"当前节点ID"`
+	ApplyUserId       int       `description:"申请人ID"`
+	ApplyUserName     string    `description:"申请人姓名"`
+	ApproveRemark     string    `description:"审批备注"`
+	ApproveTime       time.Time `description:"审批时间"`
+	HandleTime        time.Time `description:"处理时间"`
+	CreateTime        time.Time `description:"创建时间"`
+	ModifyTime        time.Time `description:"修改时间"`
+	NodeState         int       `description:"当前节点审批状态:1-待审批;2-已审批;3-已驳回;4-已撤回" json:"-"`
+	NodeApproveTime   time.Time `description:"当前节点审批时间" json:"-"`
+}
+
 func (b *BiApprove) TableName() string {
 	return "bi_approve"
 }
@@ -44,3 +102,75 @@ func GetBiApproveById(biApproveId int) (item *BiApprove, err error) {
 	err = db.Where("bi_approve_id = ?", biApproveId).First(&item).Error
 	return
 }
+
+// GetApprovingBiApproveCount 获取待处理的审批分页列表总数
+func GetApprovingBiApproveCount(cond string, pars []interface{}) (count int, err error) {
+	base := fmt.Sprintf(`SELECT a.bi_approve_record_id
+		FROM bi_approve_record AS a
+		JOIN bi_approve AS b ON a.bi_approve_id = b.bi_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 = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+// GetApprovingBiApprovePageList 获取待处理的审批列表-分页
+func GetApprovingBiApprovePageList(cond string, pars []interface{}, orderRule string, startSize, pageSize int) (items []*BiApproveItemOrm, err error) {
+	order := `ORDER BY a.create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT a.bi_approve_record_id, a.state AS record_state, b.*
+		FROM bi_approve_record AS a
+		JOIN bi_approve AS b ON a.bi_approve_id = b.bi_approve_id AND a.node_id = b.curr_node_id
+		WHERE 1 = 1 %s %s
+		LIMIT ?,?`, cond, order)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+// GetApprovedBiApproveCount 获取已处理的审批分页列表总数
+func GetApprovedBiApproveCount(cond string, pars []interface{}) (count int, err error) {
+	base := fmt.Sprintf(`SELECT a.bi_approve_record_id
+		FROM bi_approve_record AS a
+		JOIN bi_approve AS b ON a.bi_approve_id = b.bi_approve_id
+		WHERE 1 = 1 %s`, cond)
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM (%s) t`, base)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+// GetApprovedBiApprovePageList 获取已处理的审批列表-分页
+func GetApprovedBiApprovePageList(cond string, pars []interface{}, orderRule string, startSize, pageSize int) (items []*BiApproveItemOrm, err error) {
+	order := `ORDER BY a.create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT a.bi_approve_record_id, a.node_state AS record_state,a.node_state,a.node_approve_time, a.node_approve_time AS handle_time, b.*
+		FROM bi_approve_record AS a
+		JOIN bi_approve AS b ON a.bi_approve_id = b.bi_approve_id
+		WHERE 1 = 1 %s %s
+		LIMIT ?,?`, cond, order)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+// GetApplyBiApproveCount 获取我发起的审批分页列表总数
+func GetApplyBiApproveCount(cond string, pars []interface{}) (count int, err error) {
+	base := fmt.Sprintf(`SELECT a.* FROM Bi_approve AS a WHERE 1 = 1 %s`, cond)
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM (%s) t`, base)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+// GetApplyBiApprovePageList 获取我发起的审批列表-分页
+func GetApplyBiApprovePageList(cond string, pars []interface{}, orderRule string, startSize, pageSize int) (items []*BiApproveItemOrm, err error) {
+	order := `ORDER BY a.create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT a.* FROM bi_approve AS a WHERE 1 = 1 %s %s LIMIT ?,?`, cond, order)
+	pars = append(pars, startSize, pageSize)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}

+ 42 - 0
models/bi_approve/bi_approve_record.go

@@ -29,6 +29,48 @@ type BiApproveRecord struct {
 	NodeApproveTime     time.Time `gorm:"column:node_approve_time"`
 }
 
+var BiApproveRecordCols = struct {
+	BiApproveRecordId   string
+	BiApproveId         string
+	State               string
+	NodeId              string
+	NodeType            string
+	PrevNodeId          string
+	NextNodeId          string
+	ApproveType         string
+	ApproveUserId       string
+	ApproveUserName     string
+	ApproveUserSort     string
+	ApproveRemark       string
+	ApproveTime         string
+	CreateTime          string
+	ModifyTime          string
+	NodeState           string
+	NodeApproveUserId   string
+	NodeApproveUserName string
+	NodeApproveTime     string
+}{
+	BiApproveRecordId:   "bi_approve_record_id",
+	BiApproveId:         "bi_approve_id",
+	State:               "state",
+	NodeId:              "node_id",
+	NodeType:            "node_type",
+	PrevNodeId:          "prev_node_id",
+	NextNodeId:          "next_node_id",
+	ApproveType:         "approve_type",
+	ApproveUserId:       "approve_user_id",
+	ApproveUserName:     "approve_user_name",
+	ApproveUserSort:     "approve_user_sort",
+	ApproveRemark:       "approve_remark",
+	ApproveTime:         "approve_time",
+	CreateTime:          "create_time",
+	ModifyTime:          "modify_time",
+	NodeState:           "node_state",
+	NodeApproveUserId:   "node_approve_user_id",
+	NodeApproveUserName: "node_approve_user_name",
+	NodeApproveTime:     "node_approve_time",
+}
+
 func (b *BiApproveRecord) TableName() string {
 	return "bi_approve_record"
 }

+ 10 - 1
models/bi_approve/response/bi_approve_flow.go

@@ -1,6 +1,10 @@
 package response
 
-import "github.com/rdlucklib/rdluck_tools/paging"
+import (
+	biapprove "eta_gn/eta_api/models/bi_approve"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
 
 type BiApproveFlowItem struct {
 	BiApproveFlowId int    `description:"主键"`
@@ -37,3 +41,8 @@ type BiApproveNodeItem struct {
 	ApproveType     int                  `description:"审批类型:1-依次审批;2-会签;3-或签"`
 	Users           []*BiApproveNodeUser `description:"审批人信息"`
 }
+
+type BiApproveListResp struct {
+	List   []*biapprove.BiApproveItemOrm
+	Paging *paging.PagingItem
+}

+ 222 - 0
services/bi_approve/bi_approve.go

@@ -7,9 +7,16 @@ import (
 	"eta_gn/eta_api/utils"
 	"fmt"
 	"sort"
+	"strings"
 	"time"
 )
 
+var (
+	timeField   = map[int]string{1: fmt.Sprintf("a.%s", biapprove.BiApproveCols.CreateTime), 2: fmt.Sprintf("a.%s", biapprove.BiApproveCols.ApproveTime), 3: fmt.Sprintf("b.%s", biapprove.BiApproveCols.ApproveTime)}
+	myTimeField = map[int]string{1: fmt.Sprintf("%s", biapprove.BiApproveCols.CreateTime), 3: fmt.Sprintf("%s", biapprove.BiApproveCols.ApproveTime)}
+	orderRules  = map[int]string{1: "ASC", 2: "DESC"}
+)
+
 func GetPulicBiClassifyList() (res []*bi_dashboard.BiDashboardClassifyItem, msg string, err error) {
 	classifyList, err := bi_dashboard.GetBiDashboardClassifyAllList()
 	if err != nil {
@@ -414,3 +421,218 @@ func updateBiApproveState(biId, approveId, state int) (err error) {
 	}
 	return
 }
+
+func ProcessingBiApprove(adminId, classifyId, timeType, sortField, sortRule, startSize, pageSize int, adminName, startTime, endTime, keyword string) (ormList []*biapprove.BiApproveItemOrm, respTotal int, msg string, err error) {
+	pars := make([]interface{}, 0)
+	cond := ` AND a.state = ? AND b.state = ? AND a."approve_user_id" = ?`
+	pars = append(pars, BiApproveStateApproving, BiApproveStateApproving, adminId)
+	order := ""
+
+	// 筛选条件
+	if classifyId > 0 {
+		cond += ` AND b.classify_id = ?`
+		pars = append(pars, classifyId)
+	}
+	if timeType <= 0 {
+		timeType = 1
+	}
+	if timeType == 1 && startTime != "" && endTime != "" {
+		_, e := time.Parse(utils.FormatDate, startTime)
+		if e != nil {
+			msg = "开始时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime, e := time.Parse(utils.FormatDate, endTime)
+		if e != nil {
+			msg = "结束时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime = tmpEndTime.AddDate(0, 0, 1)
+		cond += ` AND (b.create_time BETWEEN ? AND ?)`
+		pars = append(pars, startTime, tmpEndTime)
+	}
+	keyword = strings.TrimSpace(keyword)
+	if keyword != "" {
+		kw := fmt.Sprint("%", keyword, "%")
+		cond += ` AND b.bi_title LIKE ?`
+		pars = append(pars, kw)
+	}
+	if sortField > 0 && sortRule > 0 {
+		var orderField, orderRule string
+		switch sortField {
+		case 1:
+			orderField = "b.create_time"
+		case 2:
+			orderField = "a.approve_time"
+		case 3:
+			orderField = "b.approve_time"
+		}
+		switch sortRule {
+		case 1:
+			orderRule = "ASC"
+		case 2:
+			orderRule = "DESC"
+		}
+		order = fmt.Sprintf("%s %s", orderField, orderRule)
+	}
+	total, e := biapprove.GetApprovingBiApproveCount(cond, pars)
+	if e != nil {
+		msg = "获取失败"
+		err = e
+		return
+	}
+	list, e := biapprove.GetApprovingBiApprovePageList(cond, pars, order, startSize, pageSize)
+	if e != nil {
+		msg = "获取失败"
+		err = e
+		return
+	}
+	respTotal = total
+	ormList = list
+	return
+}
+
+// SolvedBiApprove 已处理的审批
+func SolvedBiApprove(adminId, classifyId, timeType, sortField, sortRule, approveState, startSize, pageSize int, adminName, startTime, endTime, keyword string) (ormList []*biapprove.BiApproveItemOrm, respTotal int, msg string, err error) {
+	cond := fmt.Sprintf(` AND a.%s = ? AND a.%s IN (?)`, biapprove.BiApproveRecordCols.ApproveUserId, biapprove.BiApproveRecordCols.NodeState)
+	pars := make([]interface{}, 0)
+	pars = append(pars, adminId, []int{BiApproveStatePass, BiApproveStateRefuse})
+	order := ""
+
+	// 筛选条件
+	if classifyId > 0 {
+		cond += fmt.Sprintf(` AND b.%s = ?`, biapprove.BiApproveCols.ClassifyId)
+		pars = append(pars, classifyId)
+	}
+	if timeType > 0 && startTime != "" && endTime != "" {
+		_, e := time.Parse(utils.FormatDate, startTime)
+		if e != nil {
+			msg = "开始时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime, e := time.Parse(utils.FormatDate, endTime)
+		if e != nil {
+			msg = "结束时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime = tmpEndTime.AddDate(0, 0, 1)
+		cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, timeField[timeType])
+		pars = append(pars, startTime, tmpEndTime)
+	}
+	keyword = strings.TrimSpace(keyword)
+	if keyword != "" {
+		kw := fmt.Sprint("%", keyword, "%")
+		cond += fmt.Sprintf(` AND b.%s LIKE ?`, biapprove.BiApproveCols.BiTitle)
+		pars = append(pars, kw)
+	}
+	if sortField > 0 && sortRule > 0 {
+		orderField := timeField[sortField]
+		if orderField == "" {
+			msg = "时间排序字段有误"
+			return
+		}
+		orderRule := orderRules[sortRule]
+		if orderRule == "" {
+			msg = "时间排序方式有误"
+			return
+		}
+		order = fmt.Sprintf("%s %s", orderField, orderRule)
+	}
+	if approveState > 0 {
+		cond += fmt.Sprintf(` AND a.%s = ?`, biapprove.BiApproveRecordCols.State)
+		pars = append(pars, approveState)
+	}
+	total, e := biapprove.GetApprovedBiApproveCount(cond, pars)
+	if e != nil {
+		msg = "获取失败"
+		err = fmt.Errorf("GetApprovedBiApproveCount err: %s", e.Error())
+		return
+	}
+	list, e := biapprove.GetApprovedBiApprovePageList(cond, pars, order, startSize, pageSize)
+	if e != nil {
+		msg = "获取失败"
+		err = fmt.Errorf("GetApprovedBiApprovePageList err: %s", e.Error())
+		return
+	}
+
+	for _, v := range list {
+		// 这个时候的状态,用审批状态
+		v.RecordState = v.NodeState
+		v.ApproveTime = v.NodeApproveTime
+	}
+	ormList = list
+	respTotal = total
+	return
+}
+
+func MyApplyBiApproves(adminId, classifyId, timeType, sortField, sortRule, approveState, startSize, pageSize int, adminName, startTime, endTime, keyword string) (ormList []*biapprove.BiApproveItemOrm, respTotal int, msg string, err error) {
+	cond := fmt.Sprintf(` AND a.%s = ?`, biapprove.BiApproveCols.ApplyUserId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, adminId)
+	order := ""
+
+	// 筛选条件
+	if classifyId > 0 {
+		cond += fmt.Sprintf(` AND a.%s = ?`, biapprove.BiApproveCols.ClassifyId)
+		pars = append(pars, classifyId)
+	}
+	if timeType > 0 && startTime != "" && endTime != "" {
+		_, e := time.Parse(utils.FormatDate, startTime)
+		if e != nil {
+			msg = "开始时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime, e := time.Parse(utils.FormatDate, endTime)
+		if e != nil {
+			msg = "结束时间格式有误"
+			err = e
+			return
+		}
+		tmpEndTime = tmpEndTime.AddDate(0, 0, 1)
+		cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, timeField[timeType])
+		pars = append(pars, startTime, tmpEndTime)
+	}
+	keyword = strings.TrimSpace(keyword)
+	if keyword != "" {
+		kw := fmt.Sprint("%", keyword, "%")
+		cond += fmt.Sprintf(` AND a.%s LIKE ?`, biapprove.BiApproveCols.BiTitle)
+		pars = append(pars, kw)
+	}
+	if sortField > 0 && sortRule > 0 {
+		orderField := myTimeField[sortField]
+		if orderField == "" {
+			msg = "时间排序字段有误"
+			return
+		}
+		orderRule := orderRules[sortRule]
+		if orderRule == "" {
+			msg = "时间排序方式有误"
+			return
+		}
+		order = fmt.Sprintf("%s %s", orderField, orderRule)
+	}
+	if approveState > 0 {
+		cond += fmt.Sprintf(` AND a.%s = ?`, biapprove.BiApproveRecordCols.State)
+		pars = append(pars, approveState)
+	}
+	total, e := biapprove.GetApplyBiApproveCount(cond, pars)
+	if e != nil {
+		msg = "获取失败"
+		err = fmt.Errorf("GetApplyBiApproveCount err: %s", e.Error())
+		return
+	}
+	respTotal = total
+	list, e := biapprove.GetApplyBiApprovePageList(cond, pars, order, startSize, pageSize)
+	if e != nil {
+		msg = "获取失败"
+		err = fmt.Errorf("GetApplyBiApprovePageList err: %s", e.Error())
+		return
+	}
+	ormList = list
+	return
+}

+ 1 - 0
services/bi_approve/bi_approve_flow.go

@@ -51,6 +51,7 @@ func SaveBiApproveFlow(flow *request.BiApproveFlowSaveReq) (ok bool, msg string,
 		}
 		if tmp != nil && tmp.BiApproveFlowId > 0 {
 			msg = "保存审批流失败, 分类下已存在审批流"
+			err = fmt.Errorf("分类下已存在审批流")
 			return
 		}