后台:礼包码

This commit is contained in:
luying
2021-12-10 18:40:57 +08:00
parent cb999cec10
commit fbd19a5c4c
6 changed files with 78 additions and 4 deletions

View File

@@ -152,7 +152,9 @@ export class ItemHandler {
if(!giftCode) {
return resResult(STATUS.GIFT_CODE_NOT_FOUND);
}
if(giftCode.generateType == GIFT_GENERATE_TYPE.ONE_TO_ONE) { // 一人一条,单条不能被多人使用
if(giftCodeDetail.usedNum > 0) return resResult(STATUS.GIFT_CODE_USED_NUM_MAX);
}
if(!giftCode.isEnable) return resResult(STATUS.GIFT_CODE_HAS_EXPIRED);
if (giftCode.beginTime > nowSeconds()) return resResult(STATUS.GIFT_CODE_NOT_START);
if (giftCode.endTime < nowSeconds()) return resResult(STATUS.GIFT_CODE_HAS_EXPIRED);
@@ -161,6 +163,12 @@ export class ItemHandler {
return resResult(STATUS.YOU_HAVE_USED_THIS_CODE);
}
let checkHasUse = await GiftCodeDetailModel.checkHasUsed(roleId, giftCodeDetail.giftId)
if(checkHasUse) {
return resResult(STATUS.YOU_HAVE_USED_THIS_CODE);
}
await GiftCodeDetailModel.increaseUsedNum(code, roleId, roleName, serverId);
await GiftCodeModel.increaseUsedNum(giftCode.id);

View File

@@ -172,6 +172,12 @@ export default class UserController extends Controller {
ctx.body = await ctx.service.users.cancelGiftCode(params.id, !!params.isEnable);
}
public async getGiftCodeDetailList() {
const { ctx } = this;
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
ctx.body = await ctx.service.users.getGiftCodeDetailList(page, pageSize, sortField, sortOrder, form);
}
public async getGiftCodeDetailFile() {
const { ctx } = this;
const { id } = ctx.params;

View File

@@ -49,6 +49,7 @@ export default (app: Application) => {
router.post('/api/users/updategiftcode', controller.users.updateGiftCode);
router.post('/api/users/generategiftcode', controller.users.generateGiftCode);
router.post('/api/users/cancelgiftCode', controller.users.cancelGiftCode);
router.post('/api/users/getgiftcodedetaillist', controller.users.getGiftCodeDetailList);
router.get('/api/users/getgiftcodedetailfile/:id/:filename', controller.users.getGiftCodeDetailFile);
// router.post('/api/game/getserverlistbyenv', tokenParser, controller.game.getServerListByEnv);

View File

@@ -21,7 +21,7 @@ import { CreateHeroes, deletRole } from '@pubUtils/roleUtil';
import { RScriptRecordModel } from '@db/RScriptRecord';
import { DicWar } from '@pubUtils/dictionary/DicWar';
import { SkinModel } from '@db/Skin';
import { SearchEquipParam, SearchHeroParam, SearchUserParam, SearchGiftCodeParam } from '@domain/backEndField/search';
import { SearchEquipParam, SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam } from '@domain/backEndField/search';
import { CreateGiftCode, UpdateGiftCode } from '@domain/backEndField/params';
import { isNumber } from 'util';
@@ -693,6 +693,16 @@ export default class GMUsers extends Service {
return Buffer.from(codes.join('\n'));
}
public async getGiftCodeDetailList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchGiftCodeDetailParam = {}) {
const { ctx } = this;
const list = await GiftCodeDetailModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await GiftCodeDetailModel.countByCondition( form )
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => ({...cur, env: ctx.app.config.realEnv })), total
});
}
public async setWarRecord(roleIds: string[], _warId: string) {
const { ctx } = this;
let warId = parseInt(_warId);

View File

@@ -3,7 +3,8 @@ import { index, getModelForClass, prop, DocumentType, modelOptions } from '@type
import { GIFT_GENERATE_TYPE } from '../consts';
import { GiftCodeModel, GiftCodeType } from './GiftCode';
import { nowSeconds } from '../pubUtils/timeUtil';
import { genCode } from '@pubUtils/util';
import { genCode } from '../pubUtils/util';
import { SearchGiftCodeDetailParam } from '../domain/backEndField/search';
class RoleRecord {
@prop({ required: true, default: '' })
@@ -50,7 +51,12 @@ export default class GiftCodeDetail extends BaseModel {
// 根据code
public static async findByCode(code: string) {
let result: GiftCodeDetailType = await GiftCodeDetailModel.findOne({ code }).populate('giftCode').lean(true);
let result: GiftCodeDetailType = await GiftCodeDetailModel.findOne({ code }).lean(true);
return result;
}
public static async checkHasUsed(roleId: string, id: number) {
let result = await GiftCodeDetailModel.exists({ giftId: id, 'record.roleId': roleId });
return result;
}
@@ -84,6 +90,40 @@ export default class GiftCodeDetail extends BaseModel {
return result;
}
private static getSearchObj(form: SearchGiftCodeDetailParam) {
let searchObj = {};
if(form.giftId) searchObj['giftId'] = form.giftId;
if (form.giftName != undefined) searchObj['giftName'] = { $regex: new RegExp(form.giftName.toString(), 'i') };
if(form.generateType) searchObj['generateType'] = form.generateType;
if(form.code) searchObj['code'] = form.code;
if(form.roleId) searchObj['record.roleId'] = form.roleId;
if (form.roleName != undefined) searchObj['record.roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
return searchObj
}
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form:SearchGiftCodeDetailParam = {}) {
let searchObj = this.getSearchObj(form);
let sort = {};
if (sortField && sortOrder) {
if (sortOrder == 'ascend') {
sort[sortField] = 1;
} else if (sortOrder == 'descend') {
sort[sortField] = -1;
}
}
const result: GiftCodeDetailType[] = await GiftCodeDetailModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
public static async countByCondition(form: SearchGiftCodeDetailParam = {}) {
let searchObj = this.getSearchObj(form);
const result = await GiftCodeDetailModel.count(searchObj);
return result;
}
}
export const GiftCodeDetailModel = getModelForClass(GiftCodeDetail);

View File

@@ -52,3 +52,12 @@ export interface SearchGiftCodeParam {
createTimeStart?: number;
createTimeEnd?: number;
}
export interface SearchGiftCodeDetailParam {
giftId?: number;
giftName?: string;
generateType?: number;
code?: string;
roleId?: string;
roleName?: string;
}