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) }