@nger/fk-upload 1.0.201 → 1.0.204

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.
Files changed (128) hide show
  1. package/dist/{templates → controllers}/code.d.ts +0 -0
  2. package/dist/{templates → controllers}/code.js +2 -1
  3. package/dist/controllers/relogin.d.ts +8 -0
  4. package/dist/controllers/relogin.js +42 -0
  5. package/dist/{templates → controllers}/verify.d.ts +0 -0
  6. package/dist/{templates → controllers}/verify.js +0 -0
  7. package/dist/entities/check-task.d.ts +13 -0
  8. package/dist/entities/check-task.js +221 -0
  9. package/dist/entities/download-task.d.ts +23 -0
  10. package/dist/entities/download-task.js +445 -0
  11. package/dist/entities/effect-task.d.ts +12 -0
  12. package/dist/entities/effect-task.js +207 -0
  13. package/dist/entities/fk-account.d.ts +16 -0
  14. package/dist/entities/fk-account.js +295 -0
  15. package/dist/entities/fk-jiqun.d.ts +5 -0
  16. package/dist/entities/fk-jiqun.js +56 -0
  17. package/dist/entities/upload-task.d.ts +15 -0
  18. package/dist/entities/upload-task.js +333 -0
  19. package/dist/entities/w7-account.d.ts +11 -0
  20. package/dist/entities/w7-account.js +126 -0
  21. package/dist/entities/w7.d.ts +10 -0
  22. package/dist/entities/w7.js +107 -0
  23. package/dist/entities/w7_chat_topic.d.ts +9 -0
  24. package/dist/entities/w7_chat_topic.js +58 -0
  25. package/dist/entities/w7_uni_account.d.ts +4 -0
  26. package/dist/entities/w7_uni_account.js +23 -0
  27. package/dist/fk-upload.module.d.ts +5 -0
  28. package/dist/fk-upload.module.js +76 -43
  29. package/dist/main.d.ts +1 -0
  30. package/dist/main.js +18 -29
  31. package/dist/services/check.service.d.ts +6 -0
  32. package/dist/services/check.service.js +32 -0
  33. package/dist/services/client.service.d.ts +6 -0
  34. package/dist/services/client.service.js +29 -0
  35. package/dist/services/download.service.d.ts +15 -0
  36. package/dist/services/download.service.js +139 -0
  37. package/dist/services/effect.service.d.ts +7 -0
  38. package/dist/services/effect.service.js +34 -0
  39. package/dist/services/fk.service.d.ts +24 -0
  40. package/dist/services/fk.service.js +323 -0
  41. package/dist/services/login.service.d.ts +17 -0
  42. package/dist/services/login.service.js +95 -0
  43. package/dist/services/upload.service.d.ts +13 -0
  44. package/dist/services/upload.service.js +100 -0
  45. package/dist/tasks/actions.d.ts +28 -0
  46. package/dist/tasks/actions.js +12 -0
  47. package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
  48. package/dist/tasks/check-task.js +205 -0
  49. package/dist/tasks/download-continue-task.d.ts +9 -0
  50. package/dist/tasks/download-continue-task.js +127 -0
  51. package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
  52. package/dist/tasks/download-task.js +128 -0
  53. package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
  54. package/dist/tasks/effect-task.js +111 -0
  55. package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
  56. package/dist/{templates/tasks → tasks}/providers.js +11 -5
  57. package/dist/tasks/upload-continue-task.d.ts +8 -0
  58. package/dist/tasks/upload-continue-task.js +114 -0
  59. package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
  60. package/dist/tasks/upload-task.js +114 -0
  61. package/package.json +18 -14
  62. package/pnpm-lock.yaml +36 -1435
  63. package/dist/electon.d.ts +0 -3
  64. package/dist/electon.js +0 -80
  65. package/dist/entities/fk-download-task.entity.d.ts +0 -18
  66. package/dist/entities/fk-download-task.entity.js +0 -142
  67. package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
  68. package/dist/entities/fk-login-cookie.entity.js +0 -46
  69. package/dist/entities/fk-login.entity.d.ts +0 -12
  70. package/dist/entities/fk-login.entity.js +0 -80
  71. package/dist/entities/index.d.ts +0 -3
  72. package/dist/entities/index.js +0 -6
  73. package/dist/login.controller.d.ts +0 -14
  74. package/dist/login.controller.js +0 -197
  75. package/dist/mq-runner.d.ts +0 -5
  76. package/dist/mq-runner.js +0 -19
  77. package/dist/static/task-manage.d.ts +0 -6
  78. package/dist/static/task-manage.js +0 -34
  79. package/dist/templates/add-fk-login.d.ts +0 -12
  80. package/dist/templates/add-fk-login.js +0 -93
  81. package/dist/templates/add-task.d.ts +0 -13
  82. package/dist/templates/add-task.js +0 -78
  83. package/dist/templates/check-upload.d.ts +0 -38
  84. package/dist/templates/check-upload.js +0 -195
  85. package/dist/templates/component.d.ts +0 -10
  86. package/dist/templates/component.js +0 -39
  87. package/dist/templates/error.d.ts +0 -4
  88. package/dist/templates/error.js +0 -27
  89. package/dist/templates/help.d.ts +0 -7
  90. package/dist/templates/help.js +0 -52
  91. package/dist/templates/player.d.ts +0 -4
  92. package/dist/templates/player.js +0 -23
  93. package/dist/templates/setting.d.ts +0 -13
  94. package/dist/templates/setting.js +0 -65
  95. package/dist/templates/task-manage.d.ts +0 -21
  96. package/dist/templates/task-manage.js +0 -314
  97. package/dist/templates/tasks/actions.d.ts +0 -44
  98. package/dist/templates/tasks/actions.js +0 -9
  99. package/dist/templates/tasks/check-task.d.ts +0 -8
  100. package/dist/templates/tasks/check-task.js +0 -89
  101. package/dist/templates/tasks/download-task.js +0 -130
  102. package/dist/templates/tasks/effect-task.js +0 -76
  103. package/dist/templates/tasks/fk.service.d.ts +0 -28
  104. package/dist/templates/tasks/fk.service.js +0 -254
  105. package/dist/templates/tasks/schedule-task.js +0 -94
  106. package/dist/templates/tasks/task.service.d.ts +0 -11
  107. package/dist/templates/tasks/task.service.js +0 -114
  108. package/dist/templates/tasks/upload-task.js +0 -97
  109. package/dist/templates/tasks/yasuo-task.d.ts +0 -0
  110. package/dist/templates/tasks/yasuo-task.js +0 -0
  111. package/dist/templates/upload-task.d.ts +0 -9
  112. package/dist/templates/upload-task.js +0 -141
  113. package/dist/templates/upload.d.ts +0 -16
  114. package/dist/templates/upload.js +0 -232
  115. package/dist/urlSafeBase64Decode.d.ts +0 -3
  116. package/dist/urlSafeBase64Decode.js +0 -32
  117. package/electron/.env +0 -32
  118. package/electron/package.json +0 -31
  119. package/electron/pnpm-lock.yaml +0 -2878
  120. package/fk-upload-pc/.vscode/extensions.json +0 -3
  121. package/fk-upload-pc/README.md +0 -16
  122. package/fk-upload-pc/index.html +0 -13
  123. package/fk-upload-pc/package.json +0 -19
  124. package/fk-upload-pc/pnpm-lock.yaml +0 -489
  125. package/fk-upload-pc/public/favicon.ico +0 -0
  126. package/fk-upload-pc/tsconfig.json +0 -18
  127. package/fk-upload-pc/tsconfig.node.json +0 -8
  128. package/fk-upload-pc/vite.config.ts +0 -7
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UploadService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const upload_task_1 = require("./../entities/upload-task");
6
+ const core_1 = require("@nger/core");
7
+ const typeorm_1 = require("@nger/typeorm");
8
+ const rabbitmq_1 = require("@nger/rabbitmq");
9
+ const actions_1 = require("../tasks/actions");
10
+ let UploadService = class UploadService {
11
+ injector;
12
+ db;
13
+ constructor(injector, db) {
14
+ this.injector = injector;
15
+ this.db = db;
16
+ }
17
+ async startUpload(id) {
18
+ const download = await this.db.manager.findOneOrFail(upload_task_1.FkUploadTask, { where: { id } });
19
+ if (download.status === '1') {
20
+ // no start
21
+ await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `2` });
22
+ await this.start(id);
23
+ }
24
+ else if (download.status === '2') {
25
+ // wait
26
+ await this.start(id);
27
+ }
28
+ else if (download.status === '3') {
29
+ // uploading
30
+ await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
31
+ await this.continue(id);
32
+ }
33
+ else if (download.status === '4') {
34
+ // stop
35
+ await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
36
+ await this.continue(id);
37
+ }
38
+ else if (download.status === '5') {
39
+ // wait continue
40
+ await this.continue(id);
41
+ }
42
+ else if (download.status === '6') {
43
+ // error
44
+ await this.db.manager.update(upload_task_1.FkUploadTask, id, { status: `5` });
45
+ await this.continue(id);
46
+ }
47
+ else if (download.status === '7') {
48
+ }
49
+ else {
50
+ await this.continue(id);
51
+ }
52
+ }
53
+ async start(id) {
54
+ const db = this.injector.get(typeorm_1.Db);
55
+ const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
56
+ where: { id }
57
+ });
58
+ const taskManager = this.injector.get(rabbitmq_1.TaskManager);
59
+ const t = new rabbitmq_1.TaskEntity();
60
+ t.topic = actions_1.UPLOAD_ACTION;
61
+ t.data = { id: upload.id };
62
+ await taskManager.send(t);
63
+ }
64
+ async starts(ids) {
65
+ return Promise.all(ids.map(id => this.startUpload(id)));
66
+ }
67
+ async continue(id) {
68
+ const db = this.injector.get(typeorm_1.Db);
69
+ const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
70
+ where: { id }
71
+ });
72
+ const taskManager = this.injector.get(rabbitmq_1.TaskManager);
73
+ const t = new rabbitmq_1.TaskEntity();
74
+ t.topic = actions_1.UPLOAD_CONTINUE_ACTION;
75
+ t.data = { id: upload.id };
76
+ await taskManager.send(t);
77
+ }
78
+ async stop(id) {
79
+ const db = this.injector.get(typeorm_1.Db);
80
+ const upload = await db.manager.findOneOrFail(upload_task_1.FkUploadTask, {
81
+ where: { id }
82
+ });
83
+ if (upload.status === '7') { }
84
+ else if (upload.status === '1') {
85
+ }
86
+ else if (upload.status === '2') {
87
+ }
88
+ else {
89
+ await db.manager.update(upload_task_1.FkUploadTask, id, { status: '4' });
90
+ }
91
+ }
92
+ async stops(ids) {
93
+ return Promise.all((ids || []).map(id => this.stop(id)));
94
+ }
95
+ };
96
+ UploadService = tslib_1.__decorate([
97
+ (0, core_1.Injectable)(),
98
+ tslib_1.__metadata("design:paramtypes", [core_1.Injector, typeorm_1.Db])
99
+ ], UploadService);
100
+ exports.UploadService = UploadService;
@@ -0,0 +1,28 @@
1
+ import { StringToken } from "@nger/core";
2
+ export interface IDownloadTask {
3
+ id: number;
4
+ }
5
+ export declare const DOWNLOAD_ACTION: StringToken<IDownloadTask>;
6
+ export declare const DOWNLOAD_CONTINUE_ACTION: StringToken<IDownloadTask>;
7
+ export interface IScheduleTask {
8
+ name: string;
9
+ rule: string;
10
+ }
11
+ export declare const SCHEDULE_ACTION: StringToken<IScheduleTask>;
12
+ export interface IUploadTask {
13
+ id: number;
14
+ }
15
+ export declare const UPLOAD_ACTION: StringToken<IUploadTask>;
16
+ export declare const UPLOAD_CONTINUE_ACTION: StringToken<IUploadTask>;
17
+ export declare const YASUO_ACTION: StringToken<IUploadTask>;
18
+ export interface IEffectTask {
19
+ id: number;
20
+ }
21
+ export declare const EFFECT_ACTION: StringToken<IEffectTask>;
22
+ export interface ICheckTask {
23
+ id: number;
24
+ to: string;
25
+ from: string;
26
+ }
27
+ export declare const CHECK_ACTION: StringToken<ICheckTask>;
28
+ export declare const CHECK_CONTINUE_ACTION: StringToken<ICheckTask>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CHECK_CONTINUE_ACTION = exports.CHECK_ACTION = exports.EFFECT_ACTION = exports.YASUO_ACTION = exports.UPLOAD_CONTINUE_ACTION = exports.UPLOAD_ACTION = exports.SCHEDULE_ACTION = exports.DOWNLOAD_CONTINUE_ACTION = exports.DOWNLOAD_ACTION = void 0;
4
+ exports.DOWNLOAD_ACTION = `@nger/fk-upload/download-task`;
5
+ exports.DOWNLOAD_CONTINUE_ACTION = `@nger/fk-upload/download-continue-task`;
6
+ exports.SCHEDULE_ACTION = `@nger/fk-upload/schedule-task`;
7
+ exports.UPLOAD_ACTION = `@nger/fk-upload/upload-task`;
8
+ exports.UPLOAD_CONTINUE_ACTION = `@nger/fk-upload/upload-continue-task`;
9
+ exports.YASUO_ACTION = `@nger/fk-upload/yasuo-task`;
10
+ exports.EFFECT_ACTION = `@nger/fk-upload/effect-task`;
11
+ exports.CHECK_ACTION = `@nger/fk-upload/check-task`;
12
+ exports.CHECK_CONTINUE_ACTION = `@nger/fk-upload/check-continue-task`;
@@ -1,9 +1,7 @@
1
- import { Task } from "@nger/rabbitmq";
2
1
  import { Injector, Next } from "@nger/core";
