diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java index 0a4b932c..66d2a5f4 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java @@ -4,6 +4,7 @@ import java.util.*; import cn.code.nl.framework.common.pojo.PageResult; import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; import cn.code.nl.module.task.dal.dataobject.transporttask.TransportTaskDO; import org.apache.ibatis.annotations.Mapper; @@ -57,4 +58,25 @@ public interface TransportTaskMapper extends BaseMapperX { .orderByDesc(TransportTaskDO::getTaskId)); } + /** + * 按业务归属查询未完结任务(幂等校验用) + */ + default TransportTaskDO selectUnfinishedByBiz(String bizType, String bizId) { + return selectOne(new LambdaQueryWrapperX() + .eq(TransportTaskDO::getBizType, bizType) + .eq(TransportTaskDO::getBizId, bizId) + .lt(TransportTaskDO::getTaskStatus, "067")); + } + + /** + * 条件更新任务状态(CAS 抢占) + */ + default boolean updateTaskStatus(Long taskId, String expectedStatus, String newStatus) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TransportTaskDO::getTaskId, taskId) + .eq(TransportTaskDO::getTaskStatus, expectedStatus) + .set(TransportTaskDO::getTaskStatus, newStatus); + return update(null, wrapper) > 0; + } + } \ No newline at end of file