Commit 4ce373e7 authored by alex yao's avatar alex yao

feat:会议助手

parent d78be39f
...@@ -3,10 +3,9 @@ package cn.com.poc.meeting.cache; ...@@ -3,10 +3,9 @@ package cn.com.poc.meeting.cache;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.SpringUtils; import cn.com.poc.common.utils.SpringUtils;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -35,9 +34,11 @@ public class KeyWordCounter { ...@@ -35,9 +34,11 @@ public class KeyWordCounter {
} }
resMap.put(keyword, count); resMap.put(keyword, count);
} }
return resMap; Map<String, Integer> sortedMap = getSortedMap(resMap);
return sortedMap;
} }
/** /**
* 缓存关键词计数 * 缓存关键词计数
*/ */
...@@ -69,6 +70,24 @@ public class KeyWordCounter { ...@@ -69,6 +70,24 @@ public class KeyWordCounter {
Integer count = (Integer) map.get(k); Integer count = (Integer) map.get(k);
resMap.put(String.valueOf(k), count); resMap.put(String.valueOf(k), count);
} }
return resMap; return getSortedMap(resMap);
}
private static @NotNull Map<String, Integer> getSortedMap(Map<String, Integer> resMap) {
// 将Map转换为List
List<Map.Entry<String, Integer>> list = new ArrayList<>(resMap.entrySet());
// 使用自定义Comparator按value排序
list.sort((o1, o2) -> {
return o2.getValue().compareTo(o1.getValue()); // 降序
});
// 将排序后的结果存入LinkedHashMap (可选,如果需要保持插入顺序)
Map<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
} }
} }
package cn.com.poc.meeting.convert; package cn.com.poc.meeting.convert;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.meeting.cache.KeyWordCounter;
import cn.com.poc.meeting.constants.MeetingAssistantConstantEnum;
import cn.com.poc.meeting.entity.AnalysisTaskDetailEntity;
import cn.com.poc.meeting.model.BizMeetingAssistantAnalysisTaskModel; import cn.com.poc.meeting.model.BizMeetingAssistantAnalysisTaskModel;
import cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity; import cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity;
import cn.com.poc.meeting.dto.BizMeetingAssistantAnalysisTaskDto; import cn.com.poc.meeting.dto.BizMeetingAssistantAnalysisTaskDto;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class BizMeetingAssistantAnalysisTaskConvert { public class BizMeetingAssistantAnalysisTaskConvert {
public static BizMeetingAssistantAnalysisTaskEntity modelToEntity(BizMeetingAssistantAnalysisTaskModel model){ public static BizMeetingAssistantAnalysisTaskEntity modelToEntity(BizMeetingAssistantAnalysisTaskModel model) {
BizMeetingAssistantAnalysisTaskEntity entity = new BizMeetingAssistantAnalysisTaskEntity(); BizMeetingAssistantAnalysisTaskEntity entity = new BizMeetingAssistantAnalysisTaskEntity();
entity.setId(model.getId()); entity.setId(model.getId());
entity.setMemberId(model.getMemberId()); entity.setMemberId(model.getMemberId());
...@@ -30,7 +41,7 @@ public class BizMeetingAssistantAnalysisTaskConvert { ...@@ -30,7 +41,7 @@ public class BizMeetingAssistantAnalysisTaskConvert {
return entity; return entity;
} }
public static BizMeetingAssistantAnalysisTaskModel entityToModel(BizMeetingAssistantAnalysisTaskEntity entity){ public static BizMeetingAssistantAnalysisTaskModel entityToModel(BizMeetingAssistantAnalysisTaskEntity entity) {
BizMeetingAssistantAnalysisTaskModel model = new BizMeetingAssistantAnalysisTaskModel(); BizMeetingAssistantAnalysisTaskModel model = new BizMeetingAssistantAnalysisTaskModel();
model.setId(entity.getId()); model.setId(entity.getId());
model.setMemberId(entity.getMemberId()); model.setMemberId(entity.getMemberId());
...@@ -52,8 +63,8 @@ public class BizMeetingAssistantAnalysisTaskConvert { ...@@ -52,8 +63,8 @@ public class BizMeetingAssistantAnalysisTaskConvert {
model.setSysVersion(entity.getSysVersion()); model.setSysVersion(entity.getSysVersion());
return model; return model;
} }
public static BizMeetingAssistantAnalysisTaskDto entityToDto(BizMeetingAssistantAnalysisTaskEntity entity){ public static BizMeetingAssistantAnalysisTaskDto entityToDto(BizMeetingAssistantAnalysisTaskEntity entity) {
BizMeetingAssistantAnalysisTaskDto dto = new BizMeetingAssistantAnalysisTaskDto(); BizMeetingAssistantAnalysisTaskDto dto = new BizMeetingAssistantAnalysisTaskDto();
dto.setId(entity.getId()); dto.setId(entity.getId());
dto.setMemberId(entity.getMemberId()); dto.setMemberId(entity.getMemberId());
...@@ -76,7 +87,7 @@ public class BizMeetingAssistantAnalysisTaskConvert { ...@@ -76,7 +87,7 @@ public class BizMeetingAssistantAnalysisTaskConvert {
return dto; return dto;
} }
public static BizMeetingAssistantAnalysisTaskEntity dtoToEntity(BizMeetingAssistantAnalysisTaskDto dto){ public static BizMeetingAssistantAnalysisTaskEntity dtoToEntity(BizMeetingAssistantAnalysisTaskDto dto) {
BizMeetingAssistantAnalysisTaskEntity entity = new BizMeetingAssistantAnalysisTaskEntity(); BizMeetingAssistantAnalysisTaskEntity entity = new BizMeetingAssistantAnalysisTaskEntity();
entity.setId(dto.getId()); entity.setId(dto.getId());
entity.setMemberId(dto.getMemberId()); entity.setMemberId(dto.getMemberId());
...@@ -98,4 +109,33 @@ public class BizMeetingAssistantAnalysisTaskConvert { ...@@ -98,4 +109,33 @@ public class BizMeetingAssistantAnalysisTaskConvert {
entity.setSysVersion(dto.getSysVersion()); entity.setSysVersion(dto.getSysVersion());
return entity; return entity;
} }
public static AnalysisTaskDetailEntity bizEntityToDetailEntity(BizMeetingAssistantAnalysisTaskEntity entity) {
AnalysisTaskDetailEntity analysisTaskDetailEntity = new AnalysisTaskDetailEntity();
analysisTaskDetailEntity.setAnalysisStatus(entity.getAnalysisStatus());
analysisTaskDetailEntity.setThemeContent(entity.getThemeContent());
analysisTaskDetailEntity.setThemeGenerateStatus(entity.getThemeGenerateStatus());
analysisTaskDetailEntity.setKeyWordGenerateStatus(entity.getKeyWordGenerateStatus());
//获取关键字计数
if (MeetingAssistantConstantEnum.COMPLETED.getStatus().equals(entity.getKeyWordGenerateStatus())) {
Map<String, Integer> keywordCountMap = KeyWordCounter.getKeywordCountCache(entity.getDiaguesId());
analysisTaskDetailEntity.setKeyWordCount(keywordCountMap);
if (StringUtils.isNotBlank(entity.getKeyWordContent())) {
List<String> keyWords = new ArrayList<>(keywordCountMap.keySet());
analysisTaskDetailEntity.setKeyWordContent(keyWords);
}
}
analysisTaskDetailEntity.setMeetingSummaryContent(entity.getMeetingSummaryContent());
analysisTaskDetailEntity.setMeetingSummaryGenerateStatus(entity.getMeetingSummaryGenerateStatus());
analysisTaskDetailEntity.setFeaturedQuestionsGenerateStatus(entity.getFeaturedQuestionsGenerateStatus());
if (StringUtils.isNotBlank(entity.getFeaturedQuestions())) {
List<String> featuredQuestions = JsonUtils.deSerialize(entity.getFeaturedQuestions(), new TypeReference<List<String>>() {
}.getType());
analysisTaskDetailEntity.setFeaturedQuestions(featuredQuestions);
}
return analysisTaskDetailEntity;
}
} }
\ No newline at end of file
package cn.com.poc.meeting.convert; package cn.com.poc.meeting.convert;
import cn.com.poc.meeting.model.BizMeetingAssistantAsrTaskModel;
import cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity;
import cn.com.poc.meeting.dto.BizMeetingAssistantAsrTaskDto; import cn.com.poc.meeting.dto.BizMeetingAssistantAsrTaskDto;
import cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity;
import cn.com.poc.meeting.model.BizMeetingAssistantAsrTaskModel;
public class BizMeetingAssistantAsrTaskConvert { public class BizMeetingAssistantAsrTaskConvert {
......
...@@ -58,13 +58,13 @@ public class AnalysisTaskDetailDto { ...@@ -58,13 +58,13 @@ public class AnalysisTaskDetailDto {
* key_word_content * key_word_content
* 关键词 * 关键词
*/ */
private java.lang.String keyWordContent; private List<String> keyWordContent;
public java.lang.String getKeyWordContent() { public List<String> getKeyWordContent() {
return this.keyWordContent; return keyWordContent;
} }
public void setKeyWordContent(java.lang.String keyWordContent) { public void setKeyWordContent(List<String> keyWordContent) {
this.keyWordContent = keyWordContent; this.keyWordContent = keyWordContent;
} }
...@@ -141,17 +141,16 @@ public class AnalysisTaskDetailDto { ...@@ -141,17 +141,16 @@ public class AnalysisTaskDetailDto {
* featured_questions * featured_questions
* 推荐问 * 推荐问
*/ */
private java.lang.String featuredQuestions; private List<String> featuredQuestions;
public java.lang.String getFeaturedQuestions() { public List<String> getFeaturedQuestions() {
return this.featuredQuestions; return featuredQuestions;
} }
public void setFeaturedQuestions(java.lang.String featuredQuestions) { public void setFeaturedQuestions(List<String> featuredQuestions) {
this.featuredQuestions = featuredQuestions; this.featuredQuestions = featuredQuestions;
} }
/** /**
* spk_sets * spk_sets
* 说话人列表 * 说话人列表
......
...@@ -56,13 +56,13 @@ public class AnalysisTaskDetailEntity { ...@@ -56,13 +56,13 @@ public class AnalysisTaskDetailEntity {
* key_word_content * key_word_content
* 关键词 * 关键词
*/ */
private String keyWordContent; private List<String> keyWordContent;
public String getKeyWordContent() { public List<String> getKeyWordContent() {
return this.keyWordContent; return keyWordContent;
} }
public void setKeyWordContent(String keyWordContent) { public void setKeyWordContent(List<String> keyWordContent) {
this.keyWordContent = keyWordContent; this.keyWordContent = keyWordContent;
} }
...@@ -139,17 +139,16 @@ public class AnalysisTaskDetailEntity { ...@@ -139,17 +139,16 @@ public class AnalysisTaskDetailEntity {
* featured_questions * featured_questions
* 推荐问 * 推荐问
*/ */
private String featuredQuestions; private List<String> featuredQuestions;
public String getFeaturedQuestions() { public List<String> getFeaturedQuestions() {
return this.featuredQuestions; return featuredQuestions;
} }
public void setFeaturedQuestions(String featuredQuestions) { public void setFeaturedQuestions(List<String> featuredQuestions) {
this.featuredQuestions = featuredQuestions; this.featuredQuestions = featuredQuestions;
} }
/** /**
* asr_status * asr_status
* 语音识别任务状态 * 语音识别任务状态
......
...@@ -2,6 +2,7 @@ package cn.com.poc.meeting.scheduler; ...@@ -2,6 +2,7 @@ package cn.com.poc.meeting.scheduler;
import cn.com.poc.common.constant.CommonConstant; import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.utils.DateUtils;
import cn.com.poc.meeting.constants.MeetingAssistantConstantEnum; import cn.com.poc.meeting.constants.MeetingAssistantConstantEnum;
import cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity; import cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity;
import cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity; import cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity;
...@@ -19,6 +20,7 @@ import org.springframework.scheduling.annotation.Scheduled; ...@@ -19,6 +20,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -92,6 +94,17 @@ public class MeetingAssistantScheduler { ...@@ -92,6 +94,17 @@ public class MeetingAssistantScheduler {
bizMeetingAssistantAsrTaskService.update(taskEntity); bizMeetingAssistantAsrTaskService.update(taskEntity);
// 更新会议内容分析任务状态 // 更新会议内容分析任务状态
updateAnalysisTaskToFailed(taskEntity); updateAnalysisTaskToFailed(taskEntity);
} else {
//判断执行时长,若超过15分钟则判断为失败.
Date now = new Date();
long diffTwoDate = DateUtils.diffTwoDate(now, taskEntity.getCreatedTime());
if (diffTwoDate > 15 * 60 * 1000){
taskEntity.setGenerateStatus(MeetingAssistantConstantEnum.FAILED.getStatus());
taskEntity.setMessage("Time Out");
bizMeetingAssistantAsrTaskService.update(taskEntity);
// 更新会议内容分析任务状态
updateAnalysisTaskToFailed(taskEntity);
}
} }
} }
} }
......
...@@ -131,15 +131,18 @@ public class MeetingAssistantAnalysisConsumerServiceImpl implements MeetingAssis ...@@ -131,15 +131,18 @@ public class MeetingAssistantAnalysisConsumerServiceImpl implements MeetingAssis
//更新会话标题 //更新会话标题
logger.info("-------- update dialogues title -------------"); logger.info("-------- update dialogues title -------------");
BizAiDialoguesEntity bizAiDialoguesEntity = new BizAiDialoguesEntity(); BizAiDialoguesEntity bizAiDialoguesEntity = new BizAiDialoguesEntity();
bizAiDialoguesEntity.setDialoguesId(message.getDiaguesId()); bizAiDialoguesEntity.setDialoguesId(bizMeetingAssistantAnalysisTaskEntity.getDiaguesId());
bizAiDialoguesEntity.setDialoguesType(AiDialoguesTypeEnum.MEETING_ASSISTANT.getType()); bizAiDialoguesEntity.setDialoguesType(AiDialoguesTypeEnum.MEETING_ASSISTANT.getType());
bizAiDialoguesEntity.setIsDeleted(CommonConstant.IsDeleted.N); bizAiDialoguesEntity.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizAiDialoguesEntity> aiDialoguesEntities = bizAiDialoguesService.findByExample(bizAiDialoguesEntity, null); List<BizAiDialoguesEntity> aiDialoguesEntities = bizAiDialoguesService.findByExample(bizAiDialoguesEntity, null);
if (CollectionUtils.isNotEmpty(aiDialoguesEntities)) { if (CollectionUtils.isNotEmpty(aiDialoguesEntities)) {
BizAiDialoguesEntity updateAiDialoguesEntity = aiDialoguesEntities.get(0); BizAiDialoguesEntity updateAiDialoguesEntity = aiDialoguesEntities.get(0);
updateAiDialoguesEntity.setTitle(bizMeetingAssistantAnalysisTaskEntity.getThemeContent()); if (StringUtils.isNotBlank(bizMeetingAssistantAnalysisTaskEntity.getThemeContent())
bizAiDialoguesService.update(updateAiDialoguesEntity); && !bizMeetingAssistantAnalysisTaskEntity.getThemeContent().equals(updateAiDialoguesEntity.getTitle())) {
logger.info("------- update dialogues title success , title:{} -----------", updateAiDialoguesEntity.getTitle()); updateAiDialoguesEntity.setTitle(bizMeetingAssistantAnalysisTaskEntity.getThemeContent());
bizAiDialoguesService.update(updateAiDialoguesEntity);
logger.info("------- update dialogues title success , title:{} -----------", updateAiDialoguesEntity.getTitle());
}
} }
} }
...@@ -236,7 +239,7 @@ public class MeetingAssistantAnalysisConsumerServiceImpl implements MeetingAssis ...@@ -236,7 +239,7 @@ public class MeetingAssistantAnalysisConsumerServiceImpl implements MeetingAssis
KeyWordCounter.cacheKeyWordCount(message.getDiaguesId(), countMap); KeyWordCounter.cacheKeyWordCount(message.getDiaguesId(), countMap);
updateMessage.setKeyWordGenerateStatus(MeetingAssistantConstantEnum.COMPLETED.getStatus()); updateMessage.setKeyWordGenerateStatus(MeetingAssistantConstantEnum.COMPLETED.getStatus());
updateMessage.setKeyWordContent(JsonUtils.serialize(keyWords)); updateMessage.setKeyWordContent(JsonUtils.serialize(countMap.entrySet()));
} else { } else {
updateMessage.setKeyWordGenerateStatus(MeetingAssistantConstantEnum.FAILED.getStatus()); updateMessage.setKeyWordGenerateStatus(MeetingAssistantConstantEnum.FAILED.getStatus());
} }
......
...@@ -83,7 +83,7 @@ public class ASRApi { ...@@ -83,7 +83,7 @@ public class ASRApi {
Assert.notBlank(sessionId); Assert.notBlank(sessionId);
HttpUriRequest httpUriRequest = RequestBuilder.post() HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(ENDPOINT + GET_DETAIL_API) .setUri(ENDPOINT + GET_DETAIL_API)
.addHeader(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString())) // .addHeader(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()))
.addParameter("sessionId", sessionId) .addParameter("sessionId", sessionId)
.build(); .build();
return LocalHttpClient.executeJsonResult(httpUriRequest, GetDetailResult.class); return LocalHttpClient.executeJsonResult(httpUriRequest, GetDetailResult.class);
......
simultanous_interpretation.endpoint= simultanous_interpretation.endpoint=http://192.168.21.102:48100
\ No newline at end of file \ No newline at end of file
simultanous_interpretation.endpoint= simultanous_interpretation.endpoint=http://192.168.21.102:48100
\ No newline at end of file \ No newline at end of file
simultanous_interpretation.endpoint= simultanous_interpretation.endpoint=http://192.168.21.102:48100
\ No newline at end of file
simultanous_interpretation.endpoint= simultanous_interpretation.endpoint=http://192.168.21.102:48100
\ No newline at end of file \ No newline at end of file
...@@ -24,7 +24,7 @@ public class ASRTest { ...@@ -24,7 +24,7 @@ public class ASRTest {
@Test @Test
public void test_speechToText() { public void test_speechToText() {
String fileUrl = ""; String fileUrl = "https://gsst-poe-sit.gz.bcebos.com/data/20250811/1754897064286.wav";
String uuid = UUIDTool.getUUID(); String uuid = UUIDTool.getUUID();
System.out.println("sessionId : " + uuid); System.out.println("sessionId : " + uuid);
String result = asrService.speechToText(uuid, fileUrl); String result = asrService.speechToText(uuid, fileUrl);
...@@ -33,7 +33,7 @@ public class ASRTest { ...@@ -33,7 +33,7 @@ public class ASRTest {
@Test @Test
public void test_asrGetDetail() { public void test_asrGetDetail() {
String sessionId = ""; String sessionId = "meeting_assistant_c9c7021dd0db4ecda6bf7eb3a325e745_4";
AsrOfflineDetailResult asrServiceDetail = asrService.getDetail(sessionId); AsrOfflineDetailResult asrServiceDetail = asrService.getDetail(sessionId);
System.out.println(JsonUtils.serialize(asrServiceDetail)); System.out.println(JsonUtils.serialize(asrServiceDetail));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment