diff --git a/src/executor/tools/task/start/default.tsx b/src/executor/tools/task/start/default.tsx index 4f52475477b4869ab36caf927b6f2b27e2949134..a7986e7461f31980c61c7bbf4a0275cbaf62a653 100644 --- a/src/executor/tools/task/start/default.tsx +++ b/src/executor/tools/task/start/default.tsx @@ -1021,6 +1021,12 @@ const DefaultWayStart: React.FC = ({ ); if (instance) { message.success('提交成功'); + if(work.node && work.node.executors){ + const executors = await work.autoExecute(work.node.executors, work) + executors.map(i=>{ + i.execute({...JSON.parse(instance.data), workData: instance}) + }) + } finished?.(true, instance.id); } else { message.warn('提交失败'); diff --git a/src/ts/core/work/draft.ts b/src/ts/core/work/draft.ts index fb641a46c2238cd5130c05344088c8f034327ea7..bf33439cf7b4e6bc644073f9943585b59e89365f 100644 --- a/src/ts/core/work/draft.ts +++ b/src/ts/core/work/draft.ts @@ -6,6 +6,8 @@ import { DataProvider } from '@/ts/core/provider'; import { IWorkApply } from './apply'; import { FileInfo, IFile } from '../thing/fileinfo'; import { ITarget } from '../target/base/target'; +import { IExecutor } from './executor'; +import { Webhook } from './executor/webhook'; export interface IWorkDarft extends IFile { /** 内容 */ @@ -31,7 +33,12 @@ export interface IWorkDarft extends IFile { taskId?: string, pdata?: model.InstanceDataModel, ): Promise; -} + /** 创建时自动调用执行器 */ + autoExecute( + data: any, + workData: any + ): Promise; + } export class WorkDarft extends FileInfo implements IWorkDarft { constructor( @@ -152,4 +159,18 @@ export class WorkDarft extends FileInfo implements IWorkDarft { } } } + + async autoExecute(data: any, workData: any): Promise[]> { + let executors: IExecutor[] = []; + if (data) { + for (const item of data) { + switch (item.funcName) { + case 'Webhook': + executors.push(new Webhook({...item, workData}, workData)); + break; + } + } + } + return executors; + } } diff --git a/src/ts/core/work/executor/webhook.ts b/src/ts/core/work/executor/webhook.ts index 0c4c9523db66800b78deb8e9829d1481cd3159e7..6d62cb7cbaf0dc2a3e3d3d39cdfe496f5621723c 100644 --- a/src/ts/core/work/executor/webhook.ts +++ b/src/ts/core/work/executor/webhook.ts @@ -2,6 +2,7 @@ import { kernel, model } from '@/ts/base'; import Ajv from 'ajv'; import { Executor } from '.'; import { FormData } from './index'; +import { FormData as ExternalFormData } from './index'; import { WebhookExecutor } from '@/ts/base/model'; import axios from 'axios'; import message from '@/utils/message'; @@ -47,11 +48,12 @@ const schema = { * 外部链接 */ export class Webhook extends Executor { - async execute(data: FormData): Promise { + async execute(data: ExternalFormData): Promise { this.changeProgress(0); - const work = await this.task.loadWork( - this.task.taskdata.defineId, - this.task.taskdata.defineShareId || this.task.taskdata.shareId, + const workData: any = data.workData; + const work = workData || await this.task.loadWork( + this.task.taskdata?.defineId || this.task?.target.id, + this.task.taskdata?.defineShareId || this.task.taskdata?.shareId || this.task?.target.shareId, ); //前端调用 if (this.metadata.execType == '2') { @@ -59,14 +61,14 @@ export class Webhook extends Executor { const result: any = await axios.post( this.metadata.hookUrl, this.metadata.dataType ? { - work: work?.metadata, - taskData: this.task.taskdata, + work: work?.metadata || this.task.metadata, + taskData: this.task.taskdata || workData, person: kernel.user, - belong: this.task.belong.metadata, - instanceData: this.task.instanceData, + belong: this.task.belong.metadata || this.task?.target.metadata, + instanceData: this.task.instanceData || data, } : { - instanceId: this.task.taskdata.instanceId, - belongId: this.task.taskdata.belongId, + instanceId: this.task.taskdata?.instanceId || workData.id, + belongId: this.task.taskdata?.belongId || workData.belongId, createUser: orgCtrl.user.id }, { @@ -90,16 +92,16 @@ export class Webhook extends Executor { method: 'POST', header: { 'Content-Type': 'application/json' }, content: JSON.stringify(this.metadata.dataType ? { - work: work?.metadata, - taskData: this.task.taskdata, + work: work?.metadata || this.task.metadata, + taskData: this.task.taskdata || workData, person: kernel.user, - belong: this.task.belong.metadata, - instanceData: this.task.instanceData, + belong: this.task.belong.metadata || this.task?.target.metadata, + instanceData: this.task.instanceData || data, } : { - instanceId: this.task.taskdata.instanceId, - belongId: this.task.taskdata.belongId + instanceId: this.task.taskdata?.instanceId || workData.id, + belongId: this.task.taskdata?.belongId || workData.belongId, }), - targetId: this.metadata.execType == '1' ? this.task.taskdata.defineShareId : '0', + targetId: this.metadata.execType == '1' ? this.task.taskdata.defineShareId || this.task?.target.shareId : '0', }); if (result.success) { await this.writeBack(data, result); diff --git a/src/ts/core/work/index.ts b/src/ts/core/work/index.ts index dd4329758f1d74aef8883d5067960a28256c1d25..ce6095fc8dde7b174e8225c4636c33d90aabd17b 100644 --- a/src/ts/core/work/index.ts +++ b/src/ts/core/work/index.ts @@ -18,6 +18,8 @@ import { IReport, Report } from '../thing/standard/report'; import { XForm, XReport } from '@/ts/base/schema'; import { message } from 'antd'; import { IPerson } from '../target/person'; +import { IExecutor } from './executor'; +import { Webhook } from './executor/webhook'; export interface IWork extends IVersion { /** 我的办事 */ @@ -79,6 +81,11 @@ export interface IWork extends IVersion { items: schema.XProduct[], ): Promise; loadWorkNew(workId: string, shareId: string): Promise; + /** 创建时自动调用执行器 */ + autoExecute( + data: any, + workData: any + ): Promise; } export class Work extends Version implements IWork { @@ -867,4 +874,17 @@ export class Work extends Version implements IWork { message.warn('未找到办事!'); } } + async autoExecute(data: any, workData: any): Promise[]> { + let executors: IExecutor[] = []; + if (data) { + for (const item of data) { + switch (item.funcName) { + case 'Webhook': + executors.push(new Webhook({...item, workData}, workData)); + break; + } + } + } + return executors; + } } diff --git a/src/ts/core/work/task.ts b/src/ts/core/work/task.ts index fcc45bc181f93034d80900127028fc919b17b8d6..888adbfa8680a0574151e364ddbad8c10f1358b7 100644 --- a/src/ts/core/work/task.ts +++ b/src/ts/core/work/task.ts @@ -105,6 +105,11 @@ export interface IWorkTask extends IFile { /** 清除临时数据 */ clearFormTempData(): Promise; loadWorkNew(workId: string, shareId: string): Promise; + /** 创建时自动调用执行器 */ + autoExecute( + data: any, + workData: any + ): Promise; } export class WorkTask extends FileInfo implements IWorkTask { @@ -306,6 +311,20 @@ export class WorkTask extends FileInfo implements IWorkTask { } return executors; } + + async autoExecute(data: any, workData: any): Promise[]> { + let executors: IExecutor[] = []; + if (data) { + for (const item of data) { + switch (item.funcName) { + case 'Webhook': + executors.push(new Webhook({...item, workData}, this)); + break; + } + } + } + return executors; + } async recallApply(): Promise { await this.dealInstanceChangeData();