后台:礼包码
This commit is contained in:
@@ -1,7 +1,23 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions, Ref, mongoose } from '@typegoose/typegoose';
|
||||
import GiftCode, { GiftCodeType } from './GiftCode';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
import { GIFT_GENERATE_TYPE } from '../consts';
|
||||
import { GiftCodeModel, GiftCodeType } from './GiftCode';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '@pubUtils/util';
|
||||
|
||||
class RoleRecord {
|
||||
@prop({ required: true, default: '' })
|
||||
roleId: string;
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
roleName: string;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
serverId: number;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
time: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 举报记录
|
||||
@@ -9,15 +25,28 @@ import { genCode } from '../pubUtils/util';
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
@index({ code: 1 })
|
||||
export default class GiftCodeDetail extends BaseModel {
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
giftId: number; // giftCode表的id
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
giftName: string; // giftCode表的name
|
||||
|
||||
@prop({ required: true, default: 0, enum: GIFT_GENERATE_TYPE })
|
||||
generateType: GIFT_GENERATE_TYPE; // 一人一码or通码
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
code: string; // 兑换码
|
||||
|
||||
@prop({ ref: 'GiftCode', type: mongoose.Schema.Types.ObjectId })
|
||||
giftCode: Ref<GiftCode>;
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
usedNum: number; // 该码使用次数
|
||||
|
||||
@prop({ required: true, type: String })
|
||||
roleIds: string[];
|
||||
|
||||
@prop({ required: true, type: RoleRecord, _id: false })
|
||||
record: RoleRecord[];
|
||||
|
||||
|
||||
// 根据code
|
||||
public static async findByCode(code: string) {
|
||||
@@ -25,27 +54,33 @@ export default class GiftCodeDetail extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByGiftCode(giftCode: GiftCodeType) {
|
||||
let result: GiftCodeDetailType[] = await GiftCodeDetailModel.find({ giftCode: giftCode._id }).lean();
|
||||
public static async findAllCodeByGiftId(id: number, cnt: number) {
|
||||
let n = Math.ceil(cnt/1000);
|
||||
let result: GiftCodeDetailType[] = [];
|
||||
for(let i = 0; i < n; i++) {
|
||||
let codes = await GiftCodeDetailModel.find({ giftId: id }).limit(1000).skip(i * 1000).sort({ _id: 1 }).lean();
|
||||
result.push(...codes);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async increaseUsedNum(code: string) {
|
||||
let result: GiftCodeDetailType = await GiftCodeDetailModel.findOneAndUpdate({ code }, { $inc: { usedNum: 1 } }, { new: true }).lean();
|
||||
public static async increaseUsedNum(code: string, roleId: string, roleName: string, serverId: number) {
|
||||
let result: GiftCodeDetailType = await GiftCodeDetailModel.findOneAndUpdate({ code }, {
|
||||
$inc: { usedNum: 1 }, $push: { roleIds: roleId, record: { roleId, roleName, serverId, time: nowSeconds() } }
|
||||
}, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async generateOne(giftCode: GiftCodeType, code: string, uid = 1 ) {
|
||||
let result = await GiftCodeDetailModel.insertMany([{ giftCode: giftCode._id, code, usedNum: 0, createdBy: uid, updatedBy: uid }]);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async generateMany(giftCode: GiftCodeType, generateNum: number, codeLen: number, uid = 1) {
|
||||
public static async generateMany(giftCode: GiftCodeType, count = 1, uid = 1) {
|
||||
let insertArr: GiftCodeDetailParam[] = [];
|
||||
for(let i = 0; i < generateNum; i++) {
|
||||
insertArr.push({ giftCode: giftCode._id, code: genCode(codeLen), usedNum: 0, createdBy: uid, updatedBy: uid });
|
||||
for(let i = 0; i < count; i++) {
|
||||
insertArr.push({
|
||||
giftId: giftCode.id, giftName: giftCode.name, generateType: giftCode.generateType,
|
||||
code: genCode(giftCode.codeLen), usedNum: 0, createdBy: uid, updatedBy: uid
|
||||
});
|
||||
}
|
||||
let result = await GiftCodeDetailModel.insertMany(insertArr);
|
||||
await GiftCodeModel.increateGenerateNum(giftCode.id, count);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user