148 lines
4.7 KiB
Go
148 lines
4.7 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"
|
|
)
|
|
|
|
// CreateNodeRequest 创建工作流节点请求参数
|
|
type CreateNodeRequest struct {
|
|
WorkflowGuid string `json:"workflowGuid"` // 所属工作流ID
|
|
NodeName string `json:"nodeName"` // 节点名称
|
|
NodeType int `json:"nodeType"` // 节点类型
|
|
NodeOrder int `json:"nodeOrder"` // 节点顺序
|
|
ApproverType int `json:"approverType"` // 审批人类型
|
|
ApproverValue string `json:"approverValue"` // 审批人值
|
|
ConditionExp string `json:"conditionExp"` // 条件表达式
|
|
Description string `json:"description"` // 节点描述
|
|
}
|
|
|
|
// QueryNodesRequest 查询工作流节点请求参数
|
|
type QueryNodesRequest struct {
|
|
WorkflowGuid string `json:"workflowGuid"` // 工作流ID
|
|
NodeType int `json:"nodeType"` // 节点类型,-1表示所有类型
|
|
}
|
|
|
|
// CreateWorkflowNode 创建工作流节点
|
|
func CreateWorkflowNode(params CreateNodeRequest) (*oa.WorkflowNodeModel, *process.Process) {
|
|
// 验证工作流是否存在
|
|
workflowGuid, err := unique.FromString(params.WorkflowGuid)
|
|
if err != nil {
|
|
return nil, process.FailError(types.InvalidOACreateParamError, err)
|
|
}
|
|
|
|
workflow := &oa.WorkflowModel{}
|
|
r := dblib.DBIns.DB.Where("RecordGuid = ? AND (RecordStatus & 524288) = 0", workflowGuid).First(workflow)
|
|
if r.Error != nil {
|
|
return nil, process.FailError(types.WorkflowNotFoundError, r.Error)
|
|
}
|
|
|
|
// 创建工作流节点
|
|
node := oa.WorkflowNodeInstance()
|
|
node.WorkflowGuid = workflowGuid
|
|
node.NodeName = params.NodeName
|
|
node.NodeType = int16(params.NodeType)
|
|
node.NodeOrder = params.NodeOrder
|
|
node.ApproverType = int16(params.ApproverType)
|
|
node.ApproverValue = params.ApproverValue
|
|
node.ConditionExp = params.ConditionExp
|
|
node.Description = params.Description
|
|
|
|
// 保存节点
|
|
r = dblib.DBIns.DB.Create(node)
|
|
if r.Error != nil {
|
|
return nil, process.FailError(types.CreateWorkflowNodeError, r.Error)
|
|
}
|
|
|
|
return node, process.Success(200)
|
|
}
|
|
|
|
// QueryWorkflowNodes 查询工作流节点
|
|
func QueryWorkflowNodes(params QueryNodesRequest) ([]*oa.WorkflowNodeModel, *process.Process) {
|
|
result := make([]*oa.WorkflowNodeModel, 0)
|
|
|
|
// 验证工作流是否存在
|
|
workflowGuid, err := unique.FromString(params.WorkflowGuid)
|
|
if err != nil {
|
|
return nil, process.FailError(types.InvalidOAQueryParamError, err)
|
|
}
|
|
|
|
db := dblib.DBIns.DB.Model(&oa.WorkflowNodeModel{}).Where("WorkflowGuid = ? AND (RecordStatus & 524288) = 0", workflowGuid)
|
|
|
|
// 按节点类型筛选
|
|
if params.NodeType >= 0 {
|
|
db = db.Where("NodeType = ?", params.NodeType)
|
|
}
|
|
|
|
// 按节点顺序排序
|
|
r := db.Order("NodeOrder ASC").Find(&result)
|
|
if r.Error != nil {
|
|
return result, process.FailError(types.QueryWorkflowNodeError, r.Error)
|
|
}
|
|
|
|
return result, process.Success(200)
|
|
}
|
|
|
|
// GetWorkflowNodeByID 根据ID获取工作流节点
|
|
func GetWorkflowNodeByID(nodeGuid string) (*oa.WorkflowNodeModel, *process.Process) {
|
|
guid, err := unique.FromString(nodeGuid)
|
|
if err != nil {
|
|
return nil, process.FailError(types.InvalidOAQueryParamError, err)
|
|
}
|
|
|
|
node := &oa.WorkflowNodeModel{}
|
|
r := dblib.DBIns.DB.Where("RecordGuid = ? AND (RecordStatus & 524288) = 0", guid).First(node)
|
|
if r.Error != nil {
|
|
return nil, process.FailError(types.WorkflowNodeNotFoundError, r.Error)
|
|
}
|
|
|
|
return node, process.Success(200)
|
|
}
|
|
|
|
// UpdateWorkflowNode 更新工作流节点
|
|
func UpdateWorkflowNode(nodeGuid string, params CreateNodeRequest) (*oa.WorkflowNodeModel, *process.Process) {
|
|
// 获取工作流节点
|
|
node, proc := GetWorkflowNodeByID(nodeGuid)
|
|
if proc.IsError() {
|
|
return nil, proc
|
|
}
|
|
|
|
// 更新节点信息
|
|
node.NodeName = params.NodeName
|
|
node.NodeType = int16(params.NodeType)
|
|
node.NodeOrder = params.NodeOrder
|
|
node.ApproverType = int16(params.ApproverType)
|
|
node.ApproverValue = params.ApproverValue
|
|
node.ConditionExp = params.ConditionExp
|
|
node.Description = params.Description
|
|
|
|
// 保存更新
|
|
r := dblib.DBIns.DB.Save(node)
|
|
if r.Error != nil {
|
|
return nil, process.FailError(types.UpdateWorkflowNodeError, r.Error)
|
|
}
|
|
|
|
return node, process.Success(200)
|
|
}
|
|
|
|
// DeleteWorkflowNode 删除工作流节点(逻辑删除)
|
|
func DeleteWorkflowNode(nodeGuid string) *process.Process {
|
|
// 验证GUID格式
|
|
guid, err := unique.FromString(nodeGuid)
|
|
if err != nil {
|
|
return process.FailError(types.InvalidOAQueryParamError, err)
|
|
}
|
|
|
|
// 使用原生SQL直接执行位操作
|
|
sql := "UPDATE " + oa.WorkflowNodeTable + " SET RecordStatus = RecordStatus | 524288 WHERE RecordGuid = ?"
|
|
r := dblib.DBIns.DB.Exec(sql, guid)
|
|
if r.Error != nil {
|
|
return process.FailError(types.DeleteWorkflowNodeError, r.Error)
|
|
}
|
|
|
|
return process.Success(200)
|
|
}
|