Compare commits

...

3 Commits

10 changed files with 232 additions and 23 deletions

View File

@@ -0,0 +1 @@
CREATE INDEX idx_snm_userid_nodeId ON simulation_node_member (user_id, nodeId);

View File

@@ -0,0 +1,2 @@
CREATE INDEX idx_st_uuid_tenantid ON simulation_task (uuid, tenant_id);
CREATE INDEX idx_st_tenantid_tag1 ON simulation_task (tenant_id, tag1);

View File

@@ -0,0 +1 @@
CREATE INDEX idx_stm_userid_taskid ON simulation_task_member (user_id, task_id);

View File

@@ -289,4 +289,15 @@ public class SimulationTaskController implements ISimulationTaskFeignClient {
return taskService.queryProjectUserLoads(req);
}
/**
* 批量操作任务
* @param taskOpr
* @return
*/
@PostMapping("/batchOperation")
@Operation(summary = "批量操作任务", description = "批量操作任务")
public SdmResponse batchOperation(@RequestBody SpdmTaskOpr taskOpr) {
return taskService.batchOperation(taskOpr);
}
}

View File

@@ -76,4 +76,15 @@ public class SpdmTaskOprReq {
*/
private String confidence;
private String tag1;
private String tag2;
private String tag3;
private String tag4;
private String tag5;
private String tag6;
private String tag7;
private String tag8;
private String tag9;
private String tag10;
}

View File

@@ -102,4 +102,6 @@ public interface ITaskService {
*/
SdmResponse<List<ProjectUserLoadResp>> queryProjectUserLoads(ProjectUserLoadReq req);
SdmResponse batchOperation(SpdmTaskOpr taskOpr);
}

View File

@@ -620,6 +620,30 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
},projectTaskThreadPoolExecutor);
}
// 批量更新权限
if (CollectionUtils.isNotEmpty(updatePermissionList)) {
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissions = new ArrayList<>();
for (UpdatePermissionReq updatePermissionReq : updatePermissionList) {
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(updatePermissionReq.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(updatePermissionReq.getUserId(), FilePermissionEnum.ALL.getValue());
item.setUserPermissions(userPermissions);
filePermissions.add(item);
}
if (CollectionUtils.isNotEmpty(filePermissions)) {
BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
batchReq.setFilePermissions(filePermissions);
log.info("同步项目阶段时,批量更新权限,任务数量:{}", filePermissions.size());
SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
log.info("同步项目阶段时,批量更新权限结果:{}", response);
if (!response.isSuccess()) {
log.error("批量更新权限失败:{}", response.getMessage());
}
}
}
}

View File

