148 lines
4.2 KiB
Go
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)
|
|
}
|