弹出礼包:购买

This commit is contained in:
陆莹
2022-03-15 21:01:21 +08:00
parent 319d4cf454
commit d9b907e80b
4 changed files with 72 additions and 67 deletions

View File

@@ -1,11 +1,11 @@
import { Application, BackendSession, HandlerService, } from 'pinus';
import { resResult, splitString } from '../../../pubUtils/util';
import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, STATUS, CURRENCY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, } from '../../../consts';
import { checkPopUpCondition, getPopUpShopDataShow } from '../../../services/activity/popUpShopService';
import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, STATUS, CURRENCY_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, ACTIVITY_TYPE, } from '../../../consts';
import { checkPopUpCondition, getPopUpShopData, getPopUpShopDataShow } from '../../../services/activity/popUpShopService';
import { ActivityModel, ActivityModelType } from '../../../db/Activity';
import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from '../../../db/ActivityPopUpShop';
import { PopUpShopData } from '../../../domain/activityField/popUpShopField';
import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService';
import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService';
import { RewardParam } from '../../../domain/activityField/rewardField';
import { handleCost } from '../../../services/rewardService';
import moment = require('moment');
@@ -57,73 +57,50 @@ export class PopUpShopHandler {
}
// /**
// * @description 购买礼包
// * @param {{ activityId: number, id: number, beginTimeStamp: number}} msg
// * @param {BackendSession} session
// * @memberof PopUpShopHandler
// */
// async buyGift(msg: { activityId: number, id: number, beginTimeStamp: number }, session: BackendSession) {
// const { activityId, id, beginTimeStamp } = msg;
// const roleId = session.get('roleId');
// const serverId = session.get('serverId');
// const sid = session.get('sid');
// const roleName = session.get('roleName');
/**
* @description 购买礼包
* @param {{ activityId: number, id: number, beginTimeStamp: number}} msg
* @param {BackendSession} session
* @memberof PopUpShopHandler
*/
async buyGift(msg: { activityId: number, id: number, code: string }, session: BackendSession) {
const { activityId, code, id } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
// let beginTime = moment(beginTimeStamp).toDate();
let playerData = await getPopUpShopData(activityId, serverId, roleId);
if (!playerData) {
return resResult(STATUS.ACTIVITY_MISSING);
}
if (playerData.type !== ACTIVITY_TYPE.POP_UP_SHOP) {
return resResult(STATUS.ACTIVITY_TYPE_ERROR);
}
// let activityData: ActivityModelType = await getActivityById(activityId);
// if (!activityData) {
// return resResult(STATUS.ACTIVITY_MISSING);
// }
let record = await ActivityPopUpShopModel.findByCode(serverId, activityId, roleId, code);
if(!record) return resResult(STATUS.ACTIVITY_TASK_NOT_COMPLETE);
let pkg = playerData.findPackageById(record.id);
let item = pkg?.findItemById(id);
if(!item) {
return resResult(STATUS.ACTIVITY_MISSING);
}
// let allTaskData: any[] = JSON.parse(activityData.data);
// let taskIndex = allTaskData.findIndex(obj => { return obj && obj.id == id });
// if (taskIndex == -1) {
// return resResult(STATUS.ACTIVITY_DATA_ERROR);
// }
let consume = stringToConsumeParam(item.consume);
let consumeResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT);
if(!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
record = await ActivityPopUpShopModel.addRecordById(serverId, activityId, roleId, code, id);
let showItem = playerData.updateRecordById(record, id);
// let playerData = new PopUpShopData(allTaskData[taskIndex], activityId);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)
// if (playerData.price) {
// return resResult(STATUS.ACTIVITY_NEED_PAY);
// }
// if (playerData.consume) {
// return resResult(STATUS.ACTIVITY_NEED_PAY);
// }
// let playerRecords: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findDataByBeginTime(serverId, activityId, roleId, id, playerData.taskType, beginTime);
// if (!playerRecords) {
// return resResult(STATUS.ACTIVITY_POP_UP_SHOP_EXPIRE);
// }
// if (playerRecords.buyCount >= playerData.count) {
// return resResult(STATUS.ACTIVITY_MAX_COUNT);
// }
// if (playerData.condition > playerRecords.totalCount) {
// return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED);
// }
// //元宝消费
// let arr = splitString(playerData.consume, '&')
// if (arr[0] != ACTIVITY_RESOURCES_TYPE.GOODS || arr[1] != CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD)) {
// return resResult(STATUS.ACTIVITY_GOLD_RESOURCE);
// }
// let price = arr[2];//数量
// let resourceResult = await handleCost(roleId, sid, [{ id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count: price }], ITEM_CHANGE_REASON.POP_UP_BUY_GIFT);
// if (!resourceResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
// let rewardParamArr: Array<RewardParam> = stringToRewardParam(playerData.reward);
// let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)
// await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, id, playerData.taskType, 1, beginTime);
// playerData.buyCount += 1;
// return resResult(STATUS.SUCCESS, Object.assign(result, {
// param: { activityId, id },
// item: playerData
// }));
// }
return resResult(STATUS.SUCCESS, {
...result, param: { activityId, id },
item: showItem
});
}
}