@@ -202,19 +202,28 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return SdmResponse.failed("操作节点失败,原因:新增节点时失败!");
}
Long userId = ThreadLocalContext.getUserId();
// 批量更新权限
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissions = new ArrayList<>();
for (SpdmProjectNodeEditReq addNode : addNodeList) {
// 更新文件权限
Long userId = ThreadLocalContext.getUserId();
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(userId);
updatePermissionReq.setUuid(addNode.getUuid());
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(addNode.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(userId, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("创建项目阶段时,更新用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("创建项目阶段时,更新用户权限的返回值为:{}",updatePermissionResponse);
item.setUserPermissions(userPermissions);
filePermissions.add(item);
}
if (CollectionUtils.isNotEmpty(filePermissions)) {
BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
batchReq.setFilePermissions(filePermissions);
log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size());
SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
log.info("创建项目阶段时,批量更新权限结果:{}", response);
if (!response.isSuccess()) {
log.error("批量更新权限失败:{}", response.getMessage());
}
}
for (SpdmProjectNodeEditReq addNode : addNodeList) {
String projectSource = addNode.getProjectSource();
String nodeType = addNode.getNodeType();
@@ -3192,22 +3201,45 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
return;
}
CompletableFuture.runAsync(() -> {
log.info("开始异步更新{}条权限记录", permissionReqList.size());
for (UpdatePermissionReq permissionReq : permissionReqList) {
try {
SdmResponse updateResponse = dataFeignClient.updatePermission(permissionReq);
if (!updateResponse.isSuccess()) {
log.warn("更新权限失败需求ID{}用户ID{},响应:{}",
permissionReq.getUuid(), permissionReq.getUserId(), updateResponse);
}
} catch (Exception e) {
log.error("更新权限异常需求ID{}用户ID{}",
permissionReq.getUuid(), permissionReq.getUserId(), e);
// 批量更新需求权限
if (CollectionUtils.isNotEmpty(permissionReqList)) {
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissions = new ArrayList<>();
for (UpdatePermissionReq updatePermissionReq : permissionReqList) {
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(updatePermissionReq.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(updatePermissionReq.getUserId(), FilePermissionEnum.ALL.getValue());
item.setUserPermissions(userPermissions);
filePermissions.add(item);
}
if (CollectionUtils.isNotEmpty(filePermissions)) {
BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
batchReq.setFilePermissions(filePermissions);
log.info("创建项目阶段时,批量更新需求权限,任务数量:{}", filePermissions.size());
SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
log.info("创建项目阶段时,批量更新需求权限结果:{}", response);
if (!response.isSuccess()) {
log.error("批量更新需求权限失败:{}", response.getMessage());
}
}
log.info("异步更新权限完成");
}, projectTaskThreadPoolExecutor);
}
// CompletableFuture.runAsync(() -> {
// log.info("开始异步更新{}条权限记录", permissionReqList.size());
// for (UpdatePermissionReq permissionReq : permissionReqList) {
// try {
// SdmResponse updateResponse = dataFeignClient.updatePermission(permissionReq);
// if (!updateResponse.isSuccess()) {
// log.warn("更新权限失败需求ID{}用户ID{},响应:{}",
// permissionReq.getUuid(), permissionReq.getUserId(), updateResponse);
// }
// } catch (Exception e) {
// log.error("更新权限异常需求ID{}用户ID{}",
// permissionReq.getUuid(), permissionReq.getUserId(), e);
// }
// }
// log.info("异步更新权限完成");
// }, projectTaskThreadPoolExecutor);
}
/**

View File

@@ -118,6 +118,36 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
if (req.getExpStatus() != null) {
wrapper.set(SimulationTask::getExpStatus, req.getExpStatus());
}
if (req.getTag1() != null) {
wrapper.set(SimulationTask::getTag1, req.getTag1());
}
if (req.getTag2() != null) {
wrapper.set(SimulationTask::getTag2, req.getTag2());
}
if (req.getTag3() != null) {
wrapper.set(SimulationTask::getTag3, req.getTag3());
}
if (req.getTag4() != null) {
wrapper.set(SimulationTask::getTag4, req.getTag4());
}
if (req.getTag5() != null) {
wrapper.set(SimulationTask::getTag5, req.getTag5());
}
if (req.getTag6() != null) {
wrapper.set(SimulationTask::getTag6, req.getTag6());
}
if (req.getTag7() != null) {
wrapper.set(SimulationTask::getTag7, req.getTag7());
}
if (req.getTag8() != null) {
wrapper.set(SimulationTask::getTag8, req.getTag8());
}
if (req.getTag9() != null) {
wrapper.set(SimulationTask::getTag9, req.getTag9());
}
if (req.getTag10() != null) {
wrapper.set(SimulationTask::getTag10, req.getTag10());
}
wrapper.set(SimulationTask::getCreator, ThreadLocalContext.getUserId());
wrapper.set(SimulationTask::getUpdateTime, DateUtil.now());
return this.update(wrapper);

View File

@@ -3667,6 +3667,101 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success(buildProjectUserLoadResponse(projectNodeList, taskData, projectNodeReferenceItemMap,tenantId,req.getBeginTime(),req.getEndTime()));
}
@Transactional(rollbackFor = Exception.class)
@Override
public SdmResponse batchOperation(SpdmTaskOpr taskOpr) {
if (CollectionUtils.isNotEmpty(taskOpr.getTaskIds()) && ObjectUtils.isNotEmpty(taskOpr.getReq())) {
SpdmTaskOprReq req = taskOpr.getReq();
if (ObjectUtils.isNotEmpty(req.getProgress()) && req.getProgress() > 100) {
return SdmResponse.failed("任务进度超过100%,请核查");
}
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Long userId = ThreadLocalContext.getUserId();
for (String taskId : taskOpr.getTaskIds()) {
req.setTaskId(taskId);
if (simulationTaskService.lambdaQuery().eq(SimulationTask::getUuid, taskId).count() <= 0) {
log.error("根据taskId{},未查询到任务", taskId);
return SdmResponse.failed("未查询到任务");
}
if (!simulationTaskService.updateSimulationTask(req)) {
return SdmResponse.failed("编辑任务失败");
}
// 原来的仿真执行人
List<SimulationTaskMember> oldEMemberList = simulationTaskMemberService.lambdaQuery()
.eq(SimulationTaskMember::getTaskId, taskId)
.eq(SimulationTaskMember::getType, MemberTypeEnum.EXECUTOR.getCode()).list();
List<Long> oldEMemberIdList = new ArrayList<>();
// eMemberList传空字符串代表要清空仿真执行人传null代表不对仿真执行人做操作
if (CollectionUtils.isNotEmpty(oldEMemberList) && Objects.equals(req.getEMemberList(), "")) {
oldEMemberIdList = oldEMemberList.stream().map(SimulationTaskMember::getUserId).toList();
// 删除原来的仿真执行人信息
simulationTaskMemberService.deleteTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode());
// 删除原来的仿真执行人权限
for (SimulationTaskMember simulationTaskMember : oldEMemberList) {
deletePermission(simulationTaskMember.getUserId(),simulationTaskMember.getTaskId());
}
}
// 找出新的仿真执行人
List<Long> currentUserIdList = new ArrayList<>();
if (StringUtils.isNotBlank(req.getEMemberList())) {
String[] userIdArr = req.getEMemberList().split(",");
currentUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
}
List<Long> newUserIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(currentUserIdList)) {
if (CollectionUtils.isEmpty(oldEMemberIdList)) {
newUserIdList = currentUserIdList;
}else {
for (Long currentUserId : currentUserIdList) {
if (!oldEMemberIdList.contains(currentUserId)) {
newUserIdList.add(currentUserId);
}
}
}
}
log.info("老用户id为{}",oldEMemberIdList);
log.info("新用户id为{}",newUserIdList);
if (CollectionUtils.isNotEmpty(currentUserIdList)) {
if (!simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode(), currentUserIdList)) {
return SdmResponse.failed("编辑仿真执行人失败");
}
}
// 发送消息通知
newUserIdList.forEach(i -> {
sendMessage(MessageTemplateEnum.TASK_ISSUE, req.getNodeName(), String.valueOf(i), taskId);
});
// 保存当前的仿真执行人权限
for (Long currentUserId : currentUserIdList) {
updatePermission(currentUserId,taskId);
}
// 新增拓展属性
List<SimulationTaskExtra> extraList = req.getExtras();
if (CollectionUtils.isEmpty(extraList)) {
continue;
}
List<SimulationTaskExtra> saveExtraList = extraList.stream().filter(extra -> ObjectUtils.isEmpty(extra.getId())).toList();
if (CollectionUtils.isNotEmpty(saveExtraList)) {
saveExtraList.forEach(extra -> {
extra.setTaskId(taskId);
extra.setCreateTime(curDateStr);
extra.setCreator(userId);
});
simulationTaskExtraService.saveBatch(saveExtraList);
}
List<SimulationTaskExtra> updateExtraList = extraList.stream().filter(extra -> ObjectUtils.isNotEmpty(extra.getId())).toList();
if (CollectionUtils.isEmpty(updateExtraList)) {
continue;
}
for (SimulationTaskExtra simulationTaskExtra : updateExtraList) {
simulationTaskExtraService.lambdaUpdate().set(SimulationTaskExtra::getPropertyValue, simulationTaskExtra.getPropertyValue())
.eq(SimulationTaskExtra::getId, simulationTaskExtra.getId())
.update();
}
}
}
return SdmResponse.success();
}
}