373 lines
19 KiB
XML
373 lines
19 KiB
XML
<?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.bonus.ai.mapper.AnnotationTaskMapper">
|
||
|
||
<!-- ResultMap映射 -->
|
||
<resultMap id="BaseResultMap" type="com.bonus.ai.domain.dataset.AnnotationTaskEntity">
|
||
<id column="task_id" property="taskId" jdbcType="BIGINT"/>
|
||
<result column="dataset_id" property="datasetId" jdbcType="BIGINT"/>
|
||
<result column="task_name" property="taskName" jdbcType="VARCHAR"/>
|
||
<result column="task_uuid" property="taskUuid" jdbcType="VARCHAR"/>
|
||
<result column="description" property="taskDesc" jdbcType="VARCHAR"/>
|
||
<result column="annotation_scene" property="annotateScene" jdbcType="CHAR"/>
|
||
<result column="annotation_type" property="annotateType" jdbcType="CHAR"/>
|
||
<result column="labels" property="labels" jdbcType="VARCHAR"/>
|
||
<result column="label_studio_project_id" property="labelStudioProjectId" jdbcType="BIGINT"/>
|
||
<result column="isStartTeam" property="isStartTeam" jdbcType="CHAR"/>
|
||
<result column="annotation_status" property="annotateTaskStatus" jdbcType="CHAR"/>
|
||
<result column="del_flag" property="delFlag" jdbcType="CHAR"/>
|
||
<result column="create_by" property="createBy" jdbcType="VARCHAR"/>
|
||
<result column="update_by" property="updateBy" jdbcType="VARCHAR"/>
|
||
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
|
||
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
||
</resultMap>
|
||
|
||
|
||
<sql id="selectTaskDetailVo">
|
||
select distinct t.task_id, t.task_uuid, t.task_name, t.description, t.annotation_scene, t.annotation_type,
|
||
FROM ai_annotation_task t
|
||
left join ai_annotation_task_annotator_map a on t.task_id = a.task_id
|
||
</sql>
|
||
<update id="deleteTaskById">
|
||
UPDATE ai_annotation_task
|
||
SET del_flag = '1'
|
||
WHERE task_id = #{taskId}
|
||
</update>
|
||
<update id="deleteAnnotator">
|
||
UPDATE ai_annotation_task_annotator_map
|
||
SET del_flag = '1'
|
||
WHERE task_id = #{taskId}
|
||
</update>
|
||
|
||
<!-- TODO 根据标注人id,查询所有标注文件列表-->
|
||
|
||
<!-- TODO 根据审核人id,查询所有需要审核文件列表-->
|
||
|
||
<!-- 根据条件查询标注任务列表 -->
|
||
<select id="selectAnnotationTaskList" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity" resultMap="BaseResultMap">
|
||
SELECT task_id , dataset_id , task_name , task_uuid, description, annotation_scene, annotation_type ,
|
||
labels, is_annotation_team AS isStartTeam, annotation_status,
|
||
label_studio_project_id, del_flag, create_by , create_time,
|
||
update_by , update_time
|
||
FROM ai_annotation_task
|
||
WHERE del_flag = '0'
|
||
<if test="taskId != null">
|
||
AND task_id = #{taskId}
|
||
</if>
|
||
<if test="datasetId != null">
|
||
AND dataset_id = #{datasetId}
|
||
</if>
|
||
<if test="taskName != null and taskName != ''">
|
||
AND task_name LIKE CONCAT('%', #{taskName}, '%')
|
||
</if>
|
||
<if test="annotateScene != null and annotateScene != ''">
|
||
AND annotation_scene = #{annotateScene}
|
||
</if>
|
||
<if test="annotateType != null and annotateType != ''">
|
||
AND annotation_type = #{annotateType}
|
||
</if>
|
||
<if test="annotateTaskStatus != null and annotateTaskStatus != ''">
|
||
AND annotation_status = #{annotateTaskStatus}
|
||
</if>
|
||
</select>
|
||
|
||
<!-- 我参与的任务 和我创建的 或所有的-->
|
||
<select id="selectMyAnnotationTaskList" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity" resultMap="BaseResultMap">
|
||
SELECT ap.task_id , at.dataset_id , at.task_name , at.task_uuid, at.description, at.annotation_scene, at.annotation_type ,
|
||
at.labels, at.is_annotation_team AS isStartTeam, at.annotation_status,
|
||
at.label_studio_project_id, at.del_flag, at.create_by , at.create_time,
|
||
at.update_by , at.update_time, ad.dataset_name AS datasetName, su.user_name AS ownerName,
|
||
SUM(CASE WHEN ap.annotation_status = '0' THEN 1 ELSE 0 END) AS status0Count,
|
||
SUM(CASE WHEN ap.annotation_status = '1' THEN 1 ELSE 0 END) AS status1Count,
|
||
SUM(CASE WHEN ap.annotation_status = '2' THEN 1 ELSE 0 END) AS status2Count,
|
||
SUM(CASE WHEN ap.annotation_status = '3' THEN 1 ELSE 0 END) AS status3Count,
|
||
COUNT(*) AS totalCount,
|
||
DATE_FORMAT(at.start_time, '%Y-%m-%d %H:%i:%s') AS startTime,
|
||
DATE_FORMAT(at.end_time, '%Y-%m-%d %H:%i:%s') AS endTime,
|
||
GROUP_CONCAT(DISTINCT ap.annotator_id) AS annotatorIds,
|
||
GROUP_CONCAT(DISTINCT ap.reviewer_id) AS reviewerIds
|
||
FROM ai_annotation_task at
|
||
LEFT JOIN ai_annotation_task_annotator_map ap on at.task_id = ap.task_id
|
||
LEFT JOIN ai_dataset ad on ad.dataset_id = at.dataset_id
|
||
LEFT JOIN sys_user su on su.user_id = at.create_by
|
||
WHERE at.del_flag = '0' and ap.del_flag = '0' and ap.annotation_status IN ('0', '1', '2','3')
|
||
<if test="taskName != null and taskName != ''">
|
||
AND at.task_name LIKE CONCAT('%', #{taskName}, '%')
|
||
</if>
|
||
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
|
||
AND at.start_time >= STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s')
|
||
AND STR_TO_DATE(#{endTime}, '%Y-%m-%d %H:%i:%s') >= at.end_time
|
||
</if>
|
||
<choose>
|
||
<when test="annotatorId != null and annotatorId != '' and reviewerId != null and reviewerId != '' and createBy != null and createBy != ''">
|
||
AND (ap.annotator_id = #{annotatorId} or ap.reviewer_id = #{reviewerId} or at.create_by = #{createBy})
|
||
</when>
|
||
<when test="annotatorId != null and annotatorId != '' and reviewerId != null and reviewerId != '' ">
|
||
AND (ap.annotator_id = #{annotatorId} or ap.reviewer_id = #{reviewerId})
|
||
</when>
|
||
<when test="reviewerId != null and reviewerId != '' and createBy != null and createBy != ''">
|
||
AND (ap.reviewer_id = #{reviewerId} or at.create_by = #{createBy})
|
||
</when>
|
||
<when test="annotatorId != null and annotatorId != '' and createBy != null and createBy != ''">
|
||
AND (ap.annotatorId = #{annotatorId} or at.create_by = #{createBy})
|
||
</when>
|
||
<when test="createBy != null and createBy != ''">
|
||
AND (at.create_by = #{createBy} or at.create_by = #{createBy})
|
||
</when>
|
||
</choose>
|
||
GROUP BY ap.task_id
|
||
</select>
|
||
|
||
<!-- 插入标注任务 -->
|
||
<insert id="insertAnnotationTask" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity" useGeneratedKeys="true" keyProperty="taskId">
|
||
INSERT INTO ai_annotation_task
|
||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||
<if test="datasetId != null">dataset_id,</if>
|
||
<if test="taskName != null">task_name,</if>
|
||
<if test="taskUuid != null">task_uuid,</if>
|
||
<if test="taskDesc != null">description,</if>
|
||
<if test="annotateScene != null">annotation_scene,</if>
|
||
<if test="annotateType != null">annotation_type,</if>
|
||
<if test="labels != null">labels,</if>
|
||
<if test="isStartTeam != null">is_annotation_team,</if>
|
||
<if test="annotateTaskStatus != null">annotation_status,</if>
|
||
<if test="labelStudioProjectId != null">label_studio_project_id,</if>
|
||
<if test="delFlag != null">del_flag,</if>
|
||
create_time,
|
||
<if test="createBy != null">create_by,</if>
|
||
<if test="updateBy != null">update_by,</if>
|
||
<if test="updateTime != null">update_time,</if>
|
||
<if test="startTime != null and startTime !=''">start_time,</if>
|
||
<if test="endTime != null and endTime !=''">end_time,</if>
|
||
</trim>
|
||
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
|
||
<if test="datasetId != null">#{datasetId},</if>
|
||
<if test="taskName != null">#{taskName},</if>
|
||
<if test="taskUuid != null">#{taskUuid},</if>
|
||
<if test="taskDesc != null">#{taskDesc},</if>
|
||
<if test="annotateScene != null">#{annotateScene},</if>
|
||
<if test="annotateType != null">#{annotateType},</if>
|
||
<if test="labels != null">#{labels},</if>
|
||
<if test="isStartTeam != null">#{isStartTeam},</if>
|
||
<if test="annotateTaskStatus != null">#{annotateTaskStatus},</if>
|
||
<if test="labelStudioProjectId != null">#{labelStudioProjectId},</if>
|
||
<if test="delFlag != null">#{delFlag},</if>
|
||
sysdate(),
|
||
<if test="createBy != null">#{createBy},</if>
|
||
<if test="updateBy != null">#{updateBy},</if>
|
||
<if test="updateTime != null">#{updateTime},</if>
|
||
<if test="startTime != null and startTime !=''"> STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s'),</if>
|
||
<if test="endTime != null and endTime !=''"> STR_TO_DATE(#{endTime}, '%Y-%m-%d %H:%i:%s'),</if>
|
||
</trim>
|
||
</insert>
|
||
|
||
<!-- 插入标注任务,文件和标注人和审核人关联 关系表-->
|
||
<insert id="insertAnnotTaskannotator" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskAnnotatorEntity">
|
||
INSERT INTO ai_annotation_task_annotator_map
|
||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||
<if test="taskId != null">task_id ,</if>
|
||
<if test="fileId != null">file_id ,</if>
|
||
<if test="fileUrl != null">file_url ,</if>
|
||
<if test="labelStudioTaskId != null">label_studio_task_id,</if>
|
||
<if test="annotatorId != null">annotator_id ,</if>
|
||
<if test="reviewerId != null">reviewer_id ,</if>
|
||
<if test="description != null and description != ''">description ,</if>
|
||
<if test="annotationStatus != null">annotation_status ,</if>
|
||
<if test="auditFailedReason != null">audit_failed_reason ,</if>
|
||
<if test="annotationResult != null">annotation_result ,</if>
|
||
<if test="annotationResource != null">annotation_resource, </if>
|
||
<if test="annotationTime != null">annotation_time ,</if>
|
||
<if test="reviewTime != null">review_time ,</if>
|
||
<if test="delFlag != null">del_flag,</if>
|
||
create_time,
|
||
<if test="createBy != null">create_by,</if>
|
||
<if test="updateBy != null">update_by,</if>
|
||
<if test="updateTime != null">update_time,</if>
|
||
</trim>
|
||
VALUES
|
||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||
<if test="taskId != null">#{taskId},</if>
|
||
<if test="fileId != null">#{fileId},</if>
|
||
<if test="fileUrl != null">#{fileUrl},</if>
|
||
<if test="labelStudioTaskId != null">#{labelStudioTaskId},</if>
|
||
<if test="annotatorId != null">#{annotatorId},</if>
|
||
<if test="reviewerId != null">#{reviewerId},</if>
|
||
<if test="description != null and description != ''">#{description} ,</if>
|
||
<if test="annotationStatus != null">#{annotationStatus},</if>
|
||
<if test="auditFailedReason != null">#{auditFailedReason} ,</if>
|
||
<if test="annotationResult != null">#{annotationResult},</if>
|
||
<if test="annotationResource != null">#{annotationResource},</if>
|
||
<if test="annotationTime != null">#{annotationTime} ,</if>
|
||
<if test="reviewTime != null">#{reviewTime} ,</if>
|
||
<if test="delFlag != null">#{delFlag},</if>
|
||
sysdate(),
|
||
<if test="createBy != null">#{createBy},</if>
|
||
<if test="updateBy != null">#{updateBy},</if>
|
||
<if test="updateTime != null">#{updateTime},</if>
|
||
</trim>
|
||
</insert>
|
||
|
||
|
||
<!-- 根据任务ID更新标注任务详情 -->
|
||
<update id="updateAnnotationTaskById" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity">
|
||
UPDATE ai_annotation_task
|
||
<set>
|
||
<if test="datasetId != null">dataset_id = #{datasetId},</if>
|
||
<if test="taskName != null">task_name = #{taskName},</if>
|
||
<if test="taskUuid != null">task_uuid = #{taskUuid},</if>
|
||
<if test="taskDesc != null">description = #{taskDesc},</if>
|
||
<if test="annotateScene != null">annotation_scene = #{annotateScene},</if>
|
||
<if test="annotateType != null">annotation_type = #{annotateType},</if>
|
||
<if test="labels != null">labels = #{labels},</if>
|
||
<if test="isStartTeam != null">is_annotation_team = #{isStartTeam},</if>
|
||
<if test="annotateTaskStatus != null">annotation_status = #{annotateTaskStatus},</if>
|
||
<if test="labelStudioProjectId != null">label_studio_project_id = #{labelStudioProjectId},</if>
|
||
<if test="delFlag != null">del_flag = #{delFlag},</if>
|
||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||
<if test="startTime != null and startTime !=''"> start_time = STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s'),</if>
|
||
<if test="endTime != null and endTime !=''"> end_time= STR_TO_DATE(#{startTime}, '%Y-%m-%d %H:%i:%s'),</if>
|
||
</set>
|
||
WHERE task_id = #{taskId}
|
||
</update>
|
||
|
||
<!-- 根据taskid 返回由某人标注 或审核的的文件列表和文件详情-->
|
||
<select id="getTaskBasicFile" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity" resultType="com.bonus.ai.domain.DataSetBasicFileEntity">
|
||
SELECT
|
||
distinct adfm.file_id AS fileId,
|
||
abf.file_name AS fileName,
|
||
abf.file_size AS fileSize,
|
||
abf.file_url AS fileUrl,
|
||
adfm.create_time AS createTime,
|
||
atap.annotation_status AS fileAnnotationStatus,
|
||
atap.annotation_result AS annotationResult,
|
||
atap.audit_failed_reason AS auditFailedReason,
|
||
aat.task_id
|
||
FROM ai_basic_file abf
|
||
LEFT JOIN ai_dataset_file_map adfm ON abf.file_id = adfm.file_id
|
||
LEFT JOIN ai_annotation_task aat ON aat.dataset_id= adfm.dataset_id
|
||
LEFT JOIN ai_annotation_task_annotator_map atap on atap.task_id = aat.task_id and abf.file_id = atap.file_id
|
||
where abf.del_flag = '0' and aat.del_flag = '0' and atap.del_flag = '0' and aat.task_id = #{taskId}
|
||
<if test="fileName != null and fileName != ''">
|
||
AND abf.file_name like concat('%', #{fileName}, '%')
|
||
</if>
|
||
<if test="annotatorId != null and annotatorId != ''">
|
||
AND atap.annotator_id = #{annotatorId}
|
||
</if>
|
||
<if test="reviewerId != null and reviewerId != ''">
|
||
AND atap.reviewer_id = #{reviewerId}
|
||
</if>
|
||
<if test="fileAnnotationStatus != null and fileAnnotationStatus != ''">
|
||
AND atap.annotation_status IN
|
||
<foreach item="status" collection="fileAnnotationStatus.split(',')" open="(" close=")" separator=",">
|
||
#{status}
|
||
</foreach>
|
||
</if>
|
||
<!-- <if test="fileAnnotationStatus != null and fileAnnotationStatus != '' ">-->
|
||
<!-- AND atap.annotation_status = #{fileAnnotationStatus}-->
|
||
<!-- </if>-->
|
||
</select>
|
||
|
||
<!-- 根据taskid 和fileid 返回审核驳回的原因-->
|
||
<select id="getAuditFailReasonByFileId" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskEntity" resultType="String">
|
||
SELECT
|
||
atap.audit_failed_reason
|
||
FROM ai_basic_file abf
|
||
LEFT JOIN ai_dataset_file_map adfm ON abf.file_id = adfm.file_id
|
||
LEFT JOIN ai_annotation_task aat ON aat.dataset_id= adfm.dataset_id
|
||
LEFT JOIN ai_annotation_task_annotator_map atap on atap.task_id = aat.task_id
|
||
where abf.del_flag = '0' and aat.del_flag = '0' and aat.task_id = #{taskId} and adfm.file_id = #{fileId}
|
||
</select>
|
||
|
||
|
||
|
||
<!-- 根据任务id和 文件id 更新标注内容和状态 -->
|
||
<update id="updateAnnotationInfo" parameterType="com.bonus.ai.domain.dataset.AnnotationTaskAnnotatorEntity">
|
||
UPDATE ai_annotation_task_annotator_map
|
||
<set>
|
||
<choose>
|
||
<when test="annotationResult != null and annotationResult != ''">
|
||
annotation_result = #{annotationResult},
|
||
annotation_time = sysdate(),
|
||
annotation_status = '1',
|
||
</when>
|
||
<when test="auditFailedReason != null and auditFailedReason != ''">
|
||
audit_failed_reason = #{auditFailedReason},
|
||
review_time = sysdate(),
|
||
annotation_status = '3',
|
||
</when>
|
||
<when test="annotationStatus != null and annotationStatus != ''">
|
||
annotation_status = #{annotationStatus},
|
||
review_time = sysdate(),
|
||
</when>
|
||
</choose>
|
||
<if test="annotationResource != null and annotationResource != ''">
|
||
annotation_resource = #{annotationResource}
|
||
</if>
|
||
<if test="updateBy != null and updateBy != ''">
|
||
update_by = #{updateBy},
|
||
</if>
|
||
</set>
|
||
WHERE task_id = #{taskId} and file_id = #{fileId}
|
||
</update>
|
||
|
||
<!-- <select id="countStatusByTaskId" resultType="com.bonus.ai.domain.dataset.AnnotationFileStatusCount">-->
|
||
<!-- SELECT annotation_status, COUNT(*) AS record_count-->
|
||
<!-- FROM ai_annotation_task_annotator_map-->
|
||
<!-- WHERE task_id = #{taskId}-->
|
||
<!-- AND annotation_status IN ('0', '1', '2')-->
|
||
<!-- GROUP BY annotation_status-->
|
||
<!-- </select>-->
|
||
|
||
<!-- and ap.annotation_status IN ('0')-->
|
||
<select id="getMyNoAnnotationTask" parameterType="Long" resultType="com.bonus.ai.domain.dataset.AnnotationTaskEntity">
|
||
SELECT distinct at.task_id AS taskId, at.task_name AS taskName, at.labels as labels
|
||
FROM ai_annotation_task at
|
||
LEFT JOIN ai_annotation_task_annotator_map ap on at.task_id = ap.task_id
|
||
WHERE at.del_flag = '0' and ap.del_flag = '0' and ap.annotator_id = #{annotatorId}
|
||
</select>
|
||
|
||
<!-- and ap.annotation_status IN ('0','1')-->
|
||
<select id="getMyNoAuditTask" resultType="com.bonus.ai.domain.dataset.AnnotationTaskEntity">
|
||
SELECT distinct at.task_id AS taskId , at.task_name AS taskName, at.labels as labels
|
||
FROM ai_annotation_task at
|
||
LEFT JOIN ai_annotation_task_annotator_map ap on at.task_id = ap.task_id
|
||
WHERE at.del_flag = '0' and ap.del_flag = '0' and ap.reviewer_id = #{reviewerId}
|
||
</select>
|
||
|
||
<select id="selectAnnotationDetailByTaskFile"
|
||
resultType="com.bonus.ai.domain.dataset.AnnotationTaskAnnotatorEntity">
|
||
SELECT
|
||
atam.task_id AS taskId,
|
||
atam.file_id AS fileId,
|
||
atam.annotation_result AS annotationResult,
|
||
atam.annotation_resource AS annotationResource,
|
||
atam.annotation_status AS annotationStatus,
|
||
atam.annotation_time AS annotationTime,
|
||
atam.annotator_id AS annotatorId,
|
||
atam.reviewer_id AS reviewerId,
|
||
atam.review_time AS reviewTime,
|
||
atam.audit_failed_reasonAS auditFailedReason
|
||
from ai_annotation_task_annotator_map atam
|
||
where atam.del_flag = '0'
|
||
<if test="taskId != null and taskId != 0">
|
||
AND atam.task_id = #{taskId}
|
||
</if>
|
||
<if test="fileId != null and fileId != ''">
|
||
AND atam.file_id = #{fileId}
|
||
</if>
|
||
</select>
|
||
|
||
<select id="getLatestDatasetVersion"
|
||
parameterType="Long" resultType="String">
|
||
SELECT version_name
|
||
FROM ai_dataset_version
|
||
WHERE dataset_id = #{datasetId}
|
||
ORDER BY create_time DESC
|
||
LIMIT 1
|
||
</select>
|
||
|
||
|
||
</mapper>
|