Browse Source

add:增加看板审批接口

zqbao 5 months ago
parent
commit
5c0932747a

+ 6 - 0
models/bi_approve/bi_approve.go

@@ -91,6 +91,12 @@ func (b *BiApprove) Update(cols []string) (err error) {
 	return
 }
 
+func (b *BiApprove) Create() (err error) {
+	db := global.DmSQL["rddp"]
+	err = db.Create(b).Error
+	return
+}
+
 func GetBiApproveByFlowIdAndVersionId(biFlowId int, flowVersion int) (item []*BiApprove, err error) {
 	db := global.DmSQL["rddp"]
 	err = db.Where("flow_id = ? AND flow_version = ?", biFlowId, flowVersion).Find(&item).Error

+ 0 - 2
models/bi_approve/bi_approve_flow.go

@@ -19,7 +19,6 @@ type BiApproveFlow struct {
 var BiApproveFlowCols = struct {
 	BiApproveFlowId string
 	FlowName        string
-	BiType          string
 	ClassifyId      string
 	CurrVersion     string
 	CreateTime      string
@@ -27,7 +26,6 @@ var BiApproveFlowCols = struct {
 }{
 	BiApproveFlowId: "bi_approve_flow_id",
 	FlowName:        "flow_name",
-	BiType:          "report_type",
 	ClassifyId:      "classify_id",
 	CurrVersion:     "curr_version",
 	CreateTime:      "create_time",

+ 131 - 0
services/bi_approve/bi_approve.go

@@ -1008,3 +1008,134 @@ func CheckBiOpenApprove(classifyId int) (opening bool, err error) {
 	}
 	return
 }
+
+// CheckBiCurrState 校验报告当前应有的状态
+func CheckBiCurrState(classifyId, operate int) (state int, err error) {
+	// 获取审批配置
+	confMap, e := models.GetBusinessConf()
+	if e != nil {
+		err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
+		return
+	}
+	openMap := map[string]bool{"false": false, "true": true}
+	openApprove := openMap[confMap[models.BusinessConfIsBIApprove]]
+
+	// 查询对应分类是否有审批流
+	flowOb := new(biapprove.BiApproveFlow)
+	flowCond := fmt.Sprintf(` AND %s = ?`, biapprove.BiApproveFlowCols.ClassifyId)
+	flowPars := make([]interface{}, 0)
+	flowPars = append(flowPars, classifyId)
+	flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
+	if e != nil && !utils.IsErrNoRow(e) {
+		err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
+		return
+	}
+
+	// 开启审批/有审批流
+	if openApprove && (flowItem != nil) {
+		// 操作为无审批的操作时, 会转为有审批的初始状态-待提交
+		stateMap := map[int]int{
+			BiOperateAdd:           BiStateWaitSubmit,  // 新增
+			BiOperateEdit:          BiStateWaitSubmit,  // 编辑
+			BiOperatePublish:       BiStateWaitSubmit,  // 发布
+			BiOperateCancelPublish: BiStateWaitSubmit,  // 取消发布
+			BiOperateSubmitApprove: BiStateWaitApprove, // 提审
+			BiOperateCancelApprove: BiStateWaitSubmit,  // 撤回
+		}
+		state = stateMap[operate]
+		return
+	}
+
+	// 关闭审批/分类无审批
+	// 操作为有审批的操作时, 会转为无审批的初始状态-未发布
+	stateMap := map[int]int{
+		BiOperateAdd:           BiStateUnpublished, // 新增
+		BiOperateEdit:          BiStateUnpublished, // 编辑
+		BiOperatePublish:       BiStatePublished,   // 发布
+		BiOperateCancelPublish: BiStateUnpublished, // 取消发布
+		BiOperateSubmitApprove: BiStateUnpublished, // 提审
+		BiOperateCancelApprove: BiStateUnpublished, // 撤回
+	}
+	state = stateMap[operate]
+	return
+}
+
+// SubmitBiApprove 提交审批
+func SubmitBiApprove(reportId int, reportTitle string, classifyId int, sysAdminId int, sysAdminName string) (approveId int, err error) {
+	// 默认内部审批, 如果是走的第三方审批, 那么仅修改状态
+	confMap, e := models.GetBusinessConf()
+	if e != nil {
+		err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
+		return
+	}
+	openMap := map[string]bool{"false": false, "true": true}
+	openApprove := openMap[confMap[models.BusinessConfIsBIApprove]]
+	if !openApprove {
+		err = fmt.Errorf("未开启审批")
+		return
+	}
+
+	// 查询审批流
+	flowOb := new(biapprove.BiApproveFlow)
+	flowCond := fmt.Sprintf(` AND %s = ?`, biapprove.BiApproveFlowCols.ClassifyId)
+	flowPars := make([]interface{}, 0)
+	flowPars = append(flowPars, classifyId)
+	flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
+	if e != nil {
+		err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
+		return
+	}
+
+	// 查询审批节点
+	nodeOb := new(biapprove.BiApproveNode)
+	nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, biapprove.BiApproveNodeCols.BiApproveFlowId, biapprove.BiApproveNodeCols.CurrVersion)
+	nodePars := make([]interface{}, 0)
+	nodePars = append(nodePars, flowItem.BiApproveFlowId, flowItem.CurrVersion)
+	nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
+	if e != nil {
+		err = fmt.Errorf("ApproveNodes GetItemsByCondition err: %s", e.Error())
+		return
+	}
+	if len(nodeItems) == 0 {
+		err = fmt.Errorf("无审批节点")
+		return
+	}
+
+	// 取出首个节点
+	firstNodeItem := new(biapprove.BiApproveNode)
+	for _, v := range nodeItems {
+		if v.PrevNodeId == 0 {
+			firstNodeItem = v
+			continue
+		}
+	}
+	if firstNodeItem == nil {
+		err = fmt.Errorf("首个审批节点有误")
+		return
+	}
+
+	// 审批信息
+	now := time.Now().Local()
+	newApprove := new(biapprove.BiApprove)
+	newApprove.BiId = reportId
+	newApprove.BiTitle = reportTitle
+	newApprove.ClassifyId = classifyId
+	newApprove.State = BiApproveStateApproving
+	newApprove.FlowId = flowItem.BiApproveFlowId
+	newApprove.FlowVersion = flowItem.CurrVersion
+	newApprove.StartNodeId = firstNodeItem.BiApproveNodeId
+	newApprove.CurrNodeId = firstNodeItem.BiApproveNodeId
+	newApprove.ApplyUserId = sysAdminId
+	newApprove.ApplyUserName = sysAdminName
+	newApprove.CreateTime = now
+	newApprove.ModifyTime = now
+	if e = newApprove.Create(); e != nil {
+		err = fmt.Errorf("生成审批信息失败, Err: %s", e.Error())
+		return
+	}
+	approveId = newApprove.BiApproveId
+
+	// 生成节点审批记录
+	err = BuildNextNodeRecordAndMsg(firstNodeItem, newApprove.BiApproveId, sysAdminId, sysAdminName)
+	return
+}

+ 10 - 0
services/bi_approve/constant.go

@@ -10,6 +10,16 @@ const (
 	BiStatePass        = 6 // 已通过
 )
 
+// 看板操作
+const (
+	BiOperateAdd           = 1 // 新增报告
+	BiOperateEdit          = 2 // 编辑报告
+	BiOperatePublish       = 3 // 发布报告
+	BiOperateCancelPublish = 4 // 取消发布报告
+	BiOperateSubmitApprove = 5 // 提交审批
+	BiOperateCancelApprove = 6 // 撤回审批
+)
+
 // 节点审批方式
 const (
 	NodeApproveTypeRoll = 1 // 依次审批