diff --git a/pom.xml b/pom.xml
index afc607c..d91fd35 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,7 +73,7 @@
1.5.13
- 2.20.0
+ 3.3.3
2.0.56
diff --git a/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java b/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java
index 2061d1a..468b2ed 100644
--- a/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java
+++ b/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java
@@ -33,8 +33,8 @@ public class MiniContentAudit implements Serializable {
private String moduleCode;
@TableField("biz_id")
- @Schema(description = "业务数据ID(日记ID或评论ID)")
- private String bizId;
+ @Schema(description = "业务数据主键ID(日记ID或评论ID)")
+ private Long bizId;
@TableField("audit_type")
@Schema(description = "审核类型(从config快照)")
diff --git a/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java b/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java
index 503e822..d3e98c9 100644
--- a/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java
+++ b/src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java
@@ -49,9 +49,25 @@ public class MiniContentAuditTask implements Serializable {
private String status;
@TableField("risk_level")
- @Schema(description = "风险等级: none无 / medium中 / high高")
+ @Schema(description = "机审风险等级: none无 / medium中 / high高")
private String riskLevel;
+ @TableField("label")
+ @Schema(description = "机审标签")
+ private String label;
+
+ @TableField("confidence")
+ @Schema(description = "机审信任度")
+ private Integer confidence;
+
+ @TableField("description")
+ @Schema(description = "机审描述")
+ private String description;
+
+ @TableField("request_id")
+ @Schema(description = "机审请求ID")
+ private String requestId;
+
@TableField("machine_result")
@Schema(description = "机审结果JSON")
private String machineResult;
diff --git a/src/main/java/com/youlai/boot/admin/model/form/AuditConfigForm.java b/src/main/java/com/youlai/boot/admin/model/form/AuditConfigForm.java
index b3e9758..c3e8b0b 100644
--- a/src/main/java/com/youlai/boot/admin/model/form/AuditConfigForm.java
+++ b/src/main/java/com/youlai/boot/admin/model/form/AuditConfigForm.java
@@ -22,7 +22,7 @@ public class AuditConfigForm {
@Schema(description = "审核类型: machine / manual / mixed")
private String auditType;
- @Schema(description = "机器审核风险策略: none / medium / high")
+ @Schema(description = "机器审核风险策略: 机审风险策略:auto--none转passed,medium转failed, high转failed;normal--none转passed,medium转to_manual, high转failed;cautious--none转passed,medium转to_manual, high转to_manual;")
private String riskStrategy;
}
diff --git a/src/main/java/com/youlai/boot/admin/service/AuditExecutorService.java b/src/main/java/com/youlai/boot/admin/service/AuditExecutorService.java
index 28ab9e7..36cef67 100644
--- a/src/main/java/com/youlai/boot/admin/service/AuditExecutorService.java
+++ b/src/main/java/com/youlai/boot/admin/service/AuditExecutorService.java
@@ -11,10 +11,10 @@ public interface AuditExecutorService {
*
* @param moduleCode 业务模块: animal_note / adoption_diary / user_post / *_comment / user_avatar / user_nickname / user_introduction
* @param bizId 业务数据ID
- * @param content 待审核内容 {text, images[], video}
+ * @param content 待审核内容 {text[], images[], video[]}
* @return {status: "passed"|"failed"|"manual_review", auditId: Long},配置关闭或无配置时返回null
*/
- Map executeAudit(String moduleCode, String bizId, AuditContentDTO content);
+ Map executeAudit(String moduleCode, Long bizId, AuditContentDTO content);
/**
* 轮询所有待处理的视频审核异步结果,更新任务和汇总状态
diff --git a/src/main/java/com/youlai/boot/admin/service/ContentAuditService.java b/src/main/java/com/youlai/boot/admin/service/ContentAuditService.java
index 6fc78d9..93fc67a 100644
--- a/src/main/java/com/youlai/boot/admin/service/ContentAuditService.java
+++ b/src/main/java/com/youlai/boot/admin/service/ContentAuditService.java
@@ -5,10 +5,10 @@ import com.youlai.boot.admin.model.entity.MiniContentAudit;
public interface ContentAuditService extends IService {
- MiniContentAudit createAudit(String moduleCode, String bizId, String auditType);
+ MiniContentAudit createAudit(String moduleCode, Long bizId, String auditType);
void updateAuditStatus(Long auditId, String status, String finalResult);
- MiniContentAudit getByModuleAndBizId(String moduleCode, String bizId);
+ MiniContentAudit getByModuleAndBizId(String moduleCode, Long bizId);
}
diff --git a/src/main/java/com/youlai/boot/admin/service/impl/AuditExecutorServiceImpl.java b/src/main/java/com/youlai/boot/admin/service/impl/AuditExecutorServiceImpl.java
index 6dfe641..074c005 100644
--- a/src/main/java/com/youlai/boot/admin/service/impl/AuditExecutorServiceImpl.java
+++ b/src/main/java/com/youlai/boot/admin/service/impl/AuditExecutorServiceImpl.java
@@ -2,10 +2,7 @@ package com.youlai.boot.admin.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
-import com.aliyun.green20220302.models.ImageModerationResponse;
-import com.aliyun.green20220302.models.TextModerationResponse;
-import com.aliyun.green20220302.models.VideoModerationResponse;
-import com.aliyun.green20220302.models.VideoModerationResultResponse;
+import com.aliyun.green20220302.models.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.youlai.boot.admin.constant.AuditConstants;
import com.youlai.boot.admin.model.dto.AuditContentDTO;
@@ -46,7 +43,7 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
* @return {status, auditId};配置关闭或无配置时返回 null,调用方以此判断是否跳过审核
*/
@Override
- public Map executeAudit(String moduleCode, String bizId, AuditContentDTO content) {
+ public Map executeAudit(String moduleCode, Long bizId, AuditContentDTO content) {
// 1) 查询对应模块的审核配置
MiniContentAuditConfig config = findAuditConfig(moduleCode);
if (config == null || isAuditDisabled(config)) {
@@ -124,7 +121,7 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
switch (contentType) {
case "text" -> {
- TextModerationResponse r = aliyunContentAuditUtil.textModeration(contentValue);
+ TextModerationPlusResponse r = aliyunContentAuditUtil.textModerationPlus(contentValue);
String riskLevel = extractRiskLevelFromResponse(r);
contentAuditTaskService.updateTaskMachineResult(
task.getId(), JSON.toJSONString(r), riskLevel, null, null);
@@ -192,7 +189,7 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
* 文本审核(同步)。
*/
private void handleTextAudit(MiniContentAuditTask task, String textContent, String strictness) {
- TextModerationResponse response = aliyunContentAuditUtil.textModeration(textContent);
+ TextModerationPlusResponse response = aliyunContentAuditUtil.textModerationPlus(textContent);
String riskLevel = extractRiskLevelFromResponse(response);
String machineResultJson = JSON.toJSONString(response);
applyAuditResultToTask(task, riskLevel, machineResultJson, strictness);
@@ -248,6 +245,9 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
*/
private void applyAuditResultToTask(MiniContentAuditTask task, String riskLevel, String machineResultJson, String strictness) {
if (riskLevel == null) {
+ log.warn("机审riskLevel为null, 转人工处理, taskId={}", task.getId());
+ contentAuditTaskService.updateTaskMachineResult(
+ task.getId(), machineResultJson, null, null, AuditConstants.TASK_TO_MANUAL);
return;
}
@@ -255,7 +255,7 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
String result = applyStrategy(riskLevel, strictness);
// 2. result 决定任务最终状态
- String taskStatus = AuditConstants.TASK_SUCCESS.equals(result)
+ String taskStatus = AuditConstants.RESULT_PASSED.equals(result)
? AuditConstants.TASK_SUCCESS : AuditConstants.TASK_TO_MANUAL;
// 回填任务表:machine_result(JSON) / risk_level / result / status
@@ -522,7 +522,7 @@ public class AuditExecutorServiceImpl implements AuditExecutorService {
}
String result = applyStrategy(riskLevel, strictness);
- String taskStatus = AuditConstants.TASK_SUCCESS.equals(result)
+ String taskStatus = AuditConstants.RESULT_PASSED.equals(result)
? AuditConstants.TASK_SUCCESS : AuditConstants.TASK_TO_MANUAL;
contentAuditTaskService.updateTaskMachineResult(
diff --git a/src/main/java/com/youlai/boot/admin/service/impl/ContentAuditServiceImpl.java b/src/main/java/com/youlai/boot/admin/service/impl/ContentAuditServiceImpl.java
index 25d7de4..3a2175f 100644
--- a/src/main/java/com/youlai/boot/admin/service/impl/ContentAuditServiceImpl.java
+++ b/src/main/java/com/youlai/boot/admin/service/impl/ContentAuditServiceImpl.java
@@ -16,7 +16,7 @@ import java.util.Date;
public class ContentAuditServiceImpl extends ServiceImpl implements ContentAuditService {
@Override
- public MiniContentAudit createAudit(String moduleCode, String bizId, String auditType) {
+ public MiniContentAudit createAudit(String moduleCode, Long bizId, String auditType) {
MiniContentAudit entity = new MiniContentAudit();
entity.setUuid(IdUtil.fastSimpleUUID());
entity.setModuleCode(moduleCode);
@@ -43,7 +43,7 @@ public class ContentAuditServiceImpl extends ServiceImpl()
.eq(MiniContentAudit::getModuleCode, moduleCode)
.eq(MiniContentAudit::getBizId, bizId));
diff --git a/src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java b/src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java
index 48ce635..f0606a4 100644
--- a/src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java
+++ b/src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java
@@ -100,29 +100,55 @@ public class AliyunContentAuditUtil {
}
// ===================== 文本审核 =====================
+ //
public TextModerationResponse textModeration(String content) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
params.put("content", content);
TextModerationRequest request = new TextModerationRequest()
- .setService("commentDetection")
+ .setService("comment_detection")
.setServiceParameters(params.toJSONString());
return client.textModeration(request);
});
}
+ // ===================== 文本审核Plus =====================
+ //nickname_detection_pro 用户昵称检测_专业版(用户昵称) ;ugc_moderation_byllm_pro UGC场景文本审核大模型服务_专业版(个人简介 / 作品内容) ;
+ //comment_detection_pro 公聊评论内容检测_专业版(评论); ugc_moderation_byllm UGC场景文本审核大模型服务 (作品标题)
+ public TextModerationPlusResponse textModerationPlus(String content) {
+ return executeWithFailover(client -> {
+ JSONObject params = new JSONObject();
+// params.put("content", content);
+
+ JSONArray arr = new JSONArray();
+ arr.add("狗日的");
+ arr.add(content);
+ params.put("content", arr);
+
+ TextModerationPlusRequest textModerationPlusRequest = new TextModerationPlusRequest ()
+ .setService("ugc_moderation_byllm_pro")
+ .setServiceParameters(params.toJSONString());
+
+ return client.textModerationPlus(textModerationPlusRequest);
+ });
+ }
+
// ===================== 图片审核 =====================
+ // 头像图片检测:profilePhotoCheck (头像) ; AI生成图片鉴别_含隐式标识版:aigcDetectorFull(AI生成图片) ;
+ // 大小模型融合图片审核服务:postlmageCheckByVL (用户上传的图片) ; OSS基线检测(OSS普惠版专用):oss_baselineCheck
+ // 通用图片审核大模型服务:baselineCheckByVL(用户作品);图片万物识别:generalRecognition ;营销素材检测:advertisingCheck
public ImageModerationResponse imageModeration(String imageUrl) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
- JSONArray arr = new JSONArray();
- arr.add(imageUrl);
- params.put("images", arr);
+// JSONArray arr = new JSONArray();
+// arr.add(imageUrl);
+// params.put("images", arr);
+ params.put("imageUrl", imageUrl);
ImageModerationRequest request = new ImageModerationRequest()
- .setService("imageDetection")
+ .setService("oss_baselineCheck")
.setServiceParameters(params.toJSONString());
return client.imageModeration(request);
@@ -130,6 +156,7 @@ public class AliyunContentAuditUtil {
}
// ===================== 视频审核(异步) =====================
+ //视频文件检测:videoDetection ; AI生成视频判定:videoAigcDetector ; 视频文件检测_大模型版:videoDetectionByVL
public VideoModerationResponse videoModeration(String videoUrl) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
diff --git a/src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java b/src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java
index 56af536..7ddcf0e 100644
--- a/src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java
+++ b/src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java
@@ -36,6 +36,10 @@ public class MiniContentAuditAppeal implements Serializable {
@Schema(description = "申诉人用户ID")
private Long userId;
+ @TableField("evidence")
+ @Schema(description = "证据")
+ private String evidence;
+
@TableField("reason")
@Schema(description = "申诉原因")
private String reason;
diff --git a/src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java b/src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java
index f88bfe1..1ac8918 100644
--- a/src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java
+++ b/src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java
@@ -44,6 +44,10 @@ public class MiniReport implements Serializable {
@Schema(description = "举报原因:违法违规,侵权冒犯,垃圾虚假,违规操作,其他")
private String reasonCategory;
+ @TableField("evidence")
+ @Schema(description = "证据")
+ private String evidence;
+
@TableField("description")
@Schema(description = "举报补充描述")
private String description;
diff --git a/src/main/java/com/youlai/boot/mini/service/impl/UserPostServiceImpl.java b/src/main/java/com/youlai/boot/mini/service/impl/UserPostServiceImpl.java
index 7344c03..af7ffd1 100644
--- a/src/main/java/com/youlai/boot/mini/service/impl/UserPostServiceImpl.java
+++ b/src/main/java/com/youlai/boot/mini/service/impl/UserPostServiceImpl.java
@@ -224,19 +224,19 @@ public class UserPostServiceImpl extends ServiceImpl auditResult = auditExecutorService.executeAudit("user_post", postUuid, auditContent);
+ Map auditResult = auditExecutorService.executeAudit("user_post", postId, auditContent);
if (auditResult != null) {
- log.info("用户作品审核任务已创建, postUuid={}, auditResult={}", postUuid, auditResult);
+ log.info("用户作品审核任务已创建, postId={}, auditResult={}", postId, auditResult);
}
} catch (Exception e) {
- log.error("创建用户作品审核任务失败, 降级为人工审核, postUuid={}", postUuid, e);
- createManualReviewFallback(postUuid, formData);
+ log.error("创建用户作品审核任务失败, 降级为人工审核, postId={}", postId, e);
+ createManualReviewFallback(postId, formData);
}
- return postUuid;
+ return post.getUuid();
}
/**
@@ -275,12 +275,12 @@ public class UserPostServiceImpl extends ServiceImpl