一键领取bug

This commit is contained in:
mamengke01
2021-02-22 15:38:32 +08:00
parent 60b2e6351f
commit de1e46293d
5 changed files with 38 additions and 27 deletions

View File

@@ -42,7 +42,7 @@ export class GuildTrainHandler {
}
let { trainCount, trainRewards, buyTrainCount } = userGuild;
let result:any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);
result.buyTrainCount = buyTrainCount;
result.buyTrainCount = buyTrainCount||0;
result.trainLv = trainLv;
return resResult(STATUS.SUCCESS, result);
}

View File

@@ -160,14 +160,14 @@ export class GMRemote {
if (!gmMail || !gmMail.goods.length|| gmMail.endTime < nowSeconds()) {
return;
}
mailGoods.push(...goods);
mailGoods.push(...gmMail.goods);
} else {
if (goods.length)
if (!goods.length)
return;
mailGoods.push(...goods);
}
mails.push({id: _id, status: MAIL_STATUS.RECEIVED, mailType: MAIL_TYPE.GROUPMAIL});
groupMailIds.push(ObjectId(_id));
groupMailIds.push(_id);
});
mailRewards.map(({_id, goods, mailId, mailTemType})=>{
if (mailTemType == MAIL_TEM_TYPE.GMTYPE) {
@@ -177,12 +177,12 @@ export class GMRemote {
}
mailGoods.push(...gmMail.goods);
} else {
if (goods.length)
if (!goods.length)
return;
mailGoods.push(...goods);
}
mails.push({id: _id, status: MAIL_STATUS.RECEIVED, mailType: MAIL_TYPE.SINGLEMAIL});
mailIds.push(ObjectId(_id));
mailIds.push(_id);
});
return {mailIds, groupMailIds, mails, mailGoods};
}

View File

