🐞 fix(订单): 各种类型的订单在支付之前校验次数
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务活动完成后会获得点数
|
||||
*
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user