3
- /**
4
- * finish
5
- */
6
- export declare class ScheduleTask extends Task {
2
+ import { Task } from "@nger/rabbitmq";
3
+ export declare class CheckTask extends Task {
7
4
  constructor();
5
+ ids: Set<any>;
8
6
  handle(injector: Injector, next?: Next): Promise<void>;
9
7
  }
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckTask = void 0;
4
+ const effect_service_1 = require("./../services/effect.service");
5
+ const effect_task_1 = require("./../entities/effect-task");
6
+ const typeorm_1 = require("@nger/typeorm");
7
+ const rabbitmq_1 = require("@nger/rabbitmq");
8
+ const actions_1 = require("./actions");
9
+ const check_task_1 = require("../entities/check-task");
10
+ const schedule_1 = require("@nger/schedule");
11
+ const typeorm_2 = require("typeorm");
12
+ const w7_chat_topic_1 = require("../entities/w7_chat_topic");
13
+ const w7_uni_account_1 = require("../entities/w7_uni_account");
14
+ const download_task_1 = require("../entities/download-task");
15
+ const upload_task_1 = require("../entities/upload-task");
16
+ const date_fns_1 = require("date-fns");
17
+ const download_service_1 = require("../services/download.service");
18
+ const upload_service_1 = require("../services/upload.service");
19
+ class CheckTask extends rabbitmq_1.Task {
20
+ constructor() {
21
+ super(actions_1.CHECK_ACTION);
22
+ this.count = 10;
23
+ }
24
+ ids = new Set();
25
+ async handle(injector, next) {
26
+ const db = injector.get(typeorm_1.Db);
27
+ const task = injector.get(rabbitmq_1.DATA);
28
+ const complete = injector.get(rabbitmq_1.COMPLETE);
29
+ const fail = injector.get(rabbitmq_1.FAIL);
30
+ const { id, from, to } = task;
31
+ const check = await db.manager.findOne(check_task_1.FkCheckTask, { where: { id: task.id }, relations: ['w7Account', 'w7Account.fkAccount', 'w7Account.w7'] });
32
+ if (!check) {
33
+ complete();
34
+ return next && next();
35
+ }
36
+ console.log({ from, to, id, status: check.status });
37
+ const manager = injector.get(rabbitmq_1.TaskManager);
38
+ if (this.ids.has(id)) {
39
+ complete();
40
+ return next && next();
41
+ }
42
+ if (check.status === '1') {
43
+ let job;
44
+ console.log(`work start ------- \n\n\n`);
45
+ this.ids.add(task.id);
46
+ const finish = async (reson) => {
47
+ this.ids.delete(check.id);
48
+ await db.manager.update(check_task_1.FkCheckTask, check.id, { status: `1`, desc: reson });
49
+ complete();
50
+ schedule.cancelJob(check.title);
51
+ };
52
+ const create = async () => {
53
+ const item = new rabbitmq_1.TaskEntity();
54
+ item.topic = actions_1.CHECK_ACTION;
55
+ item.data = task;
56
+ await manager.send(item);
57
+ };
58
+ await db.manager.update(check_task_1.FkCheckTask, check.id, { status: `3`, desc: `` });
59
+ const schedule = injector.get(schedule_1.ScheduleService);
60
+ const type = check.type;
61
+ const w7Account = check.w7Account;
62
+ if (!w7Account) {
63
+ await finish(`绑定错误`);
64
+ return next && next();
65
+ }
66
+ const w7 = w7Account.w7;
67
+ if (!w7) {
68
+ await finish(`绑定错误`);
69
+ return next && next();
70
+ }
71
+ const fkAccount = w7Account.fkAccount;
72
+ if (!fkAccount) {
73
+ await finish(`绑定错误`);
74
+ complete();
75
+ return next && next();
76
+ }
77
+ const ds = new typeorm_2.DataSource({
78
+ type: 'mysql',
79
+ host: w7.host,
80
+ port: w7.port,
81
+ password: w7.password,
82
+ database: w7.database,
83
+ username: w7.username,
84
+ synchronize: false,
85
+ entities: [
86
+ w7_chat_topic_1.W7ChatTopicEntity,
87
+ w7_uni_account_1.W7UniAccount
88
+ ]
89
+ });
90
+ await ds.initialize();
91
+ const w7UniAccount = await ds.manager.findOne(w7_uni_account_1.W7UniAccount, { where: { name: w7Account.username } });
92
+ if (!w7UniAccount) {
93
+ await finish(`绑定错误`);
94
+ return next && next();
95
+ }
96
+ const uniacid = w7UniAccount.uniacid;
97
+ const id = check.id;
98
+ const count = check.count;
99
+ async function run(time) {
100
+ console.log(time);
101
+ const runtimeCheck = await db.manager.findOne(check_task_1.FkCheckTask, { where: { id } });
102
+ if (!runtimeCheck) {
103
+ await finish(``);
104
+ return;
105
+ }
106
+ if (runtimeCheck.status !== `3`) {
107
+ await finish(`人为关闭`);
108
+ return;
109
+ }
110
+ if (type === 'create_download') {
111
+ const now = new Date().getTime() - 1000 * 60 * 60 * 24 * 8;
112
+ (0, date_fns_1.format)(now, 'yyyy');
113
+ const _from = (0, date_fns_1.format)(now, 'yyyy-MM-dd HH:mm:ss');
114
+ const nowTime = Math.floor(now / 1000);
115
+ const downloads = await db.manager.find(download_task_1.FkDownloadTask, { where: { createDate: (0, typeorm_2.MoreThan)(_from) } });
116
+ console.log(downloads.length);
117
+ const ids = downloads.map(it => it.topicId).filter(it => !!it);
118
+ const where = { uniacid, createTime: (0, typeorm_2.MoreThan)(nowTime) };
119
+ if (ids.length > 0) {
120
+ where.id = (0, typeorm_2.Not)((0, typeorm_2.In)(ids));
121
+ }
122
+ const topics = await ds.manager.find(w7_chat_topic_1.W7ChatTopicEntity, { where });
123
+ topics.filter(it => it.thirdUrl && it.thirdUrl.length > 0 && it.thirdUrl.endsWith('.mp4') && it.topicStyle === 6)
124
+ .map(async (topic) => {
125
+ const downloadTask = new download_task_1.FkDownloadTask();
126
+ downloadTask.topicId = topic.id;
127
+ downloadTask.url = topic.thirdUrl;
128
+ downloadTask.w7AccountId = w7Account.id;
129
+ await db.manager.save(download_task_1.FkDownloadTask, downloadTask);
130
+ });
131
+ // start download
132
+ const one = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { status: `1` } });
133
+ if (one) {
134
+ const downloadService = injector.get(download_service_1.DownloadService);
135
+ await downloadService.startDownload(one.id);
136
+ }
137
+ await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
138
+ await finish(`执行完成`);
139
+ await create();
140
+ }
141
+ else if (type === 'create_upload') {
142
+ // create upload
143
+ const list = await db.manager.find(download_task_1.FkDownloadTask, { where: { status: '7', isUpload: false } });
144
+ list.map(async (download) => {
145
+ const uploadTask = new upload_task_1.FkUploadTask();
146
+ uploadTask.downloadTaskId = download.id;
147
+ db.tryRun(async (runner) => {
148
+ await runner.manager.save(upload_task_1.FkUploadTask, uploadTask);
149
+ await runner.manager.update(download_task_1.FkDownloadTask, download.id, { isUpload: true });
150
+ });
151
+ });
152
+ // start upload
153
+ const waitUploads = await db.manager.find(upload_task_1.FkUploadTask, { where: { status: '1' } });
154
+ const uploadService = injector.get(upload_service_1.UploadService);
155
+ if (waitUploads.length > 0) {
156
+ await uploadService.starts(waitUploads.map(it => it.id));
157
+ }
158
+ // downloadService.startDownload()
159
+ await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
160
+ await finish(`执行完成`);
161
+ await create();
162
+ }
163
+ else if (type === 'create_effect') {
164
+ const list = await db.manager.find(upload_task_1.FkUploadTask, { where: { status: '7', isEffect: false } });
165
+ list.map(async (upload) => {
166
+ db.tryRun(async (runner) => {
167
+ const effectTask = new effect_task_1.FkEffectTask();
168
+ effectTask.uploadId = upload.id;
169
+ await runner.manager.save(effect_task_1.FkEffectTask, effectTask);
170
+ await runner.manager.update(upload_task_1.FkUploadTask, upload.id, { isEffect: true });
171
+ });
172
+ });
173
+ // start effect
174
+ const waitEffects = await db.manager.find(effect_task_1.FkEffectTask, { where: { status: '1' } });
175
+ const effectService = injector.get(effect_service_1.EffectService);
176
+ if (waitEffects.length > 0) {
177
+ await effectService.starts(waitEffects.map(it => it.id));
178
+ }
179
+ await db.manager.update(check_task_1.FkCheckTask, id, { count: count + 1 });
180
+ await finish(`执行完成`);
181
+ await create();
182
+ }
183
+ else {
184
+ await finish(`未知任务`);
185
+ }
186
+ }
187
+ job = schedule.scheduleJob(check.title, check.time, async (time) => {
188
+ run(time);
189
+ /***
190
+ const manager = injector.get(TaskManager)
191
+ const i = new TaskEntity()
192
+ i.data = task;
193
+ i.topic = CHECK_ACTION;
194
+ await manager.send(i)
195
+ */
196
+ });
197
+ }
198
+ else {
199
+ await db.manager.update(check_task_1.FkCheckTask, task.id, { status: `1` });
200
+ complete();
201
+ return next && next();
202
+ }
203
+ }
204
+ }
205
+ exports.CheckTask = CheckTask;
@@ -0,0 +1,9 @@
1
+ import { Task } from "@nger/rabbitmq";
2
+ import { Injector, Next } from "@nger/core";
3
+ /**
4
+ * upload and task
5
+ */
6
+ export declare class DownloadContinueTask extends Task {
7
+ constructor();
8
+ handle(injector: Injector, next?: Next): Promise<void>;
9
+ }
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DownloadContinueTask = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const rabbitmq_1 = require("@nger/rabbitmq");
6
+ const core_1 = require("@nger/core");
7
+ const actions_1 = require("./actions");
8
+ const request_1 = require("request");
9
+ const fs_1 = require("fs");
10
+ const md5_file_1 = tslib_1.__importDefault(require("md5-file"));
11
+ const typeorm_1 = require("@nger/typeorm");
12
+ const rxjs_1 = require("rxjs");
13
+ const operators_1 = require("rxjs/operators");
14
+ const download_task_1 = require("../entities/download-task");
15
+ const client_service_1 = require("../services/client.service");
16
+ const fk_account_1 = require("../entities/fk-account");
17
+ /**
18
+ * upload and task
19
+ */
20
+ class DownloadContinueTask extends rabbitmq_1.Task {
21
+ constructor() {
22
+ super(actions_1.DOWNLOAD_CONTINUE_ACTION);
23
+ this.count = 1;
24
+ }
25
+ async handle(injector, next) {
26
+ const db = injector.get(typeorm_1.Db);
27
+ const task = injector.get(rabbitmq_1.DATA);
28
+ const complete = injector.get(rabbitmq_1.COMPLETE);
29
+ const fail = injector.get(rabbitmq_1.FAIL);
30
+ const download = await db.manager.findOne(download_task_1.FkDownloadTask, {
31
+ where: { id: task.id }, relations: [
32
+ 'jiqun',
33
+ 'w7Account',
34
+ `w7Account.fkAccount`
35
+ ]
36
+ });
37
+ if (!download || (download && download.status !== `5`)) {
38
+ await complete();
39
+ return next && next();
40
+ }
41
+ if (!download.filename) {
42
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: `1`, desc: `文件名为空` });
43
+ await complete();
44
+ return next && next();
45
+ }
46
+ const client = injector.get(client_service_1.ClientService);
47
+ const clientId = client.createClientId();
48
+ if (download.jiqun && download.jiqun.clientId !== clientId) {
49
+ await fail();
50
+ return next && next();
51
+ }
52
+ const filePath = download.path;
53
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '3', desc: '' });
54
+ const writeStream = (0, fs_1.createWriteStream)(filePath);
55
+ const url = download.url.startsWith('http') ? download.url : `https://${download.url}`;
56
+ const req = (0, request_1.get)(url, {
57
+ headers: {
58
+ 'Content-Type': 'application/octet-stream'
59
+ }
60
+ });
61
+ let total = 0;
62
+ let length = 0;
63
+ const sub = new rxjs_1.Subject();
64
+ sub.pipe((0, operators_1.throttleTime)(400), (0, operators_1.switchMap)(async (size) => {
65
+ console.log(`download continue--${size}`);
66
+ const download = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { id: task.id } });
67
+ if (!download || download.status !== '3') {
68
+ sub.error(new Error(`人为中断`));
69
+ return;
70
+ }
71
+ return db.manager.update(download_task_1.FkDownloadTask, download.id, { size: total, downloadSize: size });
72
+ })).subscribe({
73
+ next: () => { },
74
+ complete: async () => {
75
+ const fileMd5 = await (0, md5_file_1.default)(filePath);
76
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { md5: fileMd5, status: `7` });
77
+ await complete();
78
+ },
79
+ error: async (err) => {
80
+ req.abort();
81
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { isBigFile: true, status: '6', desc: err.message });
82
+ await fail();
83
+ }
84
+ });
85
+ // get split size
86
+ const _defer = (0, core_1.defer)();
87
+ req.on('data', async (buf) => {
88
+ length += buf.length;
89
+ writeStream.write(buf, (err) => {
90
+ if (err) {
91
+ sub.error(err);
92
+ return;
93
+ }
94
+ if (total === length) {
95
+ _defer.resolve();
96
+ }
97
+ sub.next(length);
98
+ });
99
+ });
100
+ req.on('end', async () => {
101
+ await _defer;
102
+ sub.complete();
103
+ });
104
+ req.on('error', async (err) => {
105
+ sub.error(err);
106
+ });
107
+ req.on('response', async (resp) => {
108
+ const headers = resp.headers;
109
+ total = Number(headers["content-length"]);
110
+ if (total > 1024 * 1024 * 1024) {
111
+ sub.error(new Error(`文件超出1G`));
112
+ await _defer;
113
+ sub.complete();
114
+ return;
115
+ }
116
+ const useSize = download.w7Account.fkAccount.usedSize + total;
117
+ await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { usedSize: useSize });
118
+ if (download.w7Account.fkAccount.totalSize <= useSize + 1024) {
119
+ await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { warning: `2` });
120
+ req.abort();
121
+ }
122
+ });
123
+ if (next)
124
+ await next();
125
+ }
126
+ }
127
+ exports.DownloadContinueTask = DownloadContinueTask;
@@ -6,5 +6,4 @@ import { Injector, Next } from "@nger/core";
6
6
  export declare class DownloadTask extends Task {
7
7
  constructor();
8
8
  handle(injector: Injector, next?: Next): Promise<void>;
9
- private createUploadTask;
10
9
  }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DownloadTask = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fk_account_1 = require("./../entities/fk-account");
