Browse Source

增加内容审核模型

glx_phase2
glx 2 weeks ago
parent
commit
ee804cf371
  1. 18
      pom.xml
  2. 14
      src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditConfigMapper.java
  3. 14
      src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditMapper.java
  4. 14
      src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditTaskMapper.java
  5. 91
      src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java
  6. 70
      src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditConfig.java
  7. 102
      src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java
  8. 6
      src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java
  9. 189
      src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java
  10. 5
      src/main/java/com/youlai/boot/mini/controller/AdoptionDiaryController.java
  11. 14
      src/main/java/com/youlai/boot/mini/mapper/MiniContentAuditAppealMapper.java
  12. 14
      src/main/java/com/youlai/boot/mini/mapper/MiniReportMapper.java
  13. 91
      src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java
  14. 103
      src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java
  15. 10
      src/main/resources/application-dev.yml
  16. 9
      src/main/resources/mapper/admin/MiniContentAuditConfigMapper.xml
  17. 9
      src/main/resources/mapper/admin/MiniContentAuditMapper.xml
  18. 9
      src/main/resources/mapper/admin/MiniContentAuditTaskMapper.xml
  19. 9
      src/main/resources/mapper/mini/MiniContentAuditAppealMapper.xml
  20. 9
      src/main/resources/mapper/mini/MiniReportMapper.xml

18
pom.xml

@ -72,6 +72,11 @@
<javacv.platform.version>1.5.13</javacv.platform.version>
<!-- 阿里内容审核 -->
<aliyun.green20220302.version>2.20.0</aliyun.green20220302.version>
<!-- 阿里fastjson -->
<alibaba.fastjson.version>2.0.56</alibaba.fastjson.version>
</properties>
@ -319,6 +324,19 @@
<version>${dynamic-datasource.version}</version>
</dependency>-->
<!-- 阿里云内容审核-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>green20220302</artifactId>
<version>${aliyun.green20220302.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${alibaba.fastjson.version}</version>
</dependency>
</dependencies>
<build>

14
src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditConfigMapper.java

@ -0,0 +1,14 @@
package com.youlai.boot.admin.mapper;
import com.youlai.boot.admin.model.entity.MiniContentAuditConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 内容审核配置表 Mapper 接口
*
* @author jwy
* @since
*/
public interface MiniContentAuditConfigMapper extends BaseMapper<MiniContentAuditConfig> {
}

14
src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditMapper.java

@ -0,0 +1,14 @@
package com.youlai.boot.admin.mapper;
import com.youlai.boot.admin.model.entity.MiniContentAudit;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 审核汇总表 Mapper 接口
*
* @author jwy
* @since
*/
public interface MiniContentAuditMapper extends BaseMapper<MiniContentAudit> {
}

14
src/main/java/com/youlai/boot/admin/mapper/MiniContentAuditTaskMapper.java

@ -0,0 +1,14 @@
package com.youlai.boot.admin.mapper;
import com.youlai.boot.admin.model.entity.MiniContentAuditTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 审核任务表 Mapper 接口
*
* @author jwy
* @since
*/
public interface MiniContentAuditTaskMapper extends BaseMapper<MiniContentAuditTask> {
}

91
src/main/java/com/youlai/boot/admin/model/entity/MiniContentAudit.java

@ -0,0 +1,91 @@
package com.youlai.boot.admin.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("mini_content_audit")
@Schema(description = "审核汇总表")
public class MiniContentAudit implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "审核汇总表主键")
private Long id;
@TableField("uuid")
@Schema(description = "UUID,前端交互")
private String uuid;
@TableField("module_code")
@Schema(description = "业务模块")
private String moduleCode;
@TableField("biz_id")
@Schema(description = "业务数据ID(日记ID或评论ID)")
private String bizId;
@TableField("audit_type")
@Schema(description = "审核类型(从config快照)")
private String auditType;
@TableField("status")
@Schema(description = "审核状态:reviewing机审中 / passed通过 / failed不通过 / manual_review待人工 / appealing申诉中")
private String status;
@TableField("final_result")
@Schema(description = "最终结果")
private String finalResult;
@TableField("operator")
@Schema(description = "最后操作人ID")
private Long operator;
@TableField("audit_time")
@Schema(description = "审核完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date auditTime;
@TableField("create_time")
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@TableField("create_timestamp")
@Schema(description = "创建时间毫秒级时间戳")
private Long createTimestamp;
@TableField("create_by")
@Schema(description = "创建人ID")
private Long createBy;
@TableField("update_time")
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@TableField("update_timestamp")
@Schema(description = "更新时间毫秒级时间戳")
private Long updateTimestamp;
@TableField("update_by")
@Schema(description = "修改人ID")
private Long updateBy;
@TableField("is_deleted")
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
private Byte isDeleted;
}

