@certd/commercial-core 1.40.1 → 1.40.2

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 (58) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/index.js +1 -6
  3. package/package.json +6 -6
  4. package/dist/configuration.js +0 -27
  5. package/dist/configuration.js.map +0 -1
  6. package/dist/controller/index.js +0 -3
  7. package/dist/controller/index.js.map +0 -1
  8. package/dist/controller/sys/index.js +0 -6
  9. package/dist/controller/sys/index.js.map +0 -1
  10. package/dist/controller/sys/settings/sys-setting-controller.js +0 -101
  11. package/dist/controller/sys/settings/sys-setting-controller.js.map +0 -1
  12. package/dist/controller/sys/site/site-controller.js +0 -71
  13. package/dist/controller/sys/site/site-controller.js.map +0 -1
  14. package/dist/controller/sys/suite/product-controller.js +0 -107
  15. package/dist/controller/sys/suite/product-controller.js.map +0 -1
  16. package/dist/controller/sys/suite/trade-controller.js +0 -136
  17. package/dist/controller/sys/suite/trade-controller.js.map +0 -1
  18. package/dist/controller/sys/suite/user-suite-controller.js +0 -133
  19. package/dist/controller/sys/suite/user-suite-controller.js.map +0 -1
  20. package/dist/controller/user/index.js +0 -6
  21. package/dist/controller/user/index.js.map +0 -1
  22. package/dist/controller/user/mine/suite-controller.js +0 -68
  23. package/dist/controller/user/mine/suite-controller.js.map +0 -1
  24. package/dist/controller/user/payment/notify-controller.js +0 -60
  25. package/dist/controller/user/payment/notify-controller.js.map +0 -1
  26. package/dist/controller/user/suite/product-controller.js +0 -55
  27. package/dist/controller/user/suite/product-controller.js.map +0 -1
  28. package/dist/controller/user/suite/setting-controller.js +0 -38
  29. package/dist/controller/user/suite/setting-controller.js.map +0 -1
  30. package/dist/controller/user/suite/trade-controller.js +0 -186
  31. package/dist/controller/user/suite/trade-controller.js.map +0 -1
  32. package/dist/index.js.map +0 -1
  33. package/dist/modules/index.js +0 -2
  34. package/dist/modules/index.js.map +0 -1
  35. package/dist/modules/suite/entity/index.js +0 -4
  36. package/dist/modules/suite/entity/index.js.map +0 -1
  37. package/dist/modules/suite/entity/product.js +0 -142
  38. package/dist/modules/suite/entity/product.js.map +0 -1
  39. package/dist/modules/suite/entity/trade.js +0 -107
  40. package/dist/modules/suite/entity/trade.js.map +0 -1
  41. package/dist/modules/suite/entity/user-suite.js +0 -110
  42. package/dist/modules/suite/entity/user-suite.js.map +0 -1
  43. package/dist/modules/suite/index.js +0 -4
  44. package/dist/modules/suite/index.js.map +0 -1
  45. package/dist/modules/suite/payments/api.js +0 -2
  46. package/dist/modules/suite/payments/api.js.map +0 -1
  47. package/dist/modules/suite/payments/factory.js +0 -25
  48. package/dist/modules/suite/payments/factory.js.map +0 -1
  49. package/dist/modules/suite/payments/index.js +0 -3
  50. package/dist/modules/suite/payments/index.js.map +0 -1
  51. package/dist/modules/suite/service/index.js +0 -4
  52. package/dist/modules/suite/service/index.js.map +0 -1
  53. package/dist/modules/suite/service/product-service.js +0 -58
  54. package/dist/modules/suite/service/product-service.js.map +0 -1
  55. package/dist/modules/suite/service/trade-service.js +0 -236
  56. package/dist/modules/suite/service/trade-service.js.map +0 -1
  57. package/dist/modules/suite/service/user-suite-service.js +0 -351
  58. package/dist/modules/suite/service/user-suite-service.js.map +0 -1
