"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