更新
This commit is contained in:
1 parent
5718a00e31
commit
1850ac640e
226 files changed
+37772
-12071
No files matched your search
@@ -0,0 +1,121 @@
|
||||
package approval
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
)
|
||||
|
||||
// InstanceStatusOf 读取实例当前状态(单据提交后用于判断流程是否已直接结束)。
|
||||
func InstanceStatusOf(instID uint64) int8 {
|
||||
var inst models.ApprovalInstance
|
||||
if err := models.Orm.QueryTable(new(models.ApprovalInstance)).
|
||||
Filter("id", instID).One(&inst, "status"); err != nil {
|
||||
return models.ApprovalInstanceRunning
|
||||
}
|
||||
return inst.Status
|
||||
}
|
||||
|
||||
// InstanceBrief 单据详情页展示的审批进度摘要:当前节点、待办人、时间线。
|
||||
func InstanceBrief(instID uint64) map[string]interface{} {
|
||||
if instID == 0 {
|
||||
return nil
|
||||
}
|
||||
var inst models.ApprovalInstance
|
||||
if err := models.Orm.QueryTable(new(models.ApprovalInstance)).
|
||||
Filter("id", instID).One(&inst); err != nil {
|
||||
return nil
|
||||
}
|
||||
tasks := make([]map[string]interface{}, 0)
|
||||
var rows []models.ApprovalTask
|
||||
_, _ = models.Orm.QueryTable(new(models.ApprovalTask)).
|
||||
Filter("instance_id", instID).OrderBy("sort", "id").All(&rows)
|
||||
for _, t := range rows {
|
||||
tasks = append(tasks, map[string]interface{}{
|
||||
"task_id": t.ID, "node_key": t.NodeKey, "node_name": t.NodeName,
|
||||
"approver_id": t.ApproverID, "approver_name": t.ApproverName,
|
||||
"status": t.Status, "status_label": approvalTaskLabel(t.Status),
|
||||
"comment": t.Comment, "action": t.Action,
|
||||
"create_time": t.CreateTime, "finish_time": t.FinishTime,
|
||||
})
|
||||
}
|
||||
return map[string]interface{}{
|
||||
"instance_id": inst.ID,
|
||||
"flow_id": inst.FlowID,
|
||||
"flow_name": flowNameOf(inst.FlowID),
|
||||
"biz_type": inst.BizType,
|
||||
"status": inst.Status,
|
||||
"status_label": approvalInstanceLabel(inst.Status),
|
||||
"current_node": inst.CurrentNode,
|
||||
"submit_name": inst.SubmitUserName,
|
||||
"submit_time": inst.CreateTime,
|
||||
"finish_time": inst.FinishTime,
|
||||
"tasks": tasks,
|
||||
}
|
||||
}
|
||||
|
||||
// flowNameOf 流程名称(流程被删除时回落为占位文案,不影响单据查看)
|
||||
func flowNameOf(flowID uint64) string {
|
||||
if flowID == 0 {
|
||||
return ""
|
||||
}
|
||||
var f models.TenantApprovalFlow
|
||||
if err := models.Orm.QueryTable(new(models.TenantApprovalFlow)).
|
||||
Filter("id", flowID).One(&f, "flow_name"); err == nil {
|
||||
return f.FlowName
|
||||
}
|
||||
return "已删除的审批流"
|
||||
}
|
||||
|
||||
func approvalTaskLabel(status int8) string {
|
||||
switch status {
|
||||
case models.ApprovalTaskApproved:
|
||||
return "已通过"
|
||||
case models.ApprovalTaskRejected:
|
||||
return "已驳回"
|
||||
case models.ApprovalTaskSkipped:
|
||||
return "已跳过"
|
||||
case models.ApprovalTaskNotified:
|
||||
return "已通知"
|
||||
default:
|
||||
return "待审批"
|
||||
}
|
||||
}
|
||||
|
||||
func approvalInstanceLabel(status int8) string {
|
||||
switch status {
|
||||
case models.ApprovalInstanceApproved:
|
||||
return "已通过"
|
||||
case models.ApprovalInstanceRejected:
|
||||
return "已驳回"
|
||||
case models.ApprovalInstanceWithdrawn:
|
||||
return "已撤回"
|
||||
default:
|
||||
return "审批中"
|
||||
}
|
||||
}
|
||||
|
||||
// CancelInstance 业务单据作废时同步终结在途实例,避免审批中心留下无效待办。
|
||||
// 不做成「驳回」是因为驳回会让单据回到已驳回态;这里直接按撤回处理,
|
||||
// 调用方已负责把业务单据置为终态。
|
||||
func CancelInstance(instID uint64, reason string) {
|
||||
if instID == 0 {
|
||||
return
|
||||
}
|
||||
var inst models.ApprovalInstance
|
||||
if err := models.Orm.QueryTable(new(models.ApprovalInstance)).
|
||||
Filter("id", instID).One(&inst, "id", "status"); err != nil {
|
||||
return
|
||||
}
|
||||
if inst.Status != models.ApprovalInstanceRunning {
|
||||
return
|
||||
}
|
||||
now := time.Now()
|
||||
_, _ = models.Orm.QueryTable(new(models.ApprovalInstance)).Filter("id", instID).
|
||||
Update(orm.Params{"status": models.ApprovalInstanceWithdrawn, "finish_time": now, "update_time": now})
|
||||
_, _ = models.Orm.QueryTable(new(models.ApprovalTask)).
|
||||
Filter("instance_id", instID).Filter("status", models.ApprovalTaskPending).
|
||||
Update(orm.Params{"status": models.ApprovalTaskSkipped, "comment": reason, "update_time": now})
|
||||
}
|
||||
Reference in new issue
Block a user