|
@@ -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
|
|
|
+}
|