团购:修改字段

This commit is contained in:
luying
2022-10-12 10:32:18 +08:00
parent 764333e1c4
commit eccd9f0051
5 changed files with 45 additions and 45 deletions

View File

@@ -60,8 +60,8 @@ export class GroupShopHandler {
* @param {BackendSession} session
* @memberof GroupShopHandler
*/
async buy(msg: { activityId: number, price: number, id: number, buyCnt: number }, session: BackendSession) {
const { activityId, price: clientPrice, id, buyCnt } = msg;
async buy(msg: { activityId: number, price: number, itemId: number, buyCnt: number }, session: BackendSession) {
const { activityId, price: clientPrice, itemId, buyCnt } = msg;
const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName');
const sid: string = session.get('sid');
@@ -69,7 +69,7 @@ export class GroupShopHandler {
let playerData = await getGroupShopData(activityId, roleId);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let item = playerData.findItemById(id);
let item = playerData.findItemById(itemId);
if (!item) return resResult(STATUS.ACTIVITY_GROUP_SHOP_ITEM_NOT_FOUND);
if(!item.checkBuyCnt(buyCnt)) return resResult(STATUS.ACTIVITY_GROUP_SHOP_BUY_CNT_MAX);
@@ -81,24 +81,24 @@ export class GroupShopHandler {
if(!result) return resResult(STATUS.BATTLE_GOLD_NOT_ENOUGH);
// 玩家添加次数
let playerRecord = await ActivityGroupShopUserRecModel.incBuyCnt(activityId, roleId, id, item.gid, buyCnt, new GroupShopBuyRecord(curDiscount, buyCnt));
let playerRecord = await ActivityGroupShopUserRecModel.incBuyCnt(activityId, roleId, itemId, item.id, buyCnt, new GroupShopBuyRecord(curDiscount, buyCnt));
playerData.setPlayerRecord([playerRecord]);
// 全服添加次数
let serverRecord = await ActivityGroupShopRecModel.incBuyCnt(activityId, id, item.gid, buyCnt);
let serverRecord = await ActivityGroupShopRecModel.incBuyCnt(activityId, itemId, item.id, buyCnt);
let isRankUp = playerData.incAllRecord(serverRecord);
item = playerData.findItemById(id);
item = playerData.findItemById(itemId);
let nextDiscount = item.getCurDiscount();
if(isRankUp) {
await ActivityGroupShopRecModel.addRecord(activityId, id, new GroupShopRecord(nextDiscount));
await ActivityGroupShopRecModel.addRecord(activityId, itemId, new GroupShopRecord(nextDiscount));
// 推送频道
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, id, sum: item.sum, curDiscount: nextDiscount });
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, itemId, sum: item.sum, curDiscount: nextDiscount });
}
let reward = [{ id: item.gid, count: item.count * buyCnt }];
let reward = [{ id: item.id, count: item.count * buyCnt }];
let goods = await addItems(roleId, roleName, sid, reward, ITEM_CHANGE_REASON.ACT_GROUP_SHOP_BUY);
return resResult(STATUS.SUCCESS, {
curItem: pick(item, ['id', 'gid', 'sum', 'hasBoughtCnt']),
curItem: pick(item, ['itemId', 'id', 'sum', 'hasBoughtCnt']),
goods,
status: priceStatus,
oldDiscount: curDiscount,
@@ -111,23 +111,23 @@ export class GroupShopHandler {
return resResult(STATUS.SUCCESS);
}
async debugSetSum(msg: { id: number, sum: number }, session: BackendSession) {
async debugSetSum(msg: { itemId: number, sum: number }, session: BackendSession) {
const roleId: string = session.get('roleId');
const serverId = session.get('serverId');
let { id = 0, sum = 0 } = msg;
let { itemId = 0, sum = 0 } = msg;
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GROUP_SHOP);
if(activities.length <= 0) return resResult(STATUS.ACTIVITY_MISSING);
for(let activityData of activities) {
let recs = await ActivityGroupShopRecModel.debugSetSum(activityData.activityId, id, sum);
let recs = await ActivityGroupShopRecModel.debugSetSum(activityData.activityId, itemId, sum);
let playerData = new GroupShopData(activityData, 0, 0);
playerData.setRecords(recs);
let items = id == 0? playerData.items: [playerData.findItemById(id)];
let items = itemId == 0? playerData.items: [playerData.findItemById(itemId)];
for(let item of items) {
if(!item) continue;
let nextDiscount = item.getCurDiscount();
// 推送频道
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId: activityData.activityId, id, sum: item.sum, curDiscount: nextDiscount });
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId: activityData.activityId, itemId, sum: item.sum, curDiscount: nextDiscount });
}
}
let playerData = await getGroupShopDataShow(activities[0].activityId, roleId);