@@ -58,13 +58,13 @@ export class RoleHandler {
let resGroupMailIds = await GroupMailModel.findReadAndRewardsMails(roleId);
let groupMailIds = resGroupMailIds.map(({_id})=>{
mails.push({id:_id, status: MAIL_STATUS.DELETE, mailType: MAIL_TYPE.GROUPMAIL});
return ObjectId(_id);
return _id;
});
await GroupMailModel.updateMailStatus(groupMailIds, MAIL_STATUS.DELETE, roleId);
let resMailIds = await MailModel.findReadAndRewardsMails(roleId);
let mailIds = resMailIds.map(({_id})=>{
mails.push({id: _id, status: MAIL_STATUS.DELETE, mailType: MAIL_TYPE.SINGLEMAIL});
return ObjectId(_id);
return _id;
});
await MailModel.updateMailStatus(mailIds, MAIL_STATUS.DELETE);
@@ -106,13 +106,12 @@ export class RoleHandler {
} else {//一键领取
let groupMailRewards = await GroupMailModel.findRewardsMails(roleId);
let mailRewards = await MailModel.findRewardsMails(roleId);
let { mailGoods: goods, mailIds, groupMailIds, mails: resMails} = await this.app.rpc.gm.gmRemote.getUseMails.toServer('gm-server-1', serverId, groupMailRewards, mailRewards);
let { mailGoods: goods, mailIds, groupMailIds} = await this.app.rpc.gm.gmRemote.getUseMails.toServer('gm-server-1', serverId, groupMailRewards, mailRewards);
mailGoods = goods;
mails = resMails;
if (!!mailIds.length)
await GroupMailModel.updateMailStatus(mailIds, MAIL_STATUS.RECEIVED, roleId);
if (!!groupMailIds.length)
await MailModel.updateMailStatus(groupMailIds, MAIL_STATUS.RECEIVED);
mails = await GroupMailModel.updateMailStatus(groupMailIds, MAIL_STATUS.RECEIVED, roleId);
if (!!mailIds.length)
mails = await MailModel.updateMailStatus(mailIds, MAIL_STATUS.RECEIVED);
}
let resGoods = [];
if (!!mailGoods && !!mailGoods.length)

View File

@@ -1,8 +1,9 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { index, getModelForClass, mongoose, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil';
import { MAIL_STATUS } from '../consts/constModules/mailConst';
import { MAIL_STATUS, MAIL_TYPE } from '../consts/constModules/mailConst';
import { findWhere } from 'underscore';
const { ObjectId } = mongoose.Types;
class RewardInter {
id: number;
count: number;
@@ -82,22 +83,28 @@ export default class GroupMail extends BaseModel {
}
public static async findReadAndRewardsMails(roleId: string, lean = true) {
const ids: GroupMailType[] = await GroupMailModel.find({ 'sendRoles.roleId': roleId, sendTime:{$lte: nowSeconds()}, $or:[ {$and: [{'sendRoles.status': MAIL_STATUS.READ, goods: []}]}, {'sendRoles.status': MAIL_STATUS.RECEIVED}] }).select('_id').lean(lean);
const ids: GroupMailType[] = await GroupMailModel.find({ sendTime:{$lte: nowSeconds()}, sendRoles: { $elemMatch: { roleId, $or:[ {$and: [{status: MAIL_STATUS.READ}, {goods: []}]},{status: MAIL_STATUS.RECEIVED} ] } } }).select('_id').lean(lean);
return ids;
}
public static async updateMailStatus(ids: any[], status: number, roleId: string) {
const count = await GroupMailModel.update({_id: {$in: ids}, 'sendRoles.roleId': roleId, sendTime:{$lte: nowSeconds()}}, { $set:{ 'sendRoles.$.status': status } });
return count;
public static async updateMailStatus(ids: string[], status: number, roleId: string, lean = true) {
let mails = [];
for(let id of ids) {
const result: GroupMailType = await GroupMailModel.findOneAndUpdate({_id: id, "sendRoles.roleId": roleId}, { $set:{ 'sendRoles.$.status': status } }, { new: true }).lean(lean);
mails.push({id: result._id, status: result.sendRoles[0].status, mailType: MAIL_TYPE.GROUPMAIL});
}
return mails;
}
public static async delMail(_id: string, roleId: string, lean = true) {
const result: GroupMailType = await GroupMailModel.findOneAndUpdate({ _id, 'sendRoles.roleId': roleId, $or:[ {$and: [{'sendRoles.status': MAIL_STATUS.READ, goods: []}]}, {'sendRoles.status': MAIL_STATUS.RECEIVED}], sendTime:{$lte: nowSeconds() }}, { $set:{ 'sendRoles.$.status': MAIL_STATUS.DELETE } }, { new: true }).lean(lean);
const result: GroupMailType = await GroupMailModel.findOneAndUpdate({ _id, sendTime:{ $lte: nowSeconds() },
sendRoles: { $elemMatch: { roleId, $or:[ {$and: [{status: MAIL_STATUS.READ}, {goods: []}]},{status: MAIL_STATUS.RECEIVED} ] } } },
{ $set:{ 'sendRoles.$.status': MAIL_STATUS.DELETE } }, { new: true }).lean(lean);
return result;
}
public static async findRewardsMails(roleId: string, lean = true) {
const result: GroupMailType[] = await GroupMailModel.find({ 'sendRoles.roleId': roleId, 'sendRoles.status':{ $in: [ MAIL_STATUS.CREATE, MAIL_STATUS.READ ] }, sendTime:{$lte: nowSeconds()} }).select('_id goods mailId mailTemType status').lean(lean);
const result: GroupMailType[] = await GroupMailModel.find({ sendRoles: { $elemMatch:{roleId, status:{ $in: [ MAIL_STATUS.CREATE, MAIL_STATUS.READ ] }} }, sendTime:{$lte: nowSeconds()} }).select('_id goods mailId mailTemType status').lean(lean);
return result;
}
}

View File

@@ -1,7 +1,8 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { index, getModelForClass, prop, DocumentType, mongoose } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil';
import { MAIL_STATUS } from '../consts/constModules/mailConst';
import { MAIL_STATUS, MAIL_TYPE } from '../consts/constModules/mailConst';
const { ObjectId } = mongoose.Types;
class RewardInter {
@prop({ required: true })
id: number;
@@ -81,9 +82,13 @@ export default class Mail extends BaseModel {
return ids;
}
public static async updateMailStatus(ids: any[], status: number) {
let count = await MailModel.update({ _id: { $in: ids } }, { $set: { status } });
return count;
public static async updateMailStatus(ids: string[], status: number) {
let mails = [];
for(let id of ids) {
const result: MailType = await MailModel.findOneAndUpdate({_id: id}, { $set:{ 'status': status } });
mails.push({id: result._id, status: result.status, mailType: MAIL_TYPE.SINGLEMAIL});
}
return mails;
}
public static async delMail(_id: string, lean = true) {