🐞 fix(订单): 各种类型的订单在支付之前校验次数

This commit is contained in:
luying
2023-04-06 13:32:40 +08:00
parent f7ccc14f74
commit 08d5ebedeb
18 changed files with 224 additions and 29 deletions

View File

@@ -68,6 +68,9 @@ export async function makeDailyRMBGiftsReward(roleId: string, roleName: string,
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
let bigGiftProductID = playerData.productID;
if (bigGiftProductID == productID) {//一次性购买7天礼包
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
if(hasBoughtTomorrow) return STATUS.ORDER_CANNOT_BUY;
let playerRecord: ActivityDailyRMBGiftsModelType = await ActivityDailyRMBGiftsModel.findRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex);
playerData.setPlayerRecords(playerRecord?[playerRecord]: []);
if (playerData.shouldbuyNextDay()) {//今天已经购买过其他奖励
@@ -85,11 +88,12 @@ export async function makeDailyRMBGiftsReward(roleId: string, roleName: string,
}
} else {
let item = playerData.findProduct(productID);
if (!item) {
return {
code: STATUS.ACTIVITY_NO_PRODUCT,
}
if (!item) return STATUS.ACTIVITY_NO_PRODUCT;
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
if(hasReceived) {
return STATUS.ORDER_CANNOT_BUY
}
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.DAILY_RMB_GIFT)
await ActivityDailyRMBGiftsModel.receiveRecord(serverId, activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, [item.id]);
@@ -100,3 +104,30 @@ export async function makeDailyRMBGiftsReward(roleId: string, roleName: string,
}
}
}
/**
* 检查每日特惠是否可以购买
*
* @param {number} serverId 区Id
* @param {number} activityId 活动Id
* @param {string} roleId 角色Id
* @param {string} productID 商品ID
*
*/
export async function checkDailyRMBGifts(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
if(!activityData) return false
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new DailyRMBGiftsData(activityData, createTime, serverTime);
let bigGiftProductID = playerData.productID;
if (bigGiftProductID == productID) {//一次性购买7天礼包
let hasBoughtTomorrow = await ActivityDailyRMBGiftsModel.checkHasBought(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex + 1);
return !hasBoughtTomorrow;
} else {
let item = playerData.findProduct(productID);
if (!item) return false
let hasReceived = await ActivityDailyRMBGiftsModel.checkHasReceive(serverId, activityData.activityId, roleId, moment(playerData.beginTime).toDate(), playerData.todayIndex, item.id);
return !hasReceived;
}
}

View File

@@ -143,9 +143,23 @@ export async function makeGrowthFund(roleId: string, roleName: string, sid: stri
let playerData = new GrowthFundData(activityData, createTime, serverTime);
let pageData = playerData.findPageByProductID(productID);
let pageIndex = pageData.pageIndex;
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityId, roleId, activityData.type, pageIndex);
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
await ActivityBuyRecordsModel.addRecord(activityId, roleId, activityData.type, pageIndex, true);
return {
code: 0,
data: Object.assign({}, { item: { pageIndex }, activityId: activityId })
}
}
export async function checkGrowthFund(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
if(!activityData) return false;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new GrowthFundData(activityData, createTime, serverTime);
let pageData = playerData.findPageByProductID(productID);
let pageIndex = pageData.pageIndex;
let checkResult = await ActivityBuyRecordsModel.checkRecord(activityData.activityId, roleId, activityData.type, pageIndex);
return !checkResult;
}

View File

@@ -125,9 +125,9 @@ export async function makeLimitPackageReward(roleId: string, roleName: string, s
if (!item) {
return STATUS.ACTIVITY_NO_PRODUCT;
}
// if (item.countMax > 0 && item.buyCount >= item.countMax) {
// return STATUS.ACTIVITY_MAX_COUNT;
// }
if (item.countMax > 0 && item.buyCount >= item.countMax) {
return STATUS.ACTIVITY_MAX_COUNT;
}
let rewardArray = stringToRewardParam(item.reward)
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.BUY_LIMIT_PACKAGE);

View File

