midway-fatcms 0.0.1-beta.16 → 0.0.1-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -7,7 +7,16 @@ declare class AsyncTaskRunner {
|
|
|
7
7
|
taskHandlerMap: Map<string, ISysAsyncTaskHandler>;
|
|
8
8
|
executeTaskList(taskList: SysAsyncTaskEntity[]): Promise<void>;
|
|
9
9
|
private executeTask;
|
|
10
|
+
/**
|
|
11
|
+
* 更新任务状态或任务进度
|
|
12
|
+
* @param taskElement
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
10
15
|
private updateTaskStatus;
|
|
16
|
+
/**
|
|
17
|
+
* 获取当前进程可以处理的任务类型。
|
|
18
|
+
*/
|
|
19
|
+
getHandlerTaskTypeList(): string[];
|
|
11
20
|
}
|
|
12
21
|
/**
|
|
13
22
|
* 业务可以扩展
|
|
@@ -59,6 +59,11 @@ class AsyncTaskRunner {
|
|
|
59
59
|
};
|
|
60
60
|
await taskHandler.execute({ task: taskElement, updateTaskStatus });
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* 更新任务状态或任务进度
|
|
64
|
+
* @param taskElement
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
62
67
|
async updateTaskStatus(taskElement) {
|
|
63
68
|
return await schedule_1.ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx) => {
|
|
64
69
|
const curdProService = await ctx.requestContext.getAsync("curdProService");
|
|
@@ -78,6 +83,13 @@ class AsyncTaskRunner {
|
|
|
78
83
|
return res.getResModel().affected;
|
|
79
84
|
});
|
|
80
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* 获取当前进程可以处理的任务类型。
|
|
88
|
+
*/
|
|
89
|
+
getHandlerTaskTypeList() {
|
|
90
|
+
const keys = this.taskHandlerMap.keys();
|
|
91
|
+
return [...keys];
|
|
92
|
+
}
|
|
81
93
|
}
|
|
82
94
|
/**
|
|
83
95
|
* 业务可以扩展
|
|
@@ -90,9 +102,18 @@ const LOCK_KEY_ASYNC_TASK_RUNNER = "LOCK_KEY_ASYNC_TASK_RUNNER";
|
|
|
90
102
|
let AsyncTaskRunnerService = class AsyncTaskRunnerService extends BaseService_1.BaseService {
|
|
91
103
|
async fetchPendingTasks() {
|
|
92
104
|
const { SystemDbName, SystemDbType } = global_config_1.GLOBAL_STATIC_CONFIG.getConfig();
|
|
105
|
+
// 只获取本进程能够处理的任务类型。
|
|
106
|
+
const taskTypeList = exports.ASYNC_TASK_RUNNER.getHandlerTaskTypeList();
|
|
107
|
+
if (taskTypeList.length === 0) {
|
|
108
|
+
return Promise.resolve();
|
|
109
|
+
}
|
|
110
|
+
// 查询等待处理的任务。
|
|
93
111
|
const queryRes = await this.curdProService.executeCrudByCfg({
|
|
94
112
|
condition: {
|
|
95
|
-
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.PENDING
|
|
113
|
+
task_status: AsyncTaskModel_1.SysAsyncTaskStatus.PENDING,
|
|
114
|
+
task_type: {
|
|
115
|
+
"$in": taskTypeList
|
|
116
|
+
}
|
|
96
117
|
},
|
|
97
118
|
orderBy: 'id+',
|
|
98
119
|
limit: 10
|
|
@@ -107,6 +128,7 @@ let AsyncTaskRunnerService = class AsyncTaskRunnerService extends BaseService_1.
|
|
|
107
128
|
return Promise.resolve();
|
|
108
129
|
}
|
|
109
130
|
const taskIds = taskList.map(elem => elem.id).filter(Boolean);
|
|
131
|
+
// 将状态更新为处理中。防止其它进程重复处理。
|
|
110
132
|
await this.curdProService.executeCrudByCfg({
|
|
111
133
|
condition: {
|
|
112
134
|
id: {
|
|
@@ -122,6 +144,7 @@ let AsyncTaskRunnerService = class AsyncTaskRunnerService extends BaseService_1.
|
|
|
122
144
|
sqlDatabase: SystemDbName,
|
|
123
145
|
sqlDbType: SystemDbType,
|
|
124
146
|
});
|
|
147
|
+
// 开始执行。
|
|
125
148
|
exports.ASYNC_TASK_RUNNER.executeTaskList(taskList).then(() => {
|
|
126
149
|
console.log("ASYNC_TASK_RUNNER finished taskIds ==> " + JSON.stringify(taskIds));
|
|
127
150
|
});
|
package/package.json
CHANGED
|
@@ -57,6 +57,11 @@ class AsyncTaskRunner {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* 更新任务状态或任务进度
|
|
62
|
+
* @param taskElement
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
60
65
|
private async updateTaskStatus(taskElement: SysAsyncTaskEntity) {
|
|
61
66
|
return await ANONYMOUS_CONTEXT.runServiceAtAnonymousContext(async (ctx: IMidwayKoaContext) => {
|
|
62
67
|
const curdProService: CurdProService = await ctx.requestContext.getAsync("curdProService");
|
|
@@ -78,8 +83,18 @@ class AsyncTaskRunner {
|
|
|
78
83
|
return res.getResModel().affected;
|
|
79
84
|
});
|
|
80
85
|
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
|
|
89
|
+
/**
|
|
90
|
+
* 获取当前进程可以处理的任务类型。
|
|
91
|
+
*/
|
|
92
|
+
public getHandlerTaskTypeList(): string[] {
|
|
93
|
+
const keys = this.taskHandlerMap.keys();
|
|
94
|
+
return [...keys];
|
|
82
95
|
}
|
|
96
|
+
|
|
97
|
+
|
|
83
98
|
}
|
|
84
99
|
|
|
85
100
|
|
|
@@ -108,9 +123,20 @@ export class AsyncTaskRunnerService extends BaseService implements IScheduleServ
|
|
|
108
123
|
|
|
109
124
|
const {SystemDbName, SystemDbType} = GLOBAL_STATIC_CONFIG.getConfig();
|
|
110
125
|
|
|
126
|
+
// 只获取本进程能够处理的任务类型。
|
|
127
|
+
const taskTypeList = ASYNC_TASK_RUNNER.getHandlerTaskTypeList();
|
|
128
|
+
if (taskTypeList.length === 0) {
|
|
129
|
+
return Promise.resolve();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
// 查询等待处理的任务。
|
|
111
134
|
const queryRes = await this.curdProService.executeCrudByCfg({
|
|
112
135
|
condition: {
|
|
113
|
-
task_status: SysAsyncTaskStatus.PENDING
|
|
136
|
+
task_status: SysAsyncTaskStatus.PENDING,
|
|
137
|
+
task_type: {
|
|
138
|
+
"$in": taskTypeList
|
|
139
|
+
}
|
|
114
140
|
},
|
|
115
141
|
orderBy: 'id+',
|
|
116
142
|
limit: 10
|
|
@@ -127,9 +153,9 @@ export class AsyncTaskRunnerService extends BaseService implements IScheduleServ
|
|
|
127
153
|
if (taskList.length === 0) {
|
|
128
154
|
return Promise.resolve();
|
|
129
155
|
}
|
|
130
|
-
|
|
131
156
|
const taskIds = taskList.map(elem => elem.id).filter(Boolean)
|
|
132
157
|
|
|
158
|
+
// 将状态更新为处理中。防止其它进程重复处理。
|
|
133
159
|
await this.curdProService.executeCrudByCfg({
|
|
134
160
|
condition: {
|
|
135
161
|
id: {
|
|
@@ -147,6 +173,7 @@ export class AsyncTaskRunnerService extends BaseService implements IScheduleServ
|
|
|
147
173
|
});
|
|
148
174
|
|
|
149
175
|
|
|
176
|
+
// 开始执行。
|
|
150
177
|
ASYNC_TASK_RUNNER.executeTaskList(taskList).then(() => {
|
|
151
178
|
console.log("ASYNC_TASK_RUNNER finished taskIds ==> " + JSON.stringify(taskIds))
|
|
152
179
|
})
|