diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index b768c6ebe..bd11d99b4 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -3,8 +3,9 @@ import { aesEncrypt, aesEncryptcfb, resResult } from '../../../pubUtils/util'; import { ENCRYPT_IV, ENCRYPT_KEY, STATUS, TASK_TYPE } from '../../../consts'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { ServerlistModel } from '../../../db/Serverlist'; -import { getActivity, getActivityById } from '../../../services/activity/activityService'; -import { ActivityModel } from '../../../db/Activity'; +import { getActivitiesWithOrder, getActivity, getActivityById } from '../../../services/activity/activityService'; +import { ActivityModel, ActivityModelType } from '../../../db/Activity'; +import { UserOrderModel } from '../../../db/UserOrder'; export default function (app: Application) { new HandlerService(app, {}); @@ -56,6 +57,30 @@ export class ActivityHandler { return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray }); } + async getActivitiesByOrder(msg: { localOrderID: string }, session: BackendSession) { + + const { localOrderID } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const guildCode = session.get('guildCode'); + + let orderInfo = await UserOrderModel.findOrder(localOrderID); + if (!orderInfo || orderInfo.roleId != roleId) { + return resResult(STATUS.NO_ORDER); + } + let activities: ActivityModelType[] = await getActivitiesWithOrder(orderInfo); + let result = []; + for(let activityData of activities) { + if (!activityData) continue; + + let playerActivityData = await getActivity(serverId, roleId, guildCode, activityData.activityId, activityData.type); + if(playerActivityData) { + result.push(playerActivityData); + } + } + return resResult(STATUS.SUCCESS, { activities: result }); + } + async debugActivityMemory(msg: {}, session: BackendSession) { const { } = msg; const roleId = session.get('roleId'); diff --git a/game-server/app/servers/order/handler/orderHandler.ts b/game-server/app/servers/order/handler/orderHandler.ts index 0d5395497..9aa1356ba 100644 --- a/game-server/app/servers/order/handler/orderHandler.ts +++ b/game-server/app/servers/order/handler/orderHandler.ts @@ -254,6 +254,6 @@ export class orderHandler { let result = await settleOrder(orderInfo, serverId, sid); orderInfo = await UserOrderModel.success(roleId, localOrderID, JSON.stringify(result)); console.log(`测试支付完成!!!!!!!!!!!!! serverId:${serverId}, productID:${productID}, productType:${productType}, roleId:${roleId}, localOrderID:${localOrderID}, payType:${payType}`) - return resResult(STATUS.SUCCESS, result); + return resResult(STATUS.SUCCESS, {...result, localOrderID}); } } diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index e5b72308a..1567cdfed 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -41,6 +41,8 @@ import { getGuildChannelSid } from '../chatService'; import { getGuildPayDataShow } from './guildPayService'; import { PopUpShopItemShow } from '../../domain/activityField/popUpShopField'; import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from '../pushService'; +import { UserOrderModelType } from '../../db/UserOrder'; +import { isArray } from 'underscore'; /** * 获取活动数据 @@ -56,6 +58,7 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s case ACTIVITY_TYPE.SIGN_IN://签到 4 case ACTIVITY_TYPE.SIGN_IN_VIP://高级签到 5 case ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN://新手签到 25 + case ACTIVITY_TYPE.COMMON_SIGN_IN://通用签到 36 { activityData = await getPlayerSignInData(activityId, serverId, roleId); break; @@ -176,11 +179,6 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s activityData = await getPlayerMonopolyData(activityId, serverId, roleId); break; } - case ACTIVITY_TYPE.COMMON_SIGN_IN://通用签到 36 - { - activityData = await getPlayerSignInData(activityId, serverId, roleId); - break; - } case ACTIVITY_TYPE.NEW_HERO_GIFTS://新将好礼(很多红包,用积分兑换一遍结束) 37 { activityData = await getPlayerNewHeroGiftsData(activityId, serverId, roleId); @@ -252,6 +250,15 @@ export async function getActivitiesByType(serverId: number, type: number) { return activities.map(transActivityInRemoteToModelType); } +export async function getActivitiesByTypes(serverId: number, types: number[]) { + let result: ActivityModelType[] = []; + for(let type of types) { + let activities = await getActivitiesByType(serverId, type); + if(activities && isArray(activities)) result.push(...activities); + } + return result; +} + export async function getActivities() { let serverType = pinus.app.getServerType(); if(serverType == 'activity') { @@ -432,4 +439,24 @@ export async function pushActivities(arr: pushActivityInter[], roleId: string, s export async function pushActivitiesToGuild(arr: pushActivityInter[], guildCode: string) { if(arr.length > 0) await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.ACTIVITY_UPDATE, { activities: arr }) +} + +export async function getActivitiesWithOrder(orderInfo: UserOrderModelType) { + let activities: ActivityModelType[] = []; + let curActivity = await getActivityById(orderInfo.activityId); + if(curActivity) activities.push(curActivity); + + let activitiesWithSum = await getActivitiesByTypes(orderInfo.serverId, [ACTIVITY_TYPE.FIRST_GIFT, ACTIVITY_TYPE.RECHARGE_MONEY, ACTIVITY_TYPE.VIP_RECHARGE_MONEY, ACTIVITY_TYPE.GUILD_PAY]); + if(activitiesWithSum && isArray(activitiesWithSum)) activities.push(...activitiesWithSum); + + if(orderInfo.paramStr) { //大富翁商店结算 + try { + let paramObj = JSON.parse(orderInfo.paramStr); + let paramActivity = paramObj.activityId && await getActivityById(paramObj.activityId); + if(paramActivity) activities.push(paramActivity); + } catch(e) { + console.error(e); + } + } + return activities; } \ No newline at end of file diff --git a/game-server/app/services/activity/signInService.ts b/game-server/app/services/activity/signInService.ts index f7ef6da66..5a0b97549 100644 --- a/game-server/app/services/activity/signInService.ts +++ b/game-server/app/services/activity/signInService.ts @@ -1,9 +1,7 @@ import moment = require('moment'); -import { ACTIVITY_TYPE, REFRESH_TIME, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '../../consts'; -import { ActivityModel, ActivityModelType } from '../../db/Activity'; +import { ACTIVITY_TYPE, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '../../consts'; +import { ActivityModelType } from '../../db/Activity'; import { ActivitySignInModel, ActivitySignInModelType } from '../../db/ActivitySignIn'; -import { RoleModel } from '../../db/Role'; -import { ServerlistModel } from '../../db/Serverlist'; import { SignInData } from '../../domain/activityField/signInField'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; import { getActivitiesByType, getActivityById } from './activityService'; diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index e84209fda..0792ef3d8 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -124,7 +124,7 @@ export async function makeOrder(orderInfo: UserOrderModelType, sid: string) { rewardResult = await makeShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID) break; } - case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店-购买礼包 + case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店-购买礼包(糜家商队) { rewardResult = await makeSelfServerShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID) break; diff --git a/shared/domain/activityField/refreshShopField.ts b/shared/domain/activityField/refreshShopField.ts index b54fc87d3..e330f2ed4 100644 --- a/shared/domain/activityField/refreshShopField.ts +++ b/shared/domain/activityField/refreshShopField.ts @@ -4,6 +4,35 @@ import { ActivityRefreshShopModelType, GoodsInfo } from '../../db/ActivityRefres import { getZeroPoint, getZeroPointOfTime } from '../../pubUtils/timeUtil'; import { ActivityBase } from './activityField'; +interface RefreshShopDataInDb { + shopType: number; + name: string; + data: RefreshShopPageInDb[]; +} + +interface RefreshShopPageInDb { + pageIndex: number; + viewcount: number; + name: string; + items: RefreshShopItemInDb[] +} + +interface RefreshShopItemInDb { + id: number; + name: string; + price: number; + productID: string; + reward: string; + countMax: number; + discount: number; + imageName: string; + consume: string; + weight: number; + refreshType: number; + levelLimitMin: number; + levelLimitMax: number; +} + // 每个商品的内容 export class RefreshShopItem { id: number; // 商品id @@ -23,7 +52,7 @@ export class RefreshShopItem { buyCount: number = 0; //购买过的次数 - constructor(data: any, pageIndex: number) { + constructor(data: RefreshShopItemInDb, pageIndex: number) { this.pageIndex = pageIndex; this.id = data.id; this.reward = data.reward; @@ -60,13 +89,13 @@ export class RefreshShopPage { name: string; //名字 viewCount: number; //随机可购买的商品个数 items: Array = [];//商品列表 - constructor(data: any) { + constructor(data: RefreshShopPageInDb) { this.pageIndex = data.pageIndex; this.name = data.name; for (let item of data.items) { this.items.push(new RefreshShopItem(item, data.pageIndex)) } - this.viewCount = data.viewCount ? data.viewCount : this.items.length; + this.viewCount = data.viewcount ? data.viewcount : this.items.length; } } @@ -164,7 +193,7 @@ export class RefreshShopData extends ActivityBase { public initData(data: string) { // this.nextRefreshTime = this.endTime; - let dataObj = JSON.parse(data); + let dataObj: RefreshShopDataInDb = JSON.parse(data); this.shopType = dataObj.shopType; this.name = dataObj.name; let arr = dataObj.data; diff --git a/shared/domain/activityField/refreshTaskField.ts b/shared/domain/activityField/refreshTaskField.ts index a747d5222..ec9dea584 100644 --- a/shared/domain/activityField/refreshTaskField.ts +++ b/shared/domain/activityField/refreshTaskField.ts @@ -6,6 +6,30 @@ import { getZeroPoint } from '../../pubUtils/timeUtil'; import { parseNumberList } from '../../pubUtils/util'; import { ActivityBase } from './activityField'; +interface RefreshTaskDataInDb { + refreshType: number; + name: string; + consumePoint: number; + reward: string; + data: RefreshTaskPageInDb[]; +} + +interface RefreshTaskPageInDb { + pageIndex: number; + name: string; + items: RefreshTaskItemInDb[]; +} + +interface RefreshTaskItemInDb { + id: number; + name: string; + taskType: number; + taskParam: string; + condition: number; + reward: string; + point: number; + skip: string; +} // 任务配置数据 export class RefreshTaskItem { @@ -16,7 +40,7 @@ export class RefreshTaskItem { taskParam: string; //任务数据 dic_zyz_taskType.json condition: number; //任务数据条件 dic_zyz_taskType.jsonT reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 - skip: number; //跳转客户端用 + skip: string; //跳转客户端用 point: number; //奖励的点数 taskParamArray: number[] = []; @@ -24,7 +48,7 @@ export class RefreshTaskItem { receiveRewardCount: number = 0; //领取奖励次数 refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.FOREVER; - constructor(data: any, pageIndex: number, refreshType: number) { + constructor(data: RefreshTaskItemInDb, pageIndex: number, refreshType: number) { this.pageIndex = pageIndex; this.id = data.id; this.name = data.name; @@ -51,11 +75,11 @@ export class RefreshTaskPage { name: string; // 任务名称 items: Array = []; - constructor(data: any) { + constructor(data: RefreshTaskPageInDb, refreshType: number) { this.pageIndex = data.pageIndex; this.name = data.name; for (let obj of data.items) { - this.items.push(new RefreshTaskItem(obj, data.pageIndex, data.refreshType)); + this.items.push(new RefreshTaskItem(obj, data.pageIndex, refreshType)); } } } @@ -64,9 +88,6 @@ export class RefreshTaskPage { export class RefreshTaskData extends ActivityBase { name: string = '';//活动名称 list: Array = []; - // nextRefreshTime: number;//下次刷新时间 - // roundIndex: number = 1;//周期数从1开始 - addPointActivityId: number = 0;//获得的点数,关联其他活动id(新将礼物) consumePoint: number = 0;//消耗点数兑换奖品 reward: string = ''//消耗点数的奖品内容 @@ -116,16 +137,15 @@ export class RefreshTaskData extends ActivityBase { public initData(data: string) { // this.nextRefreshTime = this.endTime; - let dataObj = JSON.parse(data); + let dataObj: RefreshTaskDataInDb = JSON.parse(data); this.name = dataObj.name; this.consumePoint = dataObj.consumePoint; this.reward = dataObj.reward; - this.addPointActivityId = dataObj.addPointActivityId ? dataObj.addPointActivityId : 0; this.totalPoint = 0; this.exchangePoint = 0; let arr = dataObj.data; for (let obj of arr) { - this.list.push(new RefreshTaskPage(obj)) + this.list.push(new RefreshTaskPage(obj, dataObj.refreshType)) } } diff --git a/shared/pubUtils/dictionary/DicTask.ts b/shared/pubUtils/dictionary/DicTask.ts index ad2973dab..61eb4eadd 100644 --- a/shared/pubUtils/dictionary/DicTask.ts +++ b/shared/pubUtils/dictionary/DicTask.ts @@ -53,8 +53,6 @@ export interface DicDailyTask extends DicTaskBase { readonly point: number; // 经验基数 readonly exp: RewardInter; - // 获得积分关联的活动id - readonly addPointActivityId: number; } const DicDailyTaskKeys: KeysEnum = { @@ -66,7 +64,6 @@ const DicDailyTaskKeys: KeysEnum = { taskReward: true, point: true, exp: true, - addPointActivityId: true }; // 成就