Kaynağa Gözat

Merge remote-tracking branch 'origin/dev_merge_mode' into dev_merge_mode

undefined
10710 1 yıl önce
ebeveyn
işleme
6bf998c0d1
3 değiştirilmiş dosya ile 109 ekleme ve 4 silme
  1. +62
    -4
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/netty/server/handler/ChatServerHandler.java
  2. +19
    -0
      xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/LogServiceImpl.java
  3. +28
    -0
      xueyi-modules/xueyi-nlt/src/main/resources/logback.xml

+ 62
- 4
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/netty/server/handler/ChatServerHandler.java Dosyayı Görüntüle

@@ -3,13 +3,22 @@ package com.xueyi.nlt.netty.server.handler;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xueyi.common.core.utils.core.ObjectUtil;
import com.xueyi.common.core.utils.core.SpringUtils;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.core.web.result.R;
import com.xueyi.nlt.api.nlt.domain.vo.DmIntentVo;
import com.xueyi.nlt.api.nlt.domain.vo.response.DmIntentResponse;
import com.xueyi.nlt.netty.server.config.ServerConfig;
import com.xueyi.nlt.nlt.service.IDmIntentService;
import com.xueyi.nlt.nlt.service.IDmRegularService;
import com.xueyi.nlt.nlt.service.impl.LogServiceImpl;
import com.xueyi.nlt.nlt.template.FreeChatTemplate;
import com.xueyi.nlt.nlt.template.MovieChatTemplate;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.digitalmans.feign.RemoteManDeviceService;
import com.xueyi.system.api.organize.domain.dto.SysEnterpriseDto;
import com.xueyi.system.api.organize.feign.RemoteEnterpriseService;
import com.yomahub.tlog.context.TLogContext;
import com.yomahub.tlog.core.annotation.TLogAspect;
import com.yomahub.tlog.core.rpc.TLogLabelBean;
import com.yomahub.tlog.core.rpc.TLogRPCHandler;
@@ -25,18 +34,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.net.InetSocketAddress;

@Component
public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
// 添加log
private static final Logger log = LoggerFactory.getLogger(ChatServerHandler.class);
private static final Logger intentLog = LoggerFactory.getLogger("intentLog");

public static ChatServerHandler INSTANCE;

@Autowired
private RemoteManDeviceService manDeviceService;
@Autowired
private FreeChatTemplate freeChatTemplate;

@Autowired
private RemoteEnterpriseService remoteEnterpriseService;

@Autowired
private IDmIntentService intentService;

@@ -44,6 +60,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
@Autowired
private MovieChatTemplate movieChatTemplate;

@Autowired
private LogServiceImpl logService;

private final TLogRPCHandler tLogRPCHandler = new TLogRPCHandler();

