TASK: 批量生成获取任务序号
This commit is contained in:
@@ -28,5 +28,7 @@ public interface ProjectService extends IService<Project> {
|
||||
|
||||
List<Project> getByProjectNameLike(String projectName);
|
||||
|
||||
Integer getNextSequence();
|
||||
Integer getOrCreateSequence();
|
||||
|
||||
void clearLockedSequence(Long accountId);
|
||||
}
|
||||
|
||||
@@ -1943,6 +1943,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
cloudTask.setStatus(0);
|
||||
cloudTask.setAccountId(userInfo.getId());
|
||||
cloudTaskMapper.insert(cloudTask);
|
||||
// 解除锁后可以获取下一个序号
|
||||
projectService.clearLockedSequence(userHolder.getId());
|
||||
|
||||
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
|
||||
Long userLikeGroupId = null;
|
||||
ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
|
||||
@@ -2123,6 +2126,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
cloudTask.setStatus(0);
|
||||
cloudTask.setAccountId(userInfo.getId());
|
||||
cloudTaskMapper.insert(cloudTask);
|
||||
// 解除锁后可以获取下一个序号
|
||||
projectService.clearLockedSequence(userHolder.getId());
|
||||
|
||||
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
|
||||
Long userLikeGroupId = null;
|
||||
@@ -2288,6 +2293,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
cloudTask.setUpdateTime(now);
|
||||
cloudTask.setStatus(0);
|
||||
cloudTaskMapper.insert(cloudTask);
|
||||
// 解除锁后可以获取下一个序号
|
||||
projectService.clearLockedSequence(userHolder.getId());
|
||||
|
||||
List<PoseTransformBatchDTO> poseTransformList = cloudTaskDTO.getPoseTransform();
|
||||
if (CollectionUtil.isNotEmpty(poseTransformList)) {
|
||||
@@ -2545,6 +2552,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
cloudTask.setStatus(0);
|
||||
cloudTask.setAccountId(userInfo.getId());
|
||||
cloudTaskMapper.insert(cloudTask);
|
||||
// 解除锁后可以获取下一个序号
|
||||
projectService.clearLockedSequence(userHolder.getId());
|
||||
return taskId;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.ai.da.mapper.primary.*;
|
||||
import com.ai.da.mapper.primary.entity.*;
|
||||
import com.ai.da.service.*;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
@@ -44,30 +45,51 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
||||
}
|
||||
|
||||
@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();
|
||||
// 1. 尝试插入新记录(如果用户不存在)
|
||||
BatchTaskSequence newCounter = new BatchTaskSequence();
|
||||
newCounter.setAccountId(accountId);
|
||||
newCounter.setCurrentSequence(1);
|
||||
newCounter.setCreateTime(LocalDateTime.now());
|
||||
// 1. 检查是否已有锁定序号
|
||||
BatchTaskSequence sequence = sequenceMapper.selectOne(
|
||||
Wrappers.<BatchTaskSequence>lambdaQuery()
|
||||
.eq(BatchTaskSequence::getAccountId, accountId));
|
||||
|
||||
try {
|
||||
batchTaskSequenceMapper.insert(newCounter);
|
||||
if (sequence != null && sequence.getLockedSeq() != null) {
|
||||
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;
|
||||
} catch (DuplicateKeyException e) {
|
||||
// 2. 用户已存在,执行递增操作
|
||||
batchTaskSequenceMapper.incrementSequence(accountId);
|
||||
Integer sequence = batchTaskSequenceMapper.getLastInsertId();
|
||||
|
||||
// 3. 验证获取的序号
|
||||
if (sequence == null) {
|
||||
throw new RuntimeException("获取序号失败");
|
||||
}
|
||||
return sequence;
|
||||
} else {
|
||||
Integer seq = sequence.getNextSeq();
|
||||
sequence.setLockedSeq(seq);
|
||||
sequence.setNextSeq(seq + 1);
|
||||
sequenceMapper.updateById(sequence);
|
||||
return seq;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除锁定序号状态(用于确认使用或取消操作)
|
||||
* @param accountId 用户ID
|
||||
*/
|
||||
@Transactional
|
||||
public void clearLockedSequence(Long accountId) {
|
||||
sequenceMapper.update(null,
|
||||
Wrappers.<BatchTaskSequence>lambdaUpdate()
|
||||
.set(BatchTaskSequence::getLockedSeq, null)
|
||||
.eq(BatchTaskSequence::getAccountId, accountId));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user