diff --git a/game-server/app/servers/order/handler/orderHandler.ts b/game-server/app/servers/order/handler/orderHandler.ts index 21278cb39..4e868176f 100644 --- a/game-server/app/servers/order/handler/orderHandler.ts +++ b/game-server/app/servers/order/handler/orderHandler.ts @@ -7,7 +7,7 @@ import _ = require('underscore'); import { applyOrderWX, checkOrderWX } from '../../../services/pay/weixinPay'; import { applyOrderALI, checkOrderALI } from '../../../services/pay/aliPay'; import { applyOrder37 } from '../../../services/pay/37Pay'; -import { settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService'; +import { checkOrderCanBuy, settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService'; import { addRechargeMoney } from '../../../services/activity/rechargeMoneyService'; import { addVipRechargeMoney } from '../../../services/activity/vipRechargeMoneyService'; import { getActivityById } from '../../../services/activity/activityService'; @@ -100,6 +100,14 @@ export class orderHandler { console.log('未知支付类型'); return resResult(STATUS.NO_PAY_TYPE); } + + if(activityId > 0) { + let activityData = await getActivityById(activityId); + let check = await checkOrderCanBuy(roleId, serverId, activityData, productID, paramStr); + if(!check) return resResult(STATUS.ORDER_CANNOT_BUY) + } + + await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message); reportTAEvent(roleId, TA_EVENT.RECHARGE, { pay_id: localOrderID, chargeId: productID, pay_name: message, pay_amount: price, pay_channel: payType @@ -232,6 +240,9 @@ export class orderHandler { // } let activityData = await getActivityById(activityId); if (!activityData) return resResult(STATUS.ACTIVITY_MISSING); + let check = await checkOrderCanBuy(roleId, serverId, activityData, productID, paramStr); + if(!check) return resResult(STATUS.ORDER_CANNOT_BUY) + let orderInfo = await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message); //订单成功 diff --git a/game-server/app/services/activity/popUpShopService.ts b/game-server/app/services/activity/popUpShopService.ts index 3817b286e..c1a748509 100644 --- a/game-server/app/services/activity/popUpShopService.ts +++ b/game-server/app/services/activity/popUpShopService.ts @@ -163,4 +163,27 @@ export async function makePopUpShopReward(roleId: string, roleName: string, sid: code: 0, data: Object.assign(result, { item: item, activityId }) } +} + +export async function checkPopUpShopCanBuy(roleId: string, serverId: number, activityId: number, productID: string, paramStr: string) { + if (!paramStr) { + return false; + } + let paramObj = JSON.parse(paramStr); + let code = paramObj.code; + + let playerData = await getPopUpShopData(activityId, serverId, roleId); + if (!playerData) { + return false; + } + + let playerRecord: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findByCode(serverId, activityId, roleId, code); + if (!playerRecord) { + return false; + } + + let item = playerData.checkItem(playerRecord, productID); + if(!item) return false; + + return true } \ No newline at end of file diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index d4018044b..9ee0fe440 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -6,7 +6,7 @@ import { RoleModel } from '../db/Role'; import { makeMonthlyTicketReward } from './activity/monthlyTicketService'; import { makeSignInVIP } from './activity/signInService'; import { makeDailyRMBGiftsReward } from './activity/dailyRMBGiftsService'; -import { makePopUpShopReward } from './activity/popUpShopService'; +import { checkPopUpShopCanBuy, makePopUpShopReward } from './activity/popUpShopService'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityFirstGiftModel } from '../db/ActivityFirstGift'; import { ServerlistModel } from '../db/Serverlist'; @@ -33,6 +33,17 @@ import { makeTaskPass } from './activity/taskPassService'; import { addGuildPay } from './activity/guildPayService'; import { sendMessageToUserWithSuc } from './pushService'; +export async function checkOrderCanBuy(roleId: string, serverId: number, activityData: ActivityModelType, productID: string, paramStr: string) { + let activityId = activityData.activityId; + console.log('*****', activityData.type) + switch(activityData.type) { + case ACTIVITY_TYPE.POP_UP_SHOP: + { + return await checkPopUpShopCanBuy(roleId, serverId, activityId, productID, paramStr) + } + } + return true +} /** * 结算账单 diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 1c64b08d2..8802d525f 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -512,6 +512,7 @@ export const STATUS = { ORDER_PARAM_ERROR: { code: 70013, simStr: '订单参数错误' }, CHANNEL_INFO_NOT_FOUND: { code: 70014, simStr: '未找到玩家渠道数据' }, ACTIVITY_TASK_NOT_COMPLETE: { code: 70015, simStr: '条件未达成' }, + ORDER_CANNOT_BUY: { code: 70016, simStr: '该礼包不可购买' }, } diff --git a/shared/domain/activityField/popUpShopField.ts b/shared/domain/activityField/popUpShopField.ts index 6159052df..8aef2638d 100644 --- a/shared/domain/activityField/popUpShopField.ts +++ b/shared/domain/activityField/popUpShopField.ts @@ -114,6 +114,12 @@ export class PopUpShopData extends ActivityBase { return new PopUpShopShow(this); } + public checkItem(data: ActivityPopUpShopModelType, productID: string) { + let pkg = this.findPackageById(data.id); + let item = pkg.findItemByProductID(productID); + return item.hasBoughtCnt < item.buyCnt; + } + public updateRecord(data: ActivityPopUpShopModelType, productID: string) { let pkg = this.findPackageById(data.id); let dataItem = data.items.find(cur => cur.productID == productID);