88 lines
4.6 KiB
JavaScript
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
|