View File

@@ -494,6 +494,7 @@ export const STATUS = {
ERROR_TYPE: { code: 70012, simStr: '未知活动类型' },
ORDER_PARAM_ERROR: { code: 70013, simStr: '订单参数错误' },
CHANNEL_INFO_NOT_FOUND: { code: 70014, simStr: '未找到玩家渠道数据' },
ACTIVITY_TASK_NOT_COMPLETE: { code: 70015, simStr: '条件未达成' },
}

View File

@@ -91,6 +91,11 @@ export default class Activity_Pop_Up_Shop extends BaseModel {
return rec;
}
public static async findByCode(serverId: number, activityId: number, roleId: string, code: string) {
let rec: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOne({ serverId, activityId, roleId, code }).lean();
return rec;
}
public static async addRecord(serverId: number, activityId: number, roleId: string, code: string, productID: string) {
let rec: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate(
{ serverId, activityId, roleId, code, 'items.productID': productID },
@@ -98,6 +103,14 @@ export default class Activity_Pop_Up_Shop extends BaseModel {
{ new: true} ).lean();
return rec;
}
public static async addRecordById(serverId: number, activityId: number, roleId: string, code: string, itemid: number) {
let rec: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate(
{ serverId, activityId, roleId, code, 'items.id': itemid },
{ $set: { hasBought: true }, $inc: { 'items.$.hasBoughtCnt': 1 } },
{ new: true} ).lean();
return rec;
}
}
export const ActivityPopUpShopModel = getModelForClass(Activity_Pop_Up_Shop);

View File

@@ -103,7 +103,7 @@ export class PopUpShopData extends ActivityBase {
}
}
private findPackageById(id: number) {
public findPackageById(id: number) {
let index = this.packageMap.get(id);
return this.packages[index];
}
@@ -119,6 +119,13 @@ export class PopUpShopData extends ActivityBase {
let item = pkg.findItemByProductID(productID);
return item.updateItem(dataItem);
}
public updateRecordById(data: ActivityPopUpShopModelType, id: number) {
let pkg = this.findPackageById(data.id);
let dataItem = data.items.find(cur => cur.id == id);
let item = pkg.findItemById(id);
return item.updateItem(dataItem);
}
}
// 同一礼包类型为一组共享cd档位
@@ -135,6 +142,7 @@ export class PopUpShopPackage {
items: PopShopItem[] = []; // 礼包
keyItem: PopUpShopKeyItem[] = []; // 关键资源限制refreshDay内可以获得Y个
private itemByProductID: Map<string, number> = new Map(); // productID => index
private itemById: Map<number, number> = new Map();
private parent: PopUpShopData;
// setPlayerRecord的时候处理的数据
@@ -159,6 +167,7 @@ export class PopUpShopPackage {
let obj = new PopShopItem(item, this);
this.items.push(obj);
this.itemByProductID.set(obj.productID, this.items.length - 1);
this.itemById.set(obj.id, this.items.length - 1);
}
for(let key of data.keyItem) {
this.keyItem.push(new PopUpShopKeyItem(key));
@@ -175,6 +184,11 @@ export class PopUpShopPackage {
return this.items[index];
}
public findItemById(id: number) {
let index = this.itemById.get(id);
return this.items[index];
}
public addPlayerRecord(data: ActivityPopUpShopModelType) {
let now = new Date();
this.hasPushCnt++;