军团限时付费:退出军团后减少付费人数
This commit is contained in:
@@ -26,7 +26,7 @@ import { checkTask } from '../../../services/task/taskService';
|
|||||||
import { guildInter } from '../../../pubUtils/interface';
|
import { guildInter } from '../../../pubUtils/interface';
|
||||||
import * as dicParam from '../../../pubUtils/dicParam';
|
import * as dicParam from '../../../pubUtils/dicParam';
|
||||||
import { reportTAEvent } from '../../../services/sdkService';
|
import { reportTAEvent } from '../../../services/sdkService';
|
||||||
import { changeGuildActivity, guildDismisActivity } from '../../../services/activity/guildPayService';
|
import { changeGuildActivity, guildDismisActivity, guildPayQuitGuild } from '../../../services/activity/guildPayService';
|
||||||
import { sendMessageToUserWithSuc } from '../../../services/pushService';
|
import { sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||||
import { GuildActiveModel } from '../../../db/GuildActive';
|
import { GuildActiveModel } from '../../../db/GuildActive';
|
||||||
import { leaveRaceActivityToRemote, leaveRaceWhenDismissToRemote, leaveRaceWhenQuitGuildToRemote } from '../../../services/guildActivity/guildActivityService';
|
import { leaveRaceActivityToRemote, leaveRaceWhenDismissToRemote, leaveRaceWhenQuitGuildToRemote } from '../../../services/guildActivity/guildActivityService';
|
||||||
@@ -615,6 +615,7 @@ export class GuildHandler {
|
|||||||
reportTAEvent(roleId, TA_EVENT.GUILD_QUIT, { name: guild.name, way: GUILD_QUIT_WAY.QUIT }, ip);
|
reportTAEvent(roleId, TA_EVENT.GUILD_QUIT, { name: guild.name, way: GUILD_QUIT_WAY.QUIT }, ip);
|
||||||
changeGuildActivity('', serverId, roleId, sid);
|
changeGuildActivity('', serverId, roleId, sid);
|
||||||
leaveRaceWhenQuitGuildToRemote(serverId, guildCode, roleId);
|
leaveRaceWhenQuitGuildToRemote(serverId, guildCode, roleId);
|
||||||
|
guildPayQuitGuild(serverId, code, roleId);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild });
|
return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild });
|
||||||
}
|
}
|
||||||
@@ -655,6 +656,7 @@ export class GuildHandler {
|
|||||||
await sendMailByContent(MAIL_TYPE.GUILD_BE_KICK, memberRoleId, { sendName: roleName, params: [guild.name] });
|
await sendMailByContent(MAIL_TYPE.GUILD_BE_KICK, memberRoleId, { sendName: roleName, params: [guild.name] });
|
||||||
reportTAEvent(memberRoleId, TA_EVENT.GUILD_QUIT, { name: guild.name, way: GUILD_QUIT_WAY.KICK });
|
reportTAEvent(memberRoleId, TA_EVENT.GUILD_QUIT, { name: guild.name, way: GUILD_QUIT_WAY.KICK });
|
||||||
leaveRaceWhenQuitGuildToRemote(serverId, code, memberRoleId);
|
leaveRaceWhenQuitGuildToRemote(serverId, code, memberRoleId);
|
||||||
|
guildPayQuitGuild(serverId, code, memberRoleId);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt });
|
return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,25 +40,48 @@ export async function getGuildPayDataShow(serverId: number, activityId: number,
|
|||||||
|
|
||||||
export async function addGuildPay(role: RoleType, price: number) {
|
export async function addGuildPay(role: RoleType, price: number) {
|
||||||
let { hasGuild, roleId, roleName, serverId, guildCode } = role;
|
let { hasGuild, roleId, roleName, serverId, guildCode } = role;
|
||||||
if(hasGuild) { // 向全军团推送充值的人
|
if(!hasGuild) return;
|
||||||
let { openTime } = await ServerlistModel.findByServerId(serverId);
|
let serverTime = await getServerCreateTime(serverId);
|
||||||
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.GUILD_PAY);
|
||||||
let pushResult: pushActivityInter[] = [];
|
let pushResult: pushActivityInter[] = [];
|
||||||
for(let activityData of activities) {
|
for(let activityData of activities) {
|
||||||
let { activityId, type: activityType } = activityData;
|
let { activityId, type: activityType } = activityData;
|
||||||
let obj = new GuildPayData(activityData, 0, openTime * 1000);
|
let obj = new GuildPayData(activityData, 0, serverTime);
|
||||||
if(obj && obj.canShow()) {
|
if(obj && obj.canPay()) {
|
||||||
let { isNew, result } = await ActivityGuildPayModel.addRecord(serverId, activityId, obj.roundIndex, guildCode, {
|
let { isNew, result } = await ActivityGuildPayModel.addRecord(serverId, activityId, obj.roundIndex, guildCode, {
|
||||||
roleId, roleName, price
|
roleId, roleName, price, hasQuit: false
|
||||||
});
|
});
|
||||||
if(isNew) {
|
if(isNew) {
|
||||||
let { memberRecord } = result;
|
let { memberRecord = [] } = result;
|
||||||
pushResult.push({ activityId, activityType, param: { payMember: roleName, payMemberCnt: memberRecord.length } });
|
let payMemberCnt = memberRecord.filter(member => !member.hasQuit).length;
|
||||||
}
|
pushResult.push({ activityId, activityType, param: { payMember: roleName, payMemberCnt } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await pushActivitiesToGuild(pushResult, guildCode);
|
|
||||||
}
|
}
|
||||||
|
console.log('##### addGuildPay', pushResult.length)
|
||||||
|
await pushActivitiesToGuild(pushResult, guildCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function guildPayQuitGuild(serverId: number, guildCode: string, roleId: string) {
|
||||||
|
if(!guildCode) return;
|
||||||
|
|
||||||
|
let serverTime = await getServerCreateTime(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, serverTime);
|
||||||
|
if(obj && obj.canPay()) {
|
||||||
|
let result = await ActivityGuildPayModel.quitGuild(serverId, activityId, obj.roundIndex, guildCode, roleId);
|
||||||
|
if(result) {
|
||||||
|
let { memberRecord = [] } = result;
|
||||||
|
let records = memberRecord.filter(member => !member.hasQuit);
|
||||||
|
let payRecord = records.map(member => member.roleName);
|
||||||
|
pushResult.push({ activityId, activityType, param: { payRecord, payMemberCnt: payRecord.length } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await pushActivitiesToGuild(pushResult, guildCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function changeGuildActivity(guildCode: string, serverId: number, roleId: string, sid: string) {
|
export async function changeGuildActivity(guildCode: string, serverId: number, roleId: string, sid: string) {
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ class MemberRecord {
|
|||||||
roleName: string;
|
roleName: string;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
price: number; // 金额
|
price: number; // 金额
|
||||||
|
@prop({ required: true })
|
||||||
|
hasQuit: boolean; // 金额
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -40,11 +42,12 @@ export default class Activity_Guild_Pay extends BaseModel {
|
|||||||
result = await ActivityGuildPayModel.findOneAndUpdate({ serverId, guildCode, activityId, roundIndex }, { $push: { memberRecord } }, { new: true, upsert: true }).lean();
|
result = await ActivityGuildPayModel.findOneAndUpdate({ serverId, guildCode, activityId, roundIndex }, { $push: { memberRecord } }, { new: true, upsert: true }).lean();
|
||||||
} else {
|
} else {
|
||||||
result = await ActivityGuildPayModel.findOneAndUpdate({ serverId, guildCode, activityId, roundIndex, 'memberRecord.roleId': memberRecord.roleId }, {
|
result = await ActivityGuildPayModel.findOneAndUpdate({ serverId, guildCode, activityId, roundIndex, 'memberRecord.roleId': memberRecord.roleId }, {
|
||||||
$set: { 'memberRecord.$.roleName': memberRecord.roleName },
|
$set: { 'memberRecord.$.roleName': memberRecord.roleName, 'memberRecord.$.hasQuit': false },
|
||||||
$inc: { 'memberRecord.$.price': memberRecord.price }
|
$inc: { 'memberRecord.$.price': memberRecord.price }
|
||||||
}, { new: true }).lean();
|
}, { new: true }).lean();
|
||||||
}
|
}
|
||||||
return { result, isNew: !hasUser };
|
let isNew = hasUser? hasUser.hasQuit: true;
|
||||||
|
return { result, isNew };
|
||||||
}
|
}
|
||||||
|
|
||||||
//根据活动id查询活动数据
|
//根据活动id查询活动数据
|
||||||
@@ -52,6 +55,11 @@ export default class Activity_Guild_Pay extends BaseModel {
|
|||||||
let result: ActivityGuildPayModelType = await ActivityGuildPayModel.findOne({ serverId, activityId, roundIndex, guildCode }).lean(true);
|
let result: ActivityGuildPayModelType = await ActivityGuildPayModel.findOne({ serverId, activityId, roundIndex, guildCode }).lean(true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async quitGuild(serverId: number, activityId: number, roundIndex: number, guildCode: string, roleId: string) {
|
||||||
|
let result: ActivityGuildPayModelType = await ActivityGuildPayModel.findOneAndUpdate({ serverId, guildCode, activityId, roundIndex, 'memberRecord.roleId': roleId }, { $set: { 'memberRecord.$.hasQuit': true } }, { new: true }).lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ActivityGuildPayModel = getModelForClass(Activity_Guild_Pay);
|
export const ActivityGuildPayModel = getModelForClass(Activity_Guild_Pay);
|
||||||
|
|||||||
@@ -72,8 +72,9 @@ export class GuildPayData extends ActivityBase {
|
|||||||
|
|
||||||
public setGuildRecord(guildRecord: ActivityGuildPayModelType) {
|
public setGuildRecord(guildRecord: ActivityGuildPayModelType) {
|
||||||
if(!guildRecord) return;
|
if(!guildRecord) return;
|
||||||
this.payMemberCnt = guildRecord.memberRecord.length;
|
let records = guildRecord.memberRecord.filter(cur => !cur.hasQuit);
|
||||||
this.payRecord = guildRecord.memberRecord.map(cur => cur.roleName);
|
this.payMemberCnt = records.length;
|
||||||
|
this.payRecord = records.map(cur => cur.roleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getShowResult() {
|
public getShowResult() {
|
||||||
@@ -105,4 +106,12 @@ export class GuildPayData extends ActivityBase {
|
|||||||
if(items.length <= 0) return false;
|
if(items.length <= 0) return false;
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public canPay() {
|
||||||
|
if(!this.isEnable) return false;
|
||||||
|
if(this.beginTime > Date.now() || this.endTime < Date.now()) return false;
|
||||||
|
if(this.nextRefreshTime && this.nextRefreshTime < Date.now()) return false;
|
||||||
|
if(this.payEndTime && this.payEndTime < Date.now()) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user