20 changed files with 795 additions and 5 deletions
@ -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> { |
|||
|
|||
} |
|||
@ -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> { |
|||
|
|||
} |
|||
@ -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> { |
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
} |
|||
|
|||
} |
|||
@ -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> { |
|||
|
|||
} |
|||
@ -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> { |
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
|
|||
} |
|||
@ -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; |
|||
|
|||
|
|||
} |
|||
@ -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> |
|||
@ -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> |
|||
@ -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> |
|||
@ -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> |
|||
@ -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…
Reference in new issue