@PostConstruct
@@ -52,6 +71,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
INSTANCE.freeChatTemplate = this.freeChatTemplate;
INSTANCE.movieChatTemplate = this.movieChatTemplate;
INSTANCE.intentService = this.intentService;
INSTANCE.manDeviceService = this.manDeviceService;
INSTANCE.remoteEnterpriseService = this.remoteEnterpriseService;
INSTANCE.logService = this.logService;
}
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame textWebSocketFrame) throws Exception {
@@ -78,6 +100,24 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
Long operatorId = jsonObject.getLong("operatorId");
// 获取到发送人的用户id
String msg = jsonObject.getString("msg");
// 判断当前数字人所属租户
R<DmManDeviceDto> manDeviceDtoR = INSTANCE.manDeviceService.manDeviceInfoInner(devId);
if (!manDeviceDtoR.isOk() || manDeviceDtoR.getData() == null) {
JSONObject jo = new JSONObject();
jo.put("action","");
jo.put("motion","idle");
jo.put("traceId","");
jo.put("status",2);
jo.put("code",1);
jo.put("tts","设备号未激活或已过期。");
channel.writeAndFlush(new TextWebSocketFrame(jo.toJSONString()));
}
String enterpriseName = "";
// 获取当前数字人租户信息
R<SysEnterpriseDto> enterpriseDtoR = INSTANCE.remoteEnterpriseService.getInfo(manDeviceDtoR.getData().getTId());
if (enterpriseDtoR.isOk()) {
enterpriseName = enterpriseDtoR.getData().getName();
}
synchronized (ServerConfig.class) {


@@ -97,14 +137,15 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket

if (ObjectUtil.isNotNull(dmIntentResponse) && StringUtils.isNotEmpty(dmIntentResponse.getSkillCode())) {
JSONObject jo = formatResult(dmIntentResponse,2);
channel.writeAndFlush(new TextWebSocketFrame(jo.toJSONString()));
INSTANCE.reply(channel,msg, jo,enterpriseName,"正则");

return;
}
// 调用知识库,如果知识库匹配到了,则返回知识库匹配到的结果
dmIntentResponse = INSTANCE.intentService.knowledgeAnswer(dmIntentVo);
if (ObjectUtil.isNotNull(dmIntentResponse) && StringUtils.isNotEmpty(dmIntentResponse.getSkillCode()) && dmIntentResponse.getH5().getInteger("accurate") == 1) {
if (ObjectUtil.isNotNull(dmIntentResponse) && StringUtils.isNotEmpty(dmIntentResponse.getSkillCode()) && ObjectUtil.isNotNull(dmIntentResponse.getH5()) && dmIntentResponse.getH5().getInteger("accurate") == 1) {
JSONObject jo = formatResult(dmIntentResponse,2);
channel.writeAndFlush(new TextWebSocketFrame(jo.toJSONString()));
INSTANCE.reply(channel,msg, jo,enterpriseName,"知识库");
return;
}
else {
@@ -112,9 +153,10 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
jo.put("action","chat");
jo.put("motion","idle");
jo.put("traceId","");
jo.put("status",1);
jo.put("status",0);
jo.put("tts","请稍等一下,我要查询一下功能。");
channel.writeAndFlush(new TextWebSocketFrame(jo.toJSONString()));
INSTANCE.logService.record(jo,msg,enterpriseName,"大模型");
sendMsg(devId, msg);
}
} catch (Exception e) {
@@ -186,6 +228,22 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
}
}

/**
* 向客户端发送消息,同时记录日志
*
* @param jo
* @param enterpriseName
* @param type
*
*/
@TLogAspect(str = "testtest")
// @TLogAspect({"enterpriseName","type"})
private void reply(Channel channel, String msg, JSONObject jo,String enterpriseName,String type ) {

INSTANCE.logService.record(jo,msg,enterpriseName,type);
channel.writeAndFlush(new TextWebSocketFrame(jo.toJSONString()));
}

/**
* 一旦客户端连接上来,该方法被执行
*


+ 19
- 0
xueyi-modules/xueyi-nlt/src/main/java/com/xueyi/nlt/nlt/service/impl/LogServiceImpl.java Dosyayı Görüntüle

@@ -0,0 +1,19 @@
package com.xueyi.nlt.nlt.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.yomahub.tlog.core.annotation.TLogAspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class LogServiceImpl {

private static final Logger intentLog = LoggerFactory.getLogger("intentLog");

@TLogAspect({"enterpriseName","type"})
public void record(JSONObject jo,String text,String enterpriseName, String type) {
jo.put("text",text);
intentLog.info("{}", jo.toJSONString());
}
}

+ 28
- 0
xueyi-modules/xueyi-nlt/src/main/resources/logback.xml Dosyayı Görüntüle

@@ -57,11 +57,38 @@
</filter>
</appender>

<!-- 系统日志输出 -->
<appender name="file_intent" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/intent/intentInfo.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/intent/intentInfo.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<!-- 系统模块日志级别控制 -->
<logger name="com.xueyi" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />

<!-- 意图业务日志级别控制 -->
<logger name="intentLog" additivity="false" level="info" >
<appender-ref ref="file_intent" />
</logger>
<root level="info">
<appender-ref ref="console" />
</root>
@@ -70,5 +97,6 @@
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />

</root>
</configuration>

Yükleniyor…
İptal
Kaydet