特邀发言官代码编写
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
package com.volvo.ai.analytic.center.controller;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.volvo.ai.analytic.center.service.SpokesManService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/community/event")
|
||||
@Slf4j
|
||||
public class CommunityEGEventController {
|
||||
|
||||
@Autowired
|
||||
private SpokesManService spokesmanService;
|
||||
|
||||
@PostMapping("/spokesmanCallBack")
|
||||
public void spokesmanCallBack(@RequestBody Object req){
|
||||
log.info("社区特邀发言官入参", JSON.toJSONString(req));
|
||||
spokesmanService.spokesManCallBack(req);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.volvo.ai.analytic.center.service;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.huaweicloud.sdk.eg.v1.model.CloudEvents;
|
||||
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
|
||||
import com.volvo.ai.analytic.center.dto.req.DifyCommunityTargetDTO;
|
||||
import com.volvo.ai.analytic.center.dto.req.DifyImageWorkFlow;
|
||||
import com.volvo.ai.analytic.center.dto.req.SpokesManDTO;
|
||||
import com.volvo.ai.analytic.center.entity.AiAnalysisErrors;
|
||||
import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs;
|
||||
import com.volvo.ai.analytic.center.entity.AiAnalyticBusinessConfig;
|
||||
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper;
|
||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper;
|
||||
import com.volvo.ai.analytic.center.mapper.AiAnalyticBusinessConfigMapper;
|
||||
import com.volvo.ai.analytic.center.utils.AiAnalysisUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 社区特邀发言官服务
|
||||
* 该服务用于处理社区特邀发言官相关的业务逻辑
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SpokesManService {
|
||||
|
||||
@Autowired
|
||||
private AiAnalyticBusinessConfigMapper aiAnalyticBusinessConfigMapper;
|
||||
|
||||
@Autowired
|
||||
private DiFyService diFyService;
|
||||
|
||||
@Autowired
|
||||
private HuaWeiEGService huaWeiEGService;
|
||||
|
||||
@Autowired
|
||||
private AiAnalysisRequestLogsMapper aiAnalysisRequestLogsMapper;
|
||||
|
||||
@Autowired
|
||||
private AiAnalysisErrorsMapper aiAnalysisErrorsMapper;
|
||||
|
||||
@Value("${dify.spokesMan.token}")
|
||||
private String spokesManToken;
|
||||
|
||||
@Value("${dify.spokesMan.channel}")
|
||||
private String channel;
|
||||
|
||||
/**
|
||||
* 处理社区特邀发言官回调请求
|
||||
*
|
||||
* @param req SpokesManDTO 请求对象
|
||||
*/
|
||||
public void spokesManCallBack(Object req) {
|
||||
|
||||
//把req转成SpokesManDTO对象
|
||||
SpokesManDTO spokesManDTO = JSON.parseObject(JSON.toJSONString(req), SpokesManDTO.class);
|
||||
if (spokesManDTO == null || spokesManDTO.getFiles() == null || spokesManDTO.getFiles().isEmpty()
|
||||
|| spokesManDTO.getPlatform() == null || spokesManDTO.getTheme() == null) {
|
||||
log.error("社区特邀发言官入参错误");
|
||||
}
|
||||
// 生成ai分析请求id
|
||||
String aiAnalysisRequestId = AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.COMMUNITYTARGET.getCode());
|
||||
try {
|
||||
// 异步保存请求日志
|
||||
syncSaveRequestLogs(JSON.toJSONString(req), aiAnalysisRequestId);
|
||||
|
||||
//获取特邀发言官敏感词配置
|
||||
List<AiAnalyticBusinessConfig> sensiveWordLibraryList = aiAnalyticBusinessConfigMapper.selectList(
|
||||
Wrappers.<AiAnalyticBusinessConfig>lambdaQuery()
|
||||
.eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.SPOKESMAN.getCode())
|
||||
.eq(AiAnalyticBusinessConfig::getConfigType, BusinessTypeEnum.SPOKESMAN_SENSITIVE_WORD.getCode())
|
||||
.eq(AiAnalyticBusinessConfig::getIsDeleted, 0)
|
||||
.eq(AiAnalyticBusinessConfig::getConfigVersion, 1)
|
||||
);
|
||||
log.info("社区特邀发言官敏感词配置:{}", sensiveWordLibraryList.toArray());
|
||||
//获取审核规则配置
|
||||
List<AiAnalyticBusinessConfig> auditRulesList = aiAnalyticBusinessConfigMapper.selectList(
|
||||
Wrappers.<AiAnalyticBusinessConfig>lambdaQuery()
|
||||
.eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.SPOKESMAN.getCode())
|
||||
.eq(AiAnalyticBusinessConfig::getConfigType, BusinessTypeEnum.SPOKESMAN_AUDIT_RULE.getCode())
|
||||
.eq(AiAnalyticBusinessConfig::getIsDeleted, 0)
|
||||
.eq(AiAnalyticBusinessConfig::getConfigVersion, 1)
|
||||
);
|
||||
log.info("社区特邀发言官审核规则配置:{}", auditRulesList.toArray());
|
||||
String sensiveWordLibrary = sensiveWordLibraryList.stream()
|
||||
.map(AiAnalyticBusinessConfig::getConfigData)
|
||||
.collect(Collectors.joining(" "));
|
||||
String auditRules = auditRulesList.stream()
|
||||
.map(AiAnalyticBusinessConfig::getConfigData)
|
||||
.collect(Collectors.joining(" "));
|
||||
JSONArray imageUrls = new JSONArray();
|
||||
|
||||
for (String url : spokesManDTO.getFiles()) {
|
||||
DifyImageWorkFlow diFyImageWorkFlow = new DifyImageWorkFlow();
|
||||
diFyImageWorkFlow.setUrl(url);
|
||||
imageUrls.add(diFyImageWorkFlow);
|
||||
}
|
||||
DiFyReq diFyReq = new DiFyReq();
|
||||
diFyReq.setUser(BusinessTypeEnum.SPOKESMAN.getCode());
|
||||
diFyReq.setFlowId(spokesManToken);
|
||||
JSONObject inputs = new JSONObject();
|
||||
inputs.put("files", imageUrls);
|
||||
inputs.put("platform", spokesManDTO.getPlatform());
|
||||
inputs.put("theme", spokesManDTO.getTheme());
|
||||
inputs.put("auditRule", auditRules);
|
||||
inputs.put("sensitiveWordLibrary", sensiveWordLibrary);
|
||||
diFyReq.setInputs(inputs);
|
||||
//异步更新dify请求日志
|
||||
syncUpdateDiFyRequest(diFyReq, aiAnalysisRequestId);
|
||||
//调用workflow
|
||||
JSONObject difSpokesManResult = (JSONObject) diFyService.getDiFyObject(diFyReq);
|
||||
//发送事件网格
|
||||
CloudEvents cloudEvents = new CloudEvents();
|
||||
cloudEvents.setData(difSpokesManResult);
|
||||
huaWeiEGService.sendEvent(cloudEvents, channel);
|
||||
//异步更新dify响应日志
|
||||
syncUpdateDiFyResponse(difSpokesManResult, aiAnalysisRequestId);
|
||||
} catch (Exception e) {
|
||||
log.error("舆情自动化异常:{}", e.getMessage());
|
||||
//保存错误日志
|
||||
aiAnalysisErrorsMapper.insert(AiAnalysisErrors.builder()
|
||||
.aiAnalysisRequestId(aiAnalysisRequestId)
|
||||
.aiAnalysisErrorMessage(e.getMessage())
|
||||
.aiAnalysisRequestType(BusinessTypeEnum.SPOKESMAN.getCode())
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
@Async
|
||||
protected void syncSaveRequestLogs(String message, String aiAnalysisRequestId) {
|
||||
aiAnalysisRequestLogsMapper.insert(AiAnalysisRequestLogs.builder()
|
||||
.aiAnalysisRequestId(aiAnalysisRequestId)
|
||||
.businessRequest(message)
|
||||
.difyAgentKey(spokesManToken)
|
||||
.aiAnalysisRequestType(BusinessTypeEnum.SPOKESMAN.getCode())
|
||||
.build());
|
||||
}
|
||||
@Async
|
||||
protected void syncUpdateDiFyRequest(Object obj, String aiAnalysisRequestId) {
|
||||
aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(),
|
||||
new UpdateWrapper<AiAnalysisRequestLogs>().set("dify_request", JSON.toJSONString(obj))
|
||||
.eq("ai_analysis_request_id", aiAnalysisRequestId));
|
||||
}
|
||||
@Async
|
||||
protected void syncUpdateDiFyResponse(JSONObject result, String aiAnalysisRequestId) {
|
||||
aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(),
|
||||
new UpdateWrapper<AiAnalysisRequestLogs>().set("dify_response", result.toJSONString())
|
||||
.eq("ai_analysis_request_id", aiAnalysisRequestId));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user