70
src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditConfig.java

@ -0,0 +1,70 @@
package com.youlai.boot.admin.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("mini_content_audit_config")
@Schema(description = "内容审核配置表")
public class MiniContentAuditConfig implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "审核配置表主键id")
private Long id;
@TableField("uuid")
@Schema(description = "UUID,前端交互")
private String uuid;
@TableField("module_code")
@Schema(description = "业务模块: animal_note / adoption_diary / user_post / note_comment / diary_comment / post_comment / user_avatar / user_nickname / user_introduction")
private String moduleCode;
@TableField("audit_enable")
@Schema(description = "是否开启审核, 0-开启, 1-关闭")
private Byte auditEnable;
@TableField("audit_type")
@Schema(description = "审核类型: machine机器 / manual手动 / mixed混合")
private String auditType;
@TableField("risk_strategy")
@Schema(description = "机器审核风险策略:none无,medium中等,high高")
private String riskStrategy;
@TableField("create_time")
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@TableField("create_by")
@Schema(description = "创建人ID")
private Long createBy;
@TableField("update_time")
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@TableField("update_by")
@Schema(description = "修改人ID")
private Long updateBy;
@TableField("is_deleted")
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
private Byte isDeleted;
}

102
src/main/java/com/youlai/boot/admin/model/entity/MiniContentAuditTask.java

@ -0,0 +1,102 @@
package com.youlai.boot.admin.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("mini_content_audit_task")
@Schema(description = "审核任务表")
public class MiniContentAuditTask implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "审核任务表主键id")
private Long id;
@TableField("uuid")
@Schema(description = "UUID,前端交互")
private String uuid;
@TableField("content_audit_id")
@Schema(description = "内容审核汇总id")
private Long contentAuditId;
@TableField("content_type")
@Schema(description = "内容类型: text / image / video")
private String contentType;
@TableField("content_value")
@Schema(description = "待审核内容(文字或文件URL)")
private String contentValue;
@TableField("audit_type")
@Schema(description = "审核类型: machine机器 / manual手动 / mixed混合")
private String auditType;
@TableField("status")
@Schema(description = "审核状态:reviewing审核中 / success成功 / to_manual转手动")
private String status;
@TableField("risk_level")
@Schema(description = "风险等级: none无 / medium中 / high高")
private String riskLevel;
@TableField("machine_result")
@Schema(description = "机审结果JSON")
private String machineResult;
@TableField("task_id")
@Schema(description = "机审异步视频任务id(轮询设置结果)")
private String taskId;
@TableField("result")
@Schema(description = "passed通过 / failed未通过")
private String result;
@TableField("operator")
@Schema(description = "人工审核操作人")
private Long operator;
@TableField("create_time")
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@TableField("create_timestamp")
@Schema(description = "创建时间毫秒级时间戳")
private Long createTimestamp;
@TableField("create_by")
@Schema(description = "创建人ID")
private Long createBy;
@TableField("update_time")
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@TableField("update_timestamp")
@Schema(description = "更新时间毫秒级时间戳")
private Long updateTimestamp;
@TableField("update_by")
@Schema(description = "修改人ID")
private Long updateBy;
@TableField("is_deleted")
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
private Byte isDeleted;
}

