Parcourir la source

fix : 客服支付修改为订单只发送一次

bilingfeng il y a 1 an
Parent
commit
803d6c2d4a

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -23,7 +23,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 <Websocket客服系统优化处理06> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <Websocket客服支付订单只发送一次> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 25 - 15
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/KfAppletMsgServiceImpl.java

@@ -119,21 +119,9 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
         KfRoomMsg kfRoomMsg = this.transform(kfAppletMsgDTO, gameApplet, kfRoom, postData, msgContent);
         //判断是否请求支付链接
         String orderId = redisUtil.getCache(RedisKeyConstant.GAME_CUSTOM_PAY_SIGN + kfAppletMsgDTO.getFromUserName());
-        //存在客服支付订单
-        if (Strings.isNotBlank(orderId)) {
-            //收到的是充值消息或者小程序消息, 回复充值链接
-            if (KfAppletMsgDTO.MSG_CONTENT_PAY.contains(kfAppletMsgDTO.getContent())
-                    || Objects.equals(kfAppletMsgDTO.getMsgType(), KfRoomMsgTypeEnum.KF_MSG_TYPE_MINI_APP.getValue())) {
-                Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderId, orderId));
-                //存在待支付的客服支付订单, 判断订单状态
-                if (Objects.equals(order.getStatus(), OrderStatusEnum.READY_PAY.getValue())
-                        || Objects.equals(order.getStatus(), OrderStatusEnum.WAIT_PAY.getValue())) {
-                    this.sendCustomPayMessage(gameApplet.getGameId(), kfAppletMsgDTO.getFromUserName(), kfRoom, order);
-                    kfRoomMsg.setReadStatus(Boolean.TRUE);
-                    kfRoomMsgService.save(kfRoomMsg);
-                    return;
-                }
-            }
+        //客服订单处理
+        if (Strings.isNotBlank(orderId) && this.orderHandle(orderId, gameApplet.getGameId(), kfAppletMsgDTO, kfRoom, kfRoomMsg)) {
+            return;
         }
         //保存房间消息
         kfRoomMsgService.save(kfRoomMsg);
@@ -149,6 +137,26 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
         this.pushMessage(this.transform(kfRoom, gameApplet.getGameId(), kfRoomMsg, msgContent));
     }
 
+    private boolean orderHandle(String orderId, Long gameId, KfAppletMsgDTO kfAppletMsgDTO, KfRoom kfRoom, KfRoomMsg kfRoomMsg) {
+        //判断收到的消息是否为充值消息或者小程序消息
+        if (!KfAppletMsgDTO.MSG_CONTENT_PAY.contains(kfAppletMsgDTO.getContent())
+                && !Objects.equals(kfAppletMsgDTO.getMsgType(), KfRoomMsgTypeEnum.KF_MSG_TYPE_MINI_APP.getValue())) {
+            return Boolean.FALSE;
+        }
+        //查询订单
+        Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderId, orderId));
+        //判断订单是否为预下单和待支付状态
+        if (!Objects.equals(order.getStatus(), OrderStatusEnum.READY_PAY.getValue())
+                && !Objects.equals(order.getStatus(), OrderStatusEnum.WAIT_PAY.getValue())) {
+            return Boolean.FALSE;
+        }
+        //发送客服支付消息
+        this.sendCustomPayMessage(gameId, kfAppletMsgDTO.getFromUserName(), kfRoom, order);
+        kfRoomMsg.setReadStatus(Boolean.TRUE);
+        kfRoomMsgService.save(kfRoomMsg);
+        return Boolean.TRUE;
+    }
+
     private void eventMsgHandle(GameApplet gameApplet, KfAppletMsgDTO kfAppletMsgDTO) {
         //事件类型
         String event = kfAppletMsgDTO.getEvent();
@@ -341,6 +349,8 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
         //返回发送的消息内容
         log.error("客服支付, 发送支付信息 : {}", JsonUtil.toString(msgParamMap));
         kfRoomMsgService.save(this.transform(openId, gameId, kfRoom, JsonUtil.toString(msgParamMap)));
+        //删除待支付订单标记
+        redisUtil.deleteCache(RedisKeyConstant.GAME_CUSTOM_PAY_SIGN + openId);
     }
 
     private KfRoomMsg transform(String openId, Long gameId, KfRoom kfRoom, String msgContent) {