🐞 fix(shop): 修复弱网下商品可买次数为负问题

This commit is contained in:
dingchaolin
2023-03-06 15:00:28 +08:00
parent df88325372
commit 7719a2ad86
4 changed files with 63 additions and 4 deletions

View File

@@ -95,6 +95,33 @@ export default class UserShop extends BaseModel {
return rec;
}
/**
* 防止并发操作的购买
*
* @static
* @param {string} roleId
* @param {string} roleName
* @param {number} activityId
* @param {{ id: number, goodId: number, refreshType: number, shop: number, type: number, createTime?: number }} dicShopItem
* @param {number} inc
* @param {number} seasonNum
* @param {number} maxAlreadyBuyTimes: 最大已买次数,通过这个参数防止并发购买
* @return {*}
* @memberof UserShop
*/
public static async protectedPurchase(roleId: string, roleName: string, activityId: number, dicShopItem: { id: number, goodId: number, refreshType: number, shop: number, type: number, createTime?: number }, inc: number, seasonNum: number, maxAlreadyBuyTimes: number) {
let code = genCode(8);
let timeCondition = this.getRefreshCondition(seasonNum);
let { id, goodId, refreshType, shop, type, createTime = 0 } = dicShopItem;
let rec: UserShopType = await UserShopModel.findOneAndUpdate(
{ roleId, itemId: id, $or: timeCondition, shop, type, createTime, count: {$lte: maxAlreadyBuyTimes} },
{ $setOnInsert: { roleName, code, goodId, refreshType, seasonNum }, $inc: { count: inc }, $set: { activityId } },
{ new: true, upsert: true }
).lean();
return rec;
}
public static async deleteAccount(roleId: string) {
let result = await UserShopModel.deleteMany({roleId});
return result;

View File

@@ -25,7 +25,8 @@
{ "id": 6, "desc": "获取信息", "route": "connector.entryHandler.getData", "param": {}, "interval": 1000 },
{ "id": 7, "desc": "刷新信息", "route": "connector.entryHandler.refresh", "param": {}, "interval": 1000 },
{ "id": 8, "desc": "捐赠", "route": "guild.donateHandler.donate", "param": {}, "interval": 200 },
{ "id": 9, "desc": "碾压镇念塔", "route": "battle.towerBattleHandler.skipTower", "param": {}, "interval": 200 }
{ "id": 9, "desc": "碾压镇念塔", "route": "battle.towerBattleHandler.skipTower", "param": {}, "interval": 200 },
{ "id": 10, "desc": "商店购买商品", "route": "role.shopHandler.purchase", "param": {}, "interval": 50 }
],
"TIME_STAMP_OVER": 900000,
"ACCESS_CODE_EXPIRE_TIME": 900000,