6
src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java

@ -120,6 +120,12 @@ public class MyBatisPlusGenerator {
,new TableConfig("mini_user_post_comment", IdType.AUTO, "mini")
,new TableConfig("mini_user_post_comment_like", IdType.AUTO, "mini")
,new TableConfig("mini_adoption_application", IdType.AUTO, "mini")
,new TableConfig("mini_content_audit_appeal", IdType.AUTO, "mini")
,new TableConfig("mini_report", IdType.AUTO, "mini")
,new TableConfig("mini_content_audit_config", IdType.AUTO, "admin")
,new TableConfig("mini_content_audit", IdType.AUTO, "admin")
,new TableConfig("mini_content_audit_task", IdType.AUTO, "admin")
// ,new TableConfig("mini_stray_animal", IdType.AUTO, "mini")
// ,new TableConfig("mini_stray_animal", IdType.INPUT, "minitest")

189
src/main/java/com/youlai/boot/common/util/AliyunContentAuditUtil.java

@ -0,0 +1,189 @@
package com.youlai.boot.common.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.*;
import com.aliyun.teaopenapi.models.Config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 阿里云内容安全统一审核工具类v2.0
* ----------------------------------------
* 支持
* 1. 文本审核
* 2. 图片审核
* 3. 视频审核异步
* 4. 取消视频审核任务直播流
*
* 特性
* - 自动切换备用节点cn-beijing
* - application.yml 中读取配置
* - 返回 null 表示请求失败业务层自行判断
*/
@Slf4j
@Component
public class AliyunContentAuditUtil {
@Value("${audit.aliyun.green.accessKeyId}")
private String accessKeyId;
@Value("${audit.aliyun.green.accessKeySecret}")
private String accessKeySecret;
// 主节点(上海)
private static final String REGION_PRIMARY = "cn-shanghai";
private static final String ENDPOINT_PRIMARY = "green-cip.cn-shanghai.aliyuncs.com";
// 备用节点(北京)
private static final String REGION_BACKUP = "cn-beijing";
private static final String ENDPOINT_BACKUP = "green-cip.cn-beijing.aliyuncs.com";
/**
* 构建客户端
*/
private Client createClient(boolean useBackup) throws Exception {
String region = useBackup ? REGION_BACKUP : REGION_PRIMARY;
String endpoint = useBackup ? ENDPOINT_BACKUP : ENDPOINT_PRIMARY;
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
.setRegionId(region)
.setEndpoint(endpoint)
.setReadTimeout(6000)
.setConnectTimeout(3000);
return new Client(config);
}
/**
* 自动调用机制
* - 优先使用上海节点
* - 如果响应码为 500 或出现异常自动切换至北京节点重试一次
*/
private <T> T executeWithFailover(AliyunRequestExecutor<T> executor) {
try {
Client primary = createClient(false);
T result = executor.execute(primary);
if (isServerError(result)) {
log.warn("阿里云内容安全服务端异常,切换到北京节点重试...");
Client backup = createClient(true);
return executor.execute(backup);
}
return result;
} catch (Exception e) {
log.error("阿里云内容安全调用异常(主节点失败),切换至备用节点", e);
try {
Client backup = createClient(true);
return executor.execute(backup);
} catch (Exception ex) {
log.error("备用节点调用也失败", ex);
return null;
}
}
}
/**
* 判断是否服务端异常statusCode=500
*/
private boolean isServerError(Object response) {
try {
Integer code = (Integer) response.getClass().getMethod("getStatusCode").invoke(response);
return code != null && code == 500;
} catch (Exception ignored) {
return false;
}
}
// ===================== 文本审核 =====================
public TextModerationResponse textModeration(String content) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
params.put("content", content);
TextModerationRequest request = new TextModerationRequest()
.setService("commentDetection")
.setServiceParameters(params.toJSONString());
return client.textModeration(request);
});
}
// ===================== 图片审核 =====================
public ImageModerationResponse imageModeration(String imageUrl) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
JSONArray arr = new JSONArray();
arr.add(imageUrl);
params.put("images", arr);
ImageModerationRequest request = new ImageModerationRequest()
.setService("imageDetection")
.setServiceParameters(params.toJSONString());
return client.imageModeration(request);
});
}
// ===================== 视频审核(异步) =====================
public VideoModerationResponse videoModeration(String videoUrl) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
params.put("url", videoUrl);
VideoModerationRequest request = new VideoModerationRequest()
.setService("videoDetection")
.setServiceParameters(params.toJSONString());
return client.videoModeration(request);
});
}
// ===================== 查询视频审核结果 =====================
public VideoModerationResultResponse videoModerationResult(String taskId) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
params.put("taskId", taskId);
VideoModerationResultRequest request = new VideoModerationResultRequest()
.setService("videoDetection")
.setServiceParameters(params.toJSONString());
return client.videoModerationResult(request);
});
}
// ===================== 取消视频任务(直播流) =====================
public VideoModerationCancelResponse cancelVideoTask(String taskId) {
return executeWithFailover(client -> {
JSONObject params = new JSONObject();
params.put("taskId", taskId);
VideoModerationCancelRequest request = new VideoModerationCancelRequest()
.setService("liveStreamDetection")
.setServiceParameters(params.toJSONString());
return client.videoModerationCancel(request);
});
}
/**
* 输出调试日志
*/
public static void print(Object result) {
System.out.println(JSON.toJSONString(result, true));
}
/**
* 函数式接口用于统一封装 SDK 调用逻辑
*/
@FunctionalInterface
private interface AliyunRequestExecutor<T> {
T execute(Client client) throws Exception;
}
}

