feat: 套餐购买支持易支付、支付宝支付

This commit is contained in:
xiaojunnuo
2024-12-23 00:24:31 +08:00
parent 9c8c7a7812
commit faa28f88f9
69 changed files with 1073 additions and 407 deletions
@@ -1,20 +1,22 @@
import { ALL, Body, Controller, Inject, Post, Provide, Query } from '@midwayjs/core';
import { Constants, CrudController } from '@certd/lib-server';
import { AuthService } from '../../modules/sys/authority/service/auth-service.js';
import { SiteInfoService } from '../../modules/monitor/service/site-info-service.js';
import { CertInfoService } from '../../modules/monitor/index.js';
import { PipelineService } from '../../modules/pipeline/service/pipeline-service.js';
/**
* 通知
*/
@Provide()
@Controller('/api/monitor/site')
export class SiteInfoController extends CrudController<SiteInfoService> {
@Controller('/api/monitor/cert')
export class CertInfoController extends CrudController<CertInfoService> {
@Inject()
service: SiteInfoService;
service: CertInfoService;
@Inject()
authService: AuthService;
@Inject()
pipelineService: PipelineService;
getService(): SiteInfoService {
getService(): CertInfoService {
return this.service;
}
@@ -22,11 +24,23 @@ export class SiteInfoController extends CrudController<SiteInfoService> {
async page(@Body(ALL) body: any) {
body.query = body.query ?? {};
body.query.userId = this.getUserId();
const res = await this.service.page({
query: body.query,
page: body.page,
sort: body.sort,
});
const records = res.records;
const pipelineIds = records.map(r => r.pipelineId);
const pipelines = await this.pipelineService.getSimplePipelines(pipelineIds);
const pMap = new Map();
for (const p of pipelines) {
pMap.set(p.id, p);
}
for (const record of records) {
record.pipeline = pMap.get(record.pipelineId);
}
return this.ok(res);
}
@@ -1,20 +1,19 @@
import { ALL, Body, Controller, Inject, Post, Provide, Query } from '@midwayjs/core';
import { Constants, CrudController } from '@certd/lib-server';
import { AuthService } from '../../modules/sys/authority/service/auth-service.js';
import { CertInfoService } from '../../modules/monitor/service/cert-info-service.js';
import { SiteInfoService } from '../../modules/monitor/index.js';
/**
* 通知
*/
@Provide()
@Controller('/api/monitor/cert')
export class CertInfoController extends CrudController<CertInfoService> {
@Controller('/api/monitor/site')
export class SiteInfoController extends CrudController<SiteInfoService> {
@Inject()
service: CertInfoService;
service: SiteInfoService;
@Inject()
authService: AuthService;
getService(): CertInfoService {
getService(): SiteInfoService {
return this.service;
}
@@ -22,7 +21,6 @@ export class CertInfoController extends CrudController<CertInfoService> {
async page(@Body(ALL) body: any) {
body.query = body.query ?? {};
body.query.userId = this.getUserId();
const res = await this.service.page({
query: body.query,
page: body.page,
@@ -6,7 +6,7 @@ import { nanoid } from 'nanoid';
import crypto from 'crypto';
@Autoload()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class AutoInitSite {
@Inject()
userService: UserService;
@@ -4,7 +4,7 @@ import { logger } from '@certd/basic';
import { SysSettingsService } from '@certd/lib-server';
@Autoload()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class AutoRegisterCron {
@Inject()
pipelineService: PipelineService;
@@ -9,7 +9,7 @@ import { Application } from '@midwayjs/koa';
import { httpsServer, HttpsServerOptions } from './https/server.js';
@Autoload()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class AutoZPrint {
@Inject()
sysSettingsService: SysSettingsService;
@@ -27,7 +27,7 @@ export type EmailConfig = {
usePlus?: boolean;
} & SMTPConnection.Options;
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class EmailService implements IEmailService {
@Inject()
settingsService: UserSettingsService;
@@ -9,7 +9,7 @@ import { CommonProviders } from './common-provider.js';
* 授权
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class CnameProviderService extends BaseService<CnameProviderEntity> {
@InjectEntityModel(CnameProviderEntity)
repository: Repository<CnameProviderEntity>;
@@ -26,7 +26,7 @@ type CnameCheckCacheValue = {
* 授权
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class CnameRecordService extends BaseService<CnameRecordEntity> {
@InjectEntityModel(CnameRecordEntity)
repository: Repository<CnameRecordEntity>;
@@ -5,7 +5,7 @@ import { SqlAdapter } from './d.js';
import { MysqlAdapter } from './mysql.js';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class DbAdapter implements SqlAdapter {
adapter: SqlAdapter;
@Config('typeorm.dataSource.default.type')
@@ -8,7 +8,7 @@ import { UserSettingsEntity } from '../entity/user-settings.js';
* 授权
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class UserSettingsService extends BaseService<UserSettingsEntity> {
@InjectEntityModel(UserSettingsEntity)
repository: Repository<UserSettingsEntity>;
@@ -1,4 +1,5 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { PipelineEntity } from '../../pipeline/entity/pipeline.js';
@Entity('cd_cert_info')
export class CertInfoEntity {
@@ -51,4 +52,6 @@ export class CertInfoEntity {
default: () => 'CURRENT_TIMESTAMP',
})
updateTime: Date;
pipeline?: PipelineEntity;
}
@@ -0,0 +1,5 @@
export * from "./entity/site-info.js";
export * from "./entity/cert-info.js";
export * from "./service/cert-info-service.js";
export * from "./service/site-info-service.js";
@@ -1,5 +1,5 @@
import { Provide } from '@midwayjs/core';
import { BaseService } from '@certd/lib-server';
import { BaseService, PageReq } from '@certd/lib-server';
import { InjectEntityModel } from '@midwayjs/typeorm';
import { Repository } from 'typeorm';
import { CertInfoEntity } from '../entity/cert-info.js';
@@ -14,6 +14,10 @@ export class CertInfoService extends BaseService<CertInfoEntity> {
return this.repository;
}
async page(pageReq: PageReq<CertInfoEntity>) {
return await super.page(pageReq);
}
async getUserDomainCount(userId: number) {
if (!userId) {
throw new Error('userId is required');
@@ -23,10 +27,11 @@ export class CertInfoService extends BaseService<CertInfoEntity> {
});
}
async updateDomains(pipelineId: number, domains: string[]) {
async updateDomains(pipelineId: number, userId: number, domains: string[]) {
const found = await this.repository.findOne({
where: {
pipelineId,
userId,
},
});
const bean = new CertInfoEntity();
@@ -36,11 +41,21 @@ export class CertInfoService extends BaseService<CertInfoEntity> {
} else {
//create
bean.pipelineId = pipelineId;
bean.userId = userId;
if (!domains || domains.length === 0) {
return;
}
}
bean.domain = domains[0];
bean.domains = domains.join(',');
bean.domainCount = domains.length;
if (!domains || domains.length === 0) {
bean.domain = '';
bean.domains = '';
bean.domainCount = 0;
} else {
bean.domain = domains[0];
bean.domains = domains.join(',');
bean.domainCount = domains.length;
}
await this.addOrUpdate(bean);
}
@@ -3,7 +3,7 @@ import { pluginGroups, pluginRegistry } from '@certd/pipeline';
import { cloneDeep } from 'lodash-es';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class BuiltInPluginService {
getList() {
const collection = pluginRegistry.storage;
@@ -8,7 +8,7 @@ import { HistoryLogEntity } from '../entity/history-log.js';
* 证书申请
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class HistoryLogService extends BaseService<HistoryLogEntity> {
@InjectEntityModel(HistoryLogEntity)
repository: Repository<HistoryLogEntity>;
@@ -16,7 +16,7 @@ import { logger } from '@certd/basic';
* 证书申请
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class HistoryService extends BaseService<HistoryEntity> {
@InjectEntityModel(HistoryEntity)
repository: Repository<HistoryEntity>;
@@ -9,7 +9,7 @@ import { EmailService } from '../../basic/service/email-service.js';
import { isComm } from '@certd/plus-core';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class NotificationService extends BaseService<NotificationEntity> {
@InjectEntityModel(NotificationEntity)
repository: Repository<NotificationEntity>;
@@ -6,7 +6,7 @@ import { PipelineGroupEntity } from '../entity/pipeline-group.js';
import { merge } from 'lodash-es';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class PipelineGroupService extends BaseService<PipelineGroupEntity> {
@InjectEntityModel(PipelineGroupEntity)
repository: Repository<PipelineGroupEntity>;
@@ -160,14 +160,17 @@ export class PipelineService extends BaseService<PipelineEntity> {
old = await this.info(bean.id);
}
const pipeline = JSON.parse(bean.content || '{}');
RunnableCollection.initPipelineRunnableType(pipeline);
const isUpdate = bean.id > 0 && old != null;
let domains = [];
RunnableCollection.each(pipeline.stages, (runnable: any) => {
if (runnable.runnableType === 'step' && runnable.type.startsWith('CertApply')) {
domains = runnable.input.domains || [];
}
});
if (pipeline.stages) {
RunnableCollection.each(pipeline.stages, (runnable: any) => {
if (runnable.runnableType === 'step' && runnable.type.startsWith('CertApply')) {
domains = runnable.input.domains || [];
}
});
}
if (!isUpdate) {
//如果是添加,校验数量
@@ -188,7 +191,7 @@ export class PipelineService extends BaseService<PipelineEntity> {
await this.registerTriggerById(bean.id);
//保存域名信息到certInfo表
await this.certInfoService.updateDomains(pipeline.id, domains);
await this.certInfoService.updateDomains(pipeline.id, pipeline.userId || bean.userId, domains);
return bean;
}
@@ -622,4 +625,17 @@ export class PipelineService extends BaseService<PipelineEntity> {
async getUserPipelineCount(userId) {
return await this.repository.count({ where: { userId } });
}
async getSimplePipelines(pipelineIds: number[], userId?: number) {
return await this.repository.find({
select: {
id: true,
title: true,
},
where: {
id: In(pipelineIds),
userId,
},
});
}
}
@@ -7,7 +7,7 @@ import { StorageEntity } from '../entity/storage.js';
/**
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class StorageService extends BaseService<StorageEntity> {
@InjectEntityModel(StorageEntity)
repository: Repository<StorageEntity>;
@@ -3,7 +3,7 @@ import { Inject, Provide, Scope, ScopeEnum } from '@midwayjs/core';
import { SysInstallInfo, SysSettingsService } from '@certd/lib-server';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class UrlService implements IUrlService {
@Inject()
sysSettingsService: SysSettingsService;
@@ -3,7 +3,7 @@ import { IPluginConfigService, PluginConfig } from '@certd/pipeline';
import { PluginConfigService } from './plugin-config-service.js';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class PluginConfigGetter implements IPluginConfigService {
@Inject()
pluginConfigService: PluginConfigService;
@@ -19,7 +19,7 @@ export type PluginFindReq = {
type: string;
};
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class PluginConfigService {
@Inject()
pluginService: PluginService;
@@ -8,7 +8,7 @@ import { BuiltInPluginService } from '../../pipeline/service/builtin-plugin-serv
import { merge } from 'lodash-es';
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class PluginService extends BaseService<PluginEntity> {
@InjectEntityModel(PluginEntity)
repository: Repository<PluginEntity>;
@@ -5,7 +5,7 @@ import { RoleService } from './role-service.js';
* 权限校验
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class AuthService {
@Inject()
roleService: RoleService;
@@ -8,7 +8,7 @@ import { PermissionEntity } from '../entity/permission.js';
* 权限资源
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class PermissionService extends BaseService<PermissionEntity> {
@InjectEntityModel(PermissionEntity)
repository: Repository<PermissionEntity>;
@@ -8,7 +8,7 @@ import { RolePermissionEntity } from '../entity/role-permission.js';
* 角色->权限
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class RolePermissionService extends BaseService<RolePermissionEntity> {
@InjectEntityModel(RolePermissionEntity)
repository: Repository<RolePermissionEntity>;
@@ -13,7 +13,7 @@ import { LRUCache } from 'lru-cache';
* 角色
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class RoleService extends BaseService<RoleEntity> {
@InjectEntityModel(RoleEntity)
repository: Repository<RoleEntity>;
@@ -8,7 +8,7 @@ import { UserRoleEntity } from '../entity/user-role.js';
* 用户->角色
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class UserRoleService extends BaseService<UserRoleEntity> {
@InjectEntityModel(UserRoleEntity)
repository: Repository<UserRoleEntity>;
@@ -19,7 +19,7 @@ export type RegisterType = 'username' | 'mobile' | 'email';
* 系统用户
*/
@Provide()
@Scope(ScopeEnum.Singleton)
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class UserService extends BaseService<UserEntity> {
@InjectEntityModel(UserEntity)
repository: Repository<UserEntity>;