活动:军团付费

This commit is contained in:
luying
2022-03-08 14:50:16 +08:00
parent b8e9ab9bdf
commit 130e2a16bd
15 changed files with 406 additions and 14 deletions
@@ -28,6 +28,7 @@ export class ActivityHandler {
const { } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
const sid: string = session.get('sid');
@@ -41,7 +42,7 @@ export class ActivityHandler {
for (let activityId of groupData.activities) {
let activityData = await getActivityById(activityId);
if (activityData) {
let playerActivityData = await getActivity(serverId, roleId, activityId, activityData.type);
let playerActivityData = await getActivity(serverId, roleId, guildCode, activityId, activityData.type);
if(playerActivityData) {
playerGroupActivityArray.push(playerActivityData);
}
@@ -0,0 +1,71 @@
import { Application, BackendSession, HandlerService, pinus, } from 'pinus';
import { isNumber } from 'underscore';
import { ITEM_CHANGE_REASON, STATUS } from '../../../consts';
import { ActivityGuildPayRecordModel } from '../../../db/ActivityGuildPayRecord';
import { RewardParam } from '../../../domain/activityField/rewardField';
import { resResult } from '../../../pubUtils/util';
import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService';
import { getGuildPayDataShow, getGuildPayData } from '../../../services/activity/guildPayService';
export default function (app: Application) {
return new GuildPayHandler(app);
}
export class GuildPayHandler {
constructor(private app: Application) {
}
/**
* @description 获取活动数据
* @param {{ }} msg
* @param {BackendSession} session
* @memberof GuildPayHandler
*/
async getGuildPayData(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
let playerData = await getGuildPayDataShow(serverId, activityId, roleId, guildCode);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, { playerData });
}
/**
* @description (一键)领取奖励
* @param {{ }} msg
* @param {BackendSession} session
* @memberof GuildPayHandler
*/
async receiveItems(msg: { activityId: number, cellIndex: number }, session: BackendSession) {
const { activityId, cellIndex } = msg;
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const sid = session.get('sid');
const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
if(!isNumber(cellIndex)) return resResult(STATUS.WRONG_PARMS);
let playerData = await getGuildPayData(serverId, activityId, roleId, guildCode);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let items = playerData.receiveItems(cellIndex);
if(!items) return resResult(STATUS.ACTIVITY_ITEM_CANNOT_RECEIVE);
let records: number[] = [], rewards: RewardParam[] = [];
for(let item of items) {
records.push(item.cellIndex);
rewards.push(...stringToRewardParam(item.reward));
}
await ActivityGuildPayRecordModel.receiveItems(serverId, activityId, playerData.roundIndex, roleId, records);
let result = await addReward(roleId, roleName, sid, serverId, rewards, ITEM_CHANGE_REASON.ACT_GUILD_PAY_REWARD);
return resResult(STATUS.SUCCESS, { items, ...result });
}
}
@@ -61,9 +61,9 @@ export class LuckyTurntableHandler {
let { result, records, goodResult } = playerData.pull(roleName, count);
await ActivityTurntableModel.updateData(serverId, activityId, roleId, pick(playerData, ['todayCount', 'count', 'records', 'greatRewardCount']));
let goods = await addItems(roleId, roleName, sid, goodResult, ITEM_CHANGE_REASON.ACT_TURNTABLE_PULL);
await addItems(roleId, roleName, sid, goodResult, ITEM_CHANGE_REASON.ACT_TURNTABLE_PULL);
return resResult(STATUS.SUCCESS, { result, records, goods: combineItems(goods) });
return resResult(STATUS.SUCCESS, { result, records });
}
@@ -33,7 +33,7 @@ export class RechargeMoneyHandler {
let playerData = await getPlayerRechargeMoneyDataShow(activityId, serverId, roleId);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, playerData);
return resResult(STATUS.SUCCESS, {playerData});
}
/**
@@ -446,4 +446,18 @@ export class GuildRemote {
errlogger.error(`remote ${__filename} \n ${e.stack}`);
}
}
/**
* @description 活动推送
* @param guildCode 军团code
* @param path 推送地址
* @param param 内容
*/
public async pushActivityoGuild(guildCode: string, path: string, param: any) {
try {
this.pushMessage(guildCode, path, param);
} catch(e) {
errlogger.error(`remote ${__filename} \n ${e.stack}`);
}
}
}
@@ -37,6 +37,7 @@ import { getTimeLimitRankDataShow } from './timeLimitRankService';
import { ActivityTaskPointModel } from '../../db/ActivityTaskPoint';
import { getRoleOnlineInfo } from '../redisService';
import { addTaskPassPoint } from './taskPassService';
import { getGuildChannelSid } from '../chatService';
/**
* 获取活动数据
@@ -46,7 +47,7 @@ import { addTaskPassPoint } from './taskPassService';
* @param {string} roleId 角色Id
*
*/
export async function getActivity(serverId: number, roleId: string, activityId: number, activityType: number) {
export async function getActivity(serverId: number, roleId: string, guildCode: string, activityId: number, activityType: number) {
let activityData = null;
switch (activityType) {
case ACTIVITY_TYPE.SIGN_IN://签到 4
@@ -200,6 +201,10 @@ export async function getActivity(serverId: number, roleId: string, activityId:
activityData = await getTimeLimitRankDataShow(activityId);
break;
}
case ACTIVITY_TYPE.GUILD_PAY:
{
}
default: {
console.log('未知活动类型.........', activityType)
break;
@@ -357,6 +362,8 @@ export async function addActvityTaskPoint(type: number, id: number, session: Bac
interface pushActivityParamInter {
ticketCnt?: number; // 木签活动的签数(type21)
totalPoint?: number; // 新将好礼(type37)和战令(type42)更新后的积分
payMemberCnt?: number; // 军团充值活动,你的军团充值的人数
payMember?: string; // 军团充值活动,充值人员名字,添加到payRecord里面
}
export interface pushActivityInter {
@@ -374,9 +381,23 @@ export async function pushActivities(arr: pushActivityInter[], roleId: string, s
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;
}
pinus.app.get('channelService').pushMessageByUids('onActivityUpdate',
resResult(STATUS.SUCCESS, {
activities: arr
}),
[{ uid: roleId, sid }]);
if(!!sid && arr.length > 0) {
pinus.app.get('channelService').pushMessageByUids('onActivityUpdate',
resResult(STATUS.SUCCESS, {
activities: arr
}),
[{ uid: roleId, sid }]);
}
}
export async function pushActivitiesToGuild(arr: pushActivityInter[], guildCode: string) {
let chatSid = await getGuildChannelSid(guildCode);
console.log('####', chatSid, arr)
if(!!chatSid && arr.length > 0) {
pinus.app.rpc.chat.guildRemote.sendMailToGuild.toServer(chatSid, guildCode, 'onActivityUpdate',
resResult(STATUS.SUCCESS, {
activities: arr
}),
);
}
}
@@ -0,0 +1,61 @@
import { ACTIVITY_TYPE } from "../../consts";
import { ActivityGuildPayModel } from "../../db/ActivityGuildPay";
import { RoleType } from "../../db/Role";
import { GuildPayData } from "../../domain/activityField/guildPay";
import { getActivitiesByType, getActivityById, pushActivitiesToGuild, pushActivityInter } from "./activityService";
import { ServerlistModel } from '../../db/Serverlist';
import { ActivityGuildPayRecordModel } from "../../db/ActivityGuildPayRecord";
/**
* 玩家活动数据
*
* @param {number} serverId 区Id
* @param {number} activityId 活动Id
* @param {string} roleId 角色Id
*
*/
export async function getGuildPayData(serverId: number, activityId: number, roleId: string, guildCode: string) {
let activityData = await getActivityById(activityId);
let { openTime } = await ServerlistModel.findByServerId(serverId);
let playerData = new GuildPayData(activityData, 0, openTime * 1000);
let receiveRecord = await ActivityGuildPayRecordModel.findData(serverId, activityId, playerData.roundIndex, roleId);
playerData.setReceiveRecord(receiveRecord);
if(guildCode) {
let guildRecord = await ActivityGuildPayModel.findData(serverId, activityId, playerData.roundIndex, guildCode);
playerData.setGuildRecord(guildRecord);
}
return playerData;
}
export async function getGuildPayDataShow(serverId: number, activityId: number, roleId: string, guildCode: string) {
let playerData = await getGuildPayData(serverId, activityId, roleId, guildCode);
if(playerData && playerData.canShow && playerData.canShow()) {
return playerData.getShowResult();
}
return null;
}
export async function addGuildPay(role: RoleType, price: number) {
let { hasGuild, roleId, roleName, serverId, guildCode } = role;
if(hasGuild) { // 向全军团推送充值的人
let { openTime } = await ServerlistModel.findByServerId(serverId);
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
let pushResult: pushActivityInter[] = [];
for(let activityData of activities) {
let { activityId, type: activityType } = activityData;
let obj = new GuildPayData(activityData, 0, openTime * 1000);
let { isNew, result } = await ActivityGuildPayModel.addRecord(serverId, activityId, obj.roundIndex, guildCode, {
roleId, roleName, price
});
if(isNew) {
let { memberRecord } = result;
pushResult.push({ activityId, activityType, param: { payMember: roleName, payMemberCnt: memberRecord.length } });
}
}
await pushActivitiesToGuild(pushResult, guildCode);
}
}
+3 -1
View File
@@ -30,6 +30,7 @@ import { reportTAEvent, reportTAUserSet } from './sdkService';
import { savePayLog } from '../pubUtils/logUtil';
import { recordFirstGift } from './activity/firstGiftService';
import { makeTaskPass } from './activity/taskPassService';
import { addGuildPay } from './activity/guildPayService';
/**
@@ -151,7 +152,7 @@ export async function makeOrder(orderInfo: UserOrderModelType, sid: string) {
totalPay: roleInfo.totalPay
}), [{ uid: roleId, sid }]);
return rewardResult
return {...rewardResult, roleInfo}
}
export async function settleOrder(order: UserOrderModelType, serverId: number, sid?: string) {
@@ -180,6 +181,7 @@ export async function settleOrder(order: UserOrderModelType, serverId: number, s
//活动统计
addRechargeMoney(order.roleId, serverId, order.price);
addVipRechargeMoney(order.roleId, serverId, order.price);
addGuildPay(result.roleInfo, order.price)
//成长任务
await checkActivityTask(serverId, sid, order.roleId, TASK_TYPE.ACTIVITY_RMB, order.price, { activityId: order.activityId });
if(order.payType != PAY_TYPE.TEST) {