feed流好内容

This commit is contained in:
lxu75
2025-05-23 20:00:34 +08:00
parent 726a58df13
commit 334862149c
3 changed files with 111 additions and 38 deletions

View File

@@ -12,6 +12,7 @@ public class CommunityTargetDTO {
private String targetType; private String targetType;
private String targetId; private String targetId;
private String communityRequestId; private String communityRequestId;
private String communityType;
private List<ContentNode> content; private List<ContentNode> content;
@Setter @Setter

View File

@@ -6,6 +6,9 @@ import lombok.Getter;
public enum BusinessTypeEnum { public enum BusinessTypeEnum {
COMMUNITYTARGET("CommunityTarget", "社区舆情分析"), COMMUNITYTARGET("CommunityTarget", "社区舆情分析"),
FEEDQUALITY("feedQuality", "Feed流好内容"),
PUBLICOPINIONAUTOMATION("publicOpinionAutomation", "舆情自动化"),
SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"), SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"),
SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"), SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"),
INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"), INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"),

View File

@@ -80,6 +80,9 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
@Value("${dify.community.keywordToken}") @Value("${dify.community.keywordToken}")
private String keywordToken; private String keywordToken;
@Value("${dify.community.feedToken}")
private String feedToken;
@Value("${dify.community.imageToken}") @Value("${dify.community.imageToken}")
private String imageFlowId; private String imageFlowId;
@@ -142,8 +145,10 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
//根据aiAnalysisRequestId更新请求日志表的difyRequest字段 //根据aiAnalysisRequestId更新请求日志表的difyRequest字段
syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisRequestId); syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisRequestId);
//调用DiFy工作流并推送到社区 //异步调用feed流好内容workflow
processDify(difyCommunityTargetDTO,user,difyResult, aiAnalysisRequestId); processFeedDify(difyCommunityTargetDTO, difyResult, aiAnalysisRequestId);
//异步调用舆情自动化工作流,并推送到社区
processPublicOpinionAutomationDify(difyCommunityTargetDTO, user, difyResult, aiAnalysisRequestId);
} catch (Exception e) { } catch (Exception e) {
log.error("舆情自动化异常:{}", e.getMessage()); log.error("舆情自动化异常:{}", e.getMessage());
//保存错误日志 //保存错误日志
@@ -156,7 +161,31 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
return true; return true;
} }
private void processDify(DifyCommunityTargetDTO difyCommunityTargetDTO ,String user, JSONArray difyResult, String aiAnalysisRequestId) throws InterruptedException, ExecutionException { @Async
protected void processFeedDify(DifyCommunityTargetDTO difyCommunityTargetDTO, JSONArray difyResult, String aiAnalysisRequestId) {
try {
DiFyReq diFyFeedQualityReq = new DiFyReq();
diFyFeedQualityReq.setUser(user);
diFyFeedQualityReq.setFlowId(feedToken);
diFyFeedQualityReq.setInputs(difyCommunityTargetDTO);
JSONObject difFeedQualityResult = (JSONObject) diFyService.getDiFyObject(diFyFeedQualityReq);
if (difFeedQualityResult != null) {
difFeedQualityResult.put("communityType",BusinessTypeEnum.FEEDQUALITY.getCode());
//返回结果推送到社区的MQ
rocketMQTemplate.syncSend(topic, difFeedQualityResult.toString());
log.info("Feed流好内容发送回调MQ完成: {}", difFeedQualityResult);
aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(),
new UpdateWrapper<AiAnalysisRequestLogs>().set("dify_response", difFeedQualityResult.toJSONString())
.eq("ai_analysis_request_id", aiAnalysisRequestId));
}
} catch (Exception e) {
saveOrUpdateError(aiAnalysisRequestId, e, BusinessTypeEnum.FEEDQUALITY.getCode());
}
}
@Async
protected void processPublicOpinionAutomationDify(DifyCommunityTargetDTO difyCommunityTargetDTO, String user, JSONArray difyResult, String aiAnalysisRequestId) {
try {
//舆情案件分析 //舆情案件分析
CompletableFuture<JSONObject> caseWorkFlow = CompletableFuture.supplyAsync(() -> callCaseCommunityWorkFlow(difyCommunityTargetDTO, user, caseToken), getAsyncExecutor); CompletableFuture<JSONObject> caseWorkFlow = CompletableFuture.supplyAsync(() -> callCaseCommunityWorkFlow(difyCommunityTargetDTO, user, caseToken), getAsyncExecutor);
@@ -178,6 +207,31 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
difyResult.add(clueAnalysisResult); difyResult.add(clueAnalysisResult);
//处理结果 //处理结果
processingCommunityDifyResponse(caseResult, keywordResult, clueAnalysisResult, aiAnalysisRequestId, difyCommunityTargetDTO.getCommunityRequestId()); processingCommunityDifyResponse(caseResult, keywordResult, clueAnalysisResult, aiAnalysisRequestId, difyCommunityTargetDTO.getCommunityRequestId());
} catch (Exception e) {
saveOrUpdateError(aiAnalysisRequestId, e, BusinessTypeEnum.PUBLICOPINIONAUTOMATION.getCode());
}
}
private void saveOrUpdateError(String aiAnalysisRequestId, Exception e, String businnessType) {
//根据aiAnalysisRequestId查询是否存在错误日志无则新增有则更新retryCount+1
AiAnalysisErrors aiAnalysisErrors = aiAnalysisErrorsMapper.selectOne(
new LambdaQueryWrapper<AiAnalysisErrors>()
.eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisRequestId)
.eq(AiAnalysisErrors::getAiAnalysisRequestType, businnessType)
.last("for update") // 添加悲观锁
);
if (aiAnalysisErrors != null) {
aiAnalysisErrors.setRetryCount(aiAnalysisErrors.getRetryCount() + 1);
aiAnalysisErrorsMapper.updateById(aiAnalysisErrors);
log.error("处理错误日志失败:{}", e.getMessage());
} else {
aiAnalysisErrorsMapper.insert(AiAnalysisErrors.builder()
.aiAnalysisRequestId(aiAnalysisRequestId)
.aiAnalysisErrorMessage(e.getMessage())
//舆情自动化标识
.aiAnalysisRequestType(businnessType)
.build());
}
} }
/** /**
@@ -221,6 +275,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
/** /**
* 舆情数据脱敏 * 舆情数据脱敏
*
* @param textContent * @param textContent
* @param sb * @param sb
* @param difyCommunityTargetDTO * @param difyCommunityTargetDTO
@@ -236,6 +291,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
/** /**
* 处理图片信息 * 处理图片信息
*
* @param hasImageNodeType * @param hasImageNodeType
* @param communityTargetDTO * @param communityTargetDTO
* @param sb * @param sb
@@ -265,6 +321,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
/** /**
* 处理dify返回结果 * 处理dify返回结果
*
* @param * @param
*/ */
private void processingCommunityDifyResponse( private void processingCommunityDifyResponse(
@@ -281,6 +338,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
if (StringUtils.isNotBlank(communityRequestId)) { if (StringUtils.isNotBlank(communityRequestId)) {
caseResult.put("communityRequestId", communityRequestId); caseResult.put("communityRequestId", communityRequestId);
} }
caseResult.put("communityType",BusinessTypeEnum.PUBLICOPINIONAUTOMATION.getCode());
//返回结果推送到社区的MQ //返回结果推送到社区的MQ
rocketMQTemplate.syncSend(topic, caseResult.toString()); rocketMQTemplate.syncSend(topic, caseResult.toString());
log.info("舆情分析发送回调MQ完成: {}", caseResult); log.info("舆情分析发送回调MQ完成: {}", caseResult);
@@ -631,7 +689,8 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
try { try {
//捞取异常表中属于社区的异常数据 //捞取异常表中属于社区的异常数据
List<AiAnalysisErrors> aiAnalysisErrors = aiAnalysisErrorsMapper.selectList(new LambdaQueryWrapper<AiAnalysisErrors>() List<AiAnalysisErrors> aiAnalysisErrors = aiAnalysisErrorsMapper.selectList(new LambdaQueryWrapper<AiAnalysisErrors>()
.eq(AiAnalysisErrors::getAiAnalysisRequestType, BusinessTypeEnum.COMMUNITYTARGET.getCode()) .in(AiAnalysisErrors::getAiAnalysisRequestType, BusinessTypeEnum.COMMUNITYTARGET.getCode(),
BusinessTypeEnum.PUBLICOPINIONAUTOMATION.getCode(), BusinessTypeEnum.FEEDQUALITY.getCode())
.eq(AiAnalysisErrors::getAiAnalysisErrorHandlingStatus, "0") .eq(AiAnalysisErrors::getAiAnalysisErrorHandlingStatus, "0")
.lt(AiAnalysisErrors::getRetryCount, maxRetryCount)); .lt(AiAnalysisErrors::getRetryCount, maxRetryCount));
if (aiAnalysisErrors != null && aiAnalysisErrors.size() > 0) { if (aiAnalysisErrors != null && aiAnalysisErrors.size() > 0) {
@@ -670,8 +729,18 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisError.getAiAnalysisRequestId()); syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisError.getAiAnalysisRequestId());
JSONArray difyResult = new JSONArray(); JSONArray difyResult = new JSONArray();
processDify(difyCommunityTargetDTO,user,difyResult,aiAnalysisError.getAiAnalysisRequestId());
//如果AiAnalysisRequestType是舆情自动化则调用舆情自动化方法processPublicOpinionAutomationDify如果是feed流好内容则调用feed流好内容方法processFeedDify如果是community则两个都调用
if (BusinessTypeEnum.COMMUNITYTARGET.getCode().equals(aiAnalysisError.getAiAnalysisRequestType())) {
processPublicOpinionAutomationDify(difyCommunityTargetDTO, user, difyResult, aiAnalysisError.getAiAnalysisRequestId());
processFeedDify(difyCommunityTargetDTO, difyResult, aiAnalysisError.getAiAnalysisRequestId());
}
if (BusinessTypeEnum.PUBLICOPINIONAUTOMATION.getCode().equals(aiAnalysisError.getAiAnalysisRequestType())) {
processPublicOpinionAutomationDify(difyCommunityTargetDTO, user, difyResult, aiAnalysisError.getAiAnalysisRequestId());
}
if (BusinessTypeEnum.FEEDQUALITY.getCode().equals(aiAnalysisError.getAiAnalysisRequestType())) {
processFeedDify(difyCommunityTargetDTO, difyResult, aiAnalysisError.getAiAnalysisRequestId());
}
//根据ai_analysis_request_id更新ai_analysis_errors表中的retry_count字段+1,更新status字段为1 //根据ai_analysis_request_id更新ai_analysis_errors表中的retry_count字段+1,更新status字段为1
aiAnalysisErrorsMapper.update(new AiAnalysisErrors(), new LambdaUpdateWrapper<AiAnalysisErrors>() aiAnalysisErrorsMapper.update(new AiAnalysisErrors(), new LambdaUpdateWrapper<AiAnalysisErrors>()
.eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisError.getAiAnalysisRequestId()) .eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisError.getAiAnalysisRequestId())