Преглед изворни кода

fix : 小程序自动回复消息

bilingfeng пре 11 месеци
родитељ
комит
2bbfbee12f

+ 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服务启动成功 < (新链路小程序登录信息上报5´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 < (新链路小程序登自动回复消息´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 40 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/enums/KfSessionFromEnum.java

@@ -0,0 +1,40 @@
+package com.zanxiang.game.module.manage.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-04-30
+ * @description : 消息来源
+ */
+@Getter
+@AllArgsConstructor
+public enum KfSessionFromEnum {
+
+    /**
+     * 来源广告
+     */
+    KF_SESSION_FROM_AD("KF_SESSION_FROM_AD"),
+
+    /**
+     * 来源平台
+     */
+    KF_SESSION_FROM_PLATFORM("KF_SESSION_FROM_PLATFORM");
+
+    /**
+     * 消息类型
+     */
+    private String value;
+
+    public static KfSessionFromEnum getKfSessionFrom(String sessionFrom) {
+        for (KfSessionFromEnum kfSessionFromEnum : KfSessionFromEnum.values()) {
+            if (Objects.equals(sessionFrom, kfSessionFromEnum.getValue())) {
+                return kfSessionFromEnum;
+            }
+        }
+        return null;
+    }
+}

+ 5 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/dto/KfAppletMsgDTO.java

@@ -102,4 +102,9 @@ public class KfAppletMsgDTO {
      * 小程序图片媒体id
      */
     private String ThumbMediaId;
+
+    /**
+     * 消息来源
+     */
+    private String SessionFrom;
 }

+ 12 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IKfAppletReplyService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.KfAppletReply;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-04-30
+ * @description : 小程序自动回复
+ */
+public interface IKfAppletReplyService extends IService<KfAppletReply> {
+}

+ 52 - 4
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/KfAppletMsgServiceImpl.java

@@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.module.manage.constant.RedisKeyConstant;
-import com.zanxiang.game.module.manage.enums.KfRoomMsgOwnerEnum;
-import com.zanxiang.game.module.manage.enums.KfRoomMsgTypeEnum;
-import com.zanxiang.game.module.manage.enums.KfWebSocketMsgEnum;
-import com.zanxiang.game.module.manage.enums.OrderStateEnum;
+import com.zanxiang.game.module.manage.enums.*;
 import com.zanxiang.game.module.manage.pojo.dto.KfAppletMsgDTO;
 import com.zanxiang.game.module.manage.pojo.dto.KfWebSocketMsgDTO;
 import com.zanxiang.game.module.manage.pojo.dto.PayApplicationDTO;
@@ -110,6 +107,9 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
     @Autowired
     private IDistributedLockComponent distributedLockComponent;
 
+    @Autowired
+    private IKfAppletReplyService kfAppletReplyService;
+
     @Override
     public void appletMsg(String postData) {
         log.error("接收到客服消息 : {}", postData);
@@ -156,6 +156,8 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
         }
         //客服休息时间, 发送自动回复
         this.systemReplyHandle(gameApplet.getGameId(), kfAppletMsgDTO.getFromUserName(), kfRoom);
+        //小程序自动回复
+        this.appletReplyHandle(gameApplet.getGameId(), kfAppletMsgDTO.getFromUserName(), kfRoom, kfAppletMsgDTO.getSessionFrom());
         //消息报警监测
         this.monitorWordHandle(gameApplet, kfAppletMsgDTO);
         //保存房间消息
@@ -174,6 +176,52 @@ public class KfAppletMsgServiceImpl implements IKfAppletMsgService {
         this.pushMessage(this.transform(kfRoom, gameApplet.getGameId(), kfAppletMsgDTO.getFromUserName(), kfRoomMsg, msgContent));
     }
 
+    private void appletReplyHandle(Long gameId, String openId, KfRoom kfRoom, String sessionFrom) {
+        //来源类型
+        KfSessionFromEnum kfSessionFrom = KfSessionFromEnum.getKfSessionFrom(sessionFrom);
+        if (kfSessionFrom == null) {
+            return;
+        }
+        //获取自动回复配置
+        KfAppletReply kfAppletReply = kfAppletReplyService.getById(gameId);
+        if (kfAppletReply == null) {
+            return;
+        }
+        //判断是否来源与平台
+        if (Objects.equals(sessionFrom, KfSessionFromEnum.KF_SESSION_FROM_PLATFORM.getValue())) {
+            //回复默认消息
+            if (Strings.isNotBlank(kfAppletReply.getReplyDefault())) {
+                this.sysMsgSend(gameId, openId, kfAppletReply.getReplyDefault(), kfRoom);
+            }
+        }
+        //判断是否来源于广告
+        if (Objects.equals(sessionFrom, KfSessionFromEnum.KF_SESSION_FROM_AD.getValue())) {
+            //存在图片发送
+            if (Strings.isNotBlank(kfAppletReply.getReplyImg())) {
+                this.sysImgMsgSend(gameId, openId, kfAppletReply.getReplyImg(), kfRoom);
+            }
+            //存在链接发送
+            if (Strings.isNotBlank(kfAppletReply.getReplyLink())) {
+                this.sysLinkMsgSend(gameId, openId, kfRoom, kfAppletReply.getReplyLink());
+            }
+        }
+    }
+
+    private void sysLinkMsgSend(Long gameId, String openId, KfRoom kfRoom, String linkJson) {
+        //发送消息
+        Map<String, Object> msgParamMap = new HashMap<>(3);
+        msgParamMap.put("touser", openId);
+        msgParamMap.put("link", JsonUtil.toMap(linkJson, Map.class, Object.class));
+        msgParamMap.put("msgtype", KfRoomMsgTypeEnum.KF_MSG_TYPE_LINK.getValue());
+        Tuple2<Long, String> tuple2 = kfWxApiService.sendCustomMessageApi(gameId, msgParamMap);
+        //发送失败
+        if (!Objects.equals(tuple2.getT1(), 0L)) {
+            return;
+        }
+        //保存发送的支付链接消息
+        kfRoomMsgService.save(this.transform(openId, gameId, kfRoom, KfRoomMsgTypeEnum.KF_MSG_TYPE_LINK, JsonUtil.toString(msgParamMap)));
+    }
+
     private void monitorWordHandle(GameApplet gameApplet, KfAppletMsgDTO kfAppletMsgDTO) {
         //非文本消息
         if (!Objects.equals(kfAppletMsgDTO.getMsgType(), KfRoomMsgTypeEnum.KF_MSG_TYPE_TEXT.getValue())) {

+ 18 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/KfAppletReplyServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.IKfAppletReplyService;
+import com.zanxiang.game.module.mybatis.entity.KfAppletReply;
+import com.zanxiang.game.module.mybatis.mapper.KfAppletReplyMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-04-30
+ * @description : 小程序自动回复
+ */
+@Slf4j
+@Service
+public class KfAppletReplyServiceImpl extends ServiceImpl<KfAppletReplyMapper, KfAppletReply> implements IKfAppletReplyService {
+}

+ 66 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/KfAppletReply.java

@@ -0,0 +1,66 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-04-30
+ * @description : 小程序自动回复
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_kf_applet_reply")
+public class KfAppletReply implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 游戏
+     */
+    @TableId(value = "game_id", type = IdType.INPUT)
+    private Long gameId;
+
+    /**
+     * 应用id
+     */
+    private String appId;
+
+    /**
+     * 默认回复
+     */
+    private String replyDefault;
+
+    /**
+     * 文本回复
+     */
+    private String replyText;
+
+    /**
+     * 图片回复
+     */
+    private String replyImg;
+
+    /**
+     * 图文链接回复
+     */
+    private String replyLink;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/KfAppletReplyMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.KfAppletReply;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-04-30
+ * @description : ${description}
+ */
+public interface KfAppletReplyMapper extends BaseMapper<KfAppletReply> {
+}