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