feed流好内容
This commit is contained in:
@@ -12,6 +12,7 @@ public class CommunityTargetDTO {
|
||||
private String targetType;
|
||||
private String targetId;
|
||||
private String communityRequestId;
|
||||
private String communityType;
|
||||
private List<ContentNode> content;
|
||||
|
||||
@Setter
|
||||
|
||||
@@ -6,6 +6,9 @@ import lombok.Getter;
|
||||
public enum BusinessTypeEnum {
|
||||
|
||||
COMMUNITYTARGET("CommunityTarget", "社区舆情分析"),
|
||||
FEEDQUALITY("feedQuality", "Feed流好内容"),
|
||||
PUBLICOPINIONAUTOMATION("publicOpinionAutomation", "舆情自动化"),
|
||||
|
||||
SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"),
|
||||
SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"),
|
||||
INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"),
|
||||
|
||||
@@ -80,6 +80,9 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
@Value("${dify.community.keywordToken}")
|
||||
private String keywordToken;
|
||||
|
||||
@Value("${dify.community.feedToken}")
|
||||
private String feedToken;
|
||||
|
||||
@Value("${dify.community.imageToken}")
|
||||
private String imageFlowId;
|
||||
|
||||
@@ -142,8 +145,10 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
|
||||
//根据aiAnalysisRequestId更新请求日志表的difyRequest字段
|
||||
syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisRequestId);
|
||||
//调用DiFy工作流,并推送到社区
|
||||
processDify(difyCommunityTargetDTO,user,difyResult, aiAnalysisRequestId);
|
||||
//异步调用feed流好内容workflow
|
||||
processFeedDify(difyCommunityTargetDTO, difyResult, aiAnalysisRequestId);
|
||||
//异步调用舆情自动化工作流,并推送到社区
|
||||
processPublicOpinionAutomationDify(difyCommunityTargetDTO, user, difyResult, aiAnalysisRequestId);
|
||||
} catch (Exception e) {
|
||||
log.error("舆情自动化异常:{}", e.getMessage());
|
||||
//保存错误日志
|
||||
@@ -156,7 +161,31 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
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);
|
||||
|
||||
@@ -178,6 +207,31 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
difyResult.add(clueAnalysisResult);
|
||||
//处理结果
|
||||
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 sb
|
||||
* @param difyCommunityTargetDTO
|
||||
@@ -236,6 +291,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
|
||||
/**
|
||||
* 处理图片信息
|
||||
*
|
||||
* @param hasImageNodeType
|
||||
* @param communityTargetDTO
|
||||
* @param sb
|
||||
@@ -265,6 +321,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
|
||||
/**
|
||||
* 处理dify返回结果
|
||||
*
|
||||
* @param
|
||||
*/
|
||||
private void processingCommunityDifyResponse(
|
||||
@@ -281,6 +338,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
if (StringUtils.isNotBlank(communityRequestId)) {
|
||||
caseResult.put("communityRequestId", communityRequestId);
|
||||
}
|
||||
caseResult.put("communityType",BusinessTypeEnum.PUBLICOPINIONAUTOMATION.getCode());
|
||||
//返回结果推送到社区的MQ
|
||||
rocketMQTemplate.syncSend(topic, caseResult.toString());
|
||||
log.info("舆情分析发送回调MQ完成: {}", caseResult);
|
||||
@@ -631,7 +689,8 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
try {
|
||||
//捞取异常表中属于社区的异常数据
|
||||
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")
|
||||
.lt(AiAnalysisErrors::getRetryCount, maxRetryCount));
|
||||
if (aiAnalysisErrors != null && aiAnalysisErrors.size() > 0) {
|
||||
@@ -670,8 +729,18 @@ public class MqMessageRecordServiceImpl extends ServiceImpl<MqMessageRecordMappe
|
||||
syncUpdateDiFyRequest(difyCommunityTargetDTO, aiAnalysisError.getAiAnalysisRequestId());
|
||||
|
||||
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
|
||||
aiAnalysisErrorsMapper.update(new AiAnalysisErrors(), new LambdaUpdateWrapper<AiAnalysisErrors>()
|
||||
.eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisError.getAiAnalysisRequestId())
|
||||
|
||||
Reference in New Issue
Block a user