diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/SimpleTransaction.java b/serverlogic/src/main/java/com/ljsd/jieling/core/SimpleTransaction.java index e448633c8..c2ffbff9b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/SimpleTransaction.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/SimpleTransaction.java @@ -4,6 +4,7 @@ import com.google.protobuf.GeneratedMessage; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.PlayerInfoProto; import com.ljsd.jieling.util.MessageUtil; @@ -13,11 +14,12 @@ import java.util.*; /** * 伪事务 */ + public class SimpleTransaction { //当前过程的session private ISession session; private List tasks = new LinkedList<>(); - private Map> sendCacheMap = new HashMap<>(); + private Map> sendCacheMap = new HashMap<>(); private static final Map combineMsgId = new HashMap<>(); static { @@ -45,7 +47,35 @@ public class SimpleTransaction { combineMsgId.put(MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE, (MessageUtil.CombinePolicy< PlayerInfoProto.AllGiftGoodsIndication>) list -> { List combineList = new LinkedList<>(); if(list.size()>0){ - combineList.add(list.get(list.size()-1)); + if(list.size()>1){ + //修复连续获得多个英雄 前端无法处理问题 + HashMap giftId2startTimeMap = new HashMap<>(); + list.getFirst().getGiftGoodsInfoList().forEach(giftGoodsInfo -> { + if(giftGoodsInfo.getStartTime()!=0){ + giftId2startTimeMap.put(giftGoodsInfo.getGoodsId(),giftGoodsInfo.getStartTime()); + } + }); + + PlayerInfoProto.AllGiftGoodsIndication.Builder build = PlayerInfoProto.AllGiftGoodsIndication.newBuilder(); + list.getLast().getGiftGoodsInfoList().forEach(giftGoodsInfo -> { + if(giftId2startTimeMap.containsKey(giftGoodsInfo.getGoodsId())){ + CommonProto.GiftGoodsInfo.Builder builder = CommonProto.GiftGoodsInfo.newBuilder(); + builder.setStartTime(giftId2startTimeMap.get(giftGoodsInfo.getGoodsId())); + builder.setBuyTimes(giftGoodsInfo.getBuyTimes()); + builder.setEndTime(giftGoodsInfo.getEndTime()); + builder.setGoodsId(giftGoodsInfo.getGoodsId()); + builder.setDynamicBuyTimes(giftGoodsInfo.getDynamicBuyTimes()); + build.addGiftGoodsInfo(builder); + }else { + build.addGiftGoodsInfo(giftGoodsInfo); + } + }); + + combineList.add(build.build()); + }else { + combineList.add(list.getLast()); + } + } return combineList; }); @@ -61,7 +91,7 @@ public class SimpleTransaction { public void dealWhileCommit(TransTask transTask) { if (transTask instanceof SendTask && combineMsgId.keySet().contains(((SendTask) transTask).getMsgId())) { - List linkedList = sendCacheMap.getOrDefault(((SendTask) transTask).getMsgId(), null); + LinkedList linkedList = sendCacheMap.getOrDefault(((SendTask) transTask).getMsgId(), null); if (null == linkedList) { linkedList = new LinkedList<>(); sendCacheMap.put(((SendTask) transTask).getMsgId(), linkedList); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java index 58f659ce2..7a38a101b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java @@ -25,10 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.ZSetOperations; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; +import java.util.*; public class MessageUtil { @@ -343,7 +340,7 @@ public class MessageUtil { * @param list 移除被合并项 * @return 返回一个合并协议 */ - List combine(List list); + List combine(LinkedList list); } public static void checkAndSendMsg(){