@@ -303,6 +303,76 @@ public async Task<ApiResult> Import([FromBody] System.Text.Json.JsonElement body
303303 }
304304 }
305305
306+ /// <summary>克隆/复制流程定义(含变量、参数)</summary>
307+ [ HttpPost ( "clone/{id}" ) ]
308+ public async Task < ApiResult > Clone ( long id )
309+ {
310+ var source = await _db . FlowDefinitions . FindAsync ( id ) ;
311+ if ( source == null || source . Deleted == 1 ) return ApiResult . Fail ( "流程不存在" ) ;
312+
313+ var newKey = $ "flow_{ Guid . NewGuid ( ) : N} ";
314+ var cloned = new FlowDefinitionEntity
315+ {
316+ FlowKey = newKey ,
317+ FlowName = $ "{ source . FlowName } _副本",
318+ FlowDesc = source . FlowDesc ,
319+ FlowType = source . FlowType ,
320+ GroupName = source . GroupName ,
321+ FlowContent = source . FlowContent ,
322+ Status = 0 ,
323+ CreatedAt = DateTime . Now . ToString ( "o" )
324+ } ;
325+ _db . FlowDefinitions . Add ( cloned ) ;
326+ await _db . SaveChangesAsync ( ) ;
327+
328+ // 复制变量
329+ var vars = await _db . VariableInfos
330+ . Where ( v => v . FlowDefinitionId == id && v . Deleted == 0 ) . ToListAsync ( ) ;
331+ foreach ( var v in vars )
332+ {
333+ _db . VariableInfos . Add ( new VariableInfoEntity
334+ {
335+ FlowDefinitionId = cloned . Id ,
336+ FlowKey = newKey ,
337+ VariableCode = v . VariableCode ,
338+ VariableName = v . VariableName ,
339+ DataType = v . DataType ,
340+ VariableType = v . VariableType ,
341+ DefaultValue = v . DefaultValue ,
342+ Description = v . Description ,
343+ Deleted = 0 ,
344+ CreatedAt = DateTime . Now . ToString ( "o" )
345+ } ) ;
346+ }
347+
348+ // 复制参数(入参/出参)
349+ var pars = await _db . Parameters
350+ . Where ( p => p . OwnerId == id && ( p . ParamType == 5 || p . ParamType == 6 ) && p . Deleted == 0 )
351+ . ToListAsync ( ) ;
352+ foreach ( var p in pars )
353+ {
354+ _db . Parameters . Add ( new ParameterEntity
355+ {
356+ OwnerId = cloned . Id ,
357+ OwnerCode = newKey ,
358+ ParamType = p . ParamType ,
359+ ParamCode = p . ParamCode ,
360+ ParamName = p . ParamName ,
361+ DataType = p . DataType ,
362+ ObjectCode = p . ObjectCode ,
363+ Required = p . Required ,
364+ DefaultValue = p . DefaultValue ,
365+ Description = p . Description ,
366+ SortNum = p . SortNum ,
367+ Deleted = 0 ,
368+ CreatedAt = DateTime . Now . ToString ( "o" )
369+ } ) ;
370+ }
371+
372+ await _db . SaveChangesAsync ( ) ;
373+ return ApiResult . Success ( new { id = cloned . Id , flowKey = newKey , flowName = cloned . FlowName } ) ;
374+ }
375+
306376 /// <summary>部署流程</summary>
307377 [ HttpPost ( "deploy" ) ]
308378 public async Task < ApiResult > Deploy ( [ FromBody ] FlowDeployRequest req )
0 commit comments