mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-12 19:53:42 +08:00
v-4.0.0 开源可二开源码
This commit is contained in:
@@ -8,25 +8,37 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var AzureTtsService_1;
|
||||
var AiPptService_1;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AzureTtsService = void 0;
|
||||
exports.AiPptService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const models_service_1 = require("../models/models.service");
|
||||
const upload_service_1 = require("../upload/upload.service");
|
||||
let AzureTtsService = AzureTtsService_1 = class AzureTtsService {
|
||||
constructor(uploadService, globalConfigService, chatLogService) {
|
||||
const openaiChat_service_1 = require("./openaiChat.service");
|
||||
let AiPptService = AiPptService_1 = class AiPptService {
|
||||
constructor(uploadService, globalConfigService, chatLogService, openAIChatService, modelsService) {
|
||||
this.uploadService = uploadService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.chatLogService = chatLogService;
|
||||
this.logger = new common_1.Logger(AzureTtsService_1.name);
|
||||
this.openAIChatService = openAIChatService;
|
||||
this.modelsService = modelsService;
|
||||
this.logger = new common_1.Logger(AiPptService_1.name);
|
||||
}
|
||||
async aiPPT(inputs) {
|
||||
return;
|
||||
}
|
||||
async pptCover(inputs) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
AzureTtsService = AzureTtsService_1 = __decorate([
|
||||
AiPptService = AiPptService_1 = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [upload_service_1.UploadService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
chatLog_service_1.ChatLogService])
|
||||
], AzureTtsService);
|
||||
exports.AzureTtsService = AzureTtsService;
|
||||
chatLog_service_1.ChatLogService,
|
||||
openaiChat_service_1.OpenAIChatService,
|
||||
models_service_1.ModelsService])
|
||||
], AiPptService);
|
||||
exports.AiPptService = AiPptService;
|
||||
214
dist/modules/ai/cogVideo.service.js
vendored
Normal file
214
dist/modules/ai/cogVideo.service.js
vendored
Normal file
@@ -0,0 +1,214 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CogVideoService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const axios_1 = require("axios");
|
||||
const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const upload_service_1 = require("../upload/upload.service");
|
||||
let CogVideoService = class CogVideoService {
|
||||
constructor(chatLogService, globalConfigService, uploadService) {
|
||||
this.chatLogService = chatLogService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.uploadService = uploadService;
|
||||
}
|
||||
async cogVideo(inputs) {
|
||||
var _a, _b, _c;
|
||||
const { apiKey, proxyUrl, fileInfo, prompt, timeout, assistantLogId } = inputs;
|
||||
let result = {
|
||||
text: '',
|
||||
fileInfo: '',
|
||||
taskId: '',
|
||||
taskData: '',
|
||||
status: 2,
|
||||
};
|
||||
let response = null;
|
||||
let url = '';
|
||||
let payloadJson = {};
|
||||
const headers = { Authorization: `Bearer ${apiKey}` };
|
||||
url = `${proxyUrl}/cogvideox/v4/videos/generations`;
|
||||
payloadJson = {
|
||||
model: 'cogvideox',
|
||||
prompt: prompt,
|
||||
};
|
||||
if (fileInfo) {
|
||||
payloadJson['image_url'] = fileInfo;
|
||||
}
|
||||
common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'CogService');
|
||||
try {
|
||||
response = await axios_1.default.post(url, payloadJson, { headers });
|
||||
common_1.Logger.debug(`任务提交结果,状态码: ${response.status}, 状态消息: ${response.statusText}, 数据: ${JSON.stringify(response.data)}`);
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`任务提交失败: ${error.message}`, 'CogService');
|
||||
throw new Error('任务提交失败');
|
||||
}
|
||||
if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.id) {
|
||||
result.taskId = (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.id;
|
||||
common_1.Logger.log(`任务提交成功, 任务ID: ${(_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.id}`, 'CogService');
|
||||
}
|
||||
else {
|
||||
throw new Error('未能获取结果数据, 即将重试');
|
||||
}
|
||||
try {
|
||||
await this.pollCogVideoResult({
|
||||
proxyUrl,
|
||||
apiKey,
|
||||
taskId: response.data.id,
|
||||
timeout,
|
||||
prompt,
|
||||
onSuccess: async (data) => {
|
||||
try {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl,
|
||||
audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl,
|
||||
fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo,
|
||||
answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt,
|
||||
progress: '100%',
|
||||
status: 3,
|
||||
taskId: data === null || data === void 0 ? void 0 : data.taskId,
|
||||
taskData: data === null || data === void 0 ? void 0 : data.taskData,
|
||||
});
|
||||
common_1.Logger.log('视频任务已完成', 'CogService');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService');
|
||||
}
|
||||
},
|
||||
onGenerating: async (data) => {
|
||||
try {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl,
|
||||
audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl,
|
||||
fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo,
|
||||
answer: (data === null || data === void 0 ? void 0 : data.answer) || '视频生成中...',
|
||||
progress: data === null || data === void 0 ? void 0 : data.progress,
|
||||
status: data.status,
|
||||
});
|
||||
common_1.Logger.log('视频生成中...', 'CogService');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService');
|
||||
}
|
||||
},
|
||||
onFailure: async (data) => {
|
||||
try {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: '视频生成失败',
|
||||
status: data.status,
|
||||
});
|
||||
common_1.Logger.log('生成失败', 'Lum aService');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService');
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('查询生成结果时发生错误:', error.message, 'CogService');
|
||||
throw new Error('查询生成结果时发生错误');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
async pollCogVideoResult(inputs) {
|
||||
const { proxyUrl, apiKey, taskId, timeout, onSuccess, onFailure, onGenerating, prompt, action, } = inputs;
|
||||
let result = {
|
||||
videoUrl: '',
|
||||
audioUrl: '',
|
||||
fileInfo: '',
|
||||
drawId: '',
|
||||
taskData: '',
|
||||
status: 2,
|
||||
progress: 0,
|
||||
answer: '',
|
||||
};
|
||||
const headers = { Authorization: `Bearer ${apiKey}` };
|
||||
const url = `${proxyUrl}/cogvideox/v4/async-result/${taskId}`;
|
||||
const startTime = Date.now();
|
||||
const totalDuration = 300000;
|
||||
const POLL_INTERVAL = 5000;
|
||||
let retryCount = 0;
|
||||
try {
|
||||
while (Date.now() - startTime < timeout) {
|
||||
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL));
|
||||
try {
|
||||
const res = await axios_1.default.get(url, { headers });
|
||||
const interval = setInterval(() => {
|
||||
const elapsed = Date.now() - startTime;
|
||||
let percentage = Math.floor((elapsed / totalDuration) * 100);
|
||||
if (percentage >= 99)
|
||||
percentage = 99;
|
||||
result.answer = `视频生成中 (${percentage}%)`;
|
||||
}, 1000);
|
||||
const responses = res.data;
|
||||
common_1.Logger.debug(`轮询结果: ${JSON.stringify(responses)}`, 'CogService');
|
||||
if (responses.task_status === 'SUCCESS') {
|
||||
result.taskId = responses.request_id;
|
||||
result.taskData = JSON.stringify(responses);
|
||||
common_1.Logger.log('视频生成成功', 'CogService');
|
||||
result.fileInfo = responses.video_result[0].url;
|
||||
common_1.Logger.log(result.fileInfo, 'CogService');
|
||||
try {
|
||||
const localStorageStatus = await this.globalConfigService.getConfigs([
|
||||
'localStorageStatus',
|
||||
]);
|
||||
if (Number(localStorageStatus)) {
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
const currentDate = `${year}${month}/${day}`;
|
||||
result.fileInfo = await this.uploadService.uploadFileFromUrl({
|
||||
url: responses.video_result[0].url,
|
||||
dir: `video/cog/${currentDate}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`上传文件失败: ${error.message}`, 'CogService');
|
||||
}
|
||||
result.answer = `提示词: "${prompt}"`;
|
||||
onSuccess(result);
|
||||
clearInterval(interval);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
onGenerating(result);
|
||||
}
|
||||
if (result.progress) {
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
retryCount++;
|
||||
common_1.Logger.error(`轮询失败,重试次数: ${retryCount}`, 'CogService');
|
||||
}
|
||||
}
|
||||
common_1.Logger.error('轮询超时,请稍后再试!', 'CogService');
|
||||
result.status = 4;
|
||||
onFailure(result);
|
||||
throw new Error('查询超时,请稍后再试!');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'CogService');
|
||||
result.status = 5;
|
||||
onFailure(result);
|
||||
}
|
||||
}
|
||||
};
|
||||
CogVideoService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [chatLog_service_1.ChatLogService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
upload_service_1.UploadService])
|
||||
], CogVideoService);
|
||||
exports.CogVideoService = CogVideoService;
|
||||
148
dist/modules/ai/fluxDraw.service.js
vendored
Normal file
148
dist/modules/ai/fluxDraw.service.js
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var FluxDrawService_1;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.FluxDrawService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const axios_1 = require("axios");
|
||||
const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const upload_service_1 = require("../upload/upload.service");
|
||||
const openaiChat_service_1 = require("./openaiChat.service");
|
||||
let FluxDrawService = FluxDrawService_1 = class FluxDrawService {
|
||||
constructor(uploadService, globalConfigService, chatLogService, openAIChatService) {
|
||||
this.uploadService = uploadService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.chatLogService = chatLogService;
|
||||
this.openAIChatService = openAIChatService;
|
||||
this.logger = new common_1.Logger(FluxDrawService_1.name);
|
||||
}
|
||||
async fluxDraw(inputs, buildMessageFromParentMessageId) {
|
||||
var _a, _b, _c, _d;
|
||||
common_1.Logger.log('开始提交 Flux 绘图任务 ', 'DrawService');
|
||||
const { apiKey, model, proxyUrl, prompt, extraParam, timeout, onSuccess, onFailure, groupId, } = inputs;
|
||||
const isDalleChat = await this.globalConfigService.getConfigs([
|
||||
'isDalleChat',
|
||||
]);
|
||||
let drawPrompt;
|
||||
if (isDalleChat === '1') {
|
||||
try {
|
||||
common_1.Logger.log('已开启连续绘画模式', 'FluxDraw');
|
||||
const { messagesHistory } = await buildMessageFromParentMessageId(`参考上文,结合我的需求,给出绘画描述。我的需求是:${prompt}`, {
|
||||
groupId,
|
||||
systemMessage: '你是一个绘画提示词生成工具,请根据用户的要求,结合上下文,用一段文字,描述用户需要的绘画需求,不用包含任何礼貌性的寒暄,只需要场景的描述,可以适当联想',
|
||||
maxModelTokens: 8000,
|
||||
maxRounds: 5,
|
||||
fileInfo: '',
|
||||
}, this.chatLogService);
|
||||
drawPrompt = await this.openAIChatService.chatFree(prompt, undefined, messagesHistory);
|
||||
}
|
||||
catch (error) {
|
||||
console.error('调用chatFree失败:', error);
|
||||
drawPrompt = prompt;
|
||||
}
|
||||
}
|
||||
else {
|
||||
drawPrompt = prompt;
|
||||
}
|
||||
const size = (extraParam === null || extraParam === void 0 ? void 0 : extraParam.size) || '1024x1024';
|
||||
let result = { answer: '', fileInfo: '', status: 2 };
|
||||
try {
|
||||
const options = {
|
||||
method: 'POST',
|
||||
url: `${proxyUrl}/v1/images/generations`,
|
||||
timeout: timeout,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${apiKey}`,
|
||||
},
|
||||
data: {
|
||||
model: model,
|
||||
prompt: drawPrompt,
|
||||
size,
|
||||
},
|
||||
};
|
||||
common_1.Logger.log(`正在准备发送请求到 ${options.url},payload: ${JSON.stringify(options.data)}, headers: ${JSON.stringify(options.headers)}`, 'FluxDrawService');
|
||||
const response = await (0, axios_1.default)(options);
|
||||
common_1.Logger.debug(`请求成功${JSON.stringify(response.data.data[0])}`);
|
||||
common_1.Logger.debug(`请求状态${JSON.stringify(response.status)}`);
|
||||
const url = response.data.data[0].url;
|
||||
try {
|
||||
common_1.Logger.log(`------> 开始上传图片!!!`, 'DrawService');
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
const currentDate = `${year}${month}/${day}`;
|
||||
result.fileInfo = await this.uploadService.uploadFileFromUrl({
|
||||
url: url,
|
||||
dir: `images/dalle/${currentDate}`,
|
||||
});
|
||||
common_1.Logger.log(`图片上传成功,URL: ${result.fileInfo}`, 'DrawService');
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`上传图片过程中出现错误: ${error}`, 'DrawService');
|
||||
}
|
||||
let revised_prompt_cn;
|
||||
try {
|
||||
revised_prompt_cn = await this.openAIChatService.chatFree(`根据提示词{${drawPrompt}}, 模拟AI绘画机器人的语气,用中文回复,告诉用户已经画好了`);
|
||||
}
|
||||
catch (error) {
|
||||
revised_prompt_cn = `${prompt} 绘制成功`;
|
||||
common_1.Logger.error('翻译失败: ', error);
|
||||
}
|
||||
result.answer = revised_prompt_cn;
|
||||
result.status = 3;
|
||||
onSuccess(result);
|
||||
return;
|
||||
}
|
||||
catch (error) {
|
||||
result.status = 5;
|
||||
onFailure(result);
|
||||
const status = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) || 500;
|
||||
console.log('draw error: ', JSON.stringify(error), status);
|
||||
const message = (_d = (_c = (_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message;
|
||||
if (status === 429) {
|
||||
result.text = '当前请求已过载、请稍等会儿再试试吧!';
|
||||
return result;
|
||||
}
|
||||
if (status === 400 &&
|
||||
message.includes('This request has been blocked by our content filters')) {
|
||||
result.text = '您的请求已被系统拒绝。您的提示可能存在一些非法的文本。';
|
||||
return result;
|
||||
}
|
||||
if (status === 400 &&
|
||||
message.includes('Billing hard limit has been reached')) {
|
||||
result.text =
|
||||
'当前模型key已被封禁、已冻结当前调用Key、尝试重新对话试试吧!';
|
||||
return result;
|
||||
}
|
||||
if (status === 500) {
|
||||
result.text = '绘制图片失败,请检查你的提示词是否有非法描述!';
|
||||
return result;
|
||||
}
|
||||
if (status === 401) {
|
||||
result.text = '绘制图片失败,此次绘画被拒绝了!';
|
||||
return result;
|
||||
}
|
||||
result.text = '绘制图片失败,请稍后试试吧!';
|
||||
return result;
|
||||
}
|
||||
}
|
||||
};
|
||||
FluxDrawService = FluxDrawService_1 = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [upload_service_1.UploadService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
chatLog_service_1.ChatLogService,
|
||||
openaiChat_service_1.OpenAIChatService])
|
||||
], FluxDrawService);
|
||||
exports.FluxDrawService = FluxDrawService;
|
||||
39
dist/modules/ai/openaiChat.service.js
vendored
39
dist/modules/ai/openaiChat.service.js
vendored
@@ -29,6 +29,9 @@ let OpenAIChatService = class OpenAIChatService {
|
||||
errMsg: '',
|
||||
modelAvatar: modelAvatar,
|
||||
};
|
||||
const data = Object.assign({ model, messages: messagesHistory }, (isFileUpload === 2 && { max_tokens: 2048 }));
|
||||
data.stream = true;
|
||||
data.temperature = temperature;
|
||||
const options = {
|
||||
method: 'POST',
|
||||
url: `${proxyUrl}/v1/chat/completions`,
|
||||
@@ -38,9 +41,11 @@ let OpenAIChatService = class OpenAIChatService {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${apiKey}`,
|
||||
},
|
||||
data: Object.assign({ stream: true, model, temperature: temperature, messages: messagesHistory }, (isFileUpload === 2 && { max_tokens: 2048 })),
|
||||
data: data,
|
||||
};
|
||||
console.log('请求配置:', JSON.stringify(options, null, 2), 'ChatService');
|
||||
const sanitizedOptions = await this.sanitizeOptionsForLogging(options);
|
||||
console.log('请求配置:', JSON.stringify(sanitizedOptions, null, 2), 'ChatService');
|
||||
console.log('请求配置:', JSON.stringify(sanitizedOptions, null, 2), 'ChatService');
|
||||
try {
|
||||
const response = await (0, axios_1.default)(options);
|
||||
const stream = response.data;
|
||||
@@ -92,6 +97,36 @@ let OpenAIChatService = class OpenAIChatService {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
async sanitizeOptionsForLogging(options) {
|
||||
const sanitizedOptions = JSON.parse(JSON.stringify(options));
|
||||
if (sanitizedOptions.headers && sanitizedOptions.headers.Authorization) {
|
||||
const authHeader = sanitizedOptions.headers.Authorization;
|
||||
if (authHeader.startsWith('Bearer ')) {
|
||||
const token = authHeader.slice(7);
|
||||
if (token.length > 10) {
|
||||
sanitizedOptions.headers.Authorization = `Bearer ${token.slice(0, 5)}****${token.slice(-4)}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sanitizedOptions.data &&
|
||||
sanitizedOptions.data.messages &&
|
||||
Array.isArray(sanitizedOptions.data.messages)) {
|
||||
sanitizedOptions.data.messages = sanitizedOptions.data.messages.map((message) => {
|
||||
if (message.content && Array.isArray(message.content)) {
|
||||
message.content = message.content.map((content) => {
|
||||
if (content.type === 'image_url' &&
|
||||
content.image_url &&
|
||||
content.image_url.url) {
|
||||
content.image_url.url = 'data:image/***;base64 ... ...';
|
||||
}
|
||||
return content;
|
||||
});
|
||||
}
|
||||
return message;
|
||||
});
|
||||
}
|
||||
return sanitizedOptions;
|
||||
}
|
||||
async chatFree(prompt, systemMessage, messagesHistory) {
|
||||
const { openaiBaseUrl = '', openaiBaseKey = '', openaiBaseModel, } = await this.globalConfigService.getConfigs([
|
||||
'openaiBaseKey',
|
||||
|
||||
9
dist/modules/ai/stableDiffusion.service.js
vendored
9
dist/modules/ai/stableDiffusion.service.js
vendored
@@ -13,17 +13,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StableDiffusionService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const axios_1 = require("axios");
|
||||
const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const upload_service_1 = require("../upload/upload.service");
|
||||
let StableDiffusionService = StableDiffusionService_1 = class StableDiffusionService {
|
||||
constructor(uploadService, globalConfigService, chatLogService) {
|
||||
constructor(uploadService, globalConfigService) {
|
||||
this.uploadService = uploadService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.chatLogService = chatLogService;
|
||||
this.logger = new common_1.Logger(StableDiffusionService_1.name);
|
||||
}
|
||||
async sdxl(messagesHistory, inputs) {
|
||||
async sdxl(inputs) {
|
||||
const { onSuccess, onFailure, apiKey, model, proxyUrl, modelName, timeout, chatId, prompt, } = inputs;
|
||||
let result = {
|
||||
answer: '',
|
||||
@@ -101,7 +99,6 @@ let StableDiffusionService = StableDiffusionService_1 = class StableDiffusionSer
|
||||
StableDiffusionService = StableDiffusionService_1 = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [upload_service_1.UploadService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
chatLog_service_1.ChatLogService])
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
], StableDiffusionService);
|
||||
exports.StableDiffusionService = StableDiffusionService;
|
||||
|
||||
2
dist/modules/ai/suno.service.js
vendored
2
dist/modules/ai/suno.service.js
vendored
@@ -24,6 +24,7 @@ let SunoService = class SunoService {
|
||||
async suno(inputs) {
|
||||
var _a, _b, _c;
|
||||
const { apiKey, proxyUrl, action, prompt, timeout, assistantLogId, taskData, extraParam, } = inputs;
|
||||
common_1.Logger.debug(`SunoService: ${JSON.stringify(inputs)}`, 'SunoService');
|
||||
let result = {
|
||||
text: '',
|
||||
fileInfo: '',
|
||||
@@ -53,6 +54,7 @@ let SunoService = class SunoService {
|
||||
common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'SunoService');
|
||||
try {
|
||||
response = await axios_1.default.post(url, payloadJson, { headers });
|
||||
common_1.Logger.debug(`任务提交结果,状态码: ${response.status}, 状态消息: ${response.statusText}, 数据: ${JSON.stringify(response.data)}`);
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`任务提交失败: ${error.message}`, 'SunoService');
|
||||
|
||||
80
dist/modules/app/app.controller.js
vendored
80
dist/modules/app/app.controller.js
vendored
@@ -22,7 +22,6 @@ const app_service_1 = require("./app.service");
|
||||
const collectApp_dto_1 = require("./dto/collectApp.dto");
|
||||
const createApp_dto_1 = require("./dto/createApp.dto");
|
||||
const createCats_dto_1 = require("./dto/createCats.dto");
|
||||
const custonApp_dto_1 = require("./dto/custonApp.dto");
|
||||
const deleteApp_dto_1 = require("./dto/deleteApp.dto");
|
||||
const deleteCats_dto_1 = require("./dto/deleteCats.dto");
|
||||
const queryApp_dto_1 = require("./dto/queryApp.dto");
|
||||
@@ -55,9 +54,6 @@ let AppController = class AppController {
|
||||
appList(req, query) {
|
||||
return this.appService.appList(req, query);
|
||||
}
|
||||
appSystemList() {
|
||||
return this.appService.appSystemList();
|
||||
}
|
||||
list(req, query) {
|
||||
return this.appService.frontAppList(req, query);
|
||||
}
|
||||
@@ -67,27 +63,12 @@ let AppController = class AppController {
|
||||
createApp(body) {
|
||||
return this.appService.createApp(body);
|
||||
}
|
||||
customApp(body, req) {
|
||||
return this.appService.customApp(body, req);
|
||||
}
|
||||
updateApp(body) {
|
||||
return this.appService.updateApp(body);
|
||||
}
|
||||
updateSystemApp(body) {
|
||||
return this.appService.updateSystemApp(body);
|
||||
}
|
||||
delApp(body) {
|
||||
return this.appService.delApp(body);
|
||||
}
|
||||
auditPass(body) {
|
||||
return this.appService.auditPass(body);
|
||||
}
|
||||
auditFail(body) {
|
||||
return this.appService.auditFail(body);
|
||||
}
|
||||
delMineApp(body, req) {
|
||||
return this.appService.delMineApp(body, req);
|
||||
}
|
||||
collect(body, req) {
|
||||
return this.appService.collect(body, req);
|
||||
}
|
||||
@@ -161,15 +142,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [Object, queryApp_dto_1.QuerAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "appList", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('querySystemApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取系统App列表' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "appSystemList", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('list'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '客户端获取App' }),
|
||||
@@ -197,17 +169,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [createApp_dto_1.CreateAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "createApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('customApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '添加自定义App' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__param(1, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [custonApp_dto_1.CustomAppDto, Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "customApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('updateApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '修改App' }),
|
||||
@@ -218,16 +179,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [updateApp_dto_1.UpdateAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "updateApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('updateSystemApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '修改系统App' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "updateSystemApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('delApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除App' }),
|
||||
@@ -238,37 +189,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "delApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('auditPass'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '审核通过App' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "auditPass", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('auditFail'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '审核拒绝App' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "auditFail", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('delMineApp'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除个人App' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__param(1, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto, Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], AppController.prototype, "delMineApp", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('collect'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '收藏/取消收藏App' }),
|
||||
|
||||
97
dist/modules/app/app.service.js
vendored
97
dist/modules/app/app.service.js
vendored
@@ -130,14 +130,6 @@ let AppService = class AppService {
|
||||
}
|
||||
return { rows, count };
|
||||
}
|
||||
async appSystemList() {
|
||||
const where = { isSystemReserved: 1 };
|
||||
const [rows, count] = await this.appEntity.findAndCount({
|
||||
where,
|
||||
order: { id: 'DESC' },
|
||||
});
|
||||
return { rows, count };
|
||||
}
|
||||
async frontAppList(req, query, orderKey = 'id') {
|
||||
var _a;
|
||||
const { page = 1, size = 1000, name, catId, role } = query;
|
||||
@@ -218,67 +210,6 @@ let AppService = class AppService {
|
||||
}
|
||||
return await this.appEntity.save(body);
|
||||
}
|
||||
async customApp(body, req) {
|
||||
const { id } = req.user;
|
||||
const { name, catId, des, preset, coverImg, demoData, public: isPublic, appId, } = body;
|
||||
if (appId) {
|
||||
const a = await this.appEntity.findOne({
|
||||
where: { id: appId, userId: id },
|
||||
});
|
||||
if (!a) {
|
||||
throw new common_1.HttpException('您正在编辑一个不存在的应用!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const data = {
|
||||
name,
|
||||
catId,
|
||||
des,
|
||||
preset,
|
||||
coverImg,
|
||||
demoData,
|
||||
public: isPublic,
|
||||
status: isPublic ? 3 : 1,
|
||||
};
|
||||
const res = await this.appEntity.update({ id: appId, userId: id }, data);
|
||||
if (res.affected) {
|
||||
return '修改成功';
|
||||
}
|
||||
else {
|
||||
throw new common_1.HttpException('修改失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
if (!appId) {
|
||||
const c = await this.appCatsEntity.findOne({ where: { id: catId } });
|
||||
if (!c) {
|
||||
throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const a = await this.appEntity.findOne({ where: { name } });
|
||||
if (a) {
|
||||
throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const data = {
|
||||
name,
|
||||
catId,
|
||||
des,
|
||||
preset,
|
||||
coverImg,
|
||||
status: isPublic ? 3 : 1,
|
||||
demoData,
|
||||
public: isPublic,
|
||||
role: 'user',
|
||||
userId: id,
|
||||
};
|
||||
const res = await this.appEntity.save(data);
|
||||
const params = {
|
||||
appId: res.id,
|
||||
userId: id,
|
||||
appType: 'user',
|
||||
public: isPublic,
|
||||
status: isPublic ? 3 : 1,
|
||||
catId,
|
||||
};
|
||||
return this.userAppsEntity.save(params);
|
||||
}
|
||||
}
|
||||
async updateApp(body) {
|
||||
const { id, name, catId, status } = body;
|
||||
const a = await this.appEntity.findOne({ where: { name, id: (0, typeorm_2.Not)(id) } });
|
||||
@@ -298,22 +229,6 @@ let AppService = class AppService {
|
||||
return '修改App信息成功';
|
||||
throw new common_1.HttpException('修改App信息失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
async updateSystemApp(body) {
|
||||
const { id, name } = body;
|
||||
const existingApp = await this.appEntity.findOne({
|
||||
where: { name, id: (0, typeorm_2.Not)(id) },
|
||||
});
|
||||
if (existingApp) {
|
||||
common_1.Logger.warn(`应用名称已存在:${name}`);
|
||||
throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.appEntity.update({ id }, body);
|
||||
if (res.affected > 0) {
|
||||
return '修改系统应用信息成功';
|
||||
}
|
||||
common_1.Logger.error(`修改系统应用信息失败:${name}`);
|
||||
throw new common_1.HttpException('修改系统应用信息失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
async delApp(body) {
|
||||
const { id } = body;
|
||||
const a = await this.appEntity.findOne({ where: { id } });
|
||||
@@ -346,18 +261,6 @@ let AppService = class AppService {
|
||||
await this.userAppsEntity.update({ appId: id }, { status: 5 });
|
||||
return '应用审核拒绝完成';
|
||||
}
|
||||
async delMineApp(body, req) {
|
||||
const { id } = body;
|
||||
const a = await this.appEntity.findOne({
|
||||
where: { id, userId: req.user.id },
|
||||
});
|
||||
if (!a) {
|
||||
throw new common_1.HttpException('您正在操作一个不存在的资源!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
await this.appEntity.delete(id);
|
||||
await this.userAppsEntity.delete({ appId: id, userId: req.user.id });
|
||||
return '删除应用成功!';
|
||||
}
|
||||
async collect(body, req) {
|
||||
const { appId } = body;
|
||||
const { id: userId } = req.user;
|
||||
|
||||
39
dist/modules/auth/auth.controller.js
vendored
39
dist/modules/auth/auth.controller.js
vendored
@@ -46,6 +46,15 @@ let AuthController = class AuthController {
|
||||
async sendCode(parmas) {
|
||||
return this.authService.sendCode(parmas);
|
||||
}
|
||||
async sendPhoneCode(parmas) {
|
||||
return this.authService.sendPhoneCode(parmas);
|
||||
}
|
||||
async verifyIdentity(req, body) {
|
||||
return this.authService.verifyIdentity(req, body);
|
||||
}
|
||||
async verifyPhoneIdentity(req, body) {
|
||||
return this.authService.verifyPhoneIdentity(req, body);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Post)('register'),
|
||||
@@ -114,6 +123,36 @@ __decorate([
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], AuthController.prototype, "sendCode", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('sendPhoneCode'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '发送手机验证码' }),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], AuthController.prototype, "sendPhoneCode", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('verifyIdentity'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '验证身份' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], AuthController.prototype, "verifyIdentity", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('verifyPhoneIdentity'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '验证手机号' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], AuthController.prototype, "verifyPhoneIdentity", null);
|
||||
AuthController = __decorate([
|
||||
(0, swagger_1.ApiTags)('auth'),
|
||||
(0, common_1.Controller)('auth'),
|
||||
|
||||
4
dist/modules/auth/auth.module.js
vendored
4
dist/modules/auth/auth.module.js
vendored
@@ -18,10 +18,8 @@ const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const mailer_service_1 = require("../mailer/mailer.service");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const redisCache_module_1 = require("../redisCache/redisCache.module");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const user_module_1 = require("../user/user.module");
|
||||
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
|
||||
@@ -56,12 +54,10 @@ AuthModule = __decorate([
|
||||
config_entity_1.ConfigEntity,
|
||||
cramiPackage_entity_1.CramiPackageEntity,
|
||||
userBalance_entity_1.UserBalanceEntity,
|
||||
salesUsers_entity_1.SalesUsersEntity,
|
||||
user_entity_1.UserEntity,
|
||||
fingerprint_entity_1.FingerprintLogEntity,
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
midjourney_entity_1.MidjourneyEntity,
|
||||
]),
|
||||
],
|
||||
controllers: [auth_controller_1.AuthController],
|
||||
|
||||
91
dist/modules/auth/auth.service.js
vendored
91
dist/modules/auth/auth.service.js
vendored
@@ -43,7 +43,7 @@ let AuthService = class AuthService {
|
||||
this.getIp();
|
||||
}
|
||||
async register(body, req) {
|
||||
const { password, contact, code, invitedBy } = body;
|
||||
const { password, contact, code } = body;
|
||||
let email = '', phone = '';
|
||||
const isEmail = /\S+@\S+\.\S+/.test(contact);
|
||||
const isPhone = /^\d{10,}$/.test(contact);
|
||||
@@ -111,7 +111,6 @@ let AuthService = class AuthService {
|
||||
username,
|
||||
password,
|
||||
email: contact,
|
||||
invitedBy,
|
||||
status: user_constant_1.UserStatusEnum.ACTIVE,
|
||||
};
|
||||
}
|
||||
@@ -122,7 +121,6 @@ let AuthService = class AuthService {
|
||||
password,
|
||||
email,
|
||||
phone: contact,
|
||||
invitedBy,
|
||||
status: user_constant_1.UserStatusEnum.ACTIVE,
|
||||
};
|
||||
}
|
||||
@@ -138,12 +136,7 @@ let AuthService = class AuthService {
|
||||
common_1.Logger.debug('保存新用户到数据库...');
|
||||
const u = await this.userService.createUser(newUser);
|
||||
common_1.Logger.debug(`用户创建成功,用户ID: ${u.id}`);
|
||||
let inviteUser;
|
||||
if (invitedBy) {
|
||||
inviteUser = await this.userService.qureyUserInfoByInviteCode(invitedBy);
|
||||
common_1.Logger.debug(`邀请人信息: ${inviteUser}`);
|
||||
}
|
||||
await this.userBalanceService.addBalanceToNewUser(u.id, inviteUser === null || inviteUser === void 0 ? void 0 : inviteUser.id);
|
||||
await this.userBalanceService.addBalanceToNewUser(u.id);
|
||||
common_1.Logger.debug('完成新用户余额处理');
|
||||
return { success: true, message: '注册成功' };
|
||||
}
|
||||
@@ -360,6 +353,34 @@ let AuthService = class AuthService {
|
||||
return `验证码发送成功、请填写验证码完成注册!`;
|
||||
}
|
||||
}
|
||||
async sendPhoneCode(body) {
|
||||
const { phone, isLogin } = body;
|
||||
const code = (0, utils_1.createRandomCode)();
|
||||
const isPhone = /^\d{10,}$/.test(phone);
|
||||
if (!isPhone) {
|
||||
throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (isLogin) {
|
||||
if (isPhone) {
|
||||
const isAvailable = await this.userService.verifyUserRegister({
|
||||
phone,
|
||||
});
|
||||
if (!isAvailable) {
|
||||
throw new common_1.HttpException('当前手机号已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
const nameSpace = await this.globalConfigService.getNamespace();
|
||||
const key = `${nameSpace}:CODE:${phone}`;
|
||||
const ttl = await this.redisCacheService.ttl(key);
|
||||
if (ttl && ttl > 0 && isPhone) {
|
||||
throw new common_1.HttpException(`${ttl}秒内不得重复发送验证码!`, common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const messageInfo = { phone, code };
|
||||
await this.redisCacheService.set({ key, val: code }, 10 * 60);
|
||||
await this.verificationService.sendPhoneCode(messageInfo);
|
||||
return `验证码发送成功、请填写验证码完成认证!`;
|
||||
}
|
||||
createTokenFromFingerprint(fingerprint) {
|
||||
const token = this.jwtService.sign({
|
||||
username: `游客${fingerprint}`,
|
||||
@@ -371,6 +392,58 @@ let AuthService = class AuthService {
|
||||
});
|
||||
return token;
|
||||
}
|
||||
async verifyIdentity(req, body) {
|
||||
common_1.Logger.debug('开始实名认证流程');
|
||||
const { name, idCard } = body;
|
||||
const { id } = req.user;
|
||||
try {
|
||||
const result = await this.verificationService.verifyIdentity(body);
|
||||
common_1.Logger.debug(`实名认证结果: ${result}`);
|
||||
if (!result) {
|
||||
throw new common_1.HttpException('身份验证错误,请检查实名信息', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
await this.userService.saveRealNameInfo(id, name, idCard);
|
||||
return '认证成功';
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('验证过程出现错误', error);
|
||||
throw new common_1.HttpException('认证失败,请检查相关信息', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async verifyPhoneIdentity(req, body) {
|
||||
common_1.Logger.debug('开始手机号认证流程');
|
||||
const { phone, username, password, code } = body;
|
||||
const { id } = req.user;
|
||||
const nameSpace = this.globalConfigService.getNamespace();
|
||||
const key = `${nameSpace}:CODE:${phone}`;
|
||||
const redisCode = await this.redisCacheService.get({ key });
|
||||
common_1.Logger.debug(`Retrieved redisCode for ${phone}: ${redisCode}`);
|
||||
if (code === '') {
|
||||
throw new common_1.HttpException('请输入验证码', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (!redisCode) {
|
||||
common_1.Logger.log(`验证码过期: ${phone}`, 'authService');
|
||||
throw new common_1.HttpException('验证码已过期,请重新发送!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (code !== redisCode) {
|
||||
common_1.Logger.log(`验证码错误: ${phone} 输入的验证码: ${code}, 期望的验证码: ${redisCode}`, 'authService');
|
||||
throw new common_1.HttpException('验证码填写错误,请重新输入!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (username) {
|
||||
const usernameTaken = await this.userService.isUsernameTaken(body.username, id);
|
||||
if (usernameTaken) {
|
||||
throw new common_1.HttpException('用户名已存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
try {
|
||||
await this.userService.updateUserPhone(id, phone, username, password);
|
||||
return '认证成功';
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('验证过程出现错误', error);
|
||||
throw new common_1.HttpException('身份验证错误,请检查相关信息', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
};
|
||||
AuthService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
|
||||
9
dist/modules/auth/dto/authRegister.dto.js
vendored
9
dist/modules/auth/dto/authRegister.dto.js
vendored
@@ -29,15 +29,6 @@ __decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'ai@aiweb.com', description: '用户邮箱' }),
|
||||
__metadata("design:type", String)
|
||||
], UserRegisterDto.prototype, "email", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'FRJDLJHFNV',
|
||||
description: '用户填写的别人邀请码',
|
||||
required: false,
|
||||
}),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], UserRegisterDto.prototype, "invitedBy", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: '',
|
||||
|
||||
@@ -39,9 +39,4 @@ __decorate([
|
||||
(0, class_validator_1.IsNotEmpty)({ message: '手机验证码不能为空!' }),
|
||||
__metadata("design:type", String)
|
||||
], UserRegisterByPhoneDto.prototype, "phoneCode", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'SNINE', description: '用户邀请码', required: true }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], UserRegisterByPhoneDto.prototype, "invitedBy", void 0);
|
||||
exports.UserRegisterByPhoneDto = UserRegisterByPhoneDto;
|
||||
|
||||
48
dist/modules/badwords/badwords.controller.js
vendored
48
dist/modules/badwords/badwords.controller.js
vendored
@@ -12,35 +12,35 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BadwordsController = void 0;
|
||||
const badwords_service_1 = require("./badwords.service");
|
||||
exports.BadWordsController = void 0;
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const badWords_service_1 = require("./badWords.service");
|
||||
const addBadWords_dto_1 = require("./dto/addBadWords.dto");
|
||||
const delBadWords_dto_1 = require("./dto/delBadWords.dto");
|
||||
const queryBadWords_dto_1 = require("./dto/queryBadWords.dto");
|
||||
const queryViolation_dto_1 = require("./dto/queryViolation.dto");
|
||||
const updateBadWords_dto_1 = require("./dto/updateBadWords.dto");
|
||||
const delBadWords_dto_1 = require("./dto/delBadWords.dto");
|
||||
const addBadWords_dto_1 = require("./dto/addBadWords.dto");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
let BadwordsController = class BadwordsController {
|
||||
constructor(badwordsService) {
|
||||
this.badwordsService = badwordsService;
|
||||
let BadWordsController = class BadWordsController {
|
||||
constructor(badWordsService) {
|
||||
this.badWordsService = badWordsService;
|
||||
}
|
||||
queryBadWords(query) {
|
||||
return this.badwordsService.queryBadWords(query);
|
||||
return this.badWordsService.queryBadWords(query);
|
||||
}
|
||||
delBadWords(body) {
|
||||
return this.badwordsService.delBadWords(body);
|
||||
return this.badWordsService.delBadWords(body);
|
||||
}
|
||||
updateBadWords(body) {
|
||||
return this.badwordsService.updateBadWords(body);
|
||||
return this.badWordsService.updateBadWords(body);
|
||||
}
|
||||
addBadWord(body) {
|
||||
return this.badwordsService.addBadWord(body);
|
||||
return this.badWordsService.addBadWord(body);
|
||||
}
|
||||
violation(req, query) {
|
||||
return this.badwordsService.violation(req, query);
|
||||
return this.badWordsService.violation(req, query);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
@@ -50,7 +50,7 @@ __decorate([
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [queryBadWords_dto_1.QueryBadWordsDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], BadwordsController.prototype, "queryBadWords", null);
|
||||
], BadWordsController.prototype, "queryBadWords", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('del'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除敏感词' }),
|
||||
@@ -60,7 +60,7 @@ __decorate([
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [delBadWords_dto_1.DelBadWordsDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], BadwordsController.prototype, "delBadWords", null);
|
||||
], BadWordsController.prototype, "delBadWords", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('update'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '更新敏感词' }),
|
||||
@@ -70,7 +70,7 @@ __decorate([
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [updateBadWords_dto_1.UpdateBadWordsDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], BadwordsController.prototype, "updateBadWords", null);
|
||||
], BadWordsController.prototype, "updateBadWords", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('add'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '新增敏感词' }),
|
||||
@@ -80,7 +80,7 @@ __decorate([
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [addBadWords_dto_1.AddBadWordDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], BadwordsController.prototype, "addBadWord", null);
|
||||
], BadWordsController.prototype, "addBadWord", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('violation'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询违规记录' }),
|
||||
@@ -91,10 +91,10 @@ __decorate([
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, queryViolation_dto_1.QueryViolationDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], BadwordsController.prototype, "violation", null);
|
||||
BadwordsController = __decorate([
|
||||
], BadWordsController.prototype, "violation", null);
|
||||
BadWordsController = __decorate([
|
||||
(0, swagger_1.ApiTags)('badWords'),
|
||||
(0, common_1.Controller)('badwords'),
|
||||
__metadata("design:paramtypes", [badwords_service_1.BadwordsService])
|
||||
], BadwordsController);
|
||||
exports.BadwordsController = BadwordsController;
|
||||
(0, common_1.Controller)('badWords'),
|
||||
__metadata("design:paramtypes", [badWords_service_1.BadWordsService])
|
||||
], BadWordsController);
|
||||
exports.BadWordsController = BadWordsController;
|
||||
|
||||
2
dist/modules/badwords/badwords.entity.js
vendored
2
dist/modules/badwords/badwords.entity.js
vendored
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BadWordsEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
const typeorm_1 = require("typeorm");
|
||||
let BadWordsEntity = class BadWordsEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
|
||||
28
dist/modules/badwords/badwords.module.js
vendored
28
dist/modules/badwords/badwords.module.js
vendored
@@ -6,23 +6,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BadwordsModule = void 0;
|
||||
exports.BadWordsModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const badwords_service_1 = require("./badwords.service");
|
||||
const badwords_controller_1 = require("./badwords.controller");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const badwords_entity_1 = require("./badwords.entity");
|
||||
const violationLog_entity_1 = require("./violationLog.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
let BadwordsModule = class BadwordsModule {
|
||||
const badWords_controller_1 = require("./badWords.controller");
|
||||
const badWords_entity_1 = require("./badWords.entity");
|
||||
const badWords_service_1 = require("./badWords.service");
|
||||
const violationLog_entity_1 = require("./violationLog.entity");
|
||||
let BadWordsModule = class BadWordsModule {
|
||||
};
|
||||
BadwordsModule = __decorate([
|
||||
BadWordsModule = __decorate([
|
||||
(0, common_1.Global)(),
|
||||
(0, common_1.Module)({
|
||||
imports: [typeorm_1.TypeOrmModule.forFeature([badwords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity])],
|
||||
providers: [badwords_service_1.BadwordsService],
|
||||
controllers: [badwords_controller_1.BadwordsController],
|
||||
exports: [badwords_service_1.BadwordsService],
|
||||
imports: [
|
||||
typeorm_1.TypeOrmModule.forFeature([badWords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity]),
|
||||
],
|
||||
providers: [badWords_service_1.BadWordsService],
|
||||
controllers: [badWords_controller_1.BadWordsController],
|
||||
exports: [badWords_service_1.BadWordsService],
|
||||
})
|
||||
], BadwordsModule);
|
||||
exports.BadwordsModule = BadwordsModule;
|
||||
], BadWordsModule);
|
||||
exports.BadWordsModule = BadWordsModule;
|
||||
|
||||
23
dist/modules/badwords/badwords.service.js
vendored
23
dist/modules/badwords/badwords.service.js
vendored
@@ -12,17 +12,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BadwordsService = void 0;
|
||||
exports.BadWordsService = void 0;
|
||||
const utils_1 = require("../../common/utils");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const axios_1 = require("axios");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const globalConfig_service_1 = require("./../globalConfig/globalConfig.service");
|
||||
const badwords_entity_1 = require("./badwords.entity");
|
||||
const badWords_entity_1 = require("./badWords.entity");
|
||||
const violationLog_entity_1 = require("./violationLog.entity");
|
||||
let BadwordsService = class BadwordsService {
|
||||
let BadWordsService = class BadWordsService {
|
||||
constructor(badWordsEntity, violationLogEntity, userEntity, globalConfigService) {
|
||||
this.badWordsEntity = badWordsEntity;
|
||||
this.violationLogEntity = violationLogEntity;
|
||||
@@ -43,16 +43,15 @@ let BadwordsService = class BadwordsService {
|
||||
}
|
||||
if (triggeredWords.length) {
|
||||
await this.recordUserBadWords(userId, content, triggeredWords, ['自定义'], '自定义检测');
|
||||
const tips = `您提交的信息中包含违规的内容、我们已对您的账户进行标记、请合规使用!`;
|
||||
throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
return triggeredWords;
|
||||
}
|
||||
async checkBadWords(content, userId) {
|
||||
const config = await this.globalConfigService.getSensitiveConfig();
|
||||
if (config) {
|
||||
await this.checkBadWordsByConfig(content, config, userId);
|
||||
}
|
||||
await this.customSensitiveWords(content, userId);
|
||||
return await this.customSensitiveWords(content, userId);
|
||||
}
|
||||
async checkBadWordsByConfig(content, config, userId) {
|
||||
const { useType } = config;
|
||||
@@ -189,21 +188,21 @@ let BadwordsService = class BadwordsService {
|
||||
select: ['id', 'avatar', 'username', 'email', 'violationCount', 'status'],
|
||||
});
|
||||
rows.forEach((t) => {
|
||||
const user = usersInfo.find((u) => u.id === t.userId);
|
||||
const user = usersInfo.find((u) => u.id === t.userId) || {};
|
||||
role !== 'super' && (user.email = (0, utils_1.hideString)(user.email));
|
||||
t.userInfo = user;
|
||||
});
|
||||
return { rows, count };
|
||||
}
|
||||
};
|
||||
BadwordsService = __decorate([
|
||||
BadWordsService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(badwords_entity_1.BadWordsEntity)),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(badWords_entity_1.BadWordsEntity)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(violationLog_entity_1.ViolationLogEntity)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
], BadwordsService);
|
||||
exports.BadwordsService = BadwordsService;
|
||||
], BadWordsService);
|
||||
exports.BadWordsService = BadWordsService;
|
||||
|
||||
20
dist/modules/chat/chat.controller.js
vendored
20
dist/modules/chat/chat.controller.js
vendored
@@ -18,11 +18,13 @@ const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
|
||||
const chat_service_1 = require("./chat.service");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const chatProcess_dto_1 = require("./dto/chatProcess.dto");
|
||||
const aiPPT_1 = require("../ai/aiPPT");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
let ChatController = class ChatController {
|
||||
constructor(chatService, globalConfigService) {
|
||||
constructor(chatService, globalConfigService, aiPptService) {
|
||||
this.chatService = chatService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.aiPptService = aiPptService;
|
||||
}
|
||||
chatProcess(body, req, res) {
|
||||
return this.chatService.chatProcess(body, req, res);
|
||||
@@ -39,6 +41,9 @@ let ChatController = class ChatController {
|
||||
ttsProcess(body, req, res) {
|
||||
return this.chatService.ttsProcess(body, req, res);
|
||||
}
|
||||
pptCover(body) {
|
||||
return this.aiPptService.pptCover(body);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Post)('chat-process'),
|
||||
@@ -98,10 +103,21 @@ __decorate([
|
||||
__metadata("design:paramtypes", [Object, Object, Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], ChatController.prototype, "ttsProcess", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('ppt-cover'),
|
||||
(0, swagger_1.ApiOperation)({ summary: 'ppt封面获取' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], ChatController.prototype, "pptCover", null);
|
||||
ChatController = __decorate([
|
||||
(0, swagger_1.ApiTags)('chatgpt'),
|
||||
(0, common_1.Controller)('chatgpt'),
|
||||
__metadata("design:paramtypes", [chat_service_1.ChatService,
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
aiPPT_1.AiPptService])
|
||||
], ChatController);
|
||||
exports.ChatController = ChatController;
|
||||
|
||||
10
dist/modules/chat/chat.module.js
vendored
10
dist/modules/chat/chat.module.js
vendored
@@ -9,6 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ChatModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const aiPPT_1 = require("../ai/aiPPT");
|
||||
const cogVideo_service_1 = require("../ai/cogVideo.service");
|
||||
const fluxDraw_service_1 = require("../ai/fluxDraw.service");
|
||||
const lumaVideo_service_1 = require("../ai/lumaVideo.service");
|
||||
const midjourneyDraw_service_1 = require("../ai/midjourneyDraw.service");
|
||||
const openaiChat_service_1 = require("../ai/openaiChat.service");
|
||||
@@ -22,10 +25,8 @@ const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const mailer_service_1 = require("../mailer/mailer.service");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const plugin_entity_1 = require("../plugin/plugin.entity");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const user_service_1 = require("../user/user.service");
|
||||
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
|
||||
@@ -56,9 +57,7 @@ ChatModule = __decorate([
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
app_entity_1.AppEntity,
|
||||
userBalance_entity_1.UserBalanceEntity,
|
||||
salesUsers_entity_1.SalesUsersEntity,
|
||||
fingerprint_entity_1.FingerprintLogEntity,
|
||||
midjourney_entity_1.MidjourneyEntity,
|
||||
]),
|
||||
],
|
||||
controllers: [chat_controller_1.ChatController],
|
||||
@@ -76,6 +75,9 @@ ChatModule = __decorate([
|
||||
midjourneyDraw_service_1.MidjourneyService,
|
||||
openaiDraw_service_1.OpenAIDrawService,
|
||||
lumaVideo_service_1.LumaVideoService,
|
||||
cogVideo_service_1.CogVideoService,
|
||||
fluxDraw_service_1.FluxDrawService,
|
||||
aiPPT_1.AiPptService,
|
||||
],
|
||||
exports: [chat_service_1.ChatService],
|
||||
})
|
||||
|
||||
242
dist/modules/chat/chat.service.js
vendored
242
dist/modules/chat/chat.service.js
vendored
@@ -18,6 +18,9 @@ const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const axios_1 = require("axios");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const aiPPT_1 = require("../ai/aiPPT");
|
||||
const cogVideo_service_1 = require("../ai/cogVideo.service");
|
||||
const fluxDraw_service_1 = require("../ai/fluxDraw.service");
|
||||
const lumaVideo_service_1 = require("../ai/lumaVideo.service");
|
||||
const midjourneyDraw_service_1 = require("../ai/midjourneyDraw.service");
|
||||
const openaiChat_service_1 = require("../ai/openaiChat.service");
|
||||
@@ -26,7 +29,7 @@ const stableDiffusion_service_1 = require("../ai/stableDiffusion.service");
|
||||
const suno_service_1 = require("../ai/suno.service");
|
||||
const app_entity_1 = require("../app/app.entity");
|
||||
const autoreply_service_1 = require("../autoreply/autoreply.service");
|
||||
const badwords_service_1 = require("../badwords/badwords.service");
|
||||
const badWords_service_1 = require("../badWords/badWords.service");
|
||||
const chatGroup_service_1 = require("../chatGroup/chatGroup.service");
|
||||
const chatLog_service_1 = require("../chatLog/chatLog.service");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
@@ -37,7 +40,7 @@ const upload_service_1 = require("../upload/upload.service");
|
||||
const user_service_1 = require("../user/user.service");
|
||||
const userBalance_service_1 = require("../userBalance/userBalance.service");
|
||||
let ChatService = class ChatService {
|
||||
constructor(configEntity, appEntity, pluginEntity, sunoService, openAIChatService, chatLogService, midjourneyService, stableDiffusionService, userBalanceService, userService, uploadService, badwordsService, autoreplyService, globalConfigService, chatGroupService, modelsService, openAIDrawService, lumaVideoService) {
|
||||
constructor(configEntity, appEntity, pluginEntity, sunoService, openAIChatService, chatLogService, midjourneyService, stableDiffusionService, userBalanceService, userService, uploadService, badWordsService, autoreplyService, globalConfigService, chatGroupService, modelsService, openAIDrawService, lumaVideoService, cogVideoService, fluxDrawService, aiPptService) {
|
||||
this.configEntity = configEntity;
|
||||
this.appEntity = appEntity;
|
||||
this.pluginEntity = pluginEntity;
|
||||
@@ -49,16 +52,20 @@ let ChatService = class ChatService {
|
||||
this.userBalanceService = userBalanceService;
|
||||
this.userService = userService;
|
||||
this.uploadService = uploadService;
|
||||
this.badwordsService = badwordsService;
|
||||
this.badWordsService = badWordsService;
|
||||
this.autoreplyService = autoreplyService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.chatGroupService = chatGroupService;
|
||||
this.modelsService = modelsService;
|
||||
this.openAIDrawService = openAIDrawService;
|
||||
this.lumaVideoService = lumaVideoService;
|
||||
this.cogVideoService = cogVideoService;
|
||||
this.fluxDrawService = fluxDrawService;
|
||||
this.aiPptService = aiPptService;
|
||||
}
|
||||
async chatProcess(body, req, res) {
|
||||
const { options = {}, usingPluginId, appId = null, specialModel, prompt, fileInfo, modelType, extraParam, model, drawId, customId, action, modelName, modelAvatar, } = body;
|
||||
await this.userBalanceService.checkUserCertification(req.user.id);
|
||||
const { options = {}, usingPluginId, appId = null, specialModel, prompt, fileInfo, extraParam, model, drawId, customId, action, modelName, modelAvatar, } = body;
|
||||
let appInfo;
|
||||
if (specialModel) {
|
||||
appInfo = await this.appEntity.findOne({
|
||||
@@ -74,7 +81,7 @@ let ChatService = class ChatService {
|
||||
}
|
||||
}
|
||||
const { groupId, fileParsing } = options;
|
||||
const { openaiTimeout, openaiBaseUrl, openaiBaseKey, systemPreMessage, isMjTranslate, mjTranslatePrompt, openaiTemperature, openaiBaseModel, } = await this.globalConfigService.getConfigs([
|
||||
const { openaiTimeout, openaiBaseUrl, openaiBaseKey, systemPreMessage, isMjTranslate, mjTranslatePrompt, openaiTemperature, openaiBaseModel, isGeneratePromptReference, isConvertToBase64, isSensitiveWordFilter, } = await this.globalConfigService.getConfigs([
|
||||
'openaiTimeout',
|
||||
'openaiBaseUrl',
|
||||
'openaiBaseKey',
|
||||
@@ -83,11 +90,21 @@ let ChatService = class ChatService {
|
||||
'mjTranslatePrompt',
|
||||
'openaiTemperature',
|
||||
'openaiBaseModel',
|
||||
'isGeneratePromptReference',
|
||||
'isConvertToBase64',
|
||||
'isSensitiveWordFilter',
|
||||
]);
|
||||
await this.userService.checkUserStatus(req.user);
|
||||
res &&
|
||||
res.setHeader('Content-type', 'application/octet-stream; charset=utf-8');
|
||||
await this.badwordsService.checkBadWords(prompt, req.user.id);
|
||||
if (isSensitiveWordFilter === '1') {
|
||||
const triggeredWords = await this.badWordsService.checkBadWords(prompt, req.user.id);
|
||||
if (triggeredWords.length > 0) {
|
||||
const tips = `您提交的信息中包含违规的内容,我们已对您的账户进行标记,请合规使用!`;
|
||||
throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
const autoReplyRes = await this.autoreplyService.checkAutoReply(prompt);
|
||||
let currentRequestModelKey = null;
|
||||
let appName = '';
|
||||
let setSystemMessage = '';
|
||||
@@ -132,6 +149,7 @@ let ChatService = class ChatService {
|
||||
}
|
||||
}
|
||||
else {
|
||||
const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId);
|
||||
if (usingPlugin && usingPlugin.isSystemPlugin === 0) {
|
||||
let pluginPrompt = '';
|
||||
try {
|
||||
@@ -183,13 +201,13 @@ let ChatService = class ChatService {
|
||||
title: groupInfo.title,
|
||||
isSticky: false,
|
||||
config: updatedConfig,
|
||||
fileUrl: '',
|
||||
}, req);
|
||||
}
|
||||
const { deduct, isTokenBased, tokenFeeRatio, deductType, key, id: keyId, maxRounds, proxyUrl, maxModelTokens, timeout, model: useModel, isFileUpload, } = currentRequestModelKey;
|
||||
const { deduct, isTokenBased, tokenFeeRatio, deductType, key, id: keyId, maxRounds, proxyUrl, maxModelTokens, timeout, model: useModel, isFileUpload, keyType: modelType, } = currentRequestModelKey;
|
||||
if (await this.chatLogService.checkModelLimits(req.user, useModel)) {
|
||||
throw new common_1.HttpException('1 小时内对话次数过多,请切换模型或稍后再试!', common_1.HttpStatus.TOO_MANY_REQUESTS);
|
||||
}
|
||||
common_1.Logger.debug(`原始用户提问: ${prompt}, 是否翻译: ${isMjTranslate}, 翻译提示: ${mjTranslatePrompt}, 模型: ${model}, 是否文件上传: ${isFileUpload}, 文件信息: ${fileInfo}`);
|
||||
if (isMjTranslate === '1' &&
|
||||
action === 'IMAGINE' &&
|
||||
model === 'midjourney') {
|
||||
@@ -265,11 +283,35 @@ let ChatService = class ChatService {
|
||||
});
|
||||
const userLogId = userSaveLog.id;
|
||||
const assistantLogId = assistantSaveLog.id;
|
||||
if (autoReplyRes.answer && res) {
|
||||
if (autoReplyRes.isAIReplyEnabled === 0) {
|
||||
const chars = autoReplyRes.answer.split('');
|
||||
const sendCharByChar = (index) => {
|
||||
if (index < chars.length) {
|
||||
const msg = { text: chars[index] };
|
||||
res.write(`${JSON.stringify(msg)}\n`);
|
||||
setTimeout(() => sendCharByChar(index + 1), 10);
|
||||
}
|
||||
else {
|
||||
res.end();
|
||||
}
|
||||
};
|
||||
sendCharByChar(0);
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: autoReplyRes.answer,
|
||||
});
|
||||
return;
|
||||
}
|
||||
else {
|
||||
setSystemMessage = setSystemMessage + autoReplyRes.answer;
|
||||
}
|
||||
}
|
||||
const { messagesHistory } = await this.buildMessageFromParentMessageId(prompt, {
|
||||
groupId,
|
||||
systemMessage: setSystemMessage,
|
||||
maxModelTokens,
|
||||
maxRounds: maxRounds,
|
||||
isConvertToBase64: isConvertToBase64,
|
||||
fileInfo: fileInfo,
|
||||
model: useModel,
|
||||
isFileUpload,
|
||||
@@ -284,11 +326,15 @@ let ChatService = class ChatService {
|
||||
let response;
|
||||
let firstChunk = true;
|
||||
try {
|
||||
if (useModel === 'dall-e-3' ||
|
||||
if ((useModel === 'dall-e-3' ||
|
||||
useModel === 'midjourney' ||
|
||||
useModel.includes('suno') ||
|
||||
useModel === 'ai-ppt' ||
|
||||
useModel === 'suno-music' ||
|
||||
useModel === 'luma-video' ||
|
||||
useModel.includes('stable-diffusion')) {
|
||||
useModel.includes('stable-diffusion') ||
|
||||
useModel.includes('cog-video') ||
|
||||
useModel.includes('flux')) &&
|
||||
modelType === 2) {
|
||||
if (useModel === 'dall-e-3') {
|
||||
response = this.openAIDrawService.dalleDraw({
|
||||
prompt: prompt,
|
||||
@@ -318,7 +364,57 @@ let ChatService = class ChatService {
|
||||
answer: '绘制中',
|
||||
});
|
||||
}
|
||||
else if (useModel.includes('suno')) {
|
||||
else if (useModel === 'ai-ppt') {
|
||||
common_1.Logger.log('开始生成PPT', 'DrawService');
|
||||
response = this.aiPptService.aiPPT({
|
||||
usePrompt: usePrompt,
|
||||
prompt: prompt,
|
||||
apiKey: modelKey,
|
||||
proxyUrl: proxyResUrl,
|
||||
model: useModel,
|
||||
modelName: useModeName,
|
||||
drawId,
|
||||
customId,
|
||||
action,
|
||||
timeout: modelTimeout,
|
||||
assistantLogId,
|
||||
extraParam,
|
||||
fileInfo,
|
||||
});
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: '生成中',
|
||||
});
|
||||
}
|
||||
else if (useModel.includes('flux')) {
|
||||
response = this.fluxDrawService.fluxDraw({
|
||||
prompt: prompt,
|
||||
extraParam: extraParam,
|
||||
apiKey: modelKey,
|
||||
proxyUrl: proxyResUrl,
|
||||
model: useModel,
|
||||
timeout: modelTimeout,
|
||||
modelName: useModeName,
|
||||
groupId: groupId,
|
||||
onSuccess: async (data) => {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo,
|
||||
answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt,
|
||||
progress: '100%',
|
||||
status: data.status,
|
||||
});
|
||||
},
|
||||
onFailure: async (data) => {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: '绘图失败',
|
||||
status: data.status,
|
||||
});
|
||||
},
|
||||
}, this.buildMessageFromParentMessageId);
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: '绘制中',
|
||||
});
|
||||
}
|
||||
else if (useModel.includes('suno-music')) {
|
||||
response = this.sunoService.suno({
|
||||
assistantLogId,
|
||||
apiKey: modelKey,
|
||||
@@ -370,8 +466,46 @@ let ChatService = class ChatService {
|
||||
answer: '提交成功,视频生成中',
|
||||
});
|
||||
}
|
||||
else if (useModel.includes('cog-video')) {
|
||||
response = this.cogVideoService.cogVideo({
|
||||
fileInfo,
|
||||
extraParam,
|
||||
assistantLogId,
|
||||
apiKey: modelKey,
|
||||
action,
|
||||
prompt,
|
||||
model: useModel,
|
||||
timeout: modelTimeout,
|
||||
proxyUrl: proxyResUrl,
|
||||
taskData: customId,
|
||||
onGenerate: async (data) => {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo,
|
||||
answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt,
|
||||
status: 2,
|
||||
});
|
||||
},
|
||||
onSuccess: async (data) => {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo,
|
||||
answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt,
|
||||
progress: '100%',
|
||||
status: 3,
|
||||
});
|
||||
},
|
||||
onFailure: async (data) => {
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: data.errMsg,
|
||||
status: 4,
|
||||
});
|
||||
},
|
||||
});
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
answer: '提交成功,视频生成中',
|
||||
});
|
||||
}
|
||||
else if (useModel.includes('stable-diffusion')) {
|
||||
response = this.stableDiffusionService.sdxl(messagesHistory, {
|
||||
response = this.stableDiffusionService.sdxl({
|
||||
chatId: assistantLogId,
|
||||
maxModelTokens,
|
||||
apiKey: modelKey,
|
||||
@@ -481,14 +615,33 @@ let ChatService = class ChatService {
|
||||
completionTokens: completionTokens,
|
||||
totalTokens: promptTokens + completionTokens,
|
||||
});
|
||||
let sanitizedAnswer = response.answer;
|
||||
if (isSensitiveWordFilter === '1') {
|
||||
const triggeredWords = await this.badWordsService.checkBadWords(response.answer, req.user.id);
|
||||
if (triggeredWords.length > 0) {
|
||||
const regex = new RegExp(triggeredWords.join('|'), 'gi');
|
||||
sanitizedAnswer = sanitizedAnswer.replace(regex, (matched) => '*'.repeat(matched.length));
|
||||
}
|
||||
}
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
fileInfo: response === null || response === void 0 ? void 0 : response.fileInfo,
|
||||
answer: response.answer,
|
||||
answer: sanitizedAnswer,
|
||||
promptTokens: promptTokens,
|
||||
completionTokens: completionTokens,
|
||||
totalTokens: promptTokens + completionTokens,
|
||||
status: 3,
|
||||
});
|
||||
try {
|
||||
if (isGeneratePromptReference === '1') {
|
||||
const promptReference = await this.openAIChatService.chatFree(`根据用户提问{${prompt}}以及 AI 的回答{${response.answer}},生成三个更进入一步的提问,用{}包裹每个问题,不需要分行,不需要其他任何内容,单个提问不超过30个字`);
|
||||
await this.chatLogService.updateChatLog(assistantLogId, {
|
||||
promptReference: promptReference,
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`调用 chatFree 出错: ${error}`);
|
||||
}
|
||||
if (isTokenBased === true) {
|
||||
charge =
|
||||
deduct *
|
||||
@@ -594,13 +747,14 @@ let ChatService = class ChatService {
|
||||
title: chatTitle,
|
||||
isSticky: false,
|
||||
config: '',
|
||||
fileUrl: '',
|
||||
}, req)
|
||||
.then(() => common_1.Logger.log(`更新标题名称为: ${chatTitle}`, 'ChatService'))
|
||||
.catch((error) => common_1.Logger.error(`更新对话组标题失败: ${error}`));
|
||||
}
|
||||
}
|
||||
async buildMessageFromParentMessageId(text, options, chatLogService) {
|
||||
let { systemMessage = '', fileInfo, groupId, maxRounds = 5, maxModelTokens = 8000, isFileUpload = 0, } = options;
|
||||
let { systemMessage = '', fileInfo, groupId, maxRounds = 5, maxModelTokens = 8000, isFileUpload = 0, isConvertToBase64, } = options;
|
||||
if (systemMessage.length > maxModelTokens) {
|
||||
common_1.Logger.log('系统消息超过最大长度,将被截断', 'ChatService');
|
||||
systemMessage = systemMessage.slice(0, maxModelTokens);
|
||||
@@ -612,16 +766,21 @@ let ChatService = class ChatService {
|
||||
if (groupId) {
|
||||
const history = await chatLogService.chatHistory(groupId, maxRounds);
|
||||
let tempUserMessage = null;
|
||||
history.forEach((record) => {
|
||||
for (const record of history) {
|
||||
try {
|
||||
let content;
|
||||
if ((isFileUpload === 2 || isFileUpload === 3) &&
|
||||
record.fileInfo &&
|
||||
record.role === 'user') {
|
||||
content = [
|
||||
{ type: 'text', text: record.text },
|
||||
{ type: 'image_url', image_url: { url: record.fileInfo } },
|
||||
];
|
||||
const imageUrls = await Promise.all(record.fileInfo.split(',').map(async (url) => ({
|
||||
type: 'image_url',
|
||||
image_url: {
|
||||
url: isConvertToBase64 === '1'
|
||||
? await this.convertUrlToBase64(url.trim())
|
||||
: url.trim(),
|
||||
},
|
||||
})));
|
||||
content = [{ type: 'text', text: record.text }, ...imageUrls];
|
||||
}
|
||||
else if (isFileUpload === 1 &&
|
||||
record.fileInfo &&
|
||||
@@ -648,14 +807,19 @@ let ChatService = class ChatService {
|
||||
catch (error) {
|
||||
common_1.Logger.error('处理历史记录时出错:', error, '记录:', JSON.stringify(record, null, 2));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
let currentMessageContent;
|
||||
if ((isFileUpload === 2 || isFileUpload === 3) && fileInfo) {
|
||||
currentMessageContent = [
|
||||
{ type: 'text', text },
|
||||
{ type: 'image_url', image_url: { url: fileInfo } },
|
||||
];
|
||||
const imageUrls = await Promise.all(fileInfo.split(',').map(async (url) => ({
|
||||
type: 'image_url',
|
||||
image_url: {
|
||||
url: isConvertToBase64 === '1'
|
||||
? await this.convertUrlToBase64(url.trim())
|
||||
: url.trim(),
|
||||
},
|
||||
})));
|
||||
currentMessageContent = [{ type: 'text', text }, ...imageUrls];
|
||||
}
|
||||
else if (isFileUpload === 1 && fileInfo) {
|
||||
currentMessageContent = fileInfo + '\n' + text;
|
||||
@@ -706,13 +870,30 @@ let ChatService = class ChatService {
|
||||
round: messages.length,
|
||||
};
|
||||
}
|
||||
async convertUrlToBase64(url) {
|
||||
try {
|
||||
console.log(`正在尝试转换URL为Base64: ${url}`);
|
||||
const response = await axios_1.default.get(url, { responseType: 'arraybuffer' });
|
||||
const buffer = Buffer.from(response.data, 'binary');
|
||||
console.log(`成功获取图片,正在转换为Base64: ${url}`);
|
||||
const base64Data = `data:${response.headers['content-type']};base64,${buffer.toString('base64')}`;
|
||||
console.log(`成功转换URL为Base64: ${url}`);
|
||||
return base64Data;
|
||||
}
|
||||
catch (error) {
|
||||
console.error('转换URL为Base64时发生错误:', error);
|
||||
console.warn(`返回原始链接: ${url}`);
|
||||
return url;
|
||||
}
|
||||
}
|
||||
async ttsProcess(body, req, res) {
|
||||
const { chatId, prompt } = body;
|
||||
const detailKeyInfo = await this.modelsService.getCurrentModelKeyInfo('tts-1');
|
||||
const { openaiTimeout, openaiBaseUrl, openaiBaseKey } = await this.globalConfigService.getConfigs([
|
||||
const { openaiTimeout, openaiBaseUrl, openaiBaseKey, openaiVoice } = await this.globalConfigService.getConfigs([
|
||||
'openaiTimeout',
|
||||
'openaiBaseUrl',
|
||||
'openaiBaseKey',
|
||||
'openaiVoice',
|
||||
]);
|
||||
const { key, proxyUrl, deduct, deductType, timeout } = detailKeyInfo;
|
||||
const useKey = key || openaiBaseKey;
|
||||
@@ -732,7 +913,7 @@ let ChatService = class ChatService {
|
||||
data: {
|
||||
model: 'tts-1',
|
||||
input: prompt,
|
||||
voice: 'onyx',
|
||||
voice: openaiVoice || 'onyx',
|
||||
},
|
||||
};
|
||||
try {
|
||||
@@ -773,12 +954,15 @@ ChatService = __decorate([
|
||||
userBalance_service_1.UserBalanceService,
|
||||
user_service_1.UserService,
|
||||
upload_service_1.UploadService,
|
||||
badwords_service_1.BadwordsService,
|
||||
badWords_service_1.BadWordsService,
|
||||
autoreply_service_1.AutoreplyService,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
chatGroup_service_1.ChatGroupService,
|
||||
models_service_1.ModelsService,
|
||||
openaiDraw_service_1.OpenAIDrawService,
|
||||
lumaVideo_service_1.LumaVideoService])
|
||||
lumaVideo_service_1.LumaVideoService,
|
||||
cogVideo_service_1.CogVideoService,
|
||||
fluxDraw_service_1.FluxDrawService,
|
||||
aiPPT_1.AiPptService])
|
||||
], ChatService);
|
||||
exports.ChatService = ChatService;
|
||||
|
||||
14
dist/modules/chatGroup/chatGroup.entity.js
vendored
14
dist/modules/chatGroup/chatGroup.entity.js
vendored
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ChatGroupEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
const typeorm_1 = require("typeorm");
|
||||
let ChatGroupEntity = class ChatGroupEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
@@ -38,6 +38,18 @@ __decorate([
|
||||
(0, typeorm_1.Column)({ comment: '配置', nullable: true, default: null, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], ChatGroupEntity.prototype, "config", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '附加参数', nullable: true, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], ChatGroupEntity.prototype, "params", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '文件链接', nullable: true, default: null, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], ChatGroupEntity.prototype, "fileUrl", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: 'PDF中的文字内容', nullable: true, type: 'mediumtext' }),
|
||||
__metadata("design:type", String)
|
||||
], ChatGroupEntity.prototype, "pdfTextContent", void 0);
|
||||
ChatGroupEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'chat_group' })
|
||||
], ChatGroupEntity);
|
||||
|
||||
64
dist/modules/chatGroup/chatGroup.service.js
vendored
64
dist/modules/chatGroup/chatGroup.service.js
vendored
@@ -11,10 +11,23 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
var __rest = (this && this.__rest) || function (s, e) {
|
||||
var t = {};
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
||||
t[p] = s[p];
|
||||
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
||||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
||||
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
||||
t[p[i]] = s[p[i]];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ChatGroupService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const axios_1 = require("axios");
|
||||
const pdf = require("pdf-parse");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const app_entity_1 = require("../app/app.entity");
|
||||
const models_service_1 = require("../models/models.service");
|
||||
@@ -27,13 +40,13 @@ let ChatGroupService = class ChatGroupService {
|
||||
}
|
||||
async create(body, req) {
|
||||
const { id } = req.user;
|
||||
const { appId, modelConfig: bodyModelConfig } = body;
|
||||
const { appId, modelConfig: bodyModelConfig, params } = body;
|
||||
let modelConfig = bodyModelConfig || (await this.modelsService.getBaseConfig());
|
||||
if (!modelConfig) {
|
||||
throw new common_1.HttpException('管理员未配置任何AI模型、请先联系管理员开通聊天模型配置!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
modelConfig = JSON.parse(JSON.stringify(modelConfig));
|
||||
const params = { title: '新对话', userId: id, appId };
|
||||
const groupParams = { title: '新对话', userId: id, appId, params };
|
||||
if (appId) {
|
||||
const appInfo = await this.appEntity.findOne({ where: { id: appId } });
|
||||
if (!appInfo) {
|
||||
@@ -59,10 +72,10 @@ let ChatGroupService = class ChatGroupService {
|
||||
throw new common_1.HttpException('非法操作、您在使用一个未启用的应用!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (name) {
|
||||
params.title = name;
|
||||
groupParams.title = name;
|
||||
}
|
||||
}
|
||||
const newGroup = await this.chatGroupEntity.save(Object.assign(Object.assign({}, params), { config: JSON.stringify(modelConfig) }));
|
||||
const newGroup = await this.chatGroupEntity.save(Object.assign(Object.assign({}, groupParams), { config: JSON.stringify(modelConfig) }));
|
||||
return newGroup;
|
||||
}
|
||||
async query(req) {
|
||||
@@ -87,7 +100,7 @@ let ChatGroupService = class ChatGroupService {
|
||||
}
|
||||
}
|
||||
async update(body, req) {
|
||||
const { title, isSticky, groupId, config } = body;
|
||||
const { title, isSticky, groupId, config, fileUrl } = body;
|
||||
const { id } = req.user;
|
||||
const g = await this.chatGroupEntity.findOne({
|
||||
where: { id: groupId, userId: id },
|
||||
@@ -110,14 +123,41 @@ let ChatGroupService = class ChatGroupService {
|
||||
title && (data['title'] = title);
|
||||
typeof isSticky !== 'undefined' && (data['isSticky'] = isSticky);
|
||||
config && (data['config'] = config);
|
||||
fileUrl && (data['fileUrl'] = fileUrl);
|
||||
const u = await this.chatGroupEntity.update({ id: groupId }, data);
|
||||
if (u.affected) {
|
||||
if (fileUrl) {
|
||||
this.handlePdfExtraction(fileUrl, groupId);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
throw new common_1.HttpException('更新对话失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async handlePdfExtraction(fileUrl, groupId) {
|
||||
try {
|
||||
const pdfText = await this.extractPdfText(fileUrl);
|
||||
await this.chatGroupEntity.update({ id: groupId }, { pdfTextContent: pdfText });
|
||||
}
|
||||
catch (error) {
|
||||
console.error('PDF 读取失败:', error);
|
||||
}
|
||||
}
|
||||
async extractPdfText(fileUrl) {
|
||||
try {
|
||||
const response = await axios_1.default.get(fileUrl, {
|
||||
responseType: 'arraybuffer',
|
||||
});
|
||||
const dataBuffer = Buffer.from(response.data);
|
||||
const pdfData = await pdf(dataBuffer);
|
||||
return pdfData.text;
|
||||
}
|
||||
catch (error) {
|
||||
console.error('PDF 解析失败:', error);
|
||||
throw new Error('PDF 解析失败');
|
||||
}
|
||||
}
|
||||
async updateTime(groupId) {
|
||||
await this.chatGroupEntity.update(groupId, {
|
||||
updatedAt: new Date(),
|
||||
@@ -153,7 +193,19 @@ let ChatGroupService = class ChatGroupService {
|
||||
async getGroupInfoFromId(id) {
|
||||
if (!id)
|
||||
return;
|
||||
return await this.chatGroupEntity.findOne({ where: { id } });
|
||||
const groupInfo = await this.chatGroupEntity.findOne({ where: { id } });
|
||||
if (groupInfo) {
|
||||
const { pdfTextContent } = groupInfo, rest = __rest(groupInfo, ["pdfTextContent"]);
|
||||
return rest;
|
||||
}
|
||||
}
|
||||
async getGroupPdfText(groupId) {
|
||||
const groupInfo = await this.chatGroupEntity.findOne({
|
||||
where: { id: groupId },
|
||||
});
|
||||
if (groupInfo) {
|
||||
return groupInfo.pdfTextContent;
|
||||
}
|
||||
}
|
||||
};
|
||||
ChatGroupService = __decorate([
|
||||
|
||||
16
dist/modules/chatGroup/dto/createGroup.dto.js
vendored
16
dist/modules/chatGroup/dto/createGroup.dto.js
vendored
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CreateGroupDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const class_validator_1 = require("class-validator");
|
||||
class CreateGroupDto {
|
||||
}
|
||||
__decorate([
|
||||
@@ -20,7 +20,19 @@ __decorate([
|
||||
__metadata("design:type", Number)
|
||||
], CreateGroupDto.prototype, "appId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: "", description: '对话模型配置项序列化的字符串', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: '',
|
||||
description: '对话模型配置项序列化的字符串',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Object)
|
||||
], CreateGroupDto.prototype, "modelConfig", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: '',
|
||||
description: '对话组参数序列化的字符串',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], CreateGroupDto.prototype, "params", void 0);
|
||||
exports.CreateGroupDto = CreateGroupDto;
|
||||
|
||||
13
dist/modules/chatGroup/dto/updateGroup.dto.js
vendored
13
dist/modules/chatGroup/dto/updateGroup.dto.js
vendored
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.UpdateGroupDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const class_validator_1 = require("class-validator");
|
||||
class UpdateGroupDto {
|
||||
}
|
||||
__decorate([
|
||||
@@ -30,7 +30,16 @@ __decorate([
|
||||
__metadata("design:type", Boolean)
|
||||
], UpdateGroupDto.prototype, "isSticky", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: "", description: '对话模型配置项序列化的字符串', required: false }),
|
||||
(0, swagger_1.ApiProperty)({ example: '', description: '对话组文件地址', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], UpdateGroupDto.prototype, "fileUrl", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: '',
|
||||
description: '对话模型配置项序列化的字符串',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], UpdateGroupDto.prototype, "config", void 0);
|
||||
exports.UpdateGroupDto = UpdateGroupDto;
|
||||
|
||||
4
dist/modules/chatLog/chatLog.entity.js
vendored
4
dist/modules/chatLog/chatLog.entity.js
vendored
@@ -134,6 +134,10 @@ __decorate([
|
||||
(0, typeorm_1.Column)({ comment: '音频Url', nullable: true, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], ChatLogEntity.prototype, "audioUrl", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '提问参考', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], ChatLogEntity.prototype, "promptReference", void 0);
|
||||
ChatLogEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'chatlog' })
|
||||
], ChatLogEntity);
|
||||
|
||||
8
dist/modules/chatLog/chatLog.module.js
vendored
8
dist/modules/chatLog/chatLog.module.js
vendored
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ChatLogModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const badwords_entity_1 = require("../badwords/badwords.entity");
|
||||
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const chatLog_controller_1 = require("./chatLog.controller");
|
||||
@@ -21,12 +20,7 @@ ChatLogModule = __decorate([
|
||||
(0, common_1.Global)(),
|
||||
(0, common_1.Module)({
|
||||
imports: [
|
||||
typeorm_1.TypeOrmModule.forFeature([
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
user_entity_1.UserEntity,
|
||||
badwords_entity_1.BadWordsEntity,
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
]),
|
||||
typeorm_1.TypeOrmModule.forFeature([chatLog_entity_1.ChatLogEntity, user_entity_1.UserEntity, chatGroup_entity_1.ChatGroupEntity]),
|
||||
],
|
||||
controllers: [chatLog_controller_1.ChatLogController],
|
||||
providers: [chatLog_service_1.ChatLogService],
|
||||
|
||||
3
dist/modules/chatLog/chatLog.service.js
vendored
3
dist/modules/chatLog/chatLog.service.js
vendored
@@ -236,7 +236,7 @@ let ChatLogService = class ChatLogService {
|
||||
}
|
||||
const list = await this.chatLogEntity.find({ where });
|
||||
return list.map((item) => {
|
||||
const { prompt, role, answer, createdAt, model, modelName, type, status, action, drawId, id, fileInfo, ttsUrl, videoUrl, audioUrl, customId, pluginParam, modelAvatar, taskData, } = item;
|
||||
const { prompt, role, answer, createdAt, model, modelName, type, status, action, drawId, id, fileInfo, ttsUrl, videoUrl, audioUrl, customId, pluginParam, modelAvatar, taskData, promptReference, } = item;
|
||||
return {
|
||||
chatId: id,
|
||||
dateTime: (0, utils_1.formatDate)(createdAt),
|
||||
@@ -257,6 +257,7 @@ let ChatLogService = class ChatLogService {
|
||||
pluginParam: pluginParam,
|
||||
modelAvatar: modelAvatar,
|
||||
taskData: taskData,
|
||||
promptReference: promptReference,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
4
dist/modules/crami/crami.module.js
vendored
4
dist/modules/crami/crami.module.js
vendored
@@ -12,8 +12,6 @@ const typeorm_1 = require("@nestjs/typeorm");
|
||||
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
|
||||
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
|
||||
const balance_entity_1 = require("../userBalance/balance.entity");
|
||||
@@ -31,7 +29,6 @@ CramiModule = __decorate([
|
||||
(0, common_1.Module)({
|
||||
imports: [
|
||||
typeorm_1.TypeOrmModule.forFeature([
|
||||
salesUsers_entity_1.SalesUsersEntity,
|
||||
crami_entity_1.CramiEntity,
|
||||
cramiPackage_entity_1.CramiPackageEntity,
|
||||
user_entity_1.UserEntity,
|
||||
@@ -42,7 +39,6 @@ CramiModule = __decorate([
|
||||
fingerprint_entity_1.FingerprintLogEntity,
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
midjourney_entity_1.MidjourneyEntity,
|
||||
]),
|
||||
],
|
||||
providers: [crami_service_1.CramiService, userBalance_service_1.UserBalanceService],
|
||||
|
||||
101
dist/modules/database/database.service.js
vendored
101
dist/modules/database/database.service.js
vendored
@@ -20,7 +20,6 @@ let DatabaseService = class DatabaseService {
|
||||
async onModuleInit() {
|
||||
await this.checkSuperAdmin();
|
||||
await this.checkSiteBaseConfig();
|
||||
await this.createSystemReservedApps();
|
||||
}
|
||||
async checkSuperAdmin() {
|
||||
const user = await this.connection.query(`SELECT * FROM users WHERE role = 'super'`);
|
||||
@@ -63,13 +62,7 @@ let DatabaseService = class DatabaseService {
|
||||
}
|
||||
}
|
||||
async checkSiteBaseConfig() {
|
||||
const keys = [
|
||||
'siteName',
|
||||
'qqNumber',
|
||||
'vxNumber',
|
||||
'robotAvatar',
|
||||
'userDefautlAvatar',
|
||||
];
|
||||
const keys = ['siteName', 'robotAvatar'];
|
||||
const result = await this.connection.query(`
|
||||
SELECT COUNT(*) AS count FROM config WHERE \`configKey\` IN (${keys
|
||||
.map((k) => `'${k}'`)
|
||||
@@ -91,8 +84,6 @@ let DatabaseService = class DatabaseService {
|
||||
`;
|
||||
const defaultConfig = [
|
||||
{ configKey: 'siteName', configVal: '', public: 1, encry: 0 },
|
||||
{ configKey: 'qqNumber', configVal: '', public: 1, encry: 0 },
|
||||
{ configKey: 'vxNumber', configVal: '', public: 1, encry: 0 },
|
||||
{ configKey: 'robotAvatar', configVal: '', public: 1, encry: 0 },
|
||||
{
|
||||
configKey: 'userDefautlAvatar',
|
||||
@@ -178,44 +169,16 @@ let DatabaseService = class DatabaseService {
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{ configKey: 'inviteSendStatus', configVal: '1', public: 1, encry: 0 },
|
||||
{
|
||||
configKey: 'inviteGiveSendModel3Count',
|
||||
configVal: '0',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{
|
||||
configKey: 'inviteGiveSendModel4Count',
|
||||
configVal: '0',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{
|
||||
configKey: 'inviteGiveSendDrawMjCount',
|
||||
configVal: '0',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{
|
||||
configKey: 'invitedGuestSendModel3Count',
|
||||
configVal: '10',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{
|
||||
configKey: 'invitedGuestSendModel4Count',
|
||||
configVal: '10',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{
|
||||
configKey: 'invitedGuestSendDrawMjCount',
|
||||
configVal: '10',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
{ configKey: 'isVerifyEmail', configVal: '1', public: 1, encry: 0 },
|
||||
{ configKey: 'model3Name', configVal: '普通积分', public: 1, encry: 0 },
|
||||
{ configKey: 'model4Name', configVal: '高级积分', public: 1, encry: 0 },
|
||||
{ configKey: 'drawMjName', configVal: '绘画积分', public: 1, encry: 0 },
|
||||
{
|
||||
configKey: 'drawingStyles',
|
||||
configVal: '油画风格,像素风格,赛博朋克,动漫,日系,超现实主义,油画,卡通,插画,海报,写实,扁平,中国风,水墨画,唯美二次元,印象派,炫彩插画,像素艺术,艺术创想,色彩主义,数字艺术',
|
||||
public: 1,
|
||||
encry: 0,
|
||||
},
|
||||
];
|
||||
const res = await this.connection.query(`INSERT INTO config (configKey, configVal, public, encry) VALUES ${defaultConfig
|
||||
.map((d) => `('${d.configKey}', '${d.configVal.replace(/'/g, "\\'")}', '${d.public}', '${d.encry}')`)
|
||||
@@ -227,50 +190,6 @@ let DatabaseService = class DatabaseService {
|
||||
throw new common_1.HttpException('创建默认网站配置失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
async createSystemReservedApps() {
|
||||
const systemApps = [
|
||||
{
|
||||
name: '提示词优化PromptOptimization',
|
||||
catId: 9900,
|
||||
des: 'PromptOptimization',
|
||||
preset: "Translate any given phrase from any language into English. For instance, when I input '{可爱的熊猫}', you should output '{cute panda}', with no period at the end.",
|
||||
appModel: 'gpt-3.5-turbo',
|
||||
isFixedModel: 1,
|
||||
isSystemReserved: 1,
|
||||
},
|
||||
{
|
||||
name: '思维导图MindMap',
|
||||
catId: 9900,
|
||||
des: 'MindMap',
|
||||
preset: '我希望你使用markdown格式回答我得问题、我的需求是得到一份markdown格式的大纲、尽量做的精细、层级多一点、不管我问你什么、都需要您回复我一个大纲出来、我想使用大纲做思维导图、除了大纲之外、不要无关内容和总结。',
|
||||
appModel: 'gpt-3.5-turbo',
|
||||
isFixedModel: 1,
|
||||
isSystemReserved: 1,
|
||||
},
|
||||
];
|
||||
try {
|
||||
for (const app of systemApps) {
|
||||
const result = await this.connection.query(`SELECT COUNT(*) AS count FROM app WHERE name = ? AND des = ? AND isSystemReserved = ?`, [app.name, app.des, app.isSystemReserved]);
|
||||
const count = parseInt(result[0].count, 10);
|
||||
if (count === 0) {
|
||||
await this.connection.query(`INSERT INTO app (name, catId, des, preset, appModel, isFixedModel, isSystemReserved) VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
||||
app.name,
|
||||
app.catId,
|
||||
app.des,
|
||||
app.preset,
|
||||
app.appModel,
|
||||
app.isFixedModel,
|
||||
app.isSystemReserved,
|
||||
]);
|
||||
common_1.Logger.log(`系统预留应用${app.name}创建成功`, 'DatabaseService');
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.log('创建系统预留应用过程中出现错误: ', error);
|
||||
throw new Error('创建系统预留应用失败!');
|
||||
}
|
||||
}
|
||||
};
|
||||
DatabaseService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
|
||||
@@ -13,13 +13,13 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GlobalConfigController = void 0;
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const setConfig_dto_1 = require("./dto/setConfig.dto");
|
||||
const globalConfig_service_1 = require("./globalConfig.service");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const queryConfig_dto_1 = require("./dto/queryConfig.dto");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const queryConfig_dto_1 = require("./dto/queryConfig.dto");
|
||||
const setConfig_dto_1 = require("./dto/setConfig.dto");
|
||||
const globalConfig_service_1 = require("./globalConfig.service");
|
||||
let GlobalConfigController = class GlobalConfigController {
|
||||
constructor(globalConfigService) {
|
||||
this.globalConfigService = globalConfigService;
|
||||
@@ -30,12 +30,6 @@ let GlobalConfigController = class GlobalConfigController {
|
||||
queryFrontConfig(query, req) {
|
||||
return this.globalConfigService.queryFrontConfig(query, req);
|
||||
}
|
||||
queryGptKeys(req) {
|
||||
return this.globalConfigService.queryGptKeys(req);
|
||||
}
|
||||
setGptKeys(body) {
|
||||
return this.globalConfigService.setGptKeys(body);
|
||||
}
|
||||
queryConfig(body, req) {
|
||||
return this.globalConfigService.queryConfig(body, req);
|
||||
}
|
||||
@@ -45,9 +39,6 @@ let GlobalConfigController = class GlobalConfigController {
|
||||
queryNotice() {
|
||||
return this.globalConfigService.queryNotice();
|
||||
}
|
||||
getCopyright() {
|
||||
return this.globalConfigService.getCopyright();
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询所有配置' }),
|
||||
@@ -68,26 +59,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], GlobalConfigController.prototype, "queryFrontConfig", null);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询所有gpt的key' }),
|
||||
(0, common_1.Get)('queryGptKeys'),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], GlobalConfigController.prototype, "queryGptKeys", null);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiOperation)({ summary: '设置gpt的key' }),
|
||||
(0, common_1.Post)('setGptKeys'),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], GlobalConfigController.prototype, "setGptKeys", null);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询所有配置' }),
|
||||
(0, common_1.Post)('query'),
|
||||
@@ -116,13 +87,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", void 0)
|
||||
], GlobalConfigController.prototype, "queryNotice", null);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiOperation)({ summary: '管理端查询版权信息' }),
|
||||
(0, common_1.Get)('copyright'),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", void 0)
|
||||
], GlobalConfigController.prototype, "getCopyright", null);
|
||||
GlobalConfigController = __decorate([
|
||||
(0, swagger_1.ApiTags)('config'),
|
||||
(0, common_1.Controller)('config'),
|
||||
|
||||
@@ -130,7 +130,6 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
}
|
||||
async queryFrontConfig(query, req) {
|
||||
const allowKeys = [
|
||||
'vxNumber',
|
||||
'registerSendStatus',
|
||||
'registerSendModel3Count',
|
||||
'registerSendModel4Count',
|
||||
@@ -140,13 +139,6 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
'firstRregisterSendModel3Count',
|
||||
'firstRregisterSendModel4Count',
|
||||
'firstRregisterSendDrawMjCount',
|
||||
'inviteSendStatus',
|
||||
'inviteGiveSendModel3Count',
|
||||
'inviteGiveSendModel4Count',
|
||||
'inviteGiveSendDrawMjCount',
|
||||
'invitedGuestSendModel3Count',
|
||||
'invitedGuestSendModel4Count',
|
||||
'invitedGuestSendDrawMjCount',
|
||||
'clientHomePath',
|
||||
'clientLogoPath',
|
||||
'clientFavoIconPath',
|
||||
@@ -187,7 +179,6 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
'mjHideNotBlock',
|
||||
'mjHideWorkIn',
|
||||
'isVerifyEmail',
|
||||
'isHideSidebar',
|
||||
'showWatermark',
|
||||
'isHideTts',
|
||||
'isHideDefaultPreset',
|
||||
@@ -202,6 +193,9 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
'noVerifyRegister',
|
||||
'noticeInfo',
|
||||
'homeHtml',
|
||||
'isAutoOpenAgreement',
|
||||
'agreementInfo',
|
||||
'agreementTitle',
|
||||
];
|
||||
const data = await this.configEntity.find({
|
||||
where: { configKey: (0, typeorm_2.In)(allowKeys) },
|
||||
@@ -224,42 +218,6 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
const isUseWxLogin = !!(wechatOfficialAppId && wechatOfficialAppSecret);
|
||||
return Object.assign(Object.assign({}, publicConfig), { isUseWxLogin });
|
||||
}
|
||||
async queryGptKeys(req) {
|
||||
const { role } = req.user;
|
||||
const data = await this.configEntity.find({
|
||||
where: { configKey: (0, typeorm_2.Like)(`%${'chatGptKey'}%`) },
|
||||
});
|
||||
if (role === 'super')
|
||||
return data;
|
||||
return data.map((t) => {
|
||||
t.configVal = (0, utils_1.hideString)(t.configVal);
|
||||
return t;
|
||||
});
|
||||
}
|
||||
async setGptKeys(body) {
|
||||
const effectiveConfig = body.configs.filter((t) => t.configVal);
|
||||
const keys = effectiveConfig.map((t) => t.configKey);
|
||||
for (const [index, value] of effectiveConfig.entries()) {
|
||||
const { configKey, configVal, status } = value;
|
||||
await this.createOrUpdate({
|
||||
configKey: `chatGptKey:${index + 1}`,
|
||||
configVal,
|
||||
status,
|
||||
});
|
||||
}
|
||||
const likeChatGptKeys = await this.configEntity.find({
|
||||
where: { configKey: (0, typeorm_2.Like)(`%${'chatGptKey'}%`) },
|
||||
});
|
||||
const allKey = likeChatGptKeys.map((t) => t.configKey);
|
||||
if (allKey.length > keys.length) {
|
||||
const diffKey = (0, utils_1.getDiffArray)(allKey.length, keys.length, 'chatGptKey:');
|
||||
for (const key of diffKey) {
|
||||
await this.configEntity.delete({ configKey: key });
|
||||
}
|
||||
}
|
||||
await this.initGetAllConfig();
|
||||
return '操作完成!';
|
||||
}
|
||||
async queryConfig(body, req) {
|
||||
const { role } = req.user;
|
||||
const { keys } = body;
|
||||
@@ -346,9 +304,6 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
async queryNotice() {
|
||||
return await this.getConfigs(['noticeInfo', 'noticeTitle']);
|
||||
}
|
||||
async getCopyright() {
|
||||
return await this.getConfigs(['copyrightUrl', 'copyrightTitle']);
|
||||
}
|
||||
async queryPayType() {
|
||||
const { payHupiStatus = 0, payEpayStatus = 0, payWechatStatus = 0, payMpayStatus = 0, payLtzfStatus = 0, } = await this.getConfigs([
|
||||
'payHupiStatus',
|
||||
@@ -383,14 +338,12 @@ let GlobalConfigService = class GlobalConfigService {
|
||||
}
|
||||
}
|
||||
async getAuthInfo() {
|
||||
const { siteName, qqNumber, vxNumber, registerBaseUrl, domain } = await this.getConfigs([
|
||||
const { siteName, registerBaseUrl, domain } = await this.getConfigs([
|
||||
'siteName',
|
||||
'qqNumber',
|
||||
'vxNumber',
|
||||
'registerBaseUrl',
|
||||
'domain',
|
||||
]);
|
||||
return { siteName, qqNumber, vxNumber, registerBaseUrl, domain };
|
||||
return { siteName, registerBaseUrl, domain };
|
||||
}
|
||||
async getPhoneVerifyConfig() {
|
||||
const { phoneLoginStatus, aliPhoneAccessKeyId, aliPhoneAccessKeySecret, aliPhoneSignName, aliPhoneTemplateCode, } = await this.getConfigs([
|
||||
|
||||
22
dist/modules/menu/dto/queryMenu.dto.js
vendored
22
dist/modules/menu/dto/queryMenu.dto.js
vendored
@@ -1,22 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.QueryMenuDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class QueryMenuDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '菜单平台 0:移动端 1:pc端', required: true }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], QueryMenuDto.prototype, "menuPlatform", void 0);
|
||||
exports.QueryMenuDto = QueryMenuDto;
|
||||
59
dist/modules/menu/dto/setMenu.dto.js
vendored
59
dist/modules/menu/dto/setMenu.dto.js
vendored
@@ -1,59 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SetMenuDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class SetMenuDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '菜单id', required: false }),
|
||||
__metadata("design:type", Number)
|
||||
], SetMenuDto.prototype, "id", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: '测试菜单', description: '菜单文字提示', required: true }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], SetMenuDto.prototype, "menuTipText", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'https:baidu.com', description: '三方网页地址', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], SetMenuDto.prototype, "menuIframeUrl", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: false, description: '是否跳转', required: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetMenuDto.prototype, "isJump", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否打开菜单', required: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetMenuDto.prototype, "isShow", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'ri:message-3-line', description: '菜单ICON图标代码', required: true }),
|
||||
__metadata("design:type", String)
|
||||
], SetMenuDto.prototype, "menuIcon", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: '/chat', description: '站内系统路径', required: true }),
|
||||
__metadata("design:type", String)
|
||||
], SetMenuDto.prototype, "menuPath", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1000, description: '菜单排序id 数字越小越靠前', required: true }),
|
||||
__metadata("design:type", Number)
|
||||
], SetMenuDto.prototype, "order", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否系统预设', required: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetMenuDto.prototype, "isSystem", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否需要登录才可访问', required: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetMenuDto.prototype, "isNeedAuth", void 0);
|
||||
exports.SetMenuDto = SetMenuDto;
|
||||
108
dist/modules/menu/menu.controller.js
vendored
108
dist/modules/menu/menu.controller.js
vendored
@@ -1,108 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MenuController = void 0;
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const menu_service_1 = require("./menu.service");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const queryMenu_dto_1 = require("./dto/queryMenu.dto");
|
||||
const setMenu_dto_1 = require("./dto/setMenu.dto");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
let MenuController = class MenuController {
|
||||
constructor(menuService) {
|
||||
this.menuService = menuService;
|
||||
}
|
||||
queryMenu(query) {
|
||||
return this.menuService.queryMenu(query);
|
||||
}
|
||||
menuListFront(query) {
|
||||
return this.menuService.menuListFront(query);
|
||||
}
|
||||
visibleMenu(params) {
|
||||
return this.menuService.visibleMenu(params);
|
||||
}
|
||||
setMenu(params) {
|
||||
return this.menuService.setMenu(params);
|
||||
}
|
||||
delMenu(params) {
|
||||
return this.menuService.delMenu(params);
|
||||
}
|
||||
updateIcon(params) {
|
||||
return this.menuService.updateIcon(params);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Get)('query'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '管理端查询菜单列表' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [queryMenu_dto_1.QueryMenuDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "queryMenu", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('list'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '用户端查询菜单列表' }),
|
||||
__param(0, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [queryMenu_dto_1.QueryMenuDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "menuListFront", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('visible'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '显示或者隐藏菜单' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "visibleMenu", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('setMenu'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '设置修改菜单' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [setMenu_dto_1.SetMenuDto]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "setMenu", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('delete'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除菜单' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "delMenu", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('updateIcon'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '修改菜单ICON' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", void 0)
|
||||
], MenuController.prototype, "updateIcon", null);
|
||||
MenuController = __decorate([
|
||||
(0, common_1.Controller)('menu'),
|
||||
__metadata("design:paramtypes", [menu_service_1.MenuService])
|
||||
], MenuController);
|
||||
exports.MenuController = MenuController;
|
||||
64
dist/modules/menu/menu.entity.js
vendored
64
dist/modules/menu/menu.entity.js
vendored
@@ -1,64 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MenuEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let MenuEntity = class MenuEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单名称', length: 64, default: null }),
|
||||
__metadata("design:type", String)
|
||||
], MenuEntity.prototype, "menuName", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单路径、跳转的系统路径', length: 64 }),
|
||||
__metadata("design:type", String)
|
||||
], MenuEntity.prototype, "menuPath", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单图标 icon图标名称' }),
|
||||
__metadata("design:type", String)
|
||||
], MenuEntity.prototype, "menuIcon", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单文字提示信息' }),
|
||||
__metadata("design:type", String)
|
||||
], MenuEntity.prototype, "menuTipText", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单类型: 系统预设|自定义菜单', default: 1 }),
|
||||
__metadata("design:type", Number)
|
||||
], MenuEntity.prototype, "menuType", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单平台: 0:移动端 1:pc端', default: 1 }),
|
||||
__metadata("design:type", Number)
|
||||
], MenuEntity.prototype, "menuPlatform", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '菜单加载地址: 系统菜单|自定义菜单', default: null }),
|
||||
__metadata("design:type", String)
|
||||
], MenuEntity.prototype, "menuIframeUrl", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '排序ID', default: 100 }),
|
||||
__metadata("design:type", Number)
|
||||
], MenuEntity.prototype, "order", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否显示 1:是|0:不是', default: 1 }),
|
||||
__metadata("design:type", Boolean)
|
||||
], MenuEntity.prototype, "isShow", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否跳转到新窗口 0不跳转 1跳转 仅设置为iframe窗口时候有效', default: 0 }),
|
||||
__metadata("design:type", Boolean)
|
||||
], MenuEntity.prototype, "isJump", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否权限 登录才可以访问', default: 0 }),
|
||||
__metadata("design:type", Boolean)
|
||||
], MenuEntity.prototype, "isNeedAuth", void 0);
|
||||
MenuEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'menu' })
|
||||
], MenuEntity);
|
||||
exports.MenuEntity = MenuEntity;
|
||||
24
dist/modules/menu/menu.module.js
vendored
24
dist/modules/menu/menu.module.js
vendored
@@ -1,24 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MenuModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const menu_controller_1 = require("./menu.controller");
|
||||
const menu_service_1 = require("./menu.service");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const menu_entity_1 = require("./menu.entity");
|
||||
let MenuModule = class MenuModule {
|
||||
};
|
||||
MenuModule = __decorate([
|
||||
(0, common_1.Module)({
|
||||
imports: [typeorm_1.TypeOrmModule.forFeature([menu_entity_1.MenuEntity])],
|
||||
controllers: [menu_controller_1.MenuController],
|
||||
providers: [menu_service_1.MenuService]
|
||||
})
|
||||
], MenuModule);
|
||||
exports.MenuModule = MenuModule;
|
||||
120
dist/modules/menu/menu.service.js
vendored
120
dist/modules/menu/menu.service.js
vendored
@@ -1,120 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MenuService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const menu_entity_1 = require("./menu.entity");
|
||||
let MenuService = class MenuService {
|
||||
constructor(menuEntity) {
|
||||
this.menuEntity = menuEntity;
|
||||
}
|
||||
async onModuleInit() {
|
||||
await this.initMenu();
|
||||
}
|
||||
async initMenu() {
|
||||
const menuCount = await this.menuEntity.count();
|
||||
if (menuCount > 0)
|
||||
return;
|
||||
const pcMenuData = [
|
||||
{ menuTipText: '对话聊天', menuIcon: 'ri:message-3-line', menuName: 'Chat', menuPath: '/chat', menuType: 0, menuPlatform: 1, order: 100 },
|
||||
{ menuTipText: '应用广场', menuIcon: 'ant-design:appstore-outlined', menuName: 'AppStore', menuPath: '/app-store', menuType: 0, menuPlatform: 1, order: 200 },
|
||||
{ menuTipText: '专业绘画', menuIcon: 'ri:landscape-line', menuName: 'Midjourney', menuPath: '/midjourney', menuType: 0, menuPlatform: 1, order: 300 },
|
||||
{ menuTipText: '绘画广场', menuIcon: 'solar:album-line-duotone', menuName: 'Market', menuPath: '/market', menuType: 0, menuPlatform: 1, order: 400 },
|
||||
{ menuTipText: '思维导图', menuIcon: 'icon-park-outline:mindmap-map', menuName: 'Mind', menuPath: '/mind', menuType: 0, menuPlatform: 1, order: 600 },
|
||||
{ menuTipText: '会员中心', menuIcon: 'icon-park-outline:shopping', menuName: 'Pay', menuPath: '/pay', menuType: 0, menuPlatform: 1, order: 700 },
|
||||
{ menuTipText: '推广计划', menuIcon: 'uiw:share', menuName: 'Share', menuPath: '/share', menuType: 0, menuPlatform: 1, order: 800 },
|
||||
];
|
||||
const mobileMenuData = [
|
||||
{ menuTipText: '对话聊天', menuIcon: 'ri:message-3-line', menuName: 'Chat', menuPath: '/chat', menuType: 0, menuPlatform: 0, order: 100 },
|
||||
{ menuTipText: '应用广场', menuIcon: 'ant-design:appstore-outlined', menuName: 'AppStore', menuPath: '/app-store', menuType: 0, menuPlatform: 0, order: 200 },
|
||||
{ menuTipText: '专业绘画', menuIcon: 'ri:landscape-line', menuName: 'Midjourney', menuPath: '/midjourney', menuType: 0, menuPlatform: 0, order: 300 },
|
||||
{ menuTipText: '思维导图', menuIcon: 'icon-park-outline:mindmap-map', menuName: 'Mind', menuPath: '/mind', menuType: 0, menuPlatform: 0, order: 400 },
|
||||
{ menuTipText: '个人中心', menuIcon: 'ri:account-pin-box-line', menuName: 'UserCenter', menuPath: '/user-center', menuType: 0, menuPlatform: 0, order: 500 },
|
||||
];
|
||||
const initMenuData = [...pcMenuData, ...mobileMenuData];
|
||||
await this.menuEntity.save(initMenuData);
|
||||
}
|
||||
async queryMenu(query) {
|
||||
const { menuPlatform } = query;
|
||||
let where = {};
|
||||
menuPlatform && (where.menuPlatform = menuPlatform);
|
||||
return await this.menuEntity.find({ where, order: { order: 'ASC' } });
|
||||
}
|
||||
async menuListFront(query) {
|
||||
const { menuPlatform } = query;
|
||||
let where = {
|
||||
isShow: true
|
||||
};
|
||||
menuPlatform && (where.menuPlatform = menuPlatform);
|
||||
return await this.menuEntity.find({ where, order: { order: 'ASC' } });
|
||||
}
|
||||
async visibleMenu(params) {
|
||||
const { id } = params;
|
||||
if (!id)
|
||||
return;
|
||||
const m = await this.menuEntity.findOne({ where: { id } });
|
||||
if (!m)
|
||||
return;
|
||||
const { isShow } = m;
|
||||
const res = await this.menuEntity.update({ id }, { isShow: !isShow });
|
||||
return res.affected > 0;
|
||||
}
|
||||
async setMenu(params) {
|
||||
const { id } = params;
|
||||
if (params.isSystem) {
|
||||
params.menuPath = '';
|
||||
}
|
||||
else {
|
||||
params.menuIframeUrl = '';
|
||||
}
|
||||
delete params.isSystem;
|
||||
try {
|
||||
if (id) {
|
||||
const res = await this.menuEntity.update({ id }, params);
|
||||
return res.affected > 0;
|
||||
}
|
||||
else {
|
||||
const res = await this.menuEntity.save(params);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
throw new common_1.HttpException('操作菜单失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async delMenu(params) {
|
||||
const { id } = params;
|
||||
if (!id) {
|
||||
throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.menuEntity.delete({ id });
|
||||
return res;
|
||||
}
|
||||
async updateIcon(params) {
|
||||
const { id, menuIcon, menuTipText, order } = params;
|
||||
if (!id || !menuIcon || !menuTipText || !order) {
|
||||
throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.menuEntity.update({ id }, { menuIcon, menuTipText, order });
|
||||
return res.affected > 0;
|
||||
}
|
||||
};
|
||||
MenuService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(menu_entity_1.MenuEntity)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], MenuService);
|
||||
exports.MenuService = MenuService;
|
||||
42
dist/modules/midjourney/dto/getList.dto.js
vendored
42
dist/modules/midjourney/dto/getList.dto.js
vendored
@@ -1,42 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GetListDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class GetListDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], GetListDto.prototype, "page", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], GetListDto.prototype, "size", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '是否推荐0: 默认 1: 推荐', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], GetListDto.prototype, "rec", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 99, description: '生成图片的用户id', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], GetListDto.prototype, "userId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '绘制状态', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], GetListDto.prototype, "status", void 0);
|
||||
exports.GetListDto = GetListDto;
|
||||
75
dist/modules/midjourney/dto/mjDraw.dto.js
vendored
75
dist/modules/midjourney/dto/mjDraw.dto.js
vendored
@@ -1,75 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MjDrawDto = void 0;
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const class_validator_1 = require("class-validator");
|
||||
class MjDrawDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'close-up polaroid photo, of a little joyful cute panda, in the forest, sun rays coming, photographic, sharp focus, depth of field, soft lighting, heigh quality, 24mm, Nikon Z FX',
|
||||
description: '绘画提示词!',
|
||||
required: true,
|
||||
}),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "prompt", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: '--ar 16:9 --c 0',
|
||||
description: '除了prompt的额外参数',
|
||||
}),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "extraParam", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'https://xsdasdasd.com',
|
||||
description: '垫图图片地址',
|
||||
}),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "imgUrl", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'IMAGINE',
|
||||
description: '任务类型,可用值:IMAGINE,UPSCALE,VARIATION,ZOOM,PAN,DESCRIBE,BLEND,SHORTEN,SWAP_FACE',
|
||||
}),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "action", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '变体或者放大的序号' }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], MjDrawDto.prototype, "orderId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '绘画的DBID' }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], MjDrawDto.prototype, "drawId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: 'customId' }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "customId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: 'base64' }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], MjDrawDto.prototype, "base64", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '任务ID' }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], MjDrawDto.prototype, "taskId", void 0);
|
||||
exports.MjDrawDto = MjDrawDto;
|
||||
204
dist/modules/midjourney/midjourney.controller.js
vendored
204
dist/modules/midjourney/midjourney.controller.js
vendored
@@ -1,204 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MidjourneyController = void 0;
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const axios_1 = require("axios");
|
||||
const getList_dto_1 = require("./dto/getList.dto");
|
||||
const mjDraw_dto_1 = require("./dto/mjDraw.dto");
|
||||
const midjourney_service_1 = require("./midjourney.service");
|
||||
let MidjourneyController = class MidjourneyController {
|
||||
constructor(midjourneyService) {
|
||||
this.midjourneyService = midjourneyService;
|
||||
}
|
||||
async getDrawList(req, params) {
|
||||
return await this.midjourneyService.getDrawList(req, params);
|
||||
}
|
||||
async getList(params) {
|
||||
return await this.midjourneyService.getList(params);
|
||||
}
|
||||
async getFullPrompt(id) {
|
||||
return await this.midjourneyService.getFullPrompt(id);
|
||||
}
|
||||
async getAdminDrawList(req, params) {
|
||||
return await this.midjourneyService.getAdminDrawList(req, params);
|
||||
}
|
||||
async recDraw(params) {
|
||||
return await this.midjourneyService.recDraw(params);
|
||||
}
|
||||
async download(url, res) {
|
||||
const response = await axios_1.default.get(url, { responseType: 'arraybuffer' });
|
||||
const buffer = Buffer.from(response.data, 'binary');
|
||||
res.set({ 'Content-Type': 'image/png' });
|
||||
res.send(buffer);
|
||||
}
|
||||
async deleteDraw(id, req) {
|
||||
return await this.midjourneyService.deleteDraw(id, req);
|
||||
}
|
||||
async delLog(req, body) {
|
||||
return await this.midjourneyService.delLog(req, body);
|
||||
}
|
||||
async setPrompt(req, body) {
|
||||
return await this.midjourneyService.setPrompt(req, body);
|
||||
}
|
||||
async delPrompt(req, body) {
|
||||
return await this.midjourneyService.delPrompt(req, body);
|
||||
}
|
||||
async queryPrompt() {
|
||||
return await this.midjourneyService.queryPrompt();
|
||||
}
|
||||
async proxyImg(params) {
|
||||
return await this.midjourneyService.proxyImg(params);
|
||||
}
|
||||
async mjDraw(body, req) {
|
||||
return await this.midjourneyService.addMjDrawQueue(body, req);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Get)('drawList'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取我的绘画列表' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "getDrawList", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('getList'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取绘画列表' }),
|
||||
__param(0, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [getList_dto_1.GetListDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "getList", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('getFullPrompt'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取绘画列表' }),
|
||||
__param(0, (0, common_1.Query)('id')),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Number]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "getFullPrompt", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('adminDrawList'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '管理端获取绘画列表' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, getList_dto_1.GetListDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "getAdminDrawList", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('rec'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '推荐图片' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "recDraw", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('download'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '下载绘画' }),
|
||||
__param(0, (0, common_1.Body)('url')),
|
||||
__param(1, (0, common_1.Res)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [String, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "download", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('delete'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除绘画' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)('id')),
|
||||
__param(1, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Number, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "deleteDraw", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('del'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '删除log' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "delLog", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('setPrompt'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '添加修改prompt提示词' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "setPrompt", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('delPrompt'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '添加修改prompt提示词' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "delPrompt", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('queryPrompts'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询prompt列表' }),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "queryPrompt", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('proxy'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '代理图片' }),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "proxyImg", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('addMjDrawQueue'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '提交绘制图片任务' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__param(1, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [mjDraw_dto_1.MjDrawDto, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], MidjourneyController.prototype, "mjDraw", null);
|
||||
MidjourneyController = __decorate([
|
||||
(0, common_1.Controller)('midjourney'),
|
||||
__metadata("design:paramtypes", [midjourney_service_1.MidjourneyService])
|
||||
], MidjourneyController);
|
||||
exports.MidjourneyController = MidjourneyController;
|
||||
96
dist/modules/midjourney/midjourney.entity.js
vendored
96
dist/modules/midjourney/midjourney.entity.js
vendored
@@ -1,96 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MidjourneyEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let MidjourneyEntity = class MidjourneyEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '用户ID' }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "userId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '任务ID', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "jobId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '额外参数', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "extraParam", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '绘画描述词', type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "prompt", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '垫图图片基础地址', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "imgUrl", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '垫图图片 + 绘画描述词 + 额外参数 = 完整的prompt', type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "fullPrompt", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '当前绘制任务的进度', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "progress", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '当前绘制任务的耗时', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "durationSpent", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '当前绘制任务的状态' }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: 'mj绘画的动作、绘图、放大、变换、图生图' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "action", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '一组图片的第几张、放大或者变换的时候需要使用', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "orderId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否推荐0: 默认不推荐 1: 推荐', nullable: true, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "rec", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '对图片操作的', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "customId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '绘画的ID每条不一样', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "drawId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '图片链接', nullable: true, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "drawUrl", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '图片比例', nullable: true, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "drawRatio", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '扩展参数', nullable: true, type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], MidjourneyEntity.prototype, "extend", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否删除 0: 未删除 1: 已删除', nullable: true, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], MidjourneyEntity.prototype, "isDelete", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否存入了图片到配置的储存项 配置了则存储 不配置地址则是源地址', default: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], MidjourneyEntity.prototype, "isSaveImg", void 0);
|
||||
MidjourneyEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'midjourney' })
|
||||
], MidjourneyEntity);
|
||||
exports.MidjourneyEntity = MidjourneyEntity;
|
||||
47
dist/modules/midjourney/midjourney.module.js
vendored
47
dist/modules/midjourney/midjourney.module.js
vendored
@@ -1,47 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MidjourneyModule = void 0;
|
||||
const bull_1 = require("@nestjs/bull");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const midjourney_controller_1 = require("./midjourney.controller");
|
||||
const midjourney_entity_1 = require("./midjourney.entity");
|
||||
const midjourney_service_1 = require("./midjourney.service");
|
||||
const prompt_entity_1 = require("./prompt.entity");
|
||||
let MidjourneyModule = class MidjourneyModule {
|
||||
};
|
||||
MidjourneyModule = __decorate([
|
||||
(0, common_1.Global)(),
|
||||
(0, common_1.Module)({
|
||||
imports: [
|
||||
bull_1.BullModule.registerQueueAsync({
|
||||
name: 'MJDRAW',
|
||||
useFactory: () => {
|
||||
const config = {
|
||||
port: +process.env.REDIS_PORT,
|
||||
host: process.env.REDIS_HOST,
|
||||
db: Number(process.env.REDIS_DB || 0),
|
||||
};
|
||||
process.env.REDIS_PASSWORD &&
|
||||
(config.password = process.env.REDIS_PASSWORD);
|
||||
return {
|
||||
redis: config,
|
||||
};
|
||||
},
|
||||
}),
|
||||
typeorm_1.TypeOrmModule.forFeature([midjourney_entity_1.MidjourneyEntity, user_entity_1.UserEntity, prompt_entity_1.mjPromptEntity]),
|
||||
],
|
||||
controllers: [midjourney_controller_1.MidjourneyController],
|
||||
providers: [midjourney_service_1.MidjourneyService, redisCache_service_1.RedisCacheService],
|
||||
exports: [midjourney_service_1.MidjourneyService],
|
||||
})
|
||||
], MidjourneyModule);
|
||||
exports.MidjourneyModule = MidjourneyModule;
|
||||
613
dist/modules/midjourney/midjourney.service.js
vendored
613
dist/modules/midjourney/midjourney.service.js
vendored
@@ -1,613 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MidjourneyService = void 0;
|
||||
const midjourney_constant_1 = require("../../common/constants/midjourney.constant");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const axios_1 = require("axios");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const models_service_1 = require("../models/models.service");
|
||||
const upload_service_1 = require("../upload/upload.service");
|
||||
const user_entity_1 = require("./../user/user.entity");
|
||||
const midjourney_entity_1 = require("./midjourney.entity");
|
||||
const utils_1 = require("../../common/utils");
|
||||
const userBalance_service_1 = require("../userBalance/userBalance.service");
|
||||
const bull_1 = require("@nestjs/bull");
|
||||
const image_size_1 = require("image-size");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const prompt_entity_1 = require("./prompt.entity");
|
||||
let MidjourneyService = class MidjourneyService {
|
||||
constructor(mjDrawQueue, midjourneyEntity, userEntity, mjPromptsEntity, globalConfigService, uploadService, userBalanceService, redisCacheService, modelsService) {
|
||||
this.mjDrawQueue = mjDrawQueue;
|
||||
this.midjourneyEntity = midjourneyEntity;
|
||||
this.userEntity = userEntity;
|
||||
this.mjPromptsEntity = mjPromptsEntity;
|
||||
this.globalConfigService = globalConfigService;
|
||||
this.uploadService = uploadService;
|
||||
this.userBalanceService = userBalanceService;
|
||||
this.redisCacheService = redisCacheService;
|
||||
this.modelsService = modelsService;
|
||||
this.lockPrompt = [];
|
||||
}
|
||||
async onApplicationBootstrap() {
|
||||
await this.mjDrawQueue.clean(0, 'active');
|
||||
await this.cleanQueue();
|
||||
}
|
||||
async addMjDrawQueue(body, req) {
|
||||
const { prompt = '', imgUrl = '', base64 = '', extraParam = '', drawId = null, action = '', orderId = null, customId = '', } = body;
|
||||
await this.checkLimit(req);
|
||||
const modelInfo = await this.modelsService.getCurrentModelKeyInfo('midjourney');
|
||||
const { deduct, deductType, proxyUrl, timeout } = modelInfo;
|
||||
await this.userBalanceService.validateBalance(req, deductType, action === 'UPSCALE' ? deduct : deduct * 4);
|
||||
const params = Object.assign(Object.assign({}, body), { userId: req.user.id });
|
||||
const drawInfo = await this.addDrawQueue(params);
|
||||
if (action === 'IMAGINE') {
|
||||
this.sendDrawCommand(drawInfo, modelInfo)
|
||||
.then((result) => this.pollComparisonResultDraw(result, modelInfo))
|
||||
.then((drawRes) => {
|
||||
console.log('drawRes', drawRes);
|
||||
return this.updateDrawData(drawInfo, drawRes);
|
||||
})
|
||||
.catch((error) => {
|
||||
common_1.Logger.error('Error in IMAGINE draw operation:', error);
|
||||
});
|
||||
}
|
||||
else {
|
||||
let resultPromise;
|
||||
if (action === 'MODAL') {
|
||||
common_1.Logger.debug('customId:', customId);
|
||||
drawInfo.drawId = (await this.getDrawActionDetail(drawId, customId)).drawId;
|
||||
resultPromise = this.sendDrawCommand(drawInfo, modelInfo);
|
||||
}
|
||||
else {
|
||||
resultPromise = this.sendDrawCommand(drawInfo, modelInfo);
|
||||
}
|
||||
resultPromise
|
||||
.then((result) => this.pollComparisonResultDraw(result, modelInfo))
|
||||
.then((drawRes) => {
|
||||
console.log('drawRes', drawRes);
|
||||
return this.updateDrawData(drawInfo, drawRes);
|
||||
})
|
||||
.catch((error) => {
|
||||
common_1.Logger.error('Error in other draw operation:', error);
|
||||
});
|
||||
}
|
||||
common_1.Logger.log(`执行预扣费,扣除费用:${action === 'UPSCALE' ? deduct : deduct * 4}积分。`, 'MidjourneyService');
|
||||
await this.userBalanceService.deductFromBalance(req.user.id, deductType, action === 'UPSCALE' ? deduct : deduct * 4);
|
||||
return true;
|
||||
}
|
||||
async sleep(time) {
|
||||
return new Promise((resolve) => setTimeout(resolve, time));
|
||||
}
|
||||
async getImageSizeFromUrl(imageUrl) {
|
||||
try {
|
||||
const response = await axios_1.default.get(imageUrl, {
|
||||
responseType: 'arraybuffer',
|
||||
});
|
||||
const buffer = Buffer.from(response.data, 'binary');
|
||||
const dimensions = (0, image_size_1.default)(buffer);
|
||||
return { width: dimensions.width, height: dimensions.height };
|
||||
}
|
||||
catch (error) {
|
||||
console.error('Error fetching image size:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
async addDrawQueue(params) {
|
||||
try {
|
||||
const { prompt, imgUrl = '', extraParam = '', action, userId, customId, drawId, base64, } = params;
|
||||
const fullPrompt = imgUrl
|
||||
? `${imgUrl} ${prompt} ${extraParam}`
|
||||
: `${prompt} ${extraParam}`;
|
||||
const drawInfo = {
|
||||
userId,
|
||||
drawId,
|
||||
extraParam,
|
||||
prompt,
|
||||
imgUrl,
|
||||
fullPrompt,
|
||||
status: midjourney_constant_1.MidjourneyStatusEnum.WAITING,
|
||||
action,
|
||||
customId,
|
||||
base64,
|
||||
};
|
||||
const res = await this.midjourneyEntity.save(drawInfo);
|
||||
return res;
|
||||
}
|
||||
catch (error) {
|
||||
console.error('Error in addDrawQueue:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
async updateDrawStatus(id, status) {
|
||||
await this.midjourneyEntity.update({ id }, { status });
|
||||
}
|
||||
async updateDrawData(jobData, drawRes) {
|
||||
try {
|
||||
const { id, imageUrl, action, submitTime, finishTime, progress } = drawRes;
|
||||
const durationSpent = finishTime - submitTime;
|
||||
const { mjNotSaveImg, mjProxyImgUrl, mjNotUseProxy } = await this.globalConfigService.getConfigs([
|
||||
'mjNotSaveImg',
|
||||
'mjProxyImgUrl',
|
||||
'mjNotUseProxy',
|
||||
]);
|
||||
let cosUrl = '';
|
||||
let isSaveImg = true;
|
||||
common_1.Logger.log(`绘制成功, 获取到的URL: ${imageUrl}`, 'MidjourneyService');
|
||||
let processedUrl = imageUrl;
|
||||
const shouldReplaceUrl = mjNotUseProxy === '0' && mjProxyImgUrl;
|
||||
let logMessage = '';
|
||||
if (shouldReplaceUrl) {
|
||||
const newUrlBase = new URL(mjProxyImgUrl);
|
||||
const parsedUrl = new URL(imageUrl);
|
||||
parsedUrl.protocol = newUrlBase.protocol;
|
||||
parsedUrl.hostname = newUrlBase.hostname;
|
||||
parsedUrl.port = newUrlBase.port ? newUrlBase.port : '';
|
||||
processedUrl = parsedUrl.toString();
|
||||
logMessage = `使用代理替换后的 URL: ${processedUrl}`;
|
||||
common_1.Logger.log(logMessage, 'MidjourneyService');
|
||||
}
|
||||
if (mjNotSaveImg !== '1') {
|
||||
try {
|
||||
common_1.Logger.debug(`------> 开始上传图片!!!`);
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
const currentDate = `${year}${month}/${day}`;
|
||||
common_1.Logger.debug(`------> 上传图片的URL: ${processedUrl}`);
|
||||
if (!processedUrl) {
|
||||
throw new Error('processedUrl is undefined or empty');
|
||||
}
|
||||
processedUrl = await this.uploadService.uploadFileFromUrl({
|
||||
url: processedUrl,
|
||||
dir: `midjourney/${currentDate}`,
|
||||
});
|
||||
logMessage = `上传成功 URL: ${processedUrl}`;
|
||||
common_1.Logger.debug(logMessage);
|
||||
}
|
||||
catch (uploadError) {
|
||||
common_1.Logger.error('存储图片失败,使用原始/代理图片链接');
|
||||
common_1.Logger.error(uploadError.message);
|
||||
common_1.Logger.error(uploadError.stack);
|
||||
logMessage = `存储图片失败,使用原始/代理图片链接 ${processedUrl}`;
|
||||
common_1.Logger.debug(logMessage);
|
||||
}
|
||||
common_1.Logger.log(logMessage, 'MidjourneyService');
|
||||
}
|
||||
else {
|
||||
logMessage = `不保存图片,使用 URL: ${processedUrl}`;
|
||||
common_1.Logger.log(logMessage, 'MidjourneyService');
|
||||
}
|
||||
const { width, height } = await this.getImageSizeFromUrl(processedUrl);
|
||||
const drawInfo = {
|
||||
status: midjourney_constant_1.MidjourneyStatusEnum.DRAWED,
|
||||
drawId: id,
|
||||
action: action,
|
||||
drawUrl: processedUrl,
|
||||
drawRatio: `${width}x${height}`,
|
||||
progress: 100,
|
||||
extend: JSON.stringify(drawRes),
|
||||
durationSpent,
|
||||
isSaveImg,
|
||||
};
|
||||
await this.midjourneyEntity.update({ id: jobData.id }, drawInfo);
|
||||
}
|
||||
catch (error) {
|
||||
throw new common_1.HttpException('更新绘画数据失败', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async sendDrawCommand(drawInfo, modelInfo) {
|
||||
const { openaiBaseUrl, openaiBaseKey } = await this.globalConfigService.getConfigs([
|
||||
'openaiBaseUrl',
|
||||
'openaiBaseKey',
|
||||
]);
|
||||
const { key, proxyUrl } = modelInfo;
|
||||
const mjProxyUrl = proxyUrl || openaiBaseUrl;
|
||||
const mjKey = key || openaiBaseKey;
|
||||
const { id, fullPrompt, imgUrl, drawId, customId, action, base64 } = drawInfo;
|
||||
const prompt = imgUrl ? `${imgUrl} ${fullPrompt}` : `${fullPrompt}`;
|
||||
let url = '';
|
||||
let payloadJson = {};
|
||||
const MAX_RETRIES = 3;
|
||||
let retryCount = 0;
|
||||
const headers = { 'mj-api-secret': mjKey };
|
||||
while (retryCount < MAX_RETRIES) {
|
||||
try {
|
||||
if (action === 'IMAGINE') {
|
||||
url = `${mjProxyUrl}/mj/submit/imagine`;
|
||||
payloadJson = { prompt: prompt };
|
||||
}
|
||||
else if (action === 'MODAL') {
|
||||
url = `${mjProxyUrl}/mj/submit/modal`;
|
||||
payloadJson = { maskBase64: base64, taskId: drawId, prompt: prompt };
|
||||
console.log('提交参数', payloadJson);
|
||||
}
|
||||
else {
|
||||
url = `${mjProxyUrl}/mj/submit/action`;
|
||||
payloadJson = { taskId: drawId, customId: customId };
|
||||
}
|
||||
const res = await axios_1.default.post(url, payloadJson, { headers });
|
||||
const { result } = res.data;
|
||||
if (result) {
|
||||
common_1.Logger.log(`绘画任务提交成功 绘画ID: ${result}`, 'MidjourneyService');
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
throw new Error('未能获取结果数据');
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`请求失败:${error.message}`);
|
||||
retryCount++;
|
||||
if (retryCount >= MAX_RETRIES) {
|
||||
await this.updateDrawStatus(id, midjourney_constant_1.MidjourneyStatusEnum.DRAWFAIL);
|
||||
throw new common_1.HttpException('发送绘图指令失败、请联系管理员检测绘画配置!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
async pollComparisonResultDraw(drawId, modelInfo) {
|
||||
const { key, proxyUrl, timeout, id } = modelInfo;
|
||||
const { openaiTimeout, openaiBaseUrl, openaiBaseKey } = await this.globalConfigService.getConfigs([
|
||||
'openaiTimeout',
|
||||
'openaiBaseUrl',
|
||||
'openaiBaseKey',
|
||||
]);
|
||||
const effectiveTimeout = Math.max(timeout || openaiTimeout || 300, 300);
|
||||
const TIMEOUT = effectiveTimeout * 1000;
|
||||
const mjProxyUrl = proxyUrl || openaiBaseUrl;
|
||||
const mjKey = key || openaiBaseKey;
|
||||
const startTime = Date.now();
|
||||
const POLL_INTERVAL = 5000;
|
||||
let pollingCount = 0;
|
||||
let retryCount = 0;
|
||||
const MAX_RETRIES = 5;
|
||||
try {
|
||||
while (Date.now() - startTime < TIMEOUT && retryCount < MAX_RETRIES) {
|
||||
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL));
|
||||
common_1.Logger.log(`【绘制图片】第 ${pollingCount + 1} 次开始查询, 使用 drawId: ${drawId}`, 'MidjourneyService');
|
||||
try {
|
||||
const headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'mj-api-secret': mjKey,
|
||||
};
|
||||
const url = `${mjProxyUrl}/mj/task/${drawId}/fetch`;
|
||||
const res = await axios_1.default.get(url, { headers });
|
||||
const responses = res.data;
|
||||
common_1.Logger.debug(`【绘制图片】第 ${pollingCount + 1} 次查询结果: ${JSON.stringify(responses)}`, 'MidjourneyService');
|
||||
const progress = responses.process;
|
||||
await this.midjourneyEntity.update({ id }, { progress: progress });
|
||||
if (responses.status === 'SUCCESS') {
|
||||
common_1.Logger.log(`绘制成功, URL: ${responses.imageUrl}`, 'MidjourneyService');
|
||||
return responses;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
retryCount++;
|
||||
common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'MidjourneyService');
|
||||
}
|
||||
pollingCount++;
|
||||
}
|
||||
if (retryCount >= MAX_RETRIES) {
|
||||
await this.updateDrawStatus(id, midjourney_constant_1.MidjourneyStatusEnum.DRAWFAIL);
|
||||
throw new common_1.HttpException('轮询失败次数过多,请稍后再试!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
common_1.Logger.error('绘画超时,请稍后再试!', 'MidjourneyService');
|
||||
await this.updateDrawStatus(id, midjourney_constant_1.MidjourneyStatusEnum.DRAWFAIL);
|
||||
throw new common_1.HttpException('绘画超时,请稍后再试!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error('获取图片结果失败: ', error, 'MidjourneyService');
|
||||
await this.updateDrawStatus(id, midjourney_constant_1.MidjourneyStatusEnum.DRAWFAIL);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
async bindJobId(id, jobId) {
|
||||
await this.midjourneyEntity.update({ id }, { jobId });
|
||||
}
|
||||
async getDrawList(req, params) {
|
||||
try {
|
||||
const { page = 1, size = 30 } = params;
|
||||
const [rows, count] = await this.midjourneyEntity.findAndCount({
|
||||
where: { userId: req.user.id, isDelete: 0 },
|
||||
order: { id: 'DESC' },
|
||||
take: size,
|
||||
skip: (page - 1) * size,
|
||||
select: [
|
||||
'id',
|
||||
'userId',
|
||||
'prompt',
|
||||
'extraParam',
|
||||
'fullPrompt',
|
||||
'rec',
|
||||
'orderId',
|
||||
'drawId',
|
||||
'drawUrl',
|
||||
'drawRatio',
|
||||
'isDelete',
|
||||
'status',
|
||||
'action',
|
||||
'extend',
|
||||
],
|
||||
});
|
||||
const countQueue = await this.midjourneyEntity.count({
|
||||
where: { isDelete: 0, status: (0, typeorm_2.In)([1, 2]) },
|
||||
});
|
||||
const data = {
|
||||
rows: (0, utils_1.formatCreateOrUpdateDate)(rows),
|
||||
count,
|
||||
countQueue,
|
||||
};
|
||||
return data;
|
||||
}
|
||||
catch (error) {
|
||||
throw new common_1.HttpException('获取我得绘制列表失败', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async getDrawActionDetail(drawId, customId) {
|
||||
const modelInfo = await this.modelsService.getSpecialModelKeyInfo('midjourney');
|
||||
const { openaiBaseUrl, openaiBaseKey } = await this.globalConfigService.getConfigs([
|
||||
'openaiBaseUrl',
|
||||
'openaiBaseKey',
|
||||
]);
|
||||
const { key, id: keyId, maxRounds, proxyUrl, maxModelTokens, timeout, model: useModel, } = modelInfo;
|
||||
const mjProxyUrl = proxyUrl;
|
||||
const mjKey = key || openaiBaseKey;
|
||||
const headers = { 'mj-api-secret': mjKey || openaiBaseUrl };
|
||||
let resultId;
|
||||
const payloadJson = { taskId: drawId, customId: customId };
|
||||
const url = `${mjProxyUrl}/mj/submit/action`;
|
||||
const res = await axios_1.default.post(url, payloadJson, { headers });
|
||||
resultId = res.data.result;
|
||||
console.log('Received response from action submission:', resultId);
|
||||
return { drawId: resultId };
|
||||
}
|
||||
async deleteDraw(id, req) {
|
||||
const d = await this.midjourneyEntity.findOne({
|
||||
where: { id, userId: req.user.id, isDelete: 0 },
|
||||
});
|
||||
if (!d) {
|
||||
throw new common_1.HttpException('当前图片不存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (d.status === 2) {
|
||||
throw new common_1.HttpException('绘制中的图片任务、禁止删除!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.midjourneyEntity.update({ id }, { isDelete: 1 });
|
||||
if (res.affected > 0) {
|
||||
return '删除成功!';
|
||||
}
|
||||
else {
|
||||
throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async checkLimit(req) {
|
||||
const { role, id } = req.user;
|
||||
const count = await this.midjourneyEntity.count({
|
||||
where: { userId: id, isDelete: 0, status: (0, typeorm_2.In)([1, 2]) },
|
||||
});
|
||||
const mjLimitCount = await this.globalConfigService.getConfigs([
|
||||
'mjLimitCount',
|
||||
]);
|
||||
const max = mjLimitCount ? Number(mjLimitCount) : 2;
|
||||
if (count >= max) {
|
||||
throw new common_1.HttpException(`当前管理员限制单用户同时最多能执行${max}个任务`, common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async drawFailed(jobData) {
|
||||
const { id, userId, action } = jobData;
|
||||
await this.midjourneyEntity.update({ id }, { status: 4 });
|
||||
}
|
||||
async getList(params) {
|
||||
const { page = 1, size = 20, rec, userId, status } = params;
|
||||
if (Number(size) === 999) {
|
||||
const cache = await this.redisCacheService.get({
|
||||
key: 'midjourney:getList',
|
||||
});
|
||||
if (cache) {
|
||||
try {
|
||||
return JSON.parse(cache);
|
||||
}
|
||||
catch (error) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
const where = { isDelete: 0 };
|
||||
rec && Object.assign(where, { rec });
|
||||
userId && Object.assign(where, { userId });
|
||||
status && Object.assign(where, { status });
|
||||
const [rows, count] = await this.midjourneyEntity.findAndCount({
|
||||
where,
|
||||
order: { id: 'DESC' },
|
||||
take: size,
|
||||
skip: (page - 1) * size,
|
||||
select: [
|
||||
'id',
|
||||
'drawId',
|
||||
'drawUrl',
|
||||
'drawRatio',
|
||||
'prompt',
|
||||
'fullPrompt',
|
||||
'rec',
|
||||
'createdAt',
|
||||
'action',
|
||||
'status',
|
||||
'extend',
|
||||
],
|
||||
});
|
||||
if (Number(size) === 999) {
|
||||
const data = {
|
||||
rows: rows.map((item) => {
|
||||
const { id, drawId, drawUrl, drawRatio, prompt, fullPrompt, createdAt, rec, action, status, extend, } = item;
|
||||
return {
|
||||
id,
|
||||
drawId,
|
||||
drawUrl,
|
||||
drawRatio,
|
||||
prompt,
|
||||
fullPrompt,
|
||||
createdAt,
|
||||
rec,
|
||||
action,
|
||||
status,
|
||||
extend,
|
||||
};
|
||||
}),
|
||||
count,
|
||||
};
|
||||
await this.redisCacheService.set({ key: 'midjourney:getList', val: JSON.stringify(data) }, 60 * 5);
|
||||
return data;
|
||||
}
|
||||
const data = { rows, count };
|
||||
return data;
|
||||
}
|
||||
async getFullPrompt(id) {
|
||||
const m = await this.midjourneyEntity.findOne({ where: { id } });
|
||||
if (!m)
|
||||
return '';
|
||||
const { fullPrompt } = m;
|
||||
return fullPrompt;
|
||||
}
|
||||
async getAdminDrawList(req, params) {
|
||||
try {
|
||||
const { page = 1, size = 10, rec, userId, status } = params;
|
||||
const where = { isDelete: 0 };
|
||||
rec && Object.assign(where, { rec });
|
||||
userId && Object.assign(where, { userId });
|
||||
status && Object.assign(where, { status });
|
||||
const [rows, count] = await this.midjourneyEntity.findAndCount({
|
||||
where,
|
||||
order: { id: 'DESC' },
|
||||
take: size,
|
||||
skip: (page - 1) * size,
|
||||
});
|
||||
const userIds = rows
|
||||
.map((item) => item.userId)
|
||||
.filter((id) => id < 100000);
|
||||
const userInfos = await this.userEntity.find({
|
||||
where: { id: (0, typeorm_2.In)(userIds) },
|
||||
select: ['id', 'username', 'avatar', 'email'],
|
||||
});
|
||||
rows.forEach((item) => {
|
||||
item.userInfo = userInfos.find((user) => user.id === item.userId);
|
||||
});
|
||||
if (req.user.role !== 'super') {
|
||||
rows.forEach((item) => {
|
||||
if (item.userInfo && item.userInfo.email) {
|
||||
item.userInfo.email = item.userInfo.email.replace(/(.{2}).+(.{2}@.+)/, '$1****$2');
|
||||
}
|
||||
});
|
||||
}
|
||||
return { rows, count };
|
||||
}
|
||||
catch (error) {
|
||||
throw new common_1.HttpException('查询失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async recDraw(params) {
|
||||
const { id } = params;
|
||||
const draw = await this.midjourneyEntity.findOne({
|
||||
where: { id, status: 3, isDelete: 0 },
|
||||
});
|
||||
if (!draw) {
|
||||
throw new common_1.HttpException('当前图片不存在!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const { rec } = draw;
|
||||
const res = await this.midjourneyEntity.update({ id }, { rec: rec === 1 ? 0 : 1 });
|
||||
if (res.affected > 0) {
|
||||
return '操作成功!';
|
||||
}
|
||||
}
|
||||
async cleanQueue() {
|
||||
try {
|
||||
await this.midjourneyEntity.update({ status: 2 }, { status: 4 });
|
||||
}
|
||||
catch (error) {
|
||||
console.log('TODO->error: ', error);
|
||||
}
|
||||
}
|
||||
async delLog(req, body) {
|
||||
const { id } = body;
|
||||
if (!id) {
|
||||
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.midjourneyEntity.delete({ id });
|
||||
if (res.affected > 0) {
|
||||
return '删除记录成功!';
|
||||
}
|
||||
else {
|
||||
throw new common_1.HttpException('删除记录失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async setPrompt(req, body) {
|
||||
try {
|
||||
const { prompt, status, isCarryParams, title, order, id, aspect } = body;
|
||||
if (id) {
|
||||
return await this.mjPromptsEntity.update({ id }, { prompt, status, isCarryParams, order, aspect });
|
||||
}
|
||||
else {
|
||||
return await this.mjPromptsEntity.save({
|
||||
prompt,
|
||||
status,
|
||||
isCarryParams,
|
||||
title,
|
||||
order,
|
||||
aspect,
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
}
|
||||
}
|
||||
async delPrompt(req, body) {
|
||||
const { id } = body;
|
||||
if (!id) {
|
||||
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
return await this.mjPromptsEntity.delete({ id });
|
||||
}
|
||||
async queryPrompt() {
|
||||
return await this.mjPromptsEntity.find({
|
||||
order: { order: 'DESC' },
|
||||
});
|
||||
}
|
||||
async proxyImg(params) {
|
||||
const { url } = params;
|
||||
if (!url)
|
||||
return;
|
||||
const response = await axios_1.default.get(url, { responseType: 'arraybuffer' });
|
||||
const base64 = Buffer.from(response.data).toString('base64');
|
||||
return base64;
|
||||
}
|
||||
};
|
||||
MidjourneyService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, bull_1.InjectQueue)('MJDRAW')),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(midjourney_entity_1.MidjourneyEntity)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(prompt_entity_1.mjPromptEntity)),
|
||||
__metadata("design:paramtypes", [Object, typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
globalConfig_service_1.GlobalConfigService,
|
||||
upload_service_1.UploadService,
|
||||
userBalance_service_1.UserBalanceService,
|
||||
redisCache_service_1.RedisCacheService,
|
||||
models_service_1.ModelsService])
|
||||
], MidjourneyService);
|
||||
exports.MidjourneyService = MidjourneyService;
|
||||
48
dist/modules/midjourney/prompt.entity.js
vendored
48
dist/modules/midjourney/prompt.entity.js
vendored
@@ -1,48 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.mjPromptEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let mjPromptEntity = class mjPromptEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '绘画描述词', type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], mjPromptEntity.prototype, "prompt", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '开启状态', default: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], mjPromptEntity.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否携带左边的参数', default: true }),
|
||||
__metadata("design:type", Boolean)
|
||||
], mjPromptEntity.prototype, "isCarryParams", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '提示词名称', type: 'text' }),
|
||||
__metadata("design:type", String)
|
||||
], mjPromptEntity.prototype, "title", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '排序id', default: 100 }),
|
||||
__metadata("design:type", Number)
|
||||
], mjPromptEntity.prototype, "order", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '图片比例' }),
|
||||
__metadata("design:type", String)
|
||||
], mjPromptEntity.prototype, "aspect", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '描述', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], mjPromptEntity.prototype, "desc", void 0);
|
||||
mjPromptEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'mj_prompt' })
|
||||
], mjPromptEntity);
|
||||
exports.mjPromptEntity = mjPromptEntity;
|
||||
18
dist/modules/models/dto/queryModel.dto.js
vendored
18
dist/modules/models/dto/queryModel.dto.js
vendored
@@ -26,15 +26,27 @@ __decorate([
|
||||
__metadata("design:type", Number)
|
||||
], QueryModelDto.prototype, "keyType", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'dsadgadaorjoqm', description: '模型key', required: true }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'dsadgadaorjoqm',
|
||||
description: '模型key',
|
||||
required: true,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], QueryModelDto.prototype, "key", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否开启当前key对应的模型', required: true }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '是否开启当前key对应的模型',
|
||||
required: true,
|
||||
}),
|
||||
__metadata("design:type", Boolean)
|
||||
], QueryModelDto.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'gpt-3.5', description: '当前key绑定的模型是多少 需要调用的模型', required: true }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'gpt-3.5',
|
||||
description: '当前key绑定的模型是多少 需要调用的模型',
|
||||
required: true,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], QueryModelDto.prototype, "model", void 0);
|
||||
exports.QueryModelDto = QueryModelDto;
|
||||
|
||||
22
dist/modules/official/dto/getQrSceneStr.dto.js
vendored
22
dist/modules/official/dto/getQrSceneStr.dto.js
vendored
@@ -1,22 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GetQrSceneStrDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class GetQrSceneStrDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'SNINE', description: '用户邀请码', required: true }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], GetQrSceneStrDto.prototype, "invitedBy", void 0);
|
||||
exports.GetQrSceneStrDto = GetQrSceneStrDto;
|
||||
12
dist/modules/official/official.controller.js
vendored
12
dist/modules/official/official.controller.js
vendored
@@ -18,7 +18,6 @@ const utils_1 = require("../../common/utils");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const getQrCode_dto_1 = require("./dto/getQrCode.dto");
|
||||
const getQrSceneStr_dto_1 = require("./dto/getQrSceneStr.dto");
|
||||
const official_service_1 = require("./official.service");
|
||||
let OfficialController = class OfficialController {
|
||||
constructor(officialService) {
|
||||
@@ -76,8 +75,8 @@ let OfficialController = class OfficialController {
|
||||
}
|
||||
return 'success';
|
||||
}
|
||||
async getQRSceneStr(body) {
|
||||
return this.officialService.getQRSceneStr(body);
|
||||
async getQRSceneStr() {
|
||||
return this.officialService.getQRSceneStr();
|
||||
}
|
||||
async getQRSceneStrByBind(req) {
|
||||
return this.officialService.getQRSceneStrByBind(req);
|
||||
@@ -90,7 +89,7 @@ let OfficialController = class OfficialController {
|
||||
return `${Url}/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`;
|
||||
}
|
||||
async loginBySceneStr(req, body) {
|
||||
return this.officialService.loginBySceneStr(req, body.sceneStr);
|
||||
return this.officialService.loginBySceneStr(req, body);
|
||||
}
|
||||
async bindWxBySceneStr(req, body) {
|
||||
return this.officialService.bindWxBySceneStr(req, body.sceneStr);
|
||||
@@ -129,9 +128,8 @@ __decorate([
|
||||
__decorate([
|
||||
(0, common_1.Post)('getQRSceneStr'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取登录二维码sceneStr' }),
|
||||
__param(0, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [getQrSceneStr_dto_1.GetQrSceneStrDto]),
|
||||
__metadata("design:paramtypes", []),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "getQRSceneStr", null);
|
||||
__decorate([
|
||||
@@ -157,7 +155,7 @@ __decorate([
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, getQrCode_dto_1.GetQrCodeDto]),
|
||||
__metadata("design:paramtypes", [Object, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], OfficialController.prototype, "loginBySceneStr", null);
|
||||
__decorate([
|
||||
|
||||
7
dist/modules/official/official.service.js
vendored
7
dist/modules/official/official.service.js
vendored
@@ -32,10 +32,8 @@ let OfficialService = class OfficialService {
|
||||
async onModuleInit() {
|
||||
await this.globalConfigService.getWechatAccessToken(true);
|
||||
}
|
||||
async getQRSceneStr(body) {
|
||||
const { invitedBy } = body;
|
||||
async getQRSceneStr() {
|
||||
let sceneStr = (0, utils_1.createRandomNonceStr)(32);
|
||||
invitedBy && (sceneStr += `:${invitedBy}`);
|
||||
this.sceneStrMap[sceneStr] = true;
|
||||
return sceneStr;
|
||||
}
|
||||
@@ -124,7 +122,8 @@ let OfficialService = class OfficialService {
|
||||
throw new common_1.HttpException('处理扫码事件时发生错误', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
async loginBySceneStr(req, sceneStr) {
|
||||
async loginBySceneStr(req, body) {
|
||||
const { sceneStr } = body;
|
||||
if (!this.sceneStrMap[sceneStr])
|
||||
return;
|
||||
const userId = this.scanedSceneStrMap[sceneStr];
|
||||
|
||||
37
dist/modules/sales/dto/appForMoney.dto.js
vendored
37
dist/modules/sales/dto/appForMoney.dto.js
vendored
@@ -1,37 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AppForMoneyDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class AppForMoneyDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '提现金额', required: true }),
|
||||
(0, class_validator_1.IsNumber)({}, { message: '提现金额必须为数字' }),
|
||||
(0, class_validator_1.Min)(0, { message: '提现金额必须大于0' }),
|
||||
__metadata("design:type", Number)
|
||||
], AppForMoneyDto.prototype, "withdrawalAmount", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '提现渠道', required: true }),
|
||||
(0, class_validator_1.IsIn)([1, 2], { message: '提现渠道非法' }),
|
||||
__metadata("design:type", Number)
|
||||
], AppForMoneyDto.prototype, "withdrawalChannels", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '提款联系方式', required: true }),
|
||||
__metadata("design:type", String)
|
||||
], AppForMoneyDto.prototype, "contactInformation", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '提款备注', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], AppForMoneyDto.prototype, "remark", void 0);
|
||||
exports.AppForMoneyDto = AppForMoneyDto;
|
||||
27
dist/modules/sales/dto/auditOrder.dto.js
vendored
27
dist/modules/sales/dto/auditOrder.dto.js
vendored
@@ -1,27 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AuditOrderDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class AuditOrderDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '审核工单状态', required: true }),
|
||||
(0, class_validator_1.IsIn)([1, -1], { message: '非法工单状态' }),
|
||||
__metadata("design:type", Number)
|
||||
], AuditOrderDto.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '工单id', required: true }),
|
||||
(0, class_validator_1.IsNumber)({}, { message: '工单id必须为数字' }),
|
||||
__metadata("design:type", Number)
|
||||
], AuditOrderDto.prototype, "id", void 0);
|
||||
exports.AuditOrderDto = AuditOrderDto;
|
||||
32
dist/modules/sales/dto/drawMoneyOrder.dto.js
vendored
32
dist/modules/sales/dto/drawMoneyOrder.dto.js
vendored
@@ -1,32 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.drawMoneyOrderDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class drawMoneyOrderDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], drawMoneyOrderDto.prototype, "page", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], drawMoneyOrderDto.prototype, "size", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '工单状态', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], drawMoneyOrderDto.prototype, "orderStatus", void 0);
|
||||
exports.drawMoneyOrderDto = drawMoneyOrderDto;
|
||||
37
dist/modules/sales/dto/recordsQuery.dto.js
vendored
37
dist/modules/sales/dto/recordsQuery.dto.js
vendored
@@ -1,37 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.RecordsQueryDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class RecordsQueryDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], RecordsQueryDto.prototype, "page", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], RecordsQueryDto.prototype, "size", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'c8c479601c1e11eea4c49fad2cbd3ccd', description: '订单ID', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], RecordsQueryDto.prototype, "orderId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '订单价格', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], RecordsQueryDto.prototype, "orderPrice", void 0);
|
||||
exports.RecordsQueryDto = RecordsQueryDto;
|
||||
37
dist/modules/sales/dto/salesOrder.dto.js
vendored
37
dist/modules/sales/dto/salesOrder.dto.js
vendored
@@ -1,37 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.salesOrderDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class salesOrderDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], salesOrderDto.prototype, "page", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], salesOrderDto.prototype, "size", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '工单状态', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Object)
|
||||
], salesOrderDto.prototype, "orderStatus", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '提现渠道', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], salesOrderDto.prototype, "withdrawalChannels", void 0);
|
||||
exports.salesOrderDto = salesOrderDto;
|
||||
52
dist/modules/sales/dto/salesUserList.dto.js
vendored
52
dist/modules/sales/dto/salesUserList.dto.js
vendored
@@ -1,52 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesUserListDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class SalesUserListDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUserListDto.prototype, "page", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUserListDto.prototype, "size", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 99, description: '支付的用户id', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUserListDto.prototype, "userId", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'epay', description: '支付的平台', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], SalesUserListDto.prototype, "platform", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '订单状态', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUserListDto.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '分销人称号', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], SalesUserListDto.prototype, "salesOutletName", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '返佣比例', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUserListDto.prototype, "performanceRatio", void 0);
|
||||
exports.SalesUserListDto = SalesUserListDto;
|
||||
33
dist/modules/sales/dto/updateUserSales.dto.js
vendored
33
dist/modules/sales/dto/updateUserSales.dto.js
vendored
@@ -1,33 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.UpdateUserSalesDto = void 0;
|
||||
const class_validator_1 = require("class-validator");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
class UpdateUserSalesDto {
|
||||
}
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 10, description: '佣金比例', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
(0, class_validator_1.IsNumber)({}, { message: '佣金比例必须是数字' }),
|
||||
__metadata("design:type", Number)
|
||||
], UpdateUserSalesDto.prototype, "performanceRatio", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: '超级合伙人', description: '自定义分销商名称', required: false }),
|
||||
(0, class_validator_1.IsOptional)(),
|
||||
__metadata("design:type", String)
|
||||
], UpdateUserSalesDto.prototype, "salesOutletName", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '用户ID' }),
|
||||
(0, class_validator_1.IsNumber)({}, { message: '用户ID必须是数字' }),
|
||||
__metadata("design:type", Number)
|
||||
], UpdateUserSalesDto.prototype, "userId", void 0);
|
||||
exports.UpdateUserSalesDto = UpdateUserSalesDto;
|
||||
163
dist/modules/sales/sales.controller.js
vendored
163
dist/modules/sales/sales.controller.js
vendored
@@ -1,163 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesController = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const sales_service_1 = require("./sales.service");
|
||||
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
|
||||
const recordsQuery_dto_1 = require("./dto/recordsQuery.dto");
|
||||
const appForMoney_dto_1 = require("./dto/appForMoney.dto");
|
||||
const drawMoneyOrder_dto_1 = require("./dto/drawMoneyOrder.dto");
|
||||
const salesOrder_dto_1 = require("./dto/salesOrder.dto");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const auditOrder_dto_1 = require("./dto/auditOrder.dto");
|
||||
const salesUserList_dto_1 = require("./dto/salesUserList.dto");
|
||||
const updateUserSales_dto_1 = require("./dto/updateUserSales.dto");
|
||||
let SalesController = class SalesController {
|
||||
constructor(salesService) {
|
||||
this.salesService = salesService;
|
||||
}
|
||||
async getMineAccount(req) {
|
||||
return this.salesService.getMineAccount(req);
|
||||
}
|
||||
async getMineRecords(req, query) {
|
||||
return this.salesService.getMineRecords(req, query);
|
||||
}
|
||||
async inviteRecords(req, query) {
|
||||
return this.salesService.inviteRecords(req, query);
|
||||
}
|
||||
async appForMoney(req, body) {
|
||||
return this.salesService.appForMoney(req, body);
|
||||
}
|
||||
async drawMoneyOrder(req, query) {
|
||||
return this.salesService.drawMoneyOrder(req, query);
|
||||
}
|
||||
async salesOrder(req, query) {
|
||||
return this.salesService.salesOrder(req, query);
|
||||
}
|
||||
async auditOrder(req, body) {
|
||||
return this.salesService.auditOrder(req, body);
|
||||
}
|
||||
async salesUserList(req, query) {
|
||||
return this.salesService.salesUserList(req, query);
|
||||
}
|
||||
async updateUserSales(req, body) {
|
||||
return this.salesService.updateUserSales(req, body);
|
||||
}
|
||||
};
|
||||
__decorate([
|
||||
(0, common_1.Get)('mineAccount'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取个人分销账户' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "getMineAccount", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('mineRecords'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取个人推介记录' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, recordsQuery_dto_1.RecordsQueryDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "getMineRecords", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('inviteRecords'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '管理端获取个人推介记录' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, recordsQuery_dto_1.RecordsQueryDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "inviteRecords", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('appForMoney'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '申请提现' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, appForMoney_dto_1.AppForMoneyDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "appForMoney", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('drawMoneyOrder'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取个人提款工单列表' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, drawMoneyOrder_dto_1.drawMoneyOrderDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "drawMoneyOrder", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('salesOrder'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '管理端获取工单列表' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, salesOrder_dto_1.salesOrderDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "salesOrder", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('auditOrder'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '审核工单' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, auditOrder_dto_1.AuditOrderDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "auditOrder", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('salesUserList'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '查询用户佣金账户' }),
|
||||
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, salesUserList_dto_1.SalesUserListDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "salesUserList", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('updateUserSales'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '修改用户佣金账户' }),
|
||||
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Body)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, updateUserSales_dto_1.UpdateUserSalesDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], SalesController.prototype, "updateUserSales", null);
|
||||
SalesController = __decorate([
|
||||
(0, swagger_1.ApiTags)('sales'),
|
||||
(0, common_1.Controller)('sales'),
|
||||
__metadata("design:paramtypes", [sales_service_1.SalesService])
|
||||
], SalesController);
|
||||
exports.SalesController = SalesController;
|
||||
29
dist/modules/sales/sales.module.js
vendored
29
dist/modules/sales/sales.module.js
vendored
@@ -1,29 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const sales_controller_1 = require("./sales.controller");
|
||||
const sales_service_1 = require("./sales.service");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const salesUsers_entity_1 = require("./salesUsers.entity");
|
||||
const salesRecords_entity_1 = require("./salesRecords.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const salesOrder_entity_1 = require("./salesOrder.entity");
|
||||
let SalesModule = class SalesModule {
|
||||
};
|
||||
SalesModule = __decorate([
|
||||
(0, common_1.Global)(),
|
||||
(0, common_1.Module)({
|
||||
imports: [typeorm_1.TypeOrmModule.forFeature([salesUsers_entity_1.SalesUsersEntity, salesRecords_entity_1.SalesRecordsEntity, user_entity_1.UserEntity, salesOrder_entity_1.SalesOrderEntity])],
|
||||
controllers: [sales_controller_1.SalesController],
|
||||
providers: [sales_service_1.SalesService],
|
||||
exports: [sales_service_1.SalesService],
|
||||
})
|
||||
], SalesModule);
|
||||
exports.SalesModule = SalesModule;
|
||||
292
dist/modules/sales/sales.service.js
vendored
292
dist/modules/sales/sales.service.js
vendored
@@ -1,292 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesService = void 0;
|
||||
const globalConfig_service_1 = require("./../globalConfig/globalConfig.service");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const salesUsers_entity_1 = require("./salesUsers.entity");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const salesRecords_entity_1 = require("./salesRecords.entity");
|
||||
const utils_1 = require("../../common/utils");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const decimal_js_1 = require("decimal.js");
|
||||
const salesOrder_entity_1 = require("./salesOrder.entity");
|
||||
let SalesService = class SalesService {
|
||||
constructor(salesUsersEntity, salesRecordsEntity, userEntity, salesOrderEntity, globalConfigService) {
|
||||
this.salesUsersEntity = salesUsersEntity;
|
||||
this.salesRecordsEntity = salesRecordsEntity;
|
||||
this.userEntity = userEntity;
|
||||
this.salesOrderEntity = salesOrderEntity;
|
||||
this.globalConfigService = globalConfigService;
|
||||
}
|
||||
async getMineAccount(req) {
|
||||
try {
|
||||
const { id: userId } = req.user;
|
||||
let u = await this.salesUsersEntity.findOne({ where: { userId } });
|
||||
if (!u) {
|
||||
const { salesBaseRatio = 10, salesBaseTitle = '新秀分销商' } = await this.globalConfigService.getConfigs([
|
||||
'salesBaseRatio',
|
||||
'salesBaseTitle',
|
||||
]);
|
||||
u = await this.creaetUserBaseSalesInfo({ userId, performanceRatio: Number(salesBaseRatio), salesOutletName: salesBaseTitle });
|
||||
}
|
||||
const account = (0, utils_1.formatCreateOrUpdateDate)(u);
|
||||
const orderCount = await this.salesRecordsEntity.count({ where: { inviterUserId: userId } });
|
||||
const userInfo = await this.userEntity.findOne({ where: { id: userId } }) || { inviteLinkCount: 0, inviteCode: 'xxxxxxx' };
|
||||
const { inviteLinkCount, inviteCode } = userInfo;
|
||||
const inviteCount = await this.userEntity.count({ where: { invitedBy: inviteCode } });
|
||||
return Object.assign(Object.assign({}, account), { orderCount,
|
||||
inviteCount,
|
||||
inviteLinkCount });
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
}
|
||||
}
|
||||
async getMineRecords(req, query) {
|
||||
try {
|
||||
const { id: inviterUserId } = req.user;
|
||||
const { page, size } = query;
|
||||
const [rows, count] = await this.salesRecordsEntity.findAndCount({
|
||||
where: { inviterUserId },
|
||||
order: { createdAt: 'DESC' },
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
return {
|
||||
rows: (0, utils_1.formatCreateOrUpdateDate)(rows),
|
||||
count,
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
}
|
||||
}
|
||||
async inviteRecords(req, query) {
|
||||
try {
|
||||
const { page, size, orderId, orderPrice } = query;
|
||||
let where = {};
|
||||
orderId && (where = { orderId });
|
||||
orderPrice && (where = { orderPrice });
|
||||
const [rows, count] = await this.salesRecordsEntity.findAndCount({
|
||||
where,
|
||||
order: { createdAt: 'DESC' },
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
const userIds = [];
|
||||
rows.map((item) => {
|
||||
userIds.push(item.inviterUserId);
|
||||
userIds.push(item.inviteeUserId);
|
||||
});
|
||||
const userInfo = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } });
|
||||
rows.forEach((item) => {
|
||||
const inviterUser = userInfo.find((u) => u.id === item.inviterUserId);
|
||||
const inviteeUser = userInfo.find((u) => u.id === item.inviteeUserId);
|
||||
const { username, email, avatar } = userInfo.find((u) => u.id === item.inviterUserId);
|
||||
item.inviterUsername = inviterUser === null || inviterUser === void 0 ? void 0 : inviterUser.username;
|
||||
item.inviterEmail = inviterUser === null || inviterUser === void 0 ? void 0 : inviterUser.email;
|
||||
item.inviterAvatar = inviterUser === null || inviterUser === void 0 ? void 0 : inviterUser.avatar;
|
||||
item.inviteeUsername = inviteeUser === null || inviteeUser === void 0 ? void 0 : inviteeUser.username;
|
||||
item.inviteeEmail = inviteeUser === null || inviteeUser === void 0 ? void 0 : inviteeUser.email;
|
||||
item.inviteeAvatar = inviteeUser === null || inviteeUser === void 0 ? void 0 : inviteeUser.avatar;
|
||||
});
|
||||
if (req.user.role !== 'super') {
|
||||
rows.forEach((item) => {
|
||||
item.inviterEmail = item.inviterEmail ? (0, utils_1.hideString)(item.inviterEmail) : '';
|
||||
item.inviteeEmail = item.inviteeEmail ? (0, utils_1.hideString)(item.inviteeEmail) : '';
|
||||
});
|
||||
}
|
||||
return {
|
||||
rows: (0, utils_1.formatCreateOrUpdateDate)(rows),
|
||||
count,
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
}
|
||||
}
|
||||
async creaetUserBaseSalesInfo(salesInfo) {
|
||||
const { userId, performanceRatio, salesOutletName } = salesInfo;
|
||||
return await this.salesUsersEntity.save({ userId, performanceRatio, salesOutletName });
|
||||
}
|
||||
async changeUserBaseSalesInfo(salesInfo) {
|
||||
return await this.salesUsersEntity.save(salesInfo);
|
||||
}
|
||||
async createSalesRecords(salesRecords) {
|
||||
return await this.salesRecordsEntity.save(salesRecords);
|
||||
}
|
||||
async saveCommissionAmount(userId, amount) {
|
||||
const inviteUserInfo = await this.salesUsersEntity.findOne({ where: { userId } });
|
||||
if (!inviteUserInfo)
|
||||
return;
|
||||
const { totalAmount, distributionBalance } = inviteUserInfo;
|
||||
console.log('totalAmount, distributionBalance: ', totalAmount, distributionBalance);
|
||||
return await this.salesUsersEntity.update({ userId }, {
|
||||
totalAmount: new decimal_js_1.default(totalAmount).plus(amount).toNumber(),
|
||||
distributionBalance: new decimal_js_1.default(distributionBalance).plus(amount).toNumber(),
|
||||
});
|
||||
}
|
||||
async appForMoney(req, body) {
|
||||
const { id: userId } = req.user;
|
||||
const { withdrawalAmount, withdrawalChannels, contactInformation, remark } = body;
|
||||
const salesAllowDrawMoney = (await this.globalConfigService.getConfigs(['salesAllowDrawMoney'])) || 10;
|
||||
if (typeof withdrawalAmount !== 'number' || withdrawalAmount <= 0) {
|
||||
throw new common_1.HttpException('提现金额必须为数字且大于0', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (Number(withdrawalAmount) < Number(salesAllowDrawMoney)) {
|
||||
throw new common_1.HttpException(`提现金额最低必须为${salesAllowDrawMoney}元`, common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const salesBalanceInfo = await this.salesUsersEntity.findOne({ where: { userId } });
|
||||
const { distributionBalance, drawMoneyIn } = salesBalanceInfo;
|
||||
if (Number(distributionBalance) < Number(withdrawalAmount)) {
|
||||
throw new common_1.HttpException('提现金额不足', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const newDistributionBalance = new decimal_js_1.default(distributionBalance).minus(withdrawalAmount).toNumber();
|
||||
const orderInfo = { userId, withdrawalAmount, orderStatus: 0, auditStatus: 0, withdrawalChannels, contactInformation, remark };
|
||||
await this.createOrder(orderInfo);
|
||||
const res = await this.salesUsersEntity.update({ userId }, { distributionBalance: newDistributionBalance, drawMoneyIn: new decimal_js_1.default(drawMoneyIn).plus(withdrawalAmount).toNumber() });
|
||||
}
|
||||
async drawMoneyOrder(req, query) {
|
||||
const { id: userId } = req.user;
|
||||
const { page, size } = query;
|
||||
const [rows, count] = await this.salesOrderEntity.findAndCount({
|
||||
where: { userId },
|
||||
order: { createdAt: 'DESC' },
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
const auditUserIds = rows.map((item) => item.auditUserId);
|
||||
const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(auditUserIds) } });
|
||||
rows.forEach((item) => {
|
||||
const curUserInfo = userInfos.find((user) => user.id === item.auditUserId);
|
||||
item.auditUserName = curUserInfo ? curUserInfo.username : '';
|
||||
});
|
||||
return {
|
||||
rows: (0, utils_1.formatCreateOrUpdateDate)(rows),
|
||||
count,
|
||||
};
|
||||
}
|
||||
async salesOrder(req, query) {
|
||||
const { page, size } = query;
|
||||
const where = {};
|
||||
query.orderStatus !== undefined && query.orderStatus !== '' && (where.orderStatus = query.orderStatus);
|
||||
query.withdrawalChannels && (where.withdrawalChannels = query.withdrawalChannels);
|
||||
const [rows, count] = await this.salesOrderEntity.findAndCount({
|
||||
where,
|
||||
order: { createdAt: 'DESC' },
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
const userIds = rows.map((item) => item.userId);
|
||||
const userInfo = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } });
|
||||
rows.forEach((item) => {
|
||||
const curUser = userInfo.find((user) => user.id === item.userId);
|
||||
if (curUser) {
|
||||
const { username, email, avatar } = curUser;
|
||||
item.userInfo = { username, avatar, email: (0, utils_1.hideString)(email) };
|
||||
}
|
||||
});
|
||||
return {
|
||||
rows: (0, utils_1.formatCreateOrUpdateDate)(rows),
|
||||
count,
|
||||
};
|
||||
}
|
||||
async createOrder(orderInfo) {
|
||||
try {
|
||||
return await this.salesOrderEntity.save(orderInfo);
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
throw new common_1.HttpException('创建提现工单失败', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async auditOrder(req, body) {
|
||||
try {
|
||||
const { id: userId } = req.user;
|
||||
const { id, status } = body;
|
||||
if (![1, -1].includes(status)) {
|
||||
throw new common_1.HttpException('审核状态错误', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const orderInfo = await this.salesOrderEntity.findOne({ where: { id } });
|
||||
if (orderInfo.orderStatus !== 0) {
|
||||
throw new common_1.HttpException('该工单已审核过', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const userBalanceInfo = await this.salesUsersEntity.findOne({ where: { userId: orderInfo.userId } });
|
||||
const { withdrawalAmount, drawMoneyIn } = userBalanceInfo;
|
||||
const newWithdrawalAmount = new decimal_js_1.default(withdrawalAmount).plus(orderInfo.withdrawalAmount).toNumber();
|
||||
const newDrawMoneyIn = new decimal_js_1.default(drawMoneyIn).minus(orderInfo.withdrawalAmount).toNumber();
|
||||
await this.salesUsersEntity.update({ userId: orderInfo.userId }, { withdrawalAmount: newWithdrawalAmount, drawMoneyIn: newDrawMoneyIn });
|
||||
await this.salesOrderEntity.update({ id }, { orderStatus: status, auditStatus: status, auditUserId: userId, paymentStatus: status });
|
||||
return '审核完成';
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
throw new common_1.HttpException('审核失败', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async salesUserList(req, query) {
|
||||
const { page, size, salesOutletName, performanceRatio } = query;
|
||||
const where = {};
|
||||
salesOutletName && (where.salesOutletName = (0, typeorm_2.Like)(`%${salesOutletName}%`));
|
||||
performanceRatio && (where.performanceRatio = performanceRatio);
|
||||
const [rows, count] = await this.salesUsersEntity.findAndCount({
|
||||
where,
|
||||
order: { id: 'DESC' },
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
const userIds = rows.map((item) => item.userId);
|
||||
const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } });
|
||||
rows.forEach((item) => {
|
||||
const curUserInfo = userInfos.find((user) => user.id === item.userId);
|
||||
item.userInfo = curUserInfo ? curUserInfo : {};
|
||||
});
|
||||
if (req.user.role !== 'super') {
|
||||
rows.forEach((item) => {
|
||||
var _a, _b;
|
||||
item.userInfo.email = ((_a = item.userInfo) === null || _a === void 0 ? void 0 : _a.email) ? (0, utils_1.hideString)((_b = item.userInfo) === null || _b === void 0 ? void 0 : _b.email) : '';
|
||||
});
|
||||
}
|
||||
return { rows, count };
|
||||
}
|
||||
async updateUserSales(req, body) {
|
||||
const { performanceRatio, salesOutletName, userId } = body;
|
||||
const salesU = await this.salesUsersEntity.findOne({ where: { userId } });
|
||||
if (!salesU) {
|
||||
throw new common_1.HttpException('用户不存在', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const res = await this.salesUsersEntity.update({ userId }, { performanceRatio, salesOutletName });
|
||||
if (res.affected > 0) {
|
||||
return '修改成功';
|
||||
}
|
||||
else {
|
||||
throw new common_1.HttpException('修改失败', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
};
|
||||
SalesService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(salesUsers_entity_1.SalesUsersEntity)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(salesRecords_entity_1.SalesRecordsEntity)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(salesOrder_entity_1.SalesOrderEntity)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
], SalesService);
|
||||
exports.SalesService = SalesService;
|
||||
56
dist/modules/sales/salesOrder.entity.js
vendored
56
dist/modules/sales/salesOrder.entity.js
vendored
@@ -1,56 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesOrderEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let SalesOrderEntity = class SalesOrderEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '申请提现人用户Id' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "userId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '申请提现的金额' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "withdrawalAmount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '工单状态' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "orderStatus", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '审核状态' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "auditStatus", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '审核人', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "auditUserId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '打款状态', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "paymentStatus", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '提现渠道 1: 支付宝 2: 微信', nullable: true }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesOrderEntity.prototype, "withdrawalChannels", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '提现联系信息、备注即可', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], SalesOrderEntity.prototype, "contactInformation", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '提现备注留言', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], SalesOrderEntity.prototype, "remark", void 0);
|
||||
SalesOrderEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'sales_order' })
|
||||
], SalesOrderEntity);
|
||||
exports.SalesOrderEntity = SalesOrderEntity;
|
||||
44
dist/modules/sales/salesRecords.entity.js
vendored
44
dist/modules/sales/salesRecords.entity.js
vendored
@@ -1,44 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesRecordsEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let SalesRecordsEntity = class SalesRecordsEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '邀请人ID' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesRecordsEntity.prototype, "inviterUserId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '被邀请人ID' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesRecordsEntity.prototype, "inviteeUserId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '订单ID' }),
|
||||
__metadata("design:type", String)
|
||||
], SalesRecordsEntity.prototype, "orderId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '订单价格', type: 'decimal', scale: 2, precision: 10 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesRecordsEntity.prototype, "orderPrice", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '佣金金额', type: 'decimal', scale: 2, precision: 10 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesRecordsEntity.prototype, "commissionAmount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '佣金比例', type: 'decimal', scale: 2, precision: 10 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesRecordsEntity.prototype, "commissionPercentage", void 0);
|
||||
SalesRecordsEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'sales_records' })
|
||||
], SalesRecordsEntity);
|
||||
exports.SalesRecordsEntity = SalesRecordsEntity;
|
||||
52
dist/modules/sales/salesUsers.entity.js
vendored
52
dist/modules/sales/salesUsers.entity.js
vendored
@@ -1,52 +0,0 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
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;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SalesUsersEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
let SalesUsersEntity = class SalesUsersEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人用户Id' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "userId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人的提成比例' }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "performanceRatio", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人的自定义称号等级', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], SalesUsersEntity.prototype, "salesOutletName", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人账户总金额', type: 'decimal', scale: 2, precision: 10, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "totalAmount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人账户已经提现金额', type: 'decimal', scale: 2, precision: 10, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "withdrawalAmount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人账户可提现金额', type: 'decimal', scale: 2, precision: 10, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "distributionBalance", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '分销人账户正在提现的金额', type: 'decimal', scale: 2, precision: 10, default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "drawMoneyIn", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '累计成功提成的订单量', default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], SalesUsersEntity.prototype, "orderCount", void 0);
|
||||
SalesUsersEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'sales_users' })
|
||||
], SalesUsersEntity);
|
||||
exports.SalesUsersEntity = SalesUsersEntity;
|
||||
@@ -13,11 +13,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StatisticController = void 0;
|
||||
const statistic_service_1 = require("./statistic.service");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const queryStatisticDto_dto_1 = require("./dto/queryStatisticDto.dto");
|
||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
|
||||
const statistic_service_1 = require("./statistic.service");
|
||||
let StatisticController = class StatisticController {
|
||||
constructor(statisticService) {
|
||||
this.statisticService = statisticService;
|
||||
|
||||
16
dist/modules/statistic/statistic.module.js
vendored
16
dist/modules/statistic/statistic.module.js
vendored
@@ -8,19 +8,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StatisticModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const statistic_controller_1 = require("./statistic.controller");
|
||||
const statistic_service_1 = require("./statistic.service");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const order_entity_1 = require("../order/order.entity");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const statistic_controller_1 = require("./statistic.controller");
|
||||
const statistic_service_1 = require("./statistic.service");
|
||||
let StatisticModule = class StatisticModule {
|
||||
};
|
||||
StatisticModule = __decorate([
|
||||
(0, common_1.Module)({
|
||||
imports: [typeorm_1.TypeOrmModule.forFeature([user_entity_1.UserEntity, chatLog_entity_1.ChatLogEntity, config_entity_1.ConfigEntity, order_entity_1.OrderEntity, midjourney_entity_1.MidjourneyEntity])],
|
||||
imports: [
|
||||
typeorm_1.TypeOrmModule.forFeature([
|
||||
user_entity_1.UserEntity,
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
config_entity_1.ConfigEntity,
|
||||
order_entity_1.OrderEntity,
|
||||
]),
|
||||
],
|
||||
controllers: [statistic_controller_1.StatisticController],
|
||||
providers: [statistic_service_1.StatisticService],
|
||||
})
|
||||
|
||||
54
dist/modules/statistic/statistic.service.js
vendored
54
dist/modules/statistic/statistic.service.js
vendored
@@ -14,7 +14,6 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StatisticService = void 0;
|
||||
const balance_constant_1 = require("../../common/constants/balance.constant");
|
||||
const midjourney_constant_1 = require("../../common/constants/midjourney.constant");
|
||||
const date_1 = require("../../common/utils/date");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
@@ -23,16 +22,14 @@ const typeorm_2 = require("typeorm");
|
||||
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const order_entity_1 = require("../order/order.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
let StatisticService = class StatisticService {
|
||||
constructor(userEntity, chatLogEntity, configEntity, orderEntity, midjourneyEntity, globalConfigService) {
|
||||
constructor(userEntity, chatLogEntity, configEntity, orderEntity, globalConfigService) {
|
||||
this.userEntity = userEntity;
|
||||
this.chatLogEntity = chatLogEntity;
|
||||
this.configEntity = configEntity;
|
||||
this.orderEntity = orderEntity;
|
||||
this.midjourneyEntity = midjourneyEntity;
|
||||
this.globalConfigService = globalConfigService;
|
||||
}
|
||||
async getBaseStatistic() {
|
||||
@@ -42,7 +39,6 @@ let StatisticService = class StatisticService {
|
||||
const newChatCount = await this.countNewChatsToday();
|
||||
const drawCount = await this.countDraws();
|
||||
const dellDrawCount = await this.countNewDrawsToday();
|
||||
const mjDrawCount = await this.countNewMidhourneysToday();
|
||||
const orderCount = await this.countOrders();
|
||||
const newOrderCount = await this.countNewOrdersToday();
|
||||
return {
|
||||
@@ -51,7 +47,7 @@ let StatisticService = class StatisticService {
|
||||
chatCount,
|
||||
newChatCount,
|
||||
drawCount,
|
||||
newDrawCount: mjDrawCount + dellDrawCount,
|
||||
newDrawCount: dellDrawCount,
|
||||
orderCount,
|
||||
newOrderCount,
|
||||
};
|
||||
@@ -59,12 +55,11 @@ let StatisticService = class StatisticService {
|
||||
async getChatStatistic({ days = 7 }) {
|
||||
const chatData = await this.countChatsByTimeRange(days);
|
||||
const drawData = await this.countDrawsByTimeRange(days);
|
||||
const mjDrawData = await this.countMjDrawsByTimeRange(days);
|
||||
return {
|
||||
date: chatData.map((item) => item.date),
|
||||
chat: chatData.map((item) => item.value),
|
||||
draw: drawData.map((item, index) => {
|
||||
return item.value + mjDrawData[index].value;
|
||||
return item.value;
|
||||
}),
|
||||
};
|
||||
}
|
||||
@@ -123,17 +118,6 @@ let StatisticService = class StatisticService {
|
||||
.getCount();
|
||||
return drawCount;
|
||||
}
|
||||
async countNewMidhourneysToday() {
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);
|
||||
const queryBuilder = this.midjourneyEntity.createQueryBuilder('midjourney');
|
||||
const midjourneyCount = await queryBuilder
|
||||
.where('midjourney.createdAt >= :today', { today })
|
||||
.andWhere('midjourney.createdAt < :tomorrow', { tomorrow })
|
||||
.getCount();
|
||||
return midjourneyCount;
|
||||
}
|
||||
async countChatsByTimeRange(days) {
|
||||
var _a, _b;
|
||||
const today = new Date();
|
||||
@@ -190,36 +174,6 @@ let StatisticService = class StatisticService {
|
||||
}
|
||||
return dailyData;
|
||||
}
|
||||
async countMjDrawsByTimeRange(days) {
|
||||
var _a, _b;
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const startDate = new Date(today.getTime() - (days - 1) * 24 * 60 * 60 * 1000);
|
||||
const queryBuilder = this.midjourneyEntity.createQueryBuilder('midjourney');
|
||||
const result = await queryBuilder
|
||||
.select(`DATE(midjourney.createdAt) as date, COUNT(*) as count`)
|
||||
.where(`midjourney.status = :status`, {
|
||||
status: midjourney_constant_1.MidjourneyStatusEnum.DRAWED,
|
||||
})
|
||||
.andWhere('midjourney.createdAt >= :startDate', { startDate })
|
||||
.groupBy('date')
|
||||
.orderBy('date')
|
||||
.getRawMany();
|
||||
const dailyData = [];
|
||||
const currentDate = startDate;
|
||||
for (let i = 0; i < days; i++) {
|
||||
const dateString = (0, date_1.formatDate)(new Date(currentDate), 'M.DD');
|
||||
const count = (_b = (_a = result.find((r) => (0, date_1.formatDate)(new Date(r.date), 'M.DD') === dateString)) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0;
|
||||
if (count > 0) {
|
||||
dailyData.push({ date: dateString, value: Number(count) });
|
||||
}
|
||||
else {
|
||||
dailyData.push({ date: dateString, value: 0 });
|
||||
}
|
||||
currentDate.setDate(currentDate.getDate() + 1);
|
||||
}
|
||||
return dailyData;
|
||||
}
|
||||
async getNewAccessToken(baiduApiKey, baiduSecretKey, baiduRefreshToken) {
|
||||
const tokenUrl = `http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=${baiduRefreshToken}&client_id=${baiduApiKey}&client_secret=${baiduSecretKey}`;
|
||||
common_1.Logger.log('获取新 accessToken', tokenUrl);
|
||||
@@ -317,12 +271,10 @@ StatisticService = __decorate([
|
||||
__param(1, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)),
|
||||
__param(4, (0, typeorm_1.InjectRepository)(midjourney_entity_1.MidjourneyEntity)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
], StatisticService);
|
||||
exports.StatisticService = StatisticService;
|
||||
|
||||
14
dist/modules/upload/upload.service.js
vendored
14
dist/modules/upload/upload.service.js
vendored
@@ -44,19 +44,27 @@ let UploadService = class UploadService {
|
||||
const timestamp = now.getTime();
|
||||
const randomString = Math.random().toString(36).substring(2, 6);
|
||||
const filename = `${timestamp}_${randomString}.${fileExtension}`;
|
||||
const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, } = await this.globalConfigService.getConfigs([
|
||||
const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, localStorageStatus = 0, } = await this.globalConfigService.getConfigs([
|
||||
'tencentCosStatus',
|
||||
'aliOssStatus',
|
||||
'cheveretoStatus',
|
||||
'localStorageStatus',
|
||||
]);
|
||||
common_1.Logger.log(`上传配置状态 - 腾讯云: ${tencentCosStatus}, 阿里云: ${aliOssStatus}, Chevereto: ${cheveretoStatus}`, 'UploadService');
|
||||
common_1.Logger.log(`上传配置状态 - 腾讯云:本地存储: ${localStorageStatus}, ${tencentCosStatus}, 阿里云: ${aliOssStatus}, Chevereto: ${cheveretoStatus}`, 'UploadService');
|
||||
if (!Number(tencentCosStatus) &&
|
||||
!Number(aliOssStatus) &&
|
||||
!Number(cheveretoStatus)) {
|
||||
!Number(cheveretoStatus) &&
|
||||
!Number(localStorageStatus)) {
|
||||
common_1.Logger.error('未配置任何上传方式', 'UploadService');
|
||||
throw new common_1.HttpException('请先前往后台配置上传图片的方式', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
try {
|
||||
if (Number(localStorageStatus)) {
|
||||
common_1.Logger.log('使用本地存储上传文件', 'UploadService');
|
||||
const result = await this.uploadFileToLocal({ filename, buffer, dir });
|
||||
common_1.Logger.log(`文件已上传到本地存储。访问 URL: ${result}`, 'UploadService');
|
||||
return result;
|
||||
}
|
||||
if (Number(tencentCosStatus)) {
|
||||
common_1.Logger.log('使用腾讯云 COS 上传文件', 'UploadService');
|
||||
const result = await this.uploadFileByTencentCos({
|
||||
|
||||
39
dist/modules/user/user.controller.js
vendored
39
dist/modules/user/user.controller.js
vendored
@@ -19,7 +19,6 @@ const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
|
||||
const common_1 = require("@nestjs/common");
|
||||
const swagger_1 = require("@nestjs/swagger");
|
||||
const queryAllUser_dto_1 = require("./dto/queryAllUser.dto");
|
||||
const queryInviteRecord_dto_1 = require("./dto/queryInviteRecord.dto");
|
||||
const queryOne_dto_1 = require("./dto/queryOne.dto");
|
||||
const resetUserPass_dto_1 = require("./dto/resetUserPass.dto");
|
||||
const updateUser_dto_1 = require("./dto/updateUser.dto");
|
||||
@@ -33,15 +32,6 @@ let UserController = class UserController {
|
||||
async update(body, req) {
|
||||
return await this.userService.updateInfo(body, req);
|
||||
}
|
||||
async genInviteCode(req) {
|
||||
return await this.userService.genInviteCode(req);
|
||||
}
|
||||
async getInviteRecord(req, query) {
|
||||
return await this.userService.getInviteRecord(req, query);
|
||||
}
|
||||
async inviteLink(code) {
|
||||
return await this.userService.inviteLink(code);
|
||||
}
|
||||
async userRecharge(body) {
|
||||
return await this.userService.userRecharge(body);
|
||||
}
|
||||
@@ -69,35 +59,6 @@ __decorate([
|
||||
__metadata("design:paramtypes", [updateUser_dto_1.UpdateUserDto, Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], UserController.prototype, "update", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('genInviteCode'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '生成邀请码' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], UserController.prototype, "genInviteCode", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('inviteRecord'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '获取我的邀请记录' }),
|
||||
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
|
||||
(0, swagger_1.ApiBearerAuth)(),
|
||||
__param(0, (0, common_1.Req)()),
|
||||
__param(1, (0, common_1.Query)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, queryInviteRecord_dto_1.queryInviteRecordDto]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], UserController.prototype, "getInviteRecord", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)('inviteLink'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '邀请链接被点击' }),
|
||||
__param(0, (0, common_1.Query)('code')),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [String]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], UserController.prototype, "inviteLink", null);
|
||||
__decorate([
|
||||
(0, common_1.Post)('recharge'),
|
||||
(0, swagger_1.ApiOperation)({ summary: '用户充值' }),
|
||||
|
||||
8
dist/modules/user/user.entity.js
vendored
8
dist/modules/user/user.entity.js
vendored
@@ -101,6 +101,14 @@ __decorate([
|
||||
(0, typeorm_1.Column)({ comment: '用户违规记录次数', default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
], UserEntity.prototype, "violationCount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '真实姓名', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], UserEntity.prototype, "realName", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '身份证号', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], UserEntity.prototype, "idCard", void 0);
|
||||
UserEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'users' })
|
||||
], UserEntity);
|
||||
|
||||
4
dist/modules/user/user.module.js
vendored
4
dist/modules/user/user.module.js
vendored
@@ -14,9 +14,7 @@ const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const mailer_service_1 = require("../mailer/mailer.service");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
|
||||
const balance_entity_1 = require("../userBalance/balance.entity");
|
||||
const fingerprint_entity_1 = require("../userBalance/fingerprint.entity");
|
||||
@@ -41,11 +39,9 @@ UserModule = __decorate([
|
||||
config_entity_1.ConfigEntity,
|
||||
cramiPackage_entity_1.CramiPackageEntity,
|
||||
userBalance_entity_1.UserBalanceEntity,
|
||||
salesUsers_entity_1.SalesUsersEntity,
|
||||
fingerprint_entity_1.FingerprintLogEntity,
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
midjourney_entity_1.MidjourneyEntity,
|
||||
]),
|
||||
],
|
||||
controllers: [user_controller_1.UserController],
|
||||
|
||||
125
dist/modules/user/user.service.js
vendored
125
dist/modules/user/user.service.js
vendored
@@ -39,15 +39,7 @@ let UserService = class UserService {
|
||||
this.configEntity = configEntity;
|
||||
}
|
||||
async createUserAndVerifycation(user, req) {
|
||||
const { username, email, password, invitedBy, client = 0 } = user;
|
||||
if (invitedBy) {
|
||||
const b = await this.userEntity.findOne({
|
||||
where: { inviteCode: invitedBy },
|
||||
});
|
||||
if (!b) {
|
||||
throw new common_1.HttpException('无效的邀请码!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
const { username, email, password, client = 0 } = user;
|
||||
const where = [{ username }, { email }];
|
||||
const u = await this.userEntity.findOne({ where: where });
|
||||
if (u && u.status !== user_constant_1.UserStatusEnum.PENDING) {
|
||||
@@ -101,13 +93,9 @@ let UserService = class UserService {
|
||||
console.log(`尝试发送邮件到: ${email}`);
|
||||
}
|
||||
else {
|
||||
const { username, email, id, invitedBy } = n;
|
||||
const { id } = n;
|
||||
await this.updateUserStatus(id, user_constant_1.UserStatusEnum.ACTIVE);
|
||||
let inviteUser;
|
||||
if (invitedBy) {
|
||||
inviteUser = await this.qureyUserInfoByInviteCode(invitedBy);
|
||||
}
|
||||
await this.userBalanceService.addBalanceToNewUser(id, inviteUser === null || inviteUser === void 0 ? void 0 : inviteUser.id);
|
||||
await this.userBalanceService.addBalanceToNewUser(id);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
@@ -196,7 +184,6 @@ let UserService = class UserService {
|
||||
'role',
|
||||
'email',
|
||||
'sign',
|
||||
'inviteCode',
|
||||
'openId',
|
||||
'consecutiveDays',
|
||||
],
|
||||
@@ -256,73 +243,6 @@ let UserService = class UserService {
|
||||
throw new common_1.HttpException('修改密码失败、请重新试试吧。', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async genInviteCode(req) {
|
||||
const { id } = req.user;
|
||||
const u = await this.userEntity.findOne({ where: { id } });
|
||||
if (!u || u.inviteCode) {
|
||||
throw new common_1.HttpException('已生成过邀请码、请勿重复生成', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const inviteCode = (0, utils_1.generateRandomString)();
|
||||
const user = await this.userEntity.findOne({ where: { inviteCode } });
|
||||
if (user) {
|
||||
throw new common_1.HttpException('生成邀请码失败,请重新试一次吧!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const r = await this.userEntity.update({ id }, { inviteCode });
|
||||
if (r.affected <= 0) {
|
||||
throw new common_1.HttpException('生成邀请码失败,请重新试一次吧!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
return inviteCode;
|
||||
}
|
||||
async getInviteRecord(req, query) {
|
||||
try {
|
||||
const { id } = req.user;
|
||||
const { page = 1, size = 10 } = query;
|
||||
const u = await this.userEntity.findOne({ where: { id } });
|
||||
const { inviteCode } = u;
|
||||
if (!inviteCode)
|
||||
return [];
|
||||
const invitedBy = inviteCode;
|
||||
const [rows, count] = await this.userEntity.findAndCount({
|
||||
where: { invitedBy },
|
||||
order: { id: 'DESC' },
|
||||
select: [
|
||||
'username',
|
||||
'email',
|
||||
'createdAt',
|
||||
'status',
|
||||
'avatar',
|
||||
'updatedAt',
|
||||
],
|
||||
take: size,
|
||||
skip: (page - 1) * size,
|
||||
});
|
||||
(0, utils_1.formatCreateOrUpdateDate)(rows).map((t) => {
|
||||
t.email = (0, utils_1.maskEmail)(t.email);
|
||||
return t;
|
||||
});
|
||||
return { rows, count };
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
throw new common_1.HttpException('获取邀请记录失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async inviteLink(code) {
|
||||
const u = await this.userEntity.findOne({ where: { inviteCode: code } });
|
||||
if (!u)
|
||||
return 1;
|
||||
const { inviteLinkCount = 0 } = u;
|
||||
const res = await this.userEntity.update({ inviteCode: code }, { inviteLinkCount: inviteLinkCount + 1 });
|
||||
if (res.affected) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
async qureyUserInfoByInviteCode(inviteCode) {
|
||||
return await this.userEntity.findOne({ where: { inviteCode } });
|
||||
}
|
||||
async userRecharge(body) {
|
||||
const { userId, model3Count = 0, model4Count = 0, drawMjCount = 0 } = body;
|
||||
await this.userBalanceService.addBalanceToUser(userId, {
|
||||
@@ -363,7 +283,6 @@ let UserService = class UserService {
|
||||
select: [
|
||||
'username',
|
||||
'avatar',
|
||||
'inviteCode',
|
||||
'role',
|
||||
'sign',
|
||||
'status',
|
||||
@@ -372,6 +291,8 @@ let UserService = class UserService {
|
||||
'createdAt',
|
||||
'lastLoginIp',
|
||||
'phone',
|
||||
'realName',
|
||||
'idCard',
|
||||
],
|
||||
});
|
||||
const ids = rows.map((t) => t.id);
|
||||
@@ -388,7 +309,7 @@ let UserService = class UserService {
|
||||
async queryOne({ id }) {
|
||||
return await this.userEntity.findOne({
|
||||
where: { id },
|
||||
select: ['username', 'avatar', 'inviteCode', 'role', 'sign', 'status'],
|
||||
select: ['username', 'avatar', 'role', 'sign', 'status'],
|
||||
});
|
||||
}
|
||||
async updateStatus(body) {
|
||||
@@ -429,15 +350,13 @@ let UserService = class UserService {
|
||||
async getUserFromOpenId(openId, sceneStr) {
|
||||
const user = await this.userEntity.findOne({ where: { openId } });
|
||||
if (!user) {
|
||||
const inviteCode = sceneStr ? sceneStr.split(':')[1] : '';
|
||||
const inviteUser = await this.qureyUserInfoByInviteCode(inviteCode);
|
||||
const user = await this.createUserFromOpenId(openId, inviteCode);
|
||||
await this.userBalanceService.addBalanceToNewUser(user.id, inviteCode ? inviteUser === null || inviteUser === void 0 ? void 0 : inviteUser.id : null);
|
||||
const user = await this.createUserFromOpenId(openId);
|
||||
await this.userBalanceService.addBalanceToNewUser(user.id);
|
||||
return user;
|
||||
}
|
||||
return user;
|
||||
}
|
||||
async createUserFromOpenId(openId, invitedBy) {
|
||||
async createUserFromOpenId(openId) {
|
||||
const userDefautlAvatar = await this.globalConfigService.getConfigs([
|
||||
'userDefautlAvatar',
|
||||
]);
|
||||
@@ -447,14 +366,13 @@ let UserService = class UserService {
|
||||
status: user_constant_1.UserStatusEnum.ACTIVE,
|
||||
sex: 0,
|
||||
email: `${(0, utils_1.createRandomUid)()}@default.com`,
|
||||
invitedBy,
|
||||
openId,
|
||||
};
|
||||
const user = await this.userEntity.save(userInfo);
|
||||
return user;
|
||||
}
|
||||
async createUserFromContact(params) {
|
||||
const { username, email, phone, invitedBy } = params;
|
||||
const { username, email, phone } = params;
|
||||
const userDefautlAvatar = await this.globalConfigService.getConfigs([
|
||||
'userDefautlAvatar',
|
||||
]);
|
||||
@@ -473,9 +391,6 @@ let UserService = class UserService {
|
||||
if (phone) {
|
||||
userInfo.phone = phone;
|
||||
}
|
||||
if (invitedBy) {
|
||||
userInfo.invitedBy = invitedBy;
|
||||
}
|
||||
const user = await this.userEntity.save(userInfo);
|
||||
return user;
|
||||
}
|
||||
@@ -572,6 +487,26 @@ let UserService = class UserService {
|
||||
async createUser(userInfo) {
|
||||
return await this.userEntity.save(userInfo);
|
||||
}
|
||||
async saveRealNameInfo(userId, realName, idCard) {
|
||||
const user = await this.userEntity.findOne({ where: { id: userId } });
|
||||
if (!user) {
|
||||
common_1.Logger.error('用户不存在');
|
||||
}
|
||||
await this.userEntity.update({ id: userId }, { realName, idCard });
|
||||
return;
|
||||
}
|
||||
async updateUserPhone(userId, phone, username, password) {
|
||||
const user = await this.userEntity.findOne({ where: { id: userId } });
|
||||
const hashedPassword = bcrypt.hashSync(password, 10);
|
||||
if (!user) {
|
||||
common_1.Logger.error('用户不存在');
|
||||
}
|
||||
if (!phone || !username || !hashedPassword) {
|
||||
throw new common_1.HttpException('参数错误!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
await this.userEntity.update({ id: userId }, { phone, username, password: hashedPassword });
|
||||
return;
|
||||
}
|
||||
};
|
||||
UserService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
|
||||
@@ -13,9 +13,7 @@ const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
|
||||
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
|
||||
const config_entity_1 = require("../globalConfig/config.entity");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const verification_service_1 = require("../verification/verification.service");
|
||||
const verifycation_entity_1 = require("../verification/verifycation.entity");
|
||||
@@ -39,11 +37,9 @@ UserBalanceModule = __decorate([
|
||||
config_entity_1.ConfigEntity,
|
||||
cramiPackage_entity_1.CramiPackageEntity,
|
||||
user_entity_1.UserEntity,
|
||||
salesUsers_entity_1.SalesUsersEntity,
|
||||
fingerprint_entity_1.FingerprintLogEntity,
|
||||
chatLog_entity_1.ChatLogEntity,
|
||||
chatGroup_entity_1.ChatGroupEntity,
|
||||
midjourney_entity_1.MidjourneyEntity,
|
||||
]),
|
||||
],
|
||||
controllers: [userBalance_controller_1.UserBalanceController],
|
||||
|
||||
121
dist/modules/userBalance/userBalance.service.js
vendored
121
dist/modules/userBalance/userBalance.service.js
vendored
@@ -27,28 +27,22 @@ const userBalance_entity_1 = require("./userBalance.entity");
|
||||
const date_1 = require("../../common/utils/date");
|
||||
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
|
||||
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
|
||||
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
|
||||
const sales_service_1 = require("../sales/sales.service");
|
||||
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
|
||||
const user_entity_1 = require("../user/user.entity");
|
||||
const fingerprint_entity_1 = require("./fingerprint.entity");
|
||||
let UserBalanceService = class UserBalanceService {
|
||||
constructor(balanceEntity, userBalanceEntity, accountLogEntity, cramiPackageEntity, configEntity, userEntity, salesUsersEntity, fingerprintLogEntity, chatGroupEntity, chatLogEntity, midjourneyEntity, salesService, globalConfigService) {
|
||||
constructor(balanceEntity, userBalanceEntity, accountLogEntity, cramiPackageEntity, configEntity, userEntity, fingerprintLogEntity, chatGroupEntity, chatLogEntity, globalConfigService) {
|
||||
this.balanceEntity = balanceEntity;
|
||||
this.userBalanceEntity = userBalanceEntity;
|
||||
this.accountLogEntity = accountLogEntity;
|
||||
this.cramiPackageEntity = cramiPackageEntity;
|
||||
this.configEntity = configEntity;
|
||||
this.userEntity = userEntity;
|
||||
this.salesUsersEntity = salesUsersEntity;
|
||||
this.fingerprintLogEntity = fingerprintLogEntity;
|
||||
this.chatGroupEntity = chatGroupEntity;
|
||||
this.chatLogEntity = chatLogEntity;
|
||||
this.midjourneyEntity = midjourneyEntity;
|
||||
this.salesService = salesService;
|
||||
this.globalConfigService = globalConfigService;
|
||||
}
|
||||
async addBalanceToNewUser(userId, invitedId) {
|
||||
async addBalanceToNewUser(userId) {
|
||||
try {
|
||||
const registerConfigs = await this.configEntity.find({
|
||||
where: {
|
||||
@@ -62,13 +56,6 @@ let UserBalanceService = class UserBalanceService {
|
||||
'firstRregisterSendModel3Count',
|
||||
'firstRregisterSendModel4Count',
|
||||
'firstRregisterSendDrawMjCount',
|
||||
'inviteSendStatus',
|
||||
'inviteGiveSendModel3Count',
|
||||
'inviteGiveSendModel4Count',
|
||||
'inviteGiveSendDrawMjCount',
|
||||
'invitedGuestSendModel3Count',
|
||||
'invitedGuestSendDrawMjCount',
|
||||
'invitedGuestSendModel4Count',
|
||||
]),
|
||||
},
|
||||
});
|
||||
@@ -100,35 +87,6 @@ let UserBalanceService = class UserBalanceService {
|
||||
drawMjCount,
|
||||
model4Count,
|
||||
});
|
||||
if (invitedId) {
|
||||
if (Number(configMap.inviteSendStatus) === 1) {
|
||||
model3Count =
|
||||
model3Count + Number(configMap.invitedGuestSendModel3Count);
|
||||
model4Count =
|
||||
model4Count + Number(configMap.invitedGuestSendModel4Count);
|
||||
drawMjCount =
|
||||
drawMjCount + Number(configMap.invitedGuestSendDrawMjCount);
|
||||
await this.saveRecordRechargeLog({
|
||||
userId,
|
||||
rechargeType: balance_constant_1.RechargeType.INVITE_GIFT,
|
||||
model3Count: configMap.invitedGuestSendModel3Count,
|
||||
model4Count: configMap.invitedGuestSendModel4Count,
|
||||
drawMjCount: configMap.invitedGuestSendDrawMjCount,
|
||||
});
|
||||
await this.addBalanceToUser(invitedId, {
|
||||
model3Count: configMap.inviteGiveSendModel3Count,
|
||||
model4Count: configMap.inviteGiveSendModel4Count,
|
||||
drawMjCount: configMap.inviteGiveSendDrawMjCount,
|
||||
});
|
||||
await this.saveRecordRechargeLog({
|
||||
userId: invitedId,
|
||||
rechargeType: balance_constant_1.RechargeType.REFER_GIFT,
|
||||
model3Count: configMap.inviteGiveSendModel3Count,
|
||||
model4Count: configMap.inviteGiveSendModel4Count,
|
||||
drawMjCount: configMap.inviteGiveSendDrawMjCount,
|
||||
});
|
||||
}
|
||||
}
|
||||
await this.userBalanceEntity.save({
|
||||
userId,
|
||||
model3Count,
|
||||
@@ -151,10 +109,6 @@ let UserBalanceService = class UserBalanceService {
|
||||
if (role === 'visitor') {
|
||||
return this.validateVisitorBalance(req, type, amount);
|
||||
}
|
||||
const res = await this.configEntity.findOne({
|
||||
where: { configKey: 'vxNumber' },
|
||||
});
|
||||
const vxNumber = res ? res.configVal : '---';
|
||||
const memberKey = type === 1
|
||||
? 'memberModel3Count'
|
||||
: type === 2
|
||||
@@ -476,30 +430,6 @@ let UserBalanceService = class UserBalanceService {
|
||||
pkgName,
|
||||
days,
|
||||
});
|
||||
const userInfo = await this.userEntity.findOne({ where: { id: userId } });
|
||||
const { invitedBy } = userInfo;
|
||||
if (invitedBy) {
|
||||
const inviteUserInfo = await this.userEntity.findOne({
|
||||
where: { inviteCode: invitedBy },
|
||||
});
|
||||
const inviteUserSalesInfo = await this.salesUsersEntity.findOne({
|
||||
where: { userId: inviteUserInfo.id },
|
||||
});
|
||||
if (!inviteUserInfo)
|
||||
return;
|
||||
const { id: inviterUserId } = inviteUserInfo;
|
||||
const { performanceRatio } = inviteUserSalesInfo;
|
||||
const recordsInfo = {
|
||||
inviterUserId,
|
||||
inviteeUserId: userId,
|
||||
orderId: order.id,
|
||||
orderPrice: order.total,
|
||||
commissionPercentage: performanceRatio,
|
||||
commissionAmount: ((order.total * performanceRatio) / 100).toFixed(2),
|
||||
};
|
||||
await this.salesService.createSalesRecords(recordsInfo);
|
||||
await this.salesService.saveCommissionAmount(inviterUserId, recordsInfo.commissionAmount);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.log('error: ', error);
|
||||
@@ -570,7 +500,6 @@ let UserBalanceService = class UserBalanceService {
|
||||
const { id: userId } = req.user;
|
||||
await this.chatLogEntity.update({ userId: Number(fingerprint) }, { userId });
|
||||
await this.chatGroupEntity.update({ userId: Number(fingerprint) }, { userId });
|
||||
await this.midjourneyEntity.update({ userId: Number(fingerprint) }, { userId });
|
||||
return 1;
|
||||
}
|
||||
async getVisitorCount(req) {
|
||||
@@ -581,10 +510,39 @@ let UserBalanceService = class UserBalanceService {
|
||||
const countChatGroup = await this.chatGroupEntity.count({
|
||||
where: { userId: fingerprint },
|
||||
});
|
||||
const countMj = await this.midjourneyEntity.count({
|
||||
where: { userId: fingerprint },
|
||||
return countChat || countChatGroup || 0;
|
||||
}
|
||||
async checkUserCertification(userId) {
|
||||
const userInfo = await this.userEntity.findOne({
|
||||
where: { id: userId },
|
||||
});
|
||||
return countChat || countChatGroup || countMj || 0;
|
||||
const userBalance = await this.userBalanceEntity.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (!userInfo || !userBalance) {
|
||||
return;
|
||||
}
|
||||
const { phoneValidationMessageCount, identityVerificationMessageCount, openIdentity, openPhoneValidation, } = await this.globalConfigService.getConfigs([
|
||||
'phoneValidationMessageCount',
|
||||
'identityVerificationMessageCount',
|
||||
'openIdentity',
|
||||
'openPhoneValidation',
|
||||
]);
|
||||
const phoneValidationCount = Number(phoneValidationMessageCount);
|
||||
const identityValidationCount = Number(identityVerificationMessageCount);
|
||||
const model3Count = Number(userBalance.useModel3Count) || 0;
|
||||
const model4Count = Number(userBalance.useModel4Count) || 0;
|
||||
const totalTokens = model3Count + model4Count;
|
||||
if (openPhoneValidation === '1' &&
|
||||
totalTokens >= phoneValidationCount &&
|
||||
!userInfo.phone) {
|
||||
throw new common_1.HttpException('请完成手机号绑定', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
if (openIdentity === '1' &&
|
||||
totalTokens >= identityValidationCount &&
|
||||
(!userInfo.realName || !userInfo.idCard)) {
|
||||
throw new common_1.HttpException('请完成实名认证', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
};
|
||||
UserBalanceService = __decorate([
|
||||
@@ -595,11 +553,9 @@ UserBalanceService = __decorate([
|
||||
__param(3, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)),
|
||||
__param(4, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)),
|
||||
__param(5, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
|
||||
__param(6, (0, typeorm_1.InjectRepository)(salesUsers_entity_1.SalesUsersEntity)),
|
||||
__param(7, (0, typeorm_1.InjectRepository)(fingerprint_entity_1.FingerprintLogEntity)),
|
||||
__param(8, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)),
|
||||
__param(9, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)),
|
||||
__param(10, (0, typeorm_1.InjectRepository)(midjourney_entity_1.MidjourneyEntity)),
|
||||
__param(6, (0, typeorm_1.InjectRepository)(fingerprint_entity_1.FingerprintLogEntity)),
|
||||
__param(7, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)),
|
||||
__param(8, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
@@ -609,9 +565,6 @@ UserBalanceService = __decorate([
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
sales_service_1.SalesService,
|
||||
globalConfig_service_1.GlobalConfigService])
|
||||
], UserBalanceService);
|
||||
exports.UserBalanceService = UserBalanceService;
|
||||
|
||||
@@ -22,6 +22,7 @@ const redisCache_service_1 = require("../redisCache/redisCache.service");
|
||||
const status_constant_1 = require("./../../common/constants/status.constant");
|
||||
const verifycation_entity_1 = require("./verifycation.entity");
|
||||
const Core = require("@alicloud/pop-core");
|
||||
const axios_1 = require("axios");
|
||||
let VerificationService = class VerificationService {
|
||||
constructor(verifycationEntity, globalConfigService, redisCacheService) {
|
||||
this.verifycationEntity = verifycationEntity;
|
||||
@@ -101,6 +102,43 @@ let VerificationService = class VerificationService {
|
||||
throw new common_1.HttpException(((_a = error === null || error === void 0 ? void 0 : error.data) === null || _a === void 0 ? void 0 : _a.Message) || '验证码发送失败!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
async verifyIdentity(identityInfo) {
|
||||
const appCode = await this.globalConfigService.getConfigs(['appCode']);
|
||||
const { name, idCard } = identityInfo;
|
||||
if (!name || !idCard) {
|
||||
throw new common_1.HttpException('缺少必要参数!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
common_1.Logger.debug(`Received identityInfo: ${name}, ${idCard}`);
|
||||
const apiUrl = 'https://eid.shumaidata.com/eid/check';
|
||||
const headers = {
|
||||
Authorization: `APPCODE ${appCode}`,
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
};
|
||||
const params = new URLSearchParams({
|
||||
name: name,
|
||||
idcard: idCard,
|
||||
});
|
||||
try {
|
||||
const response = await axios_1.default.post(apiUrl, params, { headers });
|
||||
const responseString = JSON.stringify(response.data);
|
||||
common_1.Logger.debug(`Received response: ${responseString}`);
|
||||
switch (response.data.result.res) {
|
||||
case '1':
|
||||
return true;
|
||||
case '2':
|
||||
common_1.Logger.log('验证不一致', 'VerificationService');
|
||||
case '3':
|
||||
common_1.Logger.log('实名认证异常', 'VerificationService');
|
||||
default:
|
||||
common_1.Logger.log('未知的认证结果', 'VerificationService');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (error) {
|
||||
common_1.Logger.error(`Error: ${error.message}`, error.stack, 'Verification');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
VerificationService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
|
||||
Reference in New Issue
Block a user