5
src/main/java/com/youlai/boot/mini/controller/AdoptionDiaryController.java

@ -194,9 +194,4 @@ public class AdoptionDiaryController {
return Result.success();
}
//TODO 领养申请
//TODO 查询已领养的动物列表 ;这边里的接口需要查询多少字段数据,是查询所有,还是简单几个字段,然后可以根据动物uuid 用已有的 @Operation(summary = "获取动物信息详情")
// @RequestMapping(value = "/getDetails/{animalUuid}", method = RequestMethod.GET) 接口查询更多信息;
}

14
src/main/java/com/youlai/boot/mini/mapper/MiniContentAuditAppealMapper.java

@ -0,0 +1,14 @@
package com.youlai.boot.mini.mapper;
import com.youlai.boot.mini.model.entity.MiniContentAuditAppeal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 内容申诉表 Mapper 接口
*
* @author jwy
* @since
*/
public interface MiniContentAuditAppealMapper extends BaseMapper<MiniContentAuditAppeal> {
}

14
src/main/java/com/youlai/boot/mini/mapper/MiniReportMapper.java

@ -0,0 +1,14 @@
package com.youlai.boot.mini.mapper;
import com.youlai.boot.mini.model.entity.MiniReport;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 举报记录表 Mapper 接口
*
* @author jwy
* @since
*/
public interface MiniReportMapper extends BaseMapper<MiniReport> {
}

91
src/main/java/com/youlai/boot/mini/model/entity/MiniContentAuditAppeal.java

@ -0,0 +1,91 @@
package com.youlai.boot.mini.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("mini_content_audit_appeal")
@Schema(description = "内容申诉表")
public class MiniContentAuditAppeal implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "申诉表主键")
private Long id;
@TableField("uuid")
@Schema(description = "UUID,前端交互")
private String uuid;
@TableField("audit_id")
@Schema(description = "关联content_audit.id")
private Long auditId;
@TableField("user_id")
@Schema(description = "申诉人用户ID")
private Long userId;
@TableField("reason")
@Schema(description = "申诉原因")
private String reason;
@TableField("status")
@Schema(description = "处理状态:pending待处理 / approved通过 / rejected驳回")
private String status;
@TableField("handler_user_id")
@Schema(description = "处理人ID")
private Long handlerUserId;
@TableField("handle_remark")
@Schema(description = "处理备注")
private String handleRemark;
@TableField("handle_time")
@Schema(description = "处理时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date handleTime;
@TableField("create_time")
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@TableField("create_timestamp")
@Schema(description = "创建时间毫秒级时间戳")
private Long createTimestamp;
@TableField("create_by")
@Schema(description = "创建人ID")
private Long createBy;
@TableField("update_time")
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@TableField("update_timestamp")
@Schema(description = "更新时间毫秒级时间戳")
private Long updateTimestamp;
@TableField("update_by")
@Schema(description = "修改人ID")
private Long updateBy;
@TableField("is_deleted")
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
private Byte isDeleted;
}

