public List<Training> getTrainings(String participantName, int companyId) { List<Training> trainingList = new ArrayList<Training>(); String sql ="SELECT training.`id`,training.`name`,training.`companyId`,training.`time`,training.`price`,training.`capacity` " +"FROM sign JOIN training ON sign.`trainingId`=training.`id` " +"WHERE sign.`participantName`=? AND training.`companyId`=? AND sign.`signFlag`=1"; String[] param = { participantName,String.valueOf(companyId)}; TrainingDao petDao = new TrainingDaoImpl(); trainingList = petDao.selectTrainings(sql, param); return trainingList; }什么意思
时间: 2023-08-09 09:06:43 浏览: 46
这段代码是一个方法,用于获取参与者在指定公司参加的培训列表。它使用了一个SQL查询,根据参与者的姓名和公司ID在数据库中查询该参与者已报名并且标志为已签到的培训活动。查询结果将以Training对象的形式存储在一个List中,并返回该List。
具体来说,这段代码执行以下操作:
1. 创建一个空的Training对象列表trainingList。
2. 定义SQL查询语句,查询包括培训活动的id、名称、公司ID、时间、价格和容量等信息。
3. 创建一个String数组param,用于存储查询参数,即参与者的姓名和公司ID。
4. 创建一个TrainingDaoImpl对象petDao,用于执行数据库操作。
5. 调用petDao的selectTrainings方法,传入SQL查询语句和参数数组,执行查询操作,并将结果赋值给trainingList。
6. 返回trainingList作为方法的结果。
总之,这段代码的目的是根据参与者姓名和公司ID获取已报名并且已签到的培训活动列表。
相关问题
优化代码:@Override public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType, String projectId) { List<TaskTask> taskTaskList = this.listStatisticsTask(beginTime, endTime, forceType, projectId); if(CollectionUtil.isEmpty(taskTaskList)){ return Collections.emptyList(); } List<ProjectCountVO> result = new ArrayList<>(); Map<String, List<TaskTask>> projectTaskMap = taskTaskList.stream().collect(Collectors.groupingBy(TaskTask::getProjectId)); for (Map.Entry<String, List<TaskTask>> projectTaskEntry : projectTaskMap.entrySet()) { String currentProjectId = projectTaskEntry.getKey(); ProjectCountVO projectCountVO = new ProjectCountVO(); projectCountVO.setId(currentProjectId); // 查询项目名称 ProjectCondition queryProjectDto = new ProjectCondition(); queryProjectDto.setCompanyId(companyId); queryProjectDto.setDesignStatusList(designStatusList); queryProjectDto.setPageSize(pageSize); queryProjectDto.setUserId(userId); ResultWrapper<QueryAllProject> queryAllProjectResult = applicationServicePlatformClient.listUserProject(bspToken, bspUserId, bspUserEnvId, bspUserTenant, queryProjectDto); QueryAllProject queryAllProject = queryAllProjectResult.getData(); projectCountVO.setName(queryAllProject.getProjectName()); List<TaskTask> taskList = projectTaskEntry.getValue(); projectCountVO.setTaskCount(taskList.size()); Integer problemCount = CollectionUtil.isEmpty(taskList) ? 0 : taskList.stream().collect(Collectors.summingInt(task-> Optional.ofNullable(task.getProblemNum()).orElse(0))); projectCountVO.setProblemCount(problemCount); result.add(projectCountVO); } return result; }
可以考虑对代码进行以下优化:
1. 将查询项目名称的逻辑提取成一个方法,避免在循环中重复查询。
2. 使用lambda表达式简化代码,如使用`stream().mapToInt().sum()`代替`stream().collect(Collectors.summingInt())`。
3. 对于空集合的判断,可以使用`Optional.ofNullable().orElse()`代替`CollectionUtil.isEmpty()`。
优化后的代码如下:
```
@Override
public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType, String projectId) {
List<TaskTask> taskTaskList = this.listStatisticsTask(beginTime, endTime, forceType, projectId);
if (CollectionUtil.isEmpty(taskTaskList)) {
return Collections.emptyList();
}
List<ProjectCountVO> result = new ArrayList<>();
Map<String, List<TaskTask>> projectTaskMap = taskTaskList.stream()
.collect(Collectors.groupingBy(TaskTask::getProjectId));
for (Map.Entry<String, List<TaskTask>> projectTaskEntry : projectTaskMap.entrySet()) {
String currentProjectId = projectTaskEntry.getKey();
ProjectCountVO projectCountVO = new ProjectCountVO();
projectCountVO.setId(currentProjectId);
projectCountVO.setName(queryProjectName(currentProjectId)); // 查询项目名称
List<TaskTask> taskList = projectTaskEntry.getValue();
projectCountVO.setTaskCount(taskList.size());
Integer problemCount = taskList.stream()
.mapToInt(task -> Optional.ofNullable(task.getProblemNum()).orElse(0))
.sum();
projectCountVO.setProblemCount(problemCount);
result.add(projectCountVO);
}
return result;
}
/**
* 查询项目名称
*/
private String queryProjectName(String projectId) {
ProjectCondition queryProjectDto = new ProjectCondition();
queryProjectDto.setCompanyId(companyId);
queryProjectDto.setDesignStatusList(designStatusList);
queryProjectDto.setPageSize(pageSize);
queryProjectDto.setUserId(userId);
ResultWrapper<QueryAllProject> queryAllProjectResult = applicationServicePlatformClient.listUserProject(bspToken, bspUserId, bspUserEnvId, bspUserTenant, queryProjectDto);
QueryAllProject queryAllProject = queryAllProjectResult.getData();
return queryAllProject.getProjectName();
}
```
根据代码1“@Component @Slf4j public class ApplicationServicePlatformClientProxy { @Autowired private IApplicationServicePlatformClient applicationServicePlatformClient; public List<QueryAllProject> listUserProject() { QueryOut<Page<QueryAllProject>> result = null; try { String bspToken = RequestHeaderHolder.getBspToken(); String bspUserId = RequestHeaderHolder.getUserId(); String bspUserEnvId = RequestHeaderHolder.getCompanyId(); String bspUserTenant = RequestHeaderHolder.getCompanyId(); String companyId = RequestHeaderHolder.getCompanyId(); ProjectCondition queryProjectDto = new ProjectCondition(); queryProjectDto.setAppId(queryProjectDto.getAppId()); queryProjectDto.setCompanyId(companyId); queryProjectDto.setDesignStatusList(Arrays.asList(2,3)); queryProjectDto.setPageSize(-1); queryProjectDto.setUserId(bspUserId); result = applicationServicePlatformClient.listUserProject(bspToken, bspUserId, bspUserEnvId, bspUserTenant, queryProjectDto); log.info("result={}", JSON.toJSONString(result)); } catch (Exception e) { log.error("调用IApplicationServicePlatformClient获取项目名称失败:", e); throw new BimdcException("调用IApplicationServicePlatformClient获取项目名称失败"); } if (result == null || result.getData() == null) { log.error("调用IApplicationServicePlatformClient获取项目名称失败:result={}", result); throw new BimdcException("调用IApplicationServicePlatformClient获取项目名称失败"); } return result.getData().getData(); } }”,修改代码2“public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType) { // 查询任务列表 List<TaskTask> taskTaskList = this.listStatisticsTask(beginTime, endTime, forceType,null); if (CollectionUtil.isEmpty(taskTaskList)) { return Collections.emptyList(); } List<ProjectCountVO> result = new ArrayList<>(); // 将任务按照项目ID分组 Map<String, List<TaskTask>> projectTaskMap = taskTaskList.stream().collect(Collectors.groupingBy(TaskTask::getProjectId)); //查询项目名称 List<QueryAllProject> queryAllProject = applicationServicePlatformClientProxy.listUserProject(bspToken, bspUserId, bspUserEnvId, bspUserTenant, queryProjectDto);”
在代码2中,需要将获取项目信息的代码移到方法内部,并且需要添加获取请求头信息的代码,代码修改如下:
```
public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType) {
// 查询任务列表
List<TaskTask> taskTaskList = this.listStatisticsTask(beginTime, endTime, forceType,null);
if (CollectionUtil.isEmpty(taskTaskList)) {
return Collections.emptyList();
}
List<ProjectCountVO> result = new ArrayList<>();
// 将任务按照项目ID分组
Map<String, List<TaskTask>> projectTaskMap = taskTaskList.stream().collect(Collectors.groupingBy(TaskTask::getProjectId));
// 查询项目信息
List<QueryAllProject> queryAllProject;
try {
String bspToken = RequestHeaderHolder.getBspToken();
String bspUserId = RequestHeaderHolder.getUserId();
String bspUserEnvId = RequestHeaderHolder.getCompanyId();
String bspUserTenant = RequestHeaderHolder.getCompanyId();
String companyId = RequestHeaderHolder.getCompanyId();
ProjectCondition queryProjectDto = new ProjectCondition();
queryProjectDto.setAppId(queryProjectDto.getAppId());
queryProjectDto.setCompanyId(companyId);
queryProjectDto.setDesignStatusList(Arrays.asList(2,3));
queryProjectDto.setPageSize(-1);
queryProjectDto.setUserId(bspUserId);
queryAllProject = applicationServicePlatformClient.listUserProject(bspToken, bspUserId, bspUserEnvId, bspUserTenant, queryProjectDto);
} catch (Exception e) {
log.error("调用IApplicationServicePlatformClient获取项目信息失败:", e);
throw new BimdcException("调用IApplicationServicePlatformClient获取项目信息失败");
}
// 将项目信息转为Map,方便后面通过ID获取
Map<String, QueryAllProject> projectMap = queryAllProject.stream().collect(Collectors.toMap(QueryAllProject::getId, Function.identity()));
// 统计每个项目的任务数
for (Map.Entry<String, List<TaskTask>> entry : projectTaskMap.entrySet()) {
String projectId = entry.getKey();
List<TaskTask> tasks = entry.getValue();
QueryAllProject project = projectMap.get(projectId);
if (project != null) {
ProjectCountVO vo = new ProjectCountVO();
vo.setProjectName(project.getName());
vo.setProjectCode(project.getCode());
vo.setTaskCount(tasks.size());
result.add(vo);
}
}
return result;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)