31 lines
1.1 KiB
Java
31 lines
1.1 KiB
Java
package com.label.mapper;
|
||
|
||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||
import com.label.entity.AnnotationTask;
|
||
import org.apache.ibatis.annotations.Mapper;
|
||
import org.apache.ibatis.annotations.Param;
|
||
import org.apache.ibatis.annotations.Update;
|
||
|
||
/**
|
||
* annotation_task 表 Mapper。
|
||
*/
|
||
@Mapper
|
||
public interface AnnotationTaskMapper extends BaseMapper<AnnotationTask> {
|
||
|
||
/**
|
||
* 原子性领取任务:仅当任务为 UNCLAIMED 且属于当前租户时才更新。
|
||
* 使用乐观 WHERE 条件实现并发安全(依赖数据库行级锁)。
|
||
*
|
||
* @param taskId 任务 ID
|
||
* @param userId 领取用户 ID
|
||
* @param companyId 当前租户
|
||
* @return 影响行数(0 = 任务已被他人领取或不存在)
|
||
*/
|
||
@Update("UPDATE annotation_task " +
|
||
"SET status = 'IN_PROGRESS', claimed_by = #{userId}, claimed_at = NOW(), updated_at = NOW() " +
|
||
"WHERE id = #{taskId} AND status = 'UNCLAIMED' AND company_id = #{companyId}")
|
||
int claimTask(@Param("taskId") Long taskId,
|
||
@Param("userId") Long userId,
|
||
@Param("companyId") Long companyId);
|
||
}
|