103
src/main/java/com/youlai/boot/mini/model/entity/MiniReport.java

@ -0,0 +1,103 @@
package com.youlai.boot.mini.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("mini_report")
@Schema(description = "举报记录表")
public class MiniReport implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "举报表主键")
private Long id;
@TableField("uuid")
@Schema(description = "UUID,前端交互")
private String uuid;
@TableField("target_type")
@Schema(description = "举报目标类型: animal_note/adoption_diary/user_post/note_comment/diary_comment/post_comment/username等")
private String targetType;
@TableField("target_id")
@Schema(description = "被举报内容ID")
private String targetId;
@TableField("reporter_user_id")
@Schema(description = "举报人用户ID")
private Long reporterUserId;
@TableField("reason_category")
@Schema(description = "举报原因:违法违规,侵权冒犯,垃圾虚假,违规操作,其他")
private String reasonCategory;
@TableField("description")
@Schema(description = "举报补充描述")
private String description;
@TableField("status")
@Schema(description = "处理状态:pending待处理 / processed已处理 / dismissed已驳回")
private String status;
@TableField("audit_id")
@Schema(description = "处理举报后创建的content_audit.id(可为空)")
private Long auditId;
@TableField("handler_user_id")
@Schema(description = "处理人ID")
private Long handlerUserId;
@TableField("handle_remark")
@Schema(description = "处理备注")
private String handleRemark;
@TableField("handle_time")
@Schema(description = "处理时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date handleTime;
@TableField("create_time")
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@TableField("create_timestamp")
@Schema(description = "创建时间毫秒级时间戳")
private Long createTimestamp;
@TableField("create_by")
@Schema(description = "创建人ID")
private Long createBy;
@TableField("update_time")
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@TableField("update_timestamp")
@Schema(description = "更新时间毫秒级时间戳")
private Long updateTimestamp;
@TableField("update_by")
@Schema(description = "修改人ID")
private Long updateBy;
@TableField("is_deleted")
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)")
private Byte isDeleted;
}

10
src/main/resources/application-dev.yml

@ -235,3 +235,13 @@ bloom:
fpp: 0.001
# 布隆过期时间(单位天):【注释/留空/配0】都代表永久不过期
expire-days: 7
# 阿里云内容审核配置
audit:
aliyun:
green:
accessKeyId: LTAI5tGpuYNRysEhC8sh1ntx
accessKeySecret: aMmHexhsZJODXBTujKPjl4NfMIsHgN
region-id: cn-shanghai
#备用节点 green-cip.cn-beijing.aliyuncs.com
endpoint: green-cip.cn-shanghai.aliyuncs.com

9
src/main/resources/mapper/admin/MiniContentAuditConfigMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.admin.mapper.MiniContentAuditConfigMapper">
</mapper>

9
src/main/resources/mapper/admin/MiniContentAuditMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.admin.mapper.MiniContentAuditMapper">
</mapper>

9
src/main/resources/mapper/admin/MiniContentAuditTaskMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.admin.mapper.MiniContentAuditTaskMapper">
</mapper>

9
src/main/resources/mapper/mini/MiniContentAuditAppealMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.mini.mapper.MiniContentAuditAppealMapper">
</mapper>

9
src/main/resources/mapper/mini/MiniReportMapper.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.mini.mapper.MiniReportMapper">
</mapper>
Loading…
Cancel
Save