@@ -79,7 +79,11 @@ export async function makeMonthlyFund(roleId: string, roleName: string, sid: str
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new MonthlyFundData(activityData, createTime, serverTime);
let playerRecords = await ActivityMonthlyFundModel.findData(serverId, activityData.activityId, playerData.roundIndex, roleId);
playerData.setPlayerRecords(playerRecords);
let page = playerData.findByProductID(productID);
if(page.hasBought) return STATUS.ORDER_CANNOT_BUY;
await ActivityMonthlyFundModel.buy(serverId, activityId, roleId, playerData.roundIndex, page.pageIndex, productID);
let rewardParamArr = stringToRewardParam(page.onceReward);

View File

@@ -121,12 +121,15 @@ export async function makeMonthlyTicketReward(roleId: string, roleName: string,
return STATUS.ACTIVITY_TYPE_ERROR;
}
if(!await checkMonthlyTicket(roleId, serverId, activityData)) return STATUS.ORDER_CANNOT_BUY;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new MonthlyTicketData(activityData, createTime, serverTime);
let endTime = playerData.isForever? moment(playerData.endTime).toDate(): moment(new Date()).startOf('d').add(playerData.days, 'day').add(REFRESH_TIME, 'h').toDate();
console.log('endTime', playerData.isForever, moment(new Date()).startOf('d'), endTime, playerData.days)
await ActivityMonthlyTicketModel.buyMonthlyTicket(serverId, roleId, activityId, activityData.type, endTime, playerData.isForever)
if(activityData.type == ACTIVITY_TYPE.MONTHLY_TICKET_2) {
let role = await RoleModel.buyForeverTicket(roleId);
@@ -141,7 +144,13 @@ export async function makeMonthlyTicketReward(roleId: string, roleName: string,
}
}
// 月卡权限
// 是否可以购买月卡
export async function checkMonthlyTicket(roleId: string, serverId: number, activityData: ActivityModelType) {
if(!activityData) return false;
let result = await ActivityMonthlyTicketModel.checkHasBought(serverId, roleId, activityData.activityId, activityData.type);
return !result;
}
// 军团捐献消耗
export function getVipDonateConsume(originConsume: RewardInter, vipStartTime: number) {

View File

@@ -168,6 +168,7 @@ export async function makePopUpShopReward(roleId: string, roleName: string, sid:
return STATUS.APPLY_ORDER_ERROR;
}
let item = playerData.updateRecord(playerRecord, productID);
if(!item) return STATUS.NO_PRODUCT_ID
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.POP_UP_BUY_GIFT)

View File

@@ -153,3 +153,22 @@ export async function makeRefreshShopReward(roleId: string, roleName: string, si
data: Object.assign(result, { item: item, activityId: activityId })
}
}
export async function checkRefreshShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string, roundIndex: number) {
if (!activityData) return false;
if (activityData.type !== ACTIVITY_TYPE.REFRESH_SHOP) return false;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new RefreshShopData(activityData, createTime, serverTime);
if(!roundIndex) {
roundIndex = playerData.roundIndex;
}
let playerRecord: ActivityRefreshShopModelType = await ActivityRefreshShopModel.findData(activityData.activityId, roleId, roundIndex);
playerData.setPlayerRecords(playerRecord);
let item = playerData.findItemByProductID(productID);
if (!item) return false;
if (item.countMax > 0 && item.buyCount >= item.countMax) return false;
return true;
}

View File

@@ -124,25 +124,19 @@ export async function makeSelfServerShop(roleId: string, roleName: string, sid:
let activityData: ActivityModelType = await getActivityById(activityId);
if (!activityData) {
return {
code: STATUS.ACTIVITY_MISSING,
}
return STATUS.ACTIVITY_MISSING
}
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
if (!item) {
return {
code: STATUS.ACTIVITY_DATA_ERROR,
}
return STATUS.ACTIVITY_DATA_ERROR
}
if (item.countMax > 0) {//限制购买次数
let playerRecords: ActivitySelfServiceShopModelType[] = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityId, roleId, playerData.roundIndex, item.index);
if (playerRecords.length >= item.countMax) {
return {
code: STATUS.ACTIVITY_MAX_COUNT,
}
return STATUS.ACTIVITY_MAX_COUNT
}
}
let result = await addSelfServiceShopGiftReward(roleId, roleName, sid, serverId, activityId, playerData.roundIndex, item.index, item);
@@ -152,3 +146,18 @@ export async function makeSelfServerShop(roleId: string, roleName: string, sid:
data: Object.assign(result, { item })
}
}
export async function checkSelfServiceShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
if(!activityData) return false;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new SelfServiceShopData(activityData, createTime, serverTime);
let item: SelfServiceShopItem = playerData.getItemByProductID(productID);
if (!item) return false
if (item.countMax > 0) {//限制购买次数
let playerRecords = await ActivitySelfServiceShopModel.findDataByIndex(serverId, activityData.activityId, roleId, playerData.roundIndex, item.index);
if (playerRecords.length >= item.countMax) return false;
}
return true;
}

