特邀发言官代码编写
This commit is contained in:
@@ -0,0 +1,27 @@
|
|||||||
|
package com.volvo.ai.analytic.center.dto.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class SpokesManDTO {
|
||||||
|
|
||||||
|
private List<String> files;
|
||||||
|
|
||||||
|
private String platform;
|
||||||
|
|
||||||
|
private String theme;
|
||||||
|
|
||||||
|
private String communityRequestId;
|
||||||
|
|
||||||
|
private String redNoteType;
|
||||||
|
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
private String postUrl;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.volvo.ai.analytic.center.entity;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class DifySpokesManDTO {
|
||||||
|
|
||||||
|
private String channel;
|
||||||
|
}
|
||||||
@@ -23,7 +23,15 @@ public enum BusinessTypeEnum {
|
|||||||
|
|
||||||
CASE("case", "舆情事件"),
|
CASE("case", "舆情事件"),
|
||||||
|
|
||||||
SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌")
|
SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌"),
|
||||||
|
|
||||||
|
|
||||||
|
//特邀发言官
|
||||||
|
SPOKESMAN("SPOKESMAN", "特邀发言官"),
|
||||||
|
//特邀发言官敏感词
|
||||||
|
SPOKESMAN_SENSITIVE_WORD("SPOKESMAN_SENSITIVE_WORD", "特邀发言官敏感词"),
|
||||||
|
//特邀发言官审核规则
|
||||||
|
SPOKESMAN_AUDIT_RULE("SPOKESMAN_AUDIT_RULE", "特邀发言官审核规则"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private String code;
|
private String code;
|
||||||
|
|||||||
@@ -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