WiiCITMS/process/oa/workflow.go
2025-11-07 14:14:34 +08:00

148 lines
4.2 KiB
Go

package oa
import (
"WiiCITMS/models/oa"
"WiiGenerates/WiiCITMS/generates/v1/go/types"
"WiiGoLibrary/apply/middle/process/v1"
"WiiGoLibrary/framework/db/v1/utils/mssql/unique"
"WiiGoLibrary/framework/hub/v1/dblib"
)
// CreateWorkflowRequest 创建工作流请求参数
type CreateWorkflowRequest struct {
WorkflowName string `json:"workflowName"` // 工作流名称
WorkflowType int `json:"workflowType"` // 工作流类型
Description string `json:"description"` // 工作流描述
CreatorGuid string `json:"creatorGuid"` // 创建人GUID
}
// QueryWorkflowsRequest 查询工作流请求参数
type QueryWorkflowsRequest struct {
WorkflowName string `json:"workflowName"` // 工作流名称,模糊查询
WorkflowType int `json:"workflowType"` // 工作流类型,-1表示所有类型
IsActive bool `json:"isActive"` // 是否只查询启用的工作流
Limit int `json:"limit"` // 分页参数,每页数量
Offset int `json:"offset"` // 分页参数,偏移量
}
// CreateWorkflow 创建工作流
func CreateWorkflow(params CreateWorkflowRequest) (*oa.WorkflowModel, *process.Process) {
// 创建工作流
workflow := oa.WorkflowInstance()
workflow.WorkflowName = params.WorkflowName
workflow.WorkflowType = int16(params.WorkflowType)
workflow.Description = params.Description
// 设置创建人
if params.CreatorGuid != "" {
creatorGuid, err := unique.FromString(params.CreatorGuid)
if err == nil {
workflow.Creator = creatorGuid
}
}
// 保存工作流
r := dblib.DBIns.DB.Create(workflow)
if r.Error != nil {
return nil, process.FailError(types.CreateWorkflowError, r.Error)
}
return workflow, process.Success(200)
}
// QueryWorkflows 查询工作流列表
func QueryWorkflows(params QueryWorkflowsRequest) ([]*oa.WorkflowModel, *process.Process) {
result := make([]*oa.WorkflowModel, 0)
db := dblib.DBIns.DB.Model(&oa.WorkflowModel{}).Where("(RecordStatus & 524288) = 0")
// 按工作流名称筛选
if params.WorkflowName != "" {
db = db.Where("WorkflowName LIKE ?", "%"+params.WorkflowName+"%")
}
// 按工作流类型筛选
if params.WorkflowType >= 0 {
db = db.Where("WorkflowType = ?", params.WorkflowType)
}
// 按是否启用筛选
if params.IsActive {
db = db.Where("IsActive = 1")
}
// 分页查询
limit := params.Limit
if limit <= 0 {
limit = 20 // 默认每页20条
}
offset := params.Offset
if offset < 0 {
offset = 0
}
r := db.Limit(limit).Offset(offset).Order("CreateTime DESC").Find(&result)
if r.Error != nil {
return result, process.FailError(types.QueryWorkflowError, r.Error)
}
return result, process.Success(200)
}
// GetWorkflowByID 根据ID获取工作流
func GetWorkflowByID(workflowGuid string) (*oa.WorkflowModel, *process.Process) {
guid, err := unique.FromString(workflowGuid)
if err != nil {
return nil, process.FailError(types.InvalidWorkflowParamError, err)
}
workflow := &oa.WorkflowModel{}
r := dblib.DBIns.DB.Where("RecordGuid = ? AND (RecordStatus & 524288) = 0", guid).First(workflow)
if r.Error != nil {
return nil, process.FailError(types.WorkflowNotFoundError, r.Error)
}
return workflow, process.Success(200)
}
// UpdateWorkflow 更新工作流
func UpdateWorkflow(workflowGuid string, params CreateWorkflowRequest) (*oa.WorkflowModel, *process.Process) {
// 获取工作流
workflow, proc := GetWorkflowByID(workflowGuid)
if proc.IsError() {
return nil, proc
}
// 更新工作流信息
workflow.WorkflowName = params.WorkflowName
workflow.WorkflowType = int16(params.WorkflowType)
workflow.Description = params.Description
// 保存更新
r := dblib.DBIns.DB.Save(workflow)
if r.Error != nil {
return nil, process.FailError(types.UpdateWorkflowError, r.Error)
}
return workflow, process.Success(200)
}
// ToggleWorkflowStatus 启用/禁用工作流
func ToggleWorkflowStatus(workflowGuid string, isActive bool) (*oa.WorkflowModel, *process.Process) {
// 获取工作流
workflow, proc := GetWorkflowByID(workflowGuid)
if proc.IsError() {
return nil, proc
}
// 更新状态
workflow.IsActive = isActive
// 保存更新
r := dblib.DBIns.DB.Save(workflow)
if r.Error != nil {
return nil, process.FailError(types.UpdateWorkflowError, r.Error)
}
return workflow, process.Success(200)
}