From 882f5815e69bc9dc2270d8c9ecc94acbeecad4a3 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 26 Nov 2021 17:35:10 +0800 Subject: [PATCH] fix fish hit --- src/main/java/com/xcong/excoin/rabbit/consumer/FishHitConsumer.java | 24 ++++++++++++++++++++++-- src/main/java/com/xcong/excoin/websocket/fish/model/MsgModel.java | 8 +++++++- src/main/java/com/xcong/excoin/websocket/handler/FishHitWebSocketHandler.java | 2 +- src/main/java/com/xcong/excoin/websocket/fish/HitFishWebSocket.java | 2 +- src/main/resources/application-test.yml | 2 +- src/main/resources/application.yml | 2 +- 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/FishHitConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/FishHitConsumer.java index 2bab670..3d14994 100644 --- a/src/main/java/com/xcong/excoin/rabbit/consumer/FishHitConsumer.java +++ b/src/main/java/com/xcong/excoin/rabbit/consumer/FishHitConsumer.java @@ -1,8 +1,12 @@ package com.xcong.excoin.rabbit.consumer; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.configurations.RabbitMqConfig; +import com.xcong.excoin.modules.fish.dao.CannonOwnRecordDao; import com.xcong.excoin.modules.fish.dao.MemberAccountGoldDao; +import com.xcong.excoin.modules.fish.entity.CannonOwnRecord; import com.xcong.excoin.modules.fish.entity.MemberAccountGold; import com.xcong.excoin.websocket.fish.model.MsgModel; import lombok.extern.slf4j.Slf4j; @@ -12,6 +16,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; +import java.util.List; /** * @author wzy @@ -25,21 +30,36 @@ @Autowired private MemberAccountGoldDao memberAccountGoldDao; + @Autowired + private CannonOwnRecordDao cannonOwnRecordDao; + @RabbitListener(queues = RabbitMqConfig.QUEUE_FISH_HIT) public void fishHit(String content) { log.info("收到打渔消息:{}", content); MsgModel msg = JSONObject.parseObject(content, MsgModel.class); synchronized (this) { + List<CannonOwnRecord> forts = cannonOwnRecordDao.selectCannonOwnRecordsByMemberIdAndCannonCode(msg.getMemberId(), msg.getFortCode()); + if (CollUtil.isEmpty(forts)) { + log.info("未拥有该炮台"); + return; + } + MemberAccountGold accountGold = memberAccountGoldDao.selectByMemberIdForLock(msg.getMemberId()); BigDecimal available = accountGold.getAvailableBalance(); - BigDecimal gold = BigDecimal.valueOf(msg.getObtain()).subtract(msg.getConsume()); + BigDecimal gold; + if (msg.getObtain() == 0) { + gold = msg.getConsume().negate(); + } else { + gold = BigDecimal.valueOf(msg.getObtain()); + } - if (gold.compareTo(BigDecimal.ZERO) < 0 && gold.abs().compareTo(available) > 0) { + if (msg.getConsume().compareTo(available) > 0) { log.info("余额不足"); return; } + memberAccountGoldDao.updateTotalBalanceAndAvailableBalance(accountGold.getId(), gold, gold, BigDecimal.ZERO); } } diff --git a/src/main/java/com/xcong/excoin/websocket/fish/HitFishWebSocket.java b/src/main/java/com/xcong/excoin/websocket/fish/HitFishWebSocket.java index f0d7342..0f2e73f 100644 --- a/src/main/java/com/xcong/excoin/websocket/fish/HitFishWebSocket.java +++ b/src/main/java/com/xcong/excoin/websocket/fish/HitFishWebSocket.java @@ -107,7 +107,7 @@ // 消耗金币 BigDecimal consume = (BigDecimal) fortObj; - MsgModel msg = new MsgModel(consume, fishGold, SID_MID.get(session.getId())); + MsgModel msg = new MsgModel(consume, fishGold, SID_MID.get(session.getId()), fortId); // 发送打渔消息 fishHitProducer.sendFishHitMsg(JSONObject.toJSONString(msg)); } diff --git a/src/main/java/com/xcong/excoin/websocket/fish/model/MsgModel.java b/src/main/java/com/xcong/excoin/websocket/fish/model/MsgModel.java index 7282176..de2da8c 100644 --- a/src/main/java/com/xcong/excoin/websocket/fish/model/MsgModel.java +++ b/src/main/java/com/xcong/excoin/websocket/fish/model/MsgModel.java @@ -26,9 +26,15 @@ */ private Long memberId; - public MsgModel(BigDecimal consume, int obtain, Long memberId) { + /** + * 大炮编码 + */ + private String fortCode; + + public MsgModel(BigDecimal consume, int obtain, Long memberId, String fortCode) { this.consume = consume; this.obtain = obtain; this.memberId = memberId; + this.fortCode = fortCode; } } diff --git a/src/main/java/com/xcong/excoin/websocket/handler/FishHitWebSocketHandler.java b/src/main/java/com/xcong/excoin/websocket/handler/FishHitWebSocketHandler.java index 767cc63..87165a6 100644 --- a/src/main/java/com/xcong/excoin/websocket/handler/FishHitWebSocketHandler.java +++ b/src/main/java/com/xcong/excoin/websocket/handler/FishHitWebSocketHandler.java @@ -99,7 +99,7 @@ // 消耗金币 BigDecimal consume = (BigDecimal) fortObj; - MsgModel msg = new MsgModel(consume, fishGold, SID_MID.get(session.getId())); + MsgModel msg = new MsgModel(consume, fishGold, SID_MID.get(session.getId()), fortId); // 发送打渔消息 fishHitProducer.sendFishHitMsg(JSONObject.toJSONString(msg)); } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index df9b63b..3f5f3a4 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -101,7 +101,7 @@ loop-job: false rabbit-consumer: false block-job: true - fish-hit: false + fish-hit: true aliyun: oss: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index be2fd02..a894f07 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -101,7 +101,7 @@ loop-job: false rabbit-consumer: false block-job: false - fish-hit: true + fish-hit: false aliyun: oss: -- Gitblit v1.9.1