View File

@@ -72,7 +72,7 @@ export async function setGroupShopToSetSum(arr: { activityId: number, itemId: nu
let item = playerData.findItemById(itemId);
let nextDiscount = item.getCurDiscount();
// 推送频道
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, sum, id: itemId, curDiscount: nextDiscount });
await sendMessageToGroupShopWithSuc(PUSH_ROUTE.GROUP_SHOP_UPDATE, { activityId, sum, itemId, curDiscount: nextDiscount });
}
}
}
@@ -90,14 +90,14 @@ export async function refundGroupShop(isDebug = false) {
let items = playerData.items||[];
for(let item of items) {
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.id, item.getCurDiscount().price);
let playerRecords = await ActivityGroupShopUserRecModel.findByPrice(activityData.activityId, item.itemId, item.getCurDiscount().price);
for(let { roleId, records } of playerRecords) {
for(let { price, buyCnt } of records) {
if(price <= item.getCurDiscount().price) continue;
let diff = (price - item.getCurDiscount().price) * buyCnt;
if(!recs.has(roleId)) recs.set(roleId, []);
recs.get(roleId).push({ itemId: item.id, diff });
recs.get(roleId).push({ itemId: item.itemId, diff });
}
}
}

View File

@@ -42,10 +42,10 @@ export default class Activity_Group_Shop_Rec extends BaseModel {
activityId: number; // 活动Id
@prop({ required: true })
id: number; // item 唯一id
itemId: number; // item 唯一id
@prop({ required: true })
gid: number; // 物品id
id: number; // 物品id
@prop({ required: true })
sum: number; // 总购买次数
@@ -59,35 +59,35 @@ export default class Activity_Group_Shop_Rec extends BaseModel {
return result;
}
public static async incBuyCnt(activityId: number, id: number, gid: number, inc: number) {
public static async incBuyCnt(activityId: number, itemId: number, id: number, inc: number) {
let result: ActivityGroupShopRecType = await ActivityGroupShopRecModel.findOneAndUpdate(
{ activityId, id }, { $inc: { sum: inc }, $set: { gid } }, { new: true, upsert: true }
{ activityId, itemId }, { $inc: { sum: inc }, $set: { id } }, { new: true, upsert: true }
).lean();
return result;
}
public static async addRecord(activityId: number, id: number, record: GroupShopRecord) {
public static async addRecord(activityId: number, itemId: number, record: GroupShopRecord) {
let result: ActivityGroupShopRecType = await ActivityGroupShopRecModel.findOneAndUpdate(
{ activityId, id }, { $push: { records: record } }, { new: true, upsert: true }
{ activityId, itemId }, { $push: { records: record } }, { new: true, upsert: true }
).lean();
return result;
}
public static async setSum(activityId: number, id: number, sum: number) {
public static async setSum(activityId: number, itemId: number, sum: number) {
let result: ActivityGroupShopRecType = await ActivityGroupShopRecModel.findOneAndUpdate(
{ activityId, id, sum: { $lt: sum } }, { $set: { sum } }, { new: true, upsert: true }
{ activityId, itemId, sum: { $lt: sum } }, { $set: { sum } }, { new: true, upsert: true }
).lean();
return result;
}
public static async debugSetSum(activityId: number, id: number, sum: number) {
if(id == 0) {
public static async debugSetSum(activityId: number, itemId: number, sum: number) {
if(itemId == 0) {
await ActivityGroupShopRecModel.updateMany({ activityId }, { $set: { sum } }, { new: true, upsert: true });
let result: ActivityGroupShopRecType[] = await ActivityGroupShopRecModel.find({ activityId }).lean();
return result;
} else {
await ActivityGroupShopRecModel.updateMany({ activityId, id }, { $set: { sum } }, { new: true, upsert: true });
let result: ActivityGroupShopRecType[] = await ActivityGroupShopRecModel.find({ activityId, id }).lean();
await ActivityGroupShopRecModel.updateMany({ activityId, itemId }, { $set: { sum } }, { new: true, upsert: true });
let result: ActivityGroupShopRecType[] = await ActivityGroupShopRecModel.find({ activityId, itemId }).lean();
return result;
}
}

View File

@@ -51,10 +51,10 @@ export default class Activity_Group_Shop_User_Rec extends BaseModel {
roleId: string; // 玩家Id
@prop({ required: true })
id: number; // 唯一id
itemId: number; // 唯一id
@prop({ required: true })
gid: number; // 物品id
id: number; // 物品id
@prop({ required: true })
buyCnt: number; // 购买次数
@@ -67,9 +67,9 @@ export default class Activity_Group_Shop_User_Rec extends BaseModel {
return result;
}
public static async incBuyCnt(activityId: number, roleId: string, id: number, gid: number, inc: number, record: GroupShopBuyRecord) {
public static async incBuyCnt(activityId: number, roleId: string, itemId: number, id: number, inc: number, record: GroupShopBuyRecord) {
let result: ActivityGroupShopUserRecType = await ActivityGroupShopUserRecModel.findOneAndUpdate(
{ roleId, activityId, id }, { $inc: { buyCnt: inc }, $setOnInsert: { gid }, $push: { records: record } }, { new: true, upsert: true }
{ roleId, activityId, itemId }, { $inc: { buyCnt: inc }, $setOnInsert: { id }, $push: { records: record } }, { new: true, upsert: true }
).lean();
return result;
}
@@ -78,8 +78,8 @@ export default class Activity_Group_Shop_User_Rec extends BaseModel {
await ActivityGroupShopUserRecModel.deleteMany({ roleId, activityId });
}
public static async findByPrice(activityId: number, id: number, price: number) {
let result: ActivityGroupShopUserRecType[] = await ActivityGroupShopUserRecModel.find({ activityId, id, 'records.price': { $gt: price } }).lean();
public static async findByPrice(activityId: number, itemId: number, price: number) {
let result: ActivityGroupShopUserRecType[] = await ActivityGroupShopUserRecModel.find({ activityId, itemId, 'records.price': { $gt: price } }).lean();
return result;
}
}

View File

@@ -17,8 +17,8 @@ interface GroupShopDiscountInDb {
}
interface GroupShopItemInDb {
id: number; // 唯一id
gid: number; // 物品id
itemId: number; // 唯一id
id: number; // 物品id
count: number; // 一次购买能购买多少
max: number; // 单人可以购买多少次
price: number; // 无折扣单价
@@ -62,8 +62,8 @@ export class GroupShopDiscount {
}
class GroupShopItem {
id: number; // 唯一id
gid: number; // 物品id
itemId: number; // 唯一id
id: number; // 物品id
count: number; // 一次购买能购买多少
max: number; // 单人可以购买多少次
price: number; // 无折扣单价
@@ -73,8 +73,8 @@ class GroupShopItem {
hasBoughtCnt: number = 0; // 玩家购买次数
constructor(item: GroupShopItemInDb) {
this.itemId = item.itemId;
this.id = item.id;
this.gid = item.gid;
this.count = item.count;
this.max = item.max;
this.price = item.price;
@@ -128,17 +128,17 @@ export class GroupShopData extends ActivityBase {
for(let item of dataObj.items) {
this.items.push(new GroupShopItem(item));
this.itemMap.set(item.id, this.items.length - 1);
this.itemMap.set(item.itemId, this.items.length - 1);
if(item.timers && item.timers.length > 0) {
for(let timer of item.timers) {
this.timer.push(new GroupShopTimer(this.beginTime, item.id, timer));
this.timer.push(new GroupShopTimer(this.beginTime, item.itemId, timer));
}
}
}
}
public findItemById(id: number) {
let index = this.itemMap.get(id);
public findItemById(itemId: number) {
let index = this.itemMap.get(itemId);
return this.items[index];
}