99AI/dist/modules/sales/sales.service.js
2024-01-17 09:22:28 +08:00

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;