6
+ const rabbitmq_1 = require("@nger/rabbitmq");
7
+ const core_1 = require("@nger/core");
8
+ const actions_1 = require("./actions");
9
+ const request_1 = require("request");
10
+ const fs_1 = require("fs");
11
+ const md5_file_1 = tslib_1.__importDefault(require("md5-file"));
12
+ const typeorm_1 = require("@nger/typeorm");
13
+ const rxjs_1 = require("rxjs");
14
+ const operators_1 = require("rxjs/operators");
15
+ const path_1 = require("path");
16
+ const download_task_1 = require("../entities/download-task");
17
+ const download_service_1 = require("../services/download.service");
18
+ const client_service_1 = require("../services/client.service");
19
+ const fk_jiqun_1 = require("../entities/fk-jiqun");
20
+ /**
21
+ * upload and task
22
+ */
23
+ class DownloadTask extends rabbitmq_1.Task {
24
+ constructor() {
25
+ super(actions_1.DOWNLOAD_ACTION);
26
+ this.count = 1;
27
+ }
28
+ async handle(injector, next) {
29
+ const db = injector.get(typeorm_1.Db);
30
+ const task = injector.get(rabbitmq_1.DATA);
31
+ const complete = injector.get(rabbitmq_1.COMPLETE);
32
+ const fail = injector.get(rabbitmq_1.FAIL);
33
+ const download = await db.manager.findOne(download_task_1.FkDownloadTask, {
34
+ where: { id: task.id }, relations: [
35
+ 'w7Account',
36
+ `w7Account.fkAccount`
37
+ ]
38
+ });
39
+ if (!download || (download && download.status !== `2`)) {
40
+ await complete();
41
+ return next && next();
42
+ }
43
+ process.on('exit', async (code) => {
44
+ await db.manager.update(download_task_1.FkDownloadTask, task.id, { status: '6', desc: `异常退出:${code}` });
45
+ fail();
46
+ });
47
+ const downloadService = injector.get(download_service_1.DownloadService);
48
+ const dir = downloadService.createDir();
49
+ const filename = downloadService.createFilename(download.url);
50
+ const filePath = (0, path_1.join)(dir, filename);
51
+ const client = injector.get(client_service_1.ClientService);
52
+ const clientId = client.createClientId();
53
+ const jiqun = await db.manager.findOne(fk_jiqun_1.FkJiQun, { where: { clientId } });
54
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '3', desc: '', path: filePath, filename, jiqunId: jiqun.id });
55
+ const writeStream = (0, fs_1.createWriteStream)(filePath);
56
+ const url = download.url.startsWith('http') ? download.url : `https://${download.url}`;
57
+ const req = (0, request_1.get)(url, {
58
+ headers: {
59
+ 'Content-Type': 'application/octet-stream'
60
+ }
61
+ });
62
+ let total = 0;
63
+ let length = 0;
64
+ const sub = new rxjs_1.Subject();
65
+ sub.pipe((0, operators_1.throttleTime)(1000), (0, operators_1.switchMap)(async (size) => {
66
+ console.log(`download--${size}`);
67
+ const download = await db.manager.findOne(download_task_1.FkDownloadTask, { where: { id: task.id } });
68
+ if (!download || download.status !== '3') {
69
+ sub.error(new Error(`人为中断`));
70
+ return;
71
+ }
72
+ return db.manager.update(download_task_1.FkDownloadTask, download.id, { size: total, downloadSize: size });
73
+ })).subscribe({
74
+ next: () => { },
75
+ complete: async () => {
76
+ const fileMd5 = await (0, md5_file_1.default)(filePath);
77
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { downloadSize: total, md5: fileMd5, status: `7` });
78
+ await complete();
79
+ },
80
+ error: async (err) => {
81
+ req.abort();
82
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { status: '6', desc: err.message });
83
+ await fail();
84
+ }
85
+ });
86
+ // get split size
87
+ const _defer = (0, core_1.defer)();
88
+ req.on('data', async (buf) => {
89
+ length += buf.length;
90
+ writeStream.write(buf, (err) => {
91
+ if (err) {
92
+ sub.error(err);
93
+ return;
94
+ }
95
+ if (total === length) {
96
+ _defer.resolve();
97
+ }
98
+ sub.next(length);
99
+ });
100
+ });
101
+ req.on('end', async () => {
102
+ await _defer;
103
+ sub.complete();
104
+ });
105
+ req.on('error', async (err) => {
106
+ sub.error(err);
107
+ });
108
+ req.on('response', async (resp) => {
109
+ const headers = resp.headers;
110
+ total = Number(headers["content-length"]);
111
+ if (total > 1024 * 1024 * 1024) {
112
+ sub.error(new Error(`文件超出1G`));
113
+ await _defer;
114
+ await db.manager.update(download_task_1.FkDownloadTask, download.id, { isBigFile: true, desc: '文件超出1G', status: `6` });
115
+ return;
116
+ }
117
+ const useSize = download.w7Account.fkAccount.usedSize + total;
118
+ await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { usedSize: useSize });
119
+ if (download.w7Account.fkAccount.totalSize <= useSize + 1024) {
120
+ await db.manager.update(fk_account_1.FkAccount, download.w7Account.fkAccount.id, { warning: `2` });
121
+ req.abort();
122
+ }
123
+ });
124
+ if (next)
125
+ await next();
126
+ }
127
+ }
128
+ exports.DownloadTask = DownloadTask;
@@ -1,5 +1,5 @@
1
1
  import { Task } from "@nger/rabbitmq";
2
- import { Next, Injector } from "@nger/core";
2
+ import { Injector, Next } from "@nger/core";
3
3
  export declare class EffectTask extends Task {
4
4
  constructor();
5
5
  handle(injector: Injector, next?: Next): Promise<void>;