View File

@@ -101,10 +101,10 @@ export async function makeSignInVIP(roleId: string, roleName: string, sid: strin
if (activityData.type !== ACTIVITY_TYPE.SIGN_IN_VIP && activityData.type !== ACTIVITY_TYPE.COMMON_SIGN_IN) {
return STATUS.ACTIVITY_TYPE_ERROR;
}
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new SignInData(activityData, createTime, serverTime);
let playerData = await getPlayerSignInData(activityId, serverId, roleId);
if (!playerData || playerData.isVip) {
return STATUS.ORDER_CANNOT_BUY;
}
await ActivitySignInModel.buyVIP(activityId, roleId, playerData.roundIndex);
return {

View File

@@ -49,6 +49,9 @@ export async function getTaskPassDataShow(activityId: number, serverId: number,
let serverTime = await getServerCreateTime(serverId);
let playerData = new TaskPassData(activityData, createTime, serverTime);
let roundIndex = playerData.roundIndex;
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
if(checkResult) return STATUS.ORDER_CANNOT_BUY;
await ActivityTaskPassModel.buy(serverId, activityId, roleId, roundIndex, productID);
return {
code: 0,
@@ -56,6 +59,17 @@ export async function getTaskPassDataShow(activityId: number, serverId: number,
}
}
export async function checkTaskPass(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
if(!activityData) return false;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new TaskPassData(activityData, createTime, serverTime);
let roundIndex = playerData.roundIndex;
let checkResult = await ActivityTaskPassModel.check(serverId, activityData.activityId, roleId, roundIndex, productID);
return !checkResult;
}
/**
* 任务活动完成后会获得点数
*

View File

@@ -10,6 +10,7 @@ import { getActivitiesByType, getActivityById, getActivityByServerId } from './a
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
import { handleCost } from '../role/rewardService';
import { ActivityTreasureHuntChallengeModel } from '../../db/ActivityTreasureHuntChallenge';
import { ActivityModelType } from '../../db/Activity';
export async function getPlayerTreasureHuntDataShow(activityId: number, serverId: number, roleId: string) {
let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId);
@@ -121,6 +122,22 @@ export async function makeShop(roleId: string, roleName: string, sid: string, se
}
}
export async function checkTreasureHuntShop(roleId: string, serverId: number, activityData: ActivityModelType, productID: string) {
if(!activityData) return false;
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new TreasureHuntData(activityData, createTime, serverTime);
let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityData.activityId, roleId, playerData.roundIndex, playerData.todayIndex);
playerData.shop.setPlayerShopRecords(playerShopRecord);
let item = playerData.shop.findProductID(productID)
if (!item) return false;
if (item.buyCount >= item.countMax) return false;
return true;
}
export async function treasureHuntChallengeConsume(serverId: number, roleId: string, sid: string) {
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT);
for(let { activityId } of activities) {

View File

@@ -34,6 +34,7 @@ export async function getWeeklyFundData(activityId: number, serverId: number, ro
*/
export async function getWeeklyFundDataShow(activityId: number, serverId: number, roleId: string) {
let playerData = await getWeeklyFundData(activityId, serverId, roleId);
console.log('##### weeklyFund', playerData)
if(playerData && playerData.canShow && playerData.canShow()) {
return playerData.getShowResult();
}
@@ -75,6 +76,11 @@ export async function makeWeeklyFund(roleId: string, roleName: string, sid: stri
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new WeeklyFundData(activityData, createTime, serverTime);
let playerRecord = await ActivityWeeklyFundModel.findData(serverId, activityData.activityId, roleId);
if(playerRecord) {
return STATUS.ORDER_CANNOT_BUY;
}
await ActivityWeeklyFundModel.buy(serverId, activityId, roleId, productID);
let rewardParamArr = stringToRewardParam(playerData.onceReward);