Files
energy_dist/dist/app/task/service/task_red_packet.service.js
2026-04-21 22:34:39 +08:00

88 lines
4.6 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); }
};
var TaskRedPacketService_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskRedPacketService = void 0;
const common_1 = require("@nestjs/common");
const schedule_1 = require("@nestjs/schedule");
const typeorm_1 = require("@nestjs/typeorm");
const decimal_help_1 = require("../../common/util/decimal_help");
const help_1 = require("../../common/util/help");
const repository_help_1 = require("../../common/util/repository_help");
const red_packet_model_1 = require("../../../model/red_packet.model");
const user_model_1 = require("../../../model/user.model");
const typeorm_2 = require("typeorm");
const DAY_SECONDS = 24 * 60 * 60;
let TaskRedPacketService = TaskRedPacketService_1 = class TaskRedPacketService {
redPacketRepos;
logger = new common_1.Logger(TaskRedPacketService_1.name);
constructor(redPacketRepos) {
this.redPacketRepos = redPacketRepos;
}
async handle() {
try {
const now = help_1.Help.getSecondTimestamp();
const dayAgoSeconds = now - DAY_SECONDS;
const redPackets = await this.redPacketRepos.findBy({
expireTime: (0, typeorm_2.LessThanOrEqual)(dayAgoSeconds),
remainingCount: (0, typeorm_2.MoreThanOrEqual)(1),
status: (0, typeorm_2.In)([red_packet_model_1.RedPacketStatus.Unclaimed, red_packet_model_1.RedPacketStatus.Claiming]),
});
if (!redPackets.length) {
this.logger.log('红包退回任务结束,没有到期的红包');
return;
}
for (let i = 0, len = redPackets.length; i < len; i++) {
try {
await this.redPacketRepos.manager.transaction(async (manager) => {
const userRepos = manager.getRepository(user_model_1.UserModel);
const redPacketRepos = manager.getRepository(red_packet_model_1.RedPacketModel);
const redPacket = redPackets[i];
const remainingAmount = decimal_help_1.DecimalHelp.div(redPacket.remainingAmount, 100);
await repository_help_1.RepositoryHelp.update(redPacketRepos, {
id: redPacket.id,
}, {
status: red_packet_model_1.RedPacketStatus.Expire,
});
await repository_help_1.RepositoryHelp.update(userRepos, {
id: redPacket.userId,
}, {
redEnvelope: () => `redEnvelope + ${remainingAmount}`,
});
this.logger.log(`红包${redPacket.id}退回完成,退回金额:${remainingAmount}`);
});
}
catch (e) {
this.logger.error('红包退回任务出现错误001', e.stack);
}
}
}
catch (e) {
this.logger.error('红包退回任务出现错误002', e.stack);
}
}
};
exports.TaskRedPacketService = TaskRedPacketService;
__decorate([
(0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_DAY_AT_MIDNIGHT),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], TaskRedPacketService.prototype, "handle", null);
exports.TaskRedPacketService = TaskRedPacketService = TaskRedPacketService_1 = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_1.InjectRepository)(red_packet_model_1.RedPacketModel)),
__metadata("design:paramtypes", [typeorm_2.Repository])
], TaskRedPacketService);
//# sourceMappingURL=task_red_packet.service.js.map