🐞 fix(shop): 商店购买数据回滚
This commit is contained in:
@@ -96,30 +96,24 @@ export default class UserShop extends BaseModel {
|
||||
}
|
||||
|
||||
/**
|
||||
* 防止并发操作的购买
|
||||
* 修改已购买次数
|
||||
*
|
||||
* @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} 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);
|
||||
public static async updateCount(roleId: string, dicShopItem: { id: number, goodId: number, refreshType: number, shop: number, type: number, createTime?: number }, inc: number, seasonNum: number) {
|
||||
let { id, shop, type, createTime = 0 } = dicShopItem;
|
||||
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 }
|
||||
return await UserShopModel.findOneAndUpdate(
|
||||
{ roleId, itemId: id, $or: timeCondition, shop, type, createTime },
|
||||
{ $inc: { count: inc } },
|
||||
{ new: true }
|
||||
).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async deleteAccount(roleId: string) {
|
||||
|
||||
Reference in New Issue
Block a user