diff --git a/game-server/app/servers/gm/handler/gmOrderHandler.ts b/game-server/app/servers/gm/handler/gmOrderHandler.ts index de22f7a2b..06164573b 100644 --- a/game-server/app/servers/gm/handler/gmOrderHandler.ts +++ b/game-server/app/servers/gm/handler/gmOrderHandler.ts @@ -7,8 +7,11 @@ import { dicRMB } from '../../../pubUtils/dictionary/DicRMB'; import { getActivityById } from '../../../services/activity/activityService'; import { UserOrderModel } from '../../../db/UserOrder'; import { makeOrder, settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService'; -import { getActivityProducts } from '../../../services/gmService'; +import { getActivityProducts, getParamStr } from '../../../services/gmService'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; +import { Receiver } from '../../../db/GMMail'; +import { getRoleOnlineInfo } from '../../../services/redisService'; +import { RoleModel } from '../../../db/Role'; export interface Cascader { value: number|string; @@ -57,31 +60,15 @@ export class GmOrderHandler { return resResult(STATUS.SUCCESS, result); } - getParamStr(beginTimeStamp: number, monopolyActivityId: number) { - let param = {}; - if(beginTimeStamp) { - param['beginTimeStamp'] = beginTimeStamp; - } - if(monopolyActivityId) { - param['monopolyActivityId'] = monopolyActivityId; - } - return JSON.stringify(param); - } - /** * @description 虚拟充值 - * @param {{productID:string, magicWord:string, paramStr: string }} msg * @param {BackendSession} session * @memberof orderHandler */ - async applyOrder(msg: { productID: string, activityId: number, beginTimeStamp: number, monopolyActivityId: number }, session: BackendSession) { - const { productID, activityId, beginTimeStamp, monopolyActivityId } = msg; - - const roleId = session.get('roleId'); - const serverId = session.get('serverId'); - const sid = session.get('sid'); - const roleName = session.get('roleName'); - + async applyOrder(msg: { serverId: number, activityId: (number|string)[], receiver: Receiver[] }, session: BackendSession) { + const { activityId: activityIds, receiver } = msg; + let activityId = activityIds[1]; + let productID = activityIds[2]; let payType = PAY_TYPE.TEST //如果有特殊情况,activityId可为0 @@ -105,15 +92,34 @@ export class GmOrderHandler { let activityData = await getActivityById(activityId); if (!activityData) return resResult(STATUS.ACTIVITY_MISSING); - let orderInfo = await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, this.getParamStr(beginTimeStamp, monopolyActivityId), message); - //订单成功 - if(!orderInfo) { - return resResult(STATUS.NO_ORDER); + let results = []; + for(let { roleId, serverId } of receiver) { + let role = await RoleModel.findByRoleId(roleId); + if(!role && role.serverId != serverId) { + results.push(resResult(STATUS.ROLE_NOT_FOUND)); + continue; + } + let paramStr = await getParamStr(activityData, productID, role); + let orderInfo = await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message); + + //订单成功 + if(!orderInfo) { + results.push(resResult(STATUS.NO_ORDER)); + continue; + } + let onlineUser = await getRoleOnlineInfo(roleId); + let result = await settleOrder(orderInfo, serverId, onlineUser?.sid); + orderInfo = await UserOrderModel.success(roleId, localOrderID, JSON.stringify(result)); + console.log(`测试支付完成!!!!!!!!!!!!! serverId:${serverId}, productID:${productID}, productType:${productType}, roleId:${roleId}, localOrderID:${localOrderID}, payType:${payType}`) + results.push(resResult(STATUS.SUCCESS)); + } + + let findResultErrCode = results.find(cur => cur.code != 0); + if(!findResultErrCode) { + return resResult(STATUS.SUCCESS); + } else { + return findResultErrCode; } - 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); } } \ No newline at end of file diff --git a/game-server/app/services/gmService.ts b/game-server/app/services/gmService.ts index c3b239b9d..341b17487 100644 --- a/game-server/app/services/gmService.ts +++ b/game-server/app/services/gmService.ts @@ -16,7 +16,7 @@ import { SignInData } from "../domain/activityField/signInField"; import { RegionModel, RegionType } from "../db/Region"; import { GMMail as StategyMail } from "../db/ServerStategy"; import { uniq } from "underscore"; -import { ActivityModelType } from "../db/Activity"; +import { ActivityModel, ActivityModelType } from "../db/Activity"; import { dicRMB } from "../pubUtils/dictionary/DicRMB"; import { LimitShopData } from "../domain/activityField/limitShopField"; import { YuanBaoShopData } from "../domain/activityField/yuanBaoShopField"; @@ -26,6 +26,9 @@ import { PopUpShopData } from "../domain/activityField/popUpShopField"; import { GrowthFundData } from "../domain/activityField/growthFundField"; import { TreasureHuntData } from "../domain/activityField/treasureHuntField"; import { RefreshShopData } from "../domain/activityField/refreshShopField"; +import { RoleType } from "../db/Role"; +import { MonopolyData } from "../domain/activityField/monopolyField"; +import { ActivityPopUpShopModel } from "../db/ActivityPopUpShop"; // —————————————— 跑马灯 —————————————— // // 初始 @@ -246,8 +249,13 @@ export function getActivityProducts(activity: ActivityModelType) { } case ACTIVITY_TYPE.POP_UP_SHOP://弹出礼包 { - let data = new PopUpShopData(activity, 0); - return [getDicRMB(data.productID)]; + let products: { label: string, value: string }[] = []; + let allTaskData: any[] = JSON.parse(activity.data); + for(let task of allTaskData) { + let data = new PopUpShopData(task, activity.activityId); + products.push(getDicRMB(data.productID)) + } + return products; } case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: //主线成长基金(高阶) case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP://镇念塔成长基金(高阶) @@ -280,4 +288,35 @@ export function getActivityProducts(activity: ActivityModelType) { } return false +} + +export async function getParamStr(activity: ActivityModelType, productID: string, role: RoleType) { + let param = {}; + switch(activity.type) { + case ACTIVITY_TYPE.POP_UP_SHOP: + let allTaskData: any[] = JSON.parse(activity.data); + let task = allTaskData.find(cur => cur.productID == productID); + if(!task) break; + let beginTime = new Date(); + let endTime = moment(new Date()).add(task.duration, 'h').toDate(); + let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(role.serverId, activity.activityId, role.roleId, task.id, task.taskType, task.condition, beginTime, endTime); + param['beginTimeStamp'] = playerRecord.beginTime; + break; + case ACTIVITY_TYPE.REFRESH_SHOP: + let { activityGroupId } = await ServerlistModel.findByServerId(role.serverId); + let monopolyActivitys = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.MONOPOLY, 1); + let parentActivity = monopolyActivitys.find(activity => { + let data = new MonopolyData(activity, 0); + let curShop = data.list.find(land => { // 找到关联活动 + return land.shopActivityId == activity.activityId; + }); + return !!curShop; + }); + + if(parentActivity) { + param['monopolyActivityId'] = parentActivity.activityId; + } + break; + } + return JSON.stringify(param); } \ No newline at end of file