邮件优化

lvxinran 2019-10-21 09:44:56 +08:00
parent c588030e47
commit 28ca7043c7
4 changed files with 72 additions and 11 deletions

View File

@ -34,7 +34,7 @@ public interface Global {
int MAIL_TYPE_IDIP = 2; //idip 邮件
int MAIL_TYPE_GM = 3; // GM 邮件
int MAIL_EFFECTIVE_TIME = 720 * 60 * 60; // 有效时间 30天
int MAIL_NOUSE_DELETE_TIME = 3;//已读邮件和已领取邮件3天后自动删除
//sysMail state
int SYS_MAIL_STATE_NEW = 1; //未发布
int SYS_MAIL_STATE_LAUCHED = 2; // 已完成

View File

@ -0,0 +1,20 @@
package com.ljsd.jieling.handler;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import org.springframework.stereotype.Component;
@Component
public class MailDeleteHandler extends BaseHandler<PlayerInfoProto.MailDelRequest>{
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.MAIL_DELETE_REQUEST;
}
@Override
public void processWithProto(ISession iSession, PlayerInfoProto.MailDelRequest proto) throws Exception {
MailLogic.getInstance().deleteMail(iSession,proto.getMailIdList());
}
}

View File

@ -25,6 +25,8 @@ public class Mail extends MongoBase {
private String sendName;//发送者名字
private long noUseDeleteTime;//已读或已领取邮件删除时间
private int mailType; //邮件类型 1:系统邮件 2:idip 业务邮件
public Mail(){
@ -86,4 +88,14 @@ public class Mail extends MongoBase {
return mailType;
}
public void setMailItem(String mailItem) {
this.mailItem = mailItem;
}
public long getNoUseDeleteTime() {
return noUseDeleteTime;
}
public void setNoUseDeleteTime(long noUseDeleteTime) {
this.noUseDeleteTime = noUseDeleteTime;
}
}

View File

@ -73,6 +73,10 @@ public class MailLogic {
removeIds.add(cMail.getId());
continue;
}
if(cMail.getNoUseDeleteTime()!=0&&cMail.getNoUseDeleteTime()<TimeUtils.now()){
removeIds.add(cMail.getId());
continue;
}
cMailList.add(cMail);
}
for(String removeId : removeIds){
@ -182,11 +186,12 @@ public class MailLogic {
return;
}
if (mail.getMailItem().isEmpty()){
mailManager.removeMail(mailId);
}else{
mail.setState(Global.MAIL_STATE_READ);
mailManager.addMail(mail);
mail.setNoUseDeleteTime(TimeUtils.now()+TimeUtils.DAY*Global.MAIL_NOUSE_DELETE_TIME);
}else{
mail.setState(Global.MAIL_DRAW_ST_UNGET);
}
mailManager.addMail(mail);
MessageUtil.sendMessage(iSession, 1,msgId, null, true);
}
@ -196,7 +201,6 @@ public class MailLogic {
User user = UserManager.getUser(userId);
MailManager mailManager = user.getMailManager();
StringBuilder mailItem = new StringBuilder();
List<String> delMailIds = new CopyOnWriteArrayList<>();
for (String mailId : mailIdsList){
Mail mail = mailManager.getMail(mailId);
if (mail == null){
@ -208,9 +212,10 @@ public class MailLogic {
}else{
mailItem.append("|").append(mail.getMailItem());
}
delMailIds.add(mailId);
// mail.setState(Global.MAIL_DRAW_ST_GOT);
// mailManager.addMail(mail);
mail.setState(Global.MAIL_DRAW_ST_GOT);
mail.setMailItem("");
mail.setNoUseDeleteTime(TimeUtils.now()+TimeUtils.DAY*Global.MAIL_NOUSE_DELETE_TIME);
mailManager.addMail(mail);
}
if(mailItem.length()==0){
MessageUtil.sendErrorResponse(iSession,0,msgId,"该邮件没有附件可以领取");
@ -223,9 +228,7 @@ public class MailLogic {
return;
}
CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr, BIReason.TAKE_MAIL_REWARD);
for (String mailId:delMailIds){
mailManager.removeMail(mailId);
}
PlayerInfoProto.TakeMailResponse takeMailResponse = PlayerInfoProto.TakeMailResponse.newBuilder()
.setDrop(dropBuilder)
.buildPartial();
@ -308,4 +311,30 @@ public class MailLogic {
MongoUtil.getLjsdMongoTemplate().lastUpdate();
}
/**
*
*/
public void deleteMail(ISession session,List<String> mailIds) throws Exception {
User user = UserManager.getUser(session.getUid());
MailManager mailManager = user.getMailManager();
Map<String, Mail> mailMap = mailManager.getMailMap();
List<String> delMailIds = new CopyOnWriteArrayList<>();
for(String mailId:mailIds){
if(!mailMap.containsKey(mailId)){
continue;
}
Mail cMail = mailMap.get(mailId);
if (cMail.getState() == Global.MAIL_STATE_NEW||cMail.getState()==Global.MAIL_DRAW_ST_UNGET||!cMail.getMailItem().isEmpty()) {
continue;
}
delMailIds.add(mailId);
}
if (delMailIds.size() != 0) {
for (String mailId : delMailIds) {
mailManager.removeMail(mailId);
}
}
MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.MAIL_DELETE_RESPONSE_VALUE,null,true);
}
}