mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-13 12:13:43 +08:00
NineAI 2.4.2
This commit is contained in:
292
dist/modules/sales/sales.service.js
vendored
Normal file
292
dist/modules/sales/sales.service.js
vendored
Normal file
@@ -0,0 +1,292 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user