TASK: 批量生成获取任务序号
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,5 +12,7 @@ public class BatchTaskSequence extends BaseEntity{
|
|||||||
|
|
||||||
private Long accountId;
|
private Long accountId;
|
||||||
|
|
||||||
private Integer currentSequence;
|
private Integer nextSeq;
|
||||||
|
|
||||||
|
private Integer lockedSeq;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user