mirror of
https://gitee.com/fit2cloud-feizhiyun/MeterSphere.git
synced 2024-11-30 11:08:38 +08:00
refactor(缺陷管理): 缺陷管理代码逻辑优化
This commit is contained in:
parent
2ad6cc78d0
commit
16b4102a72
@ -35,6 +35,7 @@ public class BugAttachmentLogService {
|
||||
* @param file 上传的文件
|
||||
* @return 日志
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public LogDTO uploadLog(BugUploadFileRequest request, MultipartFile file) {
|
||||
Bug bug = bugMapper.selectByPrimaryKey(request.getBugId());
|
||||
List<BugFileDTO> allBugFiles = bugAttachmentService.getAllBugFiles(request.getBugId());
|
||||
@ -52,6 +53,7 @@ public class BugAttachmentLogService {
|
||||
* @param request 请求参数
|
||||
* @return 日志
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public LogDTO deleteLog(BugDeleteFileRequest request) {
|
||||
Bug bug = bugMapper.selectByPrimaryKey(request.getBugId());
|
||||
List<BugFileDTO> allBugFiles = bugAttachmentService.getAllBugFiles(request.getBugId());
|
||||
|
@ -1,5 +1,6 @@
|
||||
package io.metersphere.bug.service;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import io.metersphere.bug.domain.Bug;
|
||||
import io.metersphere.bug.domain.BugLocalAttachment;
|
||||
import io.metersphere.bug.domain.BugLocalAttachmentExample;
|
||||
@ -38,11 +39,10 @@ import io.metersphere.sdk.util.FileAssociationSourceUtil;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import io.metersphere.sdk.util.MsFileUtils;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.dto.sdk.OptionDTO;
|
||||
import io.metersphere.system.log.constants.OperationLogModule;
|
||||
import io.metersphere.system.mapper.BaseUserMapper;
|
||||
import io.metersphere.system.service.CommonFileService;
|
||||
import io.metersphere.system.service.FileService;
|
||||
import io.metersphere.system.service.UserToolService;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
@ -72,8 +72,6 @@ public class BugAttachmentService {
|
||||
@Resource
|
||||
private FileService fileService;
|
||||
@Resource
|
||||
private BaseUserMapper baseUserMapper;
|
||||
@Resource
|
||||
private FileMetadataMapper fileMetadataMapper;
|
||||
@Resource
|
||||
private BugPlatformService bugPlatformService;
|
||||
@ -87,6 +85,8 @@ public class BugAttachmentService {
|
||||
private BugLocalAttachmentMapper bugLocalAttachmentMapper;
|
||||
@Resource
|
||||
private CommonFileService commonFileService;
|
||||
@Resource
|
||||
private UserToolService userToolService;
|
||||
|
||||
/**
|
||||
* 查询缺陷的附件集合
|
||||
@ -125,8 +125,7 @@ public class BugAttachmentService {
|
||||
return bugFiles;
|
||||
}
|
||||
List<String> userIds = bugFiles.stream().map(BugFileDTO::getCreateUser).distinct().toList();
|
||||
List<OptionDTO> userOptions = baseUserMapper.selectUserOptionByIds(userIds);
|
||||
Map<String, String> userMap = userOptions.stream().collect(Collectors.toMap(OptionDTO::getId, OptionDTO::getName));
|
||||
Map<String, String> userMap = userToolService.getUserMapByIds(userIds);
|
||||
return bugFiles.stream().peek(file -> file.setCreateUserName(userMap.get(file.getCreateUser()))).toList();
|
||||
}
|
||||
|
||||
@ -621,7 +620,7 @@ public class BugAttachmentService {
|
||||
FileRepository defaultRepository = FileCenter.getDefaultRepository();
|
||||
String systemTempDir = DefaultRepositoryDir.getSystemTempDir();
|
||||
// 添加文件与功能用例的关联关系
|
||||
Map<String, String> addFileMap = new HashMap<>();
|
||||
Map<String, String> addFileMap = Maps.newHashMapWithExpectedSize(8);
|
||||
LogUtils.info("开始上传富文本里的附件");
|
||||
List<BugLocalAttachment> localAttachments = fileIds.stream().map(fileId -> {
|
||||
BugLocalAttachment localAttachment = new BugLocalAttachment();
|
||||
|
@ -79,6 +79,10 @@ public class BugCommentNoticeService {
|
||||
noticeSendService.send(NoticeConstants.TaskType.BUG_TASK, noticeModel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置本地语言
|
||||
* @param language 语言
|
||||
*/
|
||||
private static void setLanguage(String language) {
|
||||
Locale locale = Locale.SIMPLIFIED_CHINESE;
|
||||
if (StringUtils.containsIgnoreCase(language, "US")) {
|
||||
|
@ -61,6 +61,14 @@ public class BugExportService {
|
||||
return filesFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成excel文件
|
||||
* @param list 列表数据
|
||||
* @param xlsxFileName excel文件名
|
||||
* @param excelPath excel文件路径
|
||||
* @param headerModel excel导出表头
|
||||
* @throws Exception 异常信息
|
||||
*/
|
||||
private void generateExcelFile(List<BugDTO> list, String xlsxFileName, String excelPath, BugExportHeaderModel headerModel) throws Exception {
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
// 准备数据 {评论, 内容, 关联用例数}
|
||||
|
@ -4,8 +4,6 @@ import io.metersphere.sdk.util.BeanUtils;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.domain.OperationHistory;
|
||||
import io.metersphere.system.domain.OperationHistoryExample;
|
||||
import io.metersphere.system.domain.User;
|
||||
import io.metersphere.system.domain.UserExample;
|
||||
import io.metersphere.system.dto.OperationHistoryDTO;
|
||||
import io.metersphere.system.dto.request.OperationHistoryRequest;
|
||||
import io.metersphere.system.log.constants.OperationLogModule;
|
||||
@ -13,6 +11,7 @@ import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.mapper.BaseOperationHistoryMapper;
|
||||
import io.metersphere.system.mapper.OperationHistoryMapper;
|
||||
import io.metersphere.system.mapper.UserMapper;
|
||||
import io.metersphere.system.service.UserToolService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -21,7 +20,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -29,7 +27,8 @@ public class BugHistoryService {
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Resource
|
||||
private UserToolService userToolService;
|
||||
@Resource
|
||||
private OperationHistoryMapper operationHistoryMapper;
|
||||
@Resource
|
||||
@ -49,10 +48,7 @@ public class BugHistoryService {
|
||||
return List.of();
|
||||
}
|
||||
List<String> userIds = history.stream().map(OperationHistory::getCreateUser).toList();
|
||||
UserExample userExample = new UserExample();
|
||||
userExample.createCriteria().andIdIn(userIds);
|
||||
List<User> users = userMapper.selectByExample(userExample);
|
||||
Map<String, String> userMap = users.stream().collect(Collectors.toMap(User::getId, User::getName));
|
||||
Map<String, String> userMap = userToolService.getUserMapByIds(userIds);
|
||||
Long latestVersionId = baseOperationHistoryMapper.selectLatestIdByOperationId(request.getSourceId());
|
||||
return history.stream().map(h -> {
|
||||
OperationHistoryDTO dto = new OperationHistoryDTO();
|
||||
|
@ -28,6 +28,7 @@ public class BugRelateCaseLogService {
|
||||
* @param id 取消关联的引用ID
|
||||
* @return 日志
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public LogDTO getRelateLog(String id) {
|
||||
BugRelationCase bugRelationCase = bugRelationCaseMapper.selectByPrimaryKey(id);
|
||||
BugRelateCaseDTO relateCase = extBugRelateCaseMapper.getRelateCase(bugRelationCase.getCaseId(), bugRelationCase.getCaseType());
|
||||
|
@ -24,6 +24,12 @@ public class BugScheduleServiceImpl implements BaseBugScheduleService {
|
||||
@Resource
|
||||
private ScheduleService scheduleService;
|
||||
|
||||
/**
|
||||
* 更新缺陷同步定时任务配置
|
||||
* @param bugSyncConfigs 配置
|
||||
* @param projectId 项目ID
|
||||
* @param currentUser 当前用户
|
||||
*/
|
||||
@Override
|
||||
public void updateBugSyncScheduleConfig(List<ProjectApplication> bugSyncConfigs, String projectId, String currentUser) {
|
||||
List<ProjectApplication> syncCron = bugSyncConfigs.stream().filter(config -> config.getType().equals(ProjectApplicationType.BUG.BUG_SYNC.name() + "_" + ProjectApplicationType.BUG_SYNC_CONFIG.CRON_EXPRESSION.name())).toList();
|
||||
@ -56,6 +62,12 @@ public class BugScheduleServiceImpl implements BaseBugScheduleService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用或禁用缺陷同步定时任务
|
||||
* @param projectId 项目ID
|
||||
* @param currentUser 当前用户
|
||||
* @param enable 开启或禁用
|
||||
*/
|
||||
@Override
|
||||
public void enableOrNotBugSyncSchedule(String projectId, String currentUser, Boolean enable) {
|
||||
Schedule schedule = scheduleService.getScheduleByResource(projectId, BugSyncJob.class.getName());
|
||||
|
@ -2084,30 +2084,30 @@ public class BugService {
|
||||
List<PlatformCustomFieldItemDTO> platformCustomFields = platformBug.getCustomFieldList();
|
||||
// 过滤出需要同步的自定义字段{默认模板时, 需要同步所有字段; 非默认模板时, 需要同步模板中映射的字段}
|
||||
final Map<String, String> needSyncApiFieldFilterMap = needSyncApiFieldMap;
|
||||
if (platformBug.getPlatformDefaultTemplate()) {
|
||||
List<BugCustomFieldDTO> bugCustomFieldDTOList;
|
||||
if (platformBug.getPlatformDefaultTemplate()) {
|
||||
// 平台默认模板创建的缺陷
|
||||
List<BugCustomFieldDTO> bugCustomFieldDTOList = platformCustomFields.stream()
|
||||
.map(platformField -> {
|
||||
BugCustomFieldDTO bugCustomFieldDTO = new BugCustomFieldDTO();
|
||||
bugCustomFieldDTO.setId(platformField.getId());
|
||||
bugCustomFieldDTO.setValue(platformField.getValue() == null ? null : platformField.getValue().toString());
|
||||
return bugCustomFieldDTO;
|
||||
}).collect(Collectors.toList());
|
||||
customEditRequest.setCustomFields(bugCustomFieldDTOList);
|
||||
} else {
|
||||
bugCustomFieldDTOList = platformCustomFields.stream()
|
||||
.map(platformField -> {
|
||||
BugCustomFieldDTO bugCustomFieldDTO = new BugCustomFieldDTO();
|
||||
bugCustomFieldDTO.setId(platformField.getId());
|
||||
bugCustomFieldDTO.setValue(platformField.getValue() == null ? null : platformField.getValue().toString());
|
||||
return bugCustomFieldDTO;
|
||||
}).collect(Collectors.toList());
|
||||
} else {
|
||||
// 非平台默认模板创建的缺陷(使用模板API映射字段)
|
||||
List<BugCustomFieldDTO> bugCustomFieldDTOList = platformCustomFields.stream()
|
||||
.filter(field -> needSyncApiFieldFilterMap.containsKey(field.getId()))
|
||||
.map(platformField -> {
|
||||
BugCustomFieldDTO bugCustomFieldDTO = new BugCustomFieldDTO();
|
||||
bugCustomFieldDTO.setId(needSyncApiFieldFilterMap.get(platformField.getId()));
|
||||
bugCustomFieldDTO.setValue(platformField.getValue() == null ? null : platformField.getValue().toString());
|
||||
return bugCustomFieldDTO;
|
||||
}).collect(Collectors.toList());
|
||||
customEditRequest.setCustomFields(bugCustomFieldDTOList);
|
||||
}
|
||||
bugCustomFieldDTOList = platformCustomFields.stream()
|
||||
.filter(field -> needSyncApiFieldFilterMap.containsKey(field.getId()))
|
||||
.map(platformField -> {
|
||||
BugCustomFieldDTO bugCustomFieldDTO = new BugCustomFieldDTO();
|
||||
bugCustomFieldDTO.setId(needSyncApiFieldFilterMap.get(platformField.getId()));
|
||||
bugCustomFieldDTO.setValue(platformField.getValue() == null ? null : platformField.getValue().toString());
|
||||
return bugCustomFieldDTO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
customEditRequest.setCustomFields(bugCustomFieldDTOList);
|
||||
|
||||
// 保存缺陷
|
||||
// 保存缺陷
|
||||
if (originalBug == null) {
|
||||
// 新增
|
||||
batchBugMapper.insertSelective(bug);
|
||||
|
@ -107,6 +107,11 @@ public class BugStatusService {
|
||||
return baseStatusFlowSettingService.getAllStatusOption(projectId, TemplateScene.BUG.name());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前项目最新的Jira平台缺陷Key (表头状态筛选需要)
|
||||
* @param projectId 项目ID
|
||||
* @return JiraKey
|
||||
*/
|
||||
public String getJiraPlatformBugKeyLatest(String projectId) {
|
||||
BugExample example = new BugExample();
|
||||
example.createCriteria().andPlatformEqualTo(BugPlatform.JIRA.name()).andProjectIdEqualTo(projectId);
|
||||
|
@ -87,6 +87,10 @@ public class BugSyncNoticeService {
|
||||
inSiteNoticeSender.sendAnnouncement(messageDetail, noticeModel, MessageTemplateUtils.getContent(context, paramMap), subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置本地语言
|
||||
* @param language 语言
|
||||
*/
|
||||
private static void setLanguage(String language) {
|
||||
Locale locale = Locale.SIMPLIFIED_CHINESE;
|
||||
if (StringUtils.containsIgnoreCase(language, "US")) {
|
||||
|
@ -23,6 +23,10 @@ public class CleanupBugResourceServiceImpl implements CleanupProjectResourceServ
|
||||
@Resource
|
||||
private BugCommonService bugCommonService;
|
||||
|
||||
/**
|
||||
* 清理当前项目相关缺陷资源
|
||||
* @param projectId 项目ID
|
||||
*/
|
||||
@Async
|
||||
@Override
|
||||
public void deleteResources(String projectId) {
|
||||
@ -36,6 +40,11 @@ public class CleanupBugResourceServiceImpl implements CleanupProjectResourceServ
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前项目下所有缺陷ID集合
|
||||
* @param projectId 项目ID
|
||||
* @return 缺陷ID集合
|
||||
*/
|
||||
private List<String> getBugIds(String projectId) {
|
||||
BugExample example = new BugExample();
|
||||
example.createCriteria().andProjectIdEqualTo(projectId);
|
||||
@ -43,6 +52,10 @@ public class CleanupBugResourceServiceImpl implements CleanupProjectResourceServ
|
||||
return bugs.stream().map(Bug::getId).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理缺陷
|
||||
* @param bugIds 缺陷ID集合
|
||||
*/
|
||||
private void deleteBug(List<String> bugIds) {
|
||||
BugExample example = new BugExample();
|
||||
example.createCriteria().andIdIn(bugIds);
|
||||
|
@ -11,8 +11,8 @@ import java.util.function.BiFunction;
|
||||
|
||||
public class ExportUtils {
|
||||
|
||||
private List<BugDTO> bugs;
|
||||
private BugExportHeaderModel headerModel;
|
||||
private final List<BugDTO> bugs;
|
||||
private final BugExportHeaderModel headerModel;
|
||||
|
||||
public ExportUtils(
|
||||
List<BugDTO> bugs,
|
||||
|
@ -2,6 +2,7 @@ package io.metersphere.system.service;
|
||||
|
||||
import io.metersphere.system.domain.User;
|
||||
import io.metersphere.system.domain.UserExample;
|
||||
import io.metersphere.system.dto.sdk.OptionDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.metersphere.system.mapper.BaseUserMapper;
|
||||
import io.metersphere.system.mapper.UserMapper;
|
||||
@ -11,6 +12,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -42,4 +44,14 @@ public class UserToolService {
|
||||
return request.getSelectIds();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户Map集合 (复用)
|
||||
* @param userIds 用户ID集合
|
||||
* @return 用户 <ID, NAME> 映射集合
|
||||
*/
|
||||
public Map<String, String> getUserMapByIds(List<String> userIds) {
|
||||
List<OptionDTO> userOptions = baseUserMapper.selectUserOptionByIds(userIds);
|
||||
return userOptions.stream().collect(Collectors.toMap(OptionDTO::getId, OptionDTO::getName));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user