@@ -1,236 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
11
- import { InjectEntityModel } from "@midwayjs/typeorm";
12
- import { Repository } from "typeorm";
13
- import { AccessService, BaseService, SysInstallInfo, SysPaymentSetting, SysSettingsService } from "@certd/lib-server";
14
- import { ProductEntity, TradeEntity } from "../entity/index.js";
15
- import dayjs from "dayjs";
16
- import { utils } from "@certd/basic";
17
- import { ProductService } from "./product-service.js";
18
- import { paymentProviderFactory } from "../payments/index.js";
19
- import { UserSuiteService } from "./user-suite-service.js";
20
- /**
21
- *
22
- */
23
- let TradeService = class TradeService extends BaseService {
24
- repository;
25
- productService;
26
- sysSettingsService;
27
- accessService;
28
- userSuiteService;
29
- getRepository() {
30
- return this.repository;
31
- }
32
- async createFree(req) {
33
- const product = await this.getBuyableProduct(req.productId);
34
- const { price } = this.findDurationPrice(product, req.duration);
35
- if (price !== 0) {
36
- throw new Error("产品价格不为0");
37
- }
38
- const trade = await this.create({
39
- productId: req.productId,
40
- duration: req.duration,
41
- num: req.num,
42
- payType: req.payType,
43
- userId: req.userId,
44
- });
45
- //处理支付成功
46
- await this.onPaid({
47
- tradeNo: trade.tradeNo,
48
- status: "paid",
49
- amount: 0,
50
- payNo: "free",
51
- remark: "免费赠送",
52
- payTime: dayjs().valueOf(),
53
- });
54
- }
55
- findDurationPrice(product, duration) {
56
- const durationPrices = JSON.parse(product.durationPrices || "[]");
57
- const durationPrice = durationPrices.find((item) => item.duration === duration);
58
- if (!durationPrice) {
59
- throw new Error(`产品时长${duration}不存在`);
60
- }
61
- return durationPrice;
62
- }
63
- async create(req) {
64
- const product = await this.getBuyableProduct(req.productId);
65
- const { price } = this.findDurationPrice(product, req.duration);
66
- const now = dayjs();
67
- const tradeNo = "T" + now.format("YYYYMMDD") + now.unix() + utils.id.randomNumber(6);
68
- const title = `购买${product.title} ${req.duration}天`;
69
- const desc = `内含:${ProductEntity.getContentStr(product)}`;
70
- const trade = new TradeEntity();
71
- trade.title = title;
72
- trade.desc = desc;
73
- trade.productId = req.productId;
74
- trade.duration = req.duration;
75
- trade.num = req.num;
76
- trade.userId = req.userId;
77
- trade.tradeNo = tradeNo;
78
- trade.duration = req.duration;
79
- trade.price = price;
80
- trade.title = product.title;
81
- //计算总价
82
- trade.amount = trade.price * trade.num;
83
- trade.status = "wait_pay";
84
- trade.payType = req.payType;
85
- return await this.repository.save(trade);
86
- }
87
- async getBuyableProduct(productId) {
88
- const product = await this.productService.info(productId);
89
- if (!product) {
90
- throw new Error("产品不存在");
91
- }
92
- if (product.disabled) {
93
- throw new Error("该产品已下架");
94
- }
95
- if (!product.supportBuy) {
96
- throw new Error("该产品不支持购买");
97
- }
98
- return product;
99
- }
100
- async buildPaymentReq(trade, clientIp) {
101
- const installInfo = await this.sysSettingsService.getSetting(SysInstallInfo);
102
- let bindUrl = installInfo?.bindUrl;
103
- if (!bindUrl) {
104
- throw new Error("未绑定URL");
105
- }
106
- if (bindUrl.endsWith("/")) {
107
- bindUrl = bindUrl.slice(0, -1);
108
- }
109
- const payment = await this.getPaymentByType(trade.payType);
110
- return await payment.createOrder(trade, { bindUrl, clientIp });
111
- }
112
- async getPaymentByType(paymentType) {
113
- const sysPaymentSetting = await this.sysSettingsService.getSetting(SysPaymentSetting);
114
- const paymentConfig = sysPaymentSetting[paymentType];
115
- if (!paymentConfig || !paymentConfig.enabled) {
116
- throw new Error(`支付方式${paymentType}未启用`);
117
- }
118
- const access = await this.accessService.getById(paymentConfig.accessId, 0);
119
- if (!access) {
120
- throw new Error(`支付方式${paymentType}未设置授权`);
121
- }
122
- return await paymentProviderFactory.createByPaymentType(paymentType, access);
123
- }
124
- async getByTradeNo(out_trade_no) {
125
- if (!out_trade_no) {
126
- throw new Error("out_trade_no不能为空");
127
- }
128
- return await this.repository.findOne({ where: { tradeNo: out_trade_no } });
129
- }
130
- //支付成功
131
- async onPaid(tradeInfo) {
132
- const trade = await this.getByTradeNo(tradeInfo.tradeNo);
133
- if (!trade) {
134
- throw new Error(`订单${tradeInfo.tradeNo}不存在`);
135
- }
136
- if (trade.status === "paid") {
137
- return;
138
- }
139
- if (trade.status !== "wait_pay") {
140
- throw new Error(`订单${tradeInfo.tradeNo}状态不正确, 当前状态为${trade.status}`);
141
- }
142
- //校验金额
143
- if (trade.amount !== tradeInfo.amount) {
144
- throw new Error(`订单${tradeInfo.tradeNo}金额不正确, 当前金额为${trade.amount},实际支付金额为${tradeInfo.amount}`);
145
- }
146
- //处理支付成功
147
- await this.transaction(async (manager) => {
148
- //更新订单状态
149
- await manager.update(TradeEntity, { id: trade.id }, { status: "paid", amount: tradeInfo.amount, remark: tradeInfo.remark, payNo: tradeInfo.payNo, payTime: tradeInfo.payTime || dayjs().valueOf() });
150
- const product = await this.productService.info(trade.productId);
151
- if (!product) {
152
- throw new Error("产品不存在");
153
- }
154
- const tradeId = trade.id;
155
- const userId = trade.userId;
156
- const duration = trade.duration;
157
- await this.userSuiteService.productToUserSuite({
158
- duration,
159
- userId,
160
- product,
161
- tradeId,
162
- entityManager: manager,
163
- });
164
- });
165
- }
166
- /**
167
- * 同步订单状态
168
- * @param id
169
- */
170
- async syncStatus(id) {
171
- const trade = await this.info(id);
172
- if (!trade) {
173
- throw new Error("订单不存在");
174
- }
175
- if (trade.status === "paid") {
176
- return;
177
- }
178
- const payment = await this.getPaymentByType(trade.payType);
179
- const detail = await payment.getDetail(trade.tradeNo);
180
- if (!detail) {
181
- throw new Error("订单不存在");
182
- }
183
- if (detail.status === "paid") {
184
- await this.onPaid(detail);
185
- }
186
- else if (detail.status === "closed") {
187
- //关闭订单
188
- await this.transaction(async (manager) => {
189
- await manager.update(TradeEntity, { id: trade.id }, { status: "closed", remark: detail.remark });
190
- });
191
- }
192
- }
193
- async updatePaid(id, userName) {
194
- const trade = await this.info(id);
195
- if (!trade) {
196
- throw new Error("订单不存在");
197
- }
198
- if (trade.status === "paid") {
199
- return;
200
- }
201
- await this.onPaid({
202
- tradeNo: trade.tradeNo,
203
- status: "paid",
204
- amount: trade.amount,
205
- payNo: "",
206
- remark: `手动确认支付:${userName}`,
207
- payTime: dayjs().valueOf(),
208
- });
209
- }
210
- };
211
- __decorate([
212
- InjectEntityModel(TradeEntity),
213
- __metadata("design:type", Repository)
214
- ], TradeService.prototype, "repository", void 0);
215
- __decorate([
216
- Inject(),
217
- __metadata("design:type", ProductService)
218
- ], TradeService.prototype, "productService", void 0);
219
- __decorate([
220
- Inject(),
221
- __metadata("design:type", SysSettingsService)
222
- ], TradeService.prototype, "sysSettingsService", void 0);
223
- __decorate([
224
- Inject(),
225
- __metadata("design:type", AccessService)
226
- ], TradeService.prototype, "accessService", void 0);
227
- __decorate([
228
- Inject(),
229
- __metadata("design:type", UserSuiteService)
230
- ], TradeService.prototype, "userSuiteService", void 0);
231
- TradeService = __decorate([
232
- Provide(),
233
- Scope(ScopeEnum.Request, { allowDowngrade: true })
234
- ], TradeService);
235
- export { TradeService };
236
- //# sourceMappingURL=trade-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trade-service.js","sourceRoot":"","sources":["../../../../src/modules/suite/service/trade-service.ts"],"names":[],"mappings":"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"}
@@ -1,351 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
11
- import { InjectEntityModel } from "@midwayjs/typeorm";
12
- import { Equal, LessThan, MoreThan, Or, Repository } from "typeorm";
13
- import { BaseService, NeedSuiteException, SysSettingsService, SysSuiteSetting } from "@certd/lib-server";
14
- import { ProductEntity, UserSuiteEntity } from "../entity/index.js";
15
- import dayjs from "dayjs";
16
- import { ProductService } from "./product-service.js";
17
- import { logger, utils } from "@certd/basic";
18
- import { checkComm, isComm } from "@certd/plus-core";
19
- /**
20
- */
21
- let UserSuiteService = class UserSuiteService extends BaseService {
22
- repository;
23
- myCountService;
24
- sysSettingsService;
25
- productService;
26
- getRepository() {
27
- return this.repository;
28
- }
29
- async presentGiftSuite(userId) {
30
- if (userId == null) {
31
- return false;
32
- }
33
- if (!isComm()) {
34
- return false;
35
- }
36
- const suiteSetting = await this.getSuiteSetting();
37
- if (!suiteSetting) {
38
- return false;
39
- }
40
- if (!suiteSetting.enabled) {
41
- return false;
42
- }
43
- if (!suiteSetting.registerGift?.productId) {
44
- return false;
45
- }
46
- return await utils.locker.execute(`presentGiftSuite:${userId}`, async () => {
47
- const count = await this.getRepository().count({
48
- where: {
49
- userId: userId,
50
- isPresent: true,
51
- },
52
- });
53
- if (count > 0) {
54
- return false;
55
- }
56
- // 赠送套餐
57
- const giftSuite = await this.productService.info(suiteSetting.registerGift.productId);
58
- if (!giftSuite) {
59
- return false;
60
- }
61
- logger.info(`注册赠送套餐:userId=${userId},suite=${giftSuite.title}`);
62
- await this.productToUserSuite({
63
- userId,
64
- product: giftSuite,
65
- duration: suiteSetting.registerGift.duration,
66
- isPresent: true,
67
- isBootstrap: true,
68
- });
69
- return true;
70
- });
71
- }
72
- async productToUserSuite(req) {
73
- const { duration, userId, product, tradeId, entityManager } = req;
74
- const activeDayjs = dayjs();
75
- const activeTime = activeDayjs.valueOf();
76
- let expiresTime = 0;
77
- if (duration === -1) {
78
- //永久
79
- expiresTime = -1;
80
- }
81
- else {
82
- expiresTime = activeDayjs.add(duration, "day").endOf("day").valueOf();
83
- }
84
- const us = new UserSuiteEntity();
85
- us.userId = userId;
86
- us.productId = product.id;
87
- us.tradeId = tradeId || 0;
88
- us.icon = "";
89
- us.title = product.title;
90
- us.productType = product.type;
91
- us.content = product.content;
92
- us.duration = duration;
93
- // us.num = trade.num;
94
- us.deployCountUsed = 0;
95
- us.disabled = false;
96
- us.activeTime = activeTime;
97
- us.expiresTime = expiresTime;
98
- us.isPresent = req.isPresent || false;
99
- us.isBootstrap = req.isBootstrap || false;
100
- us.isEmpty = false;
101
- if (entityManager) {
102
- await entityManager.save(us);
103
- }
104
- else {
105
- await this.getRepository().save(us);
106
- }
107
- }
108
- async getMySuiteDetail(useId) {
109
- const suiteSetting = await this.sysSettingsService.getSetting(SysSuiteSetting);
110
- let validList = await this.getMyValidSuiteList(useId);
111
- if (!validList || validList.length === 0) {
112
- //检查是否有过赠送套餐
113
- const present = await this.presentGiftSuite(useId);
114
- if (present) {
115
- validList = await this.getMyValidSuiteList(useId);
116
- }
117
- }
118
- if (!validList || validList.length === 0) {
119
- validList = [];
120
- }
121
- const pipelineCount = { max: 0, used: 0 };
122
- const domainCount = { max: 0, used: 0 };
123
- const wildcardDomainCount = { max: 0, used: 0 };
124
- const deployCount = { max: 0, used: 0 };
125
- const monitorCount = { max: 0, used: 0 };
126
- const suites = [];
127
- const expiresTime = 0;
128
- if (validList.length > 0) {
129
- for (const suite of validList) {
130
- suites.push({
131
- id: suite.id,
132
- productId: suite.productId,
133
- duration: suite.duration,
134
- title: suite.title,
135
- expiresTime: suite.expiresTime,
136
- productType: suite.productType,
137
- });
138
- const content = UserSuiteEntity.getContent(suite);
139
- if (pipelineCount.max == -1 || content.maxPipelineCount == -1) {
140
- pipelineCount.max = -1;
141
- }
142
- else {
143
- pipelineCount.max += content.maxPipelineCount ?? 0;
144
- }
145
- if (domainCount.max == -1 || content.maxDomainCount == -1) {
146
- domainCount.max = -1;
147
- }
148
- else {
149
- domainCount.max += content.maxDomainCount ?? 0;
150
- }
151
- if (wildcardDomainCount.max == -1 || content.maxWildcardDomainCount == -1) {
152
- wildcardDomainCount.max = -1;
153
- }
154
- else {
155
- wildcardDomainCount.max += content.maxWildcardDomainCount ?? 0;
156
- }
157
- if (deployCount.max == -1 || content.maxDeployCount == -1) {
158
- deployCount.max = -1;
159
- }
160
- else {
161
- deployCount.max += content.maxDeployCount ?? 0;
162
- }
163
- if (monitorCount.max == -1 || content.maxMonitorCount == -1) {
164
- monitorCount.max = -1;
165
- }
166
- else {
167
- monitorCount.max += content.maxMonitorCount ?? 0;
168
- }
169
- deployCount.used += suite.deployCountUsed ?? 0;
170
- }
171
- }
172
- const { pipelineCountUsed, domainCountUsed, wildcardDomainCountUsed, monitorCountUsed } = await this.myCountService.getUsedCount(useId);
173
- pipelineCount.used = pipelineCountUsed ?? 0;
174
- domainCount.used = domainCountUsed ?? 0;
175
- wildcardDomainCount.used = wildcardDomainCountUsed ?? 0;
176
- monitorCount.used = monitorCountUsed ?? 0;
177
- return {
178
- enabled: suiteSetting.enabled,
179
- suites,
180
- expiresTime,
181
- pipelineCount,
182
- domainCount,
183
- wildcardDomainCount,
184
- deployCount,
185
- monitorCount,
186
- };
187
- }
188
- async getMyValidSuiteList(userId) {
189
- if (userId == null) {
190
- throw new Error("用户ID不能为空");
191
- }
192
- const now = dayjs();
193
- const suite = await this.getMyValidSuite(userId, now);
194
- const addons = await this.getMyValidAddons(userId, now);
195
- if (!suite) {
196
- return addons;
197
- }
198
- return [suite, ...addons];
199
- }
200
- async getMyValidSuite(userId, now) {
201
- return await this.getRepository().findOne({
202
- where: {
203
- userId: userId,
204
- expiresTime: Or(Equal(-1), MoreThan(now.valueOf())),
205
- activeTime: LessThan(now.valueOf()),
206
- disabled: false,
207
- productType: "suite",
208
- },
209
- order: {
210
- id: "DESC",
211
- },
212
- });
213
- }
214
- async getMyValidAddons(userId, now) {
215
- return await this.getRepository().find({
216
- where: {
217
- userId: userId,
218
- expiresTime: Or(Equal(-1), MoreThan(now.valueOf())),
219
- activeTime: LessThan(now.valueOf()),
220
- disabled: false,
221
- productType: "addon",
222
- isEmpty: false,
223
- },
224
- order: {
225
- //先过期的先用
226
- expiresTime: "ASC",
227
- id: "ASC",
228
- },
229
- });
230
- }
231
- async checkHasDeployCount(userId, count = 1) {
232
- if (count <= 0) {
233
- count = 1;
234
- }
235
- const suiteSetting = await this.getSuiteSetting();
236
- if (!suiteSetting.enabled) {
237
- return null;
238
- }
239
- const suites = await this.getMyValidSuiteList(userId);
240
- suites.sort((a, b) => {
241
- return a.expiresTime - b.expiresTime;
242
- });
243
- for (const suite of suites) {
244
- const content = UserSuiteEntity.getContent(suite);
245
- if (content.maxDeployCount == -1 || content.maxDeployCount >= suite.deployCountUsed + count) {
246
- return suite;
247
- }
248
- }
249
- //部署次数不足
250
- throw new NeedSuiteException("部署次数不足,请购买加量包或升级套餐");
251
- }
252
- async consumeDeployCount(suite, count) {
253
- if (suite == null) {
254
- //无需扣除数量
255
- return;
256
- }
257
- suite.deployCountUsed += count;
258
- const content = UserSuiteEntity.getContent(suite);
259
- if (content.maxDeployCount != -1 && suite.deployCountUsed >= content.maxDeployCount) {
260
- //部署次数用完了
261
- const onlyDeployCount = this.isOnlyDeployCount(content);
262
- if (onlyDeployCount) {
263
- //该套餐包只有部署次数,用完后设置为用完
264
- //设置为用完
265
- suite.isEmpty = true;
266
- }
267
- }
268
- const update = { deployCountUsed: () => `deployCountUsed + ${count}` };
269
- if (suite.isEmpty) {
270
- update.isEmpty = true;
271
- }
272
- await this.repository
273
- .createQueryBuilder()
274
- .update(UserSuiteEntity)
275
- .set(update) // 通过数据库函数直接实现加1操作
276
- .where("id = :suiteId", { suiteId: suite.id })
277
- .execute();
278
- }
279
- checkHasInfinite(content) {
280
- const keys = Object.keys(content);
281
- for (const key of keys) {
282
- if (key.startsWith("max")) {
283
- if (content[key] == -1) {
284
- return true;
285
- }
286
- }
287
- }
288
- return false;
289
- }
290
- getSuiteSetting() {
291
- return this.sysSettingsService.getSetting(SysSuiteSetting);
292
- }
293
- isOnlyDeployCount(content) {
294
- const keys = Object.keys(content);
295
- for (const key of keys) {
296
- if (key.startsWith("max") && key != "maxDeployCount") {
297
- if (content[key] != 0) {
298
- return false;
299
- }
300
- }
301
- }
302
- if (content.maxDeployCount === -1) {
303
- return false;
304
- }
305
- return true;
306
- }
307
- async presentSuite(req) {
308
- checkComm();
309
- const suiteSetting = await this.getSuiteSetting();
310
- if (!suiteSetting.enabled) {
311
- throw new Error("套餐功能未开启");
312
- }
313
- const product = await this.productService.info(req.productId);
314
- if (!product) {
315
- throw new Error("产品不存在");
316
- }
317
- const dpList = ProductEntity.getDurationPrices(product);
318
- const found = dpList.find(dp => dp.duration === req.duration);
319
- if (!found) {
320
- throw new Error("套餐时长不存在");
321
- }
322
- await this.productToUserSuite({
323
- userId: req.userId,
324
- product,
325
- duration: found.duration,
326
- isPresent: true,
327
- });
328
- }
329
- };
330
- __decorate([
331
- InjectEntityModel(UserSuiteEntity),
332
- __metadata("design:type", Repository)
333
- ], UserSuiteService.prototype, "repository", void 0);
334
- __decorate([
335
- Inject("myCountService"),
336
- __metadata("design:type", Object)
337
- ], UserSuiteService.prototype, "myCountService", void 0);
338
- __decorate([
339
- Inject(),
340
- __metadata("design:type", SysSettingsService)
341
- ], UserSuiteService.prototype, "sysSettingsService", void 0);
342
- __decorate([
343
- Inject(),
344
- __metadata("design:type", ProductService)
345
- ], UserSuiteService.prototype, "productService", void 0);
346
- UserSuiteService = __decorate([
347
- Provide("userSuiteService"),
348
- Scope(ScopeEnum.Request, { allowDowngrade: true })
349
- ], UserSuiteService);
350
- export { UserSuiteService };
351
- //# sourceMappingURL=user-suite-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-suite-service.js","sourceRoot":"","sources":["../../../../src/modules/suite/service/user-suite-service.ts"],"names":[],"mappings":"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"}