mirror of
https://github.com/vastxie/99AI.git
synced 2025-09-18 17:56:36 +08:00
293 lines
15 KiB
JavaScript
293 lines
15 KiB
JavaScript
"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;
|