TASK: 批量生成获取任务序号

This commit is contained in:
2025-07-02 16:16:15 +08:00
parent e8ad241653
commit a447cde05b
5 changed files with 58 additions and 23 deletions

View File

@@ -146,7 +146,7 @@ public class ProjectController {
@GetMapping("/getNextSequence") @GetMapping("/getNextSequence")
public Response<Integer> getNextSequence(){ public Response<Integer> getNextSequence(){
return Response.success(projectService.getNextSequence()); return Response.success(projectService.getOrCreateSequence());
} }

View File

@@ -12,5 +12,7 @@ public class BatchTaskSequence extends BaseEntity{
private Long accountId; private Long accountId;
private Integer currentSequence; private Integer nextSeq;
private Integer lockedSeq;
} }

View File

@@ -28,5 +28,7 @@ public interface ProjectService extends IService<Project> {
List<Project> getByProjectNameLike(String projectName); List<Project> getByProjectNameLike(String projectName);
Integer getNextSequence(); Integer getOrCreateSequence();
void clearLockedSequence(Long accountId);
} }

View File

@@ -1943,6 +1943,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
cloudTask.setStatus(0); cloudTask.setStatus(0);
cloudTask.setAccountId(userInfo.getId()); cloudTask.setAccountId(userInfo.getId());
cloudTaskMapper.insert(cloudTask); cloudTaskMapper.insert(cloudTask);
// 解除锁后可以获取下一个序号
projectService.clearLockedSequence(userHolder.getId());
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId); UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
Long userLikeGroupId = null; Long userLikeGroupId = null;
ToProductImageRecord toProductImageRecord = new ToProductImageRecord(); ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
@@ -2123,6 +2126,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
cloudTask.setStatus(0); cloudTask.setStatus(0);
cloudTask.setAccountId(userInfo.getId()); cloudTask.setAccountId(userInfo.getId());
cloudTaskMapper.insert(cloudTask); cloudTaskMapper.insert(cloudTask);
// 解除锁后可以获取下一个序号
projectService.clearLockedSequence(userHolder.getId());
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId); UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
Long userLikeGroupId = null; Long userLikeGroupId = null;
@@ -2288,6 +2293,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
cloudTask.setUpdateTime(now); cloudTask.setUpdateTime(now);
cloudTask.setStatus(0); cloudTask.setStatus(0);
cloudTaskMapper.insert(cloudTask); cloudTaskMapper.insert(cloudTask);
// 解除锁后可以获取下一个序号
projectService.clearLockedSequence(userHolder.getId());
List<PoseTransformBatchDTO> poseTransformList = cloudTaskDTO.getPoseTransform(); List<PoseTransformBatchDTO> poseTransformList = cloudTaskDTO.getPoseTransform();
if (CollectionUtil.isNotEmpty(poseTransformList)) { if (CollectionUtil.isNotEmpty(poseTransformList)) {
@@ -2545,6 +2552,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
cloudTask.setStatus(0); cloudTask.setStatus(0);
cloudTask.setAccountId(userInfo.getId()); cloudTask.setAccountId(userInfo.getId());
cloudTaskMapper.insert(cloudTask); cloudTaskMapper.insert(cloudTask);
// 解除锁后可以获取下一个序号
projectService.clearLockedSequence(userHolder.getId());
return taskId; return taskId;
} }

View File

@@ -6,6 +6,7 @@ import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.entity.*; import com.ai.da.mapper.primary.entity.*;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
@@ -44,30 +45,51 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
} }
@Resource @Resource
private BatchTaskSequenceMapper batchTaskSequenceMapper; private BatchTaskSequenceMapper sequenceMapper;
/**
* 获取或创建用户的任务序号
* @return 当前可用的序号
*/
@Transactional
public synchronized Integer getOrCreateSequence() {
@Transactional(rollbackFor = Exception.class)
public Integer getNextSequence() {
Long accountId = UserContext.getUserHolder().getId(); Long accountId = UserContext.getUserHolder().getId();
// 1. 尝试插入新记录(如果用户不存在) // 1. 检查是否已有锁定序号
BatchTaskSequence newCounter = new BatchTaskSequence(); BatchTaskSequence sequence = sequenceMapper.selectOne(
newCounter.setAccountId(accountId); Wrappers.<BatchTaskSequence>lambdaQuery()
newCounter.setCurrentSequence(1); .eq(BatchTaskSequence::getAccountId, accountId));
newCounter.setCreateTime(LocalDateTime.now());
try { if (sequence != null && sequence.getLockedSeq() != null) {
batchTaskSequenceMapper.insert(newCounter); return sequence.getLockedSeq();
}
// 2. 没有锁定序号,创建新记录或获取新序号
if (sequence == null) {
sequence = new BatchTaskSequence();
sequence.setAccountId(accountId);
sequence.setNextSeq(2); // 第一次返回1下次从2开始
sequence.setLockedSeq(1);
sequenceMapper.insert(sequence);
return 1; return 1;
} catch (DuplicateKeyException e) { } else {
// 2. 用户已存在,执行递增操作 Integer seq = sequence.getNextSeq();
batchTaskSequenceMapper.incrementSequence(accountId); sequence.setLockedSeq(seq);
Integer sequence = batchTaskSequenceMapper.getLastInsertId(); sequence.setNextSeq(seq + 1);
sequenceMapper.updateById(sequence);
// 3. 验证获取的序号 return seq;
if (sequence == null) {
throw new RuntimeException("获取序号失败");
}
return sequence;
} }
} }
/**
* 清除锁定序号状态(用于确认使用或取消操作)
* @param accountId 用户ID
*/
@Transactional
public void clearLockedSequence(Long accountId) {
sequenceMapper.update(null,
Wrappers.<BatchTaskSequence>lambdaUpdate()
.set(BatchTaskSequence::getLockedSeq, null)
.eq(BatchTaskSequence::getAccountId, accountId));
}
} }