|
@@ -697,19 +697,25 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
* @description: 项目查询-工具
|
|
|
* @author: fu
|
|
|
* @date: 2024/8/8 19:22
|
|
|
- * @param: [startDate, endDate]
|
|
|
* @return: java.util.List<java.lang.Integer>
|
|
|
**/
|
|
|
private List<PmProject> projects(Integer projectId) {
|
|
|
- Integer tenantId = SecurityUtils.getTenantId();
|
|
|
- Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
|
|
|
+ Long userId = SecurityUtils.getUserId();
|
|
|
LambdaQueryWrapper<PmProject> projectsQuery = Wrappers.lambdaQuery();
|
|
|
projectsQuery.select(PmProject::getId, PmProject::getProjectName);
|
|
|
if (projectId != null && projectId >= 0) {
|
|
|
projectsQuery.eq(PmProject::getId, projectId);
|
|
|
return pmProjectMapper.selectList(projectsQuery);
|
|
|
+ } else {
|
|
|
+ projectsQuery.and(qw -> qw
|
|
|
+ .or().apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
|
|
|
+ .or().eq(PmProject::getProjectHead, userId)
|
|
|
+ .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername())
|
|
|
+ .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
|
|
|
+ );
|
|
|
+ // projectsQuery.apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
|
|
|
}
|
|
|
- projectsQuery.eq(PmProject::getTenantId, tenantId).eq(PmProject::getDeptId, deptId).eq(PmProject::getDelFlag, 0);
|
|
|
+ projectsQuery.eq(PmProject::getDelFlag, 0);
|
|
|
return pmProjectMapper.selectList(projectsQuery);
|
|
|
}
|
|
|
|
|
@@ -720,13 +726,15 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
* @param: [userId]
|
|
|
* @return: java.util.List<com.usky.iot.domain.SysUser>
|
|
|
**/
|
|
|
- private List<SysUser> userNameList(List<Long> userId) {
|
|
|
+ private List<SysUser> userNameList(List<Long> userId, Integer workerOrProject) {
|
|
|
LambdaQueryWrapper<SysUser> userNameQuery = Wrappers.lambdaQuery();
|
|
|
userNameQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar,
|
|
|
SysUser::getSex, SysUser::getDeptId, SysUser::getAddress);
|
|
|
if (!userId.isEmpty()) {
|
|
|
userNameQuery.eq(SysUser::getDelFlag, 0).eq(SysUser::getStatus, 0).in(SysUser::getUserId, userId);
|
|
|
return sysUserMapper.selectList(userNameQuery);
|
|
|
+ } else if (workerOrProject == 2) {
|
|
|
+ userNameQuery.apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
|
|
|
} else {
|
|
|
userNameQuery.eq(SysUser::getUserId, SecurityUtils.getUserId());
|
|
|
}
|
|
@@ -800,13 +808,13 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
userId = requestVO.getUserIds();
|
|
|
}
|
|
|
Integer projectId = requestVO.getProjectId();
|
|
|
- Integer filter = 1;
|
|
|
+ int filter = 1;
|
|
|
if (requestVO.getFilter() != null) {
|
|
|
filter = requestVO.getFilter();
|
|
|
}
|
|
|
String startDate = requestVO.getStartDate();
|
|
|
String endDate = requestVO.getEndDate();
|
|
|
- Integer workerOrProject = 1;
|
|
|
+ int workerOrProject = 1;
|
|
|
if (requestVO.getWorkerOrProject() != null) {
|
|
|
workerOrProject = requestVO.getWorkerOrProject();
|
|
|
}
|
|
@@ -823,6 +831,14 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
throw new BusinessException("请设置查询时间范围!");
|
|
|
}
|
|
|
|
|
|
+ List<SysUser> users = userNameList(userId, workerOrProject);
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ List<String> nickName = new ArrayList<>();
|
|
|
+ for (SysUser user : users) {
|
|
|
+ userIds.add(user.getUserId());
|
|
|
+ nickName.add(user.getNickName());
|
|
|
+ }
|
|
|
+
|
|
|
List<PmProject> pmProjects = projects(projectId);
|
|
|
List<String> pmProjectName = new ArrayList<>();
|
|
|
List<Integer> pmProjectId = new ArrayList<>();
|
|
@@ -831,14 +847,6 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
pmProjectId.add(project.getId());
|
|
|
}
|
|
|
|
|
|
- List<SysUser> users = userNameList(userId);
|
|
|
- List<Long> userIds = new ArrayList<>();
|
|
|
- List<String> nickName = new ArrayList<>();
|
|
|
- for (SysUser user : users) {
|
|
|
- userIds.add(user.getUserId());
|
|
|
- nickName.add(user.getNickName());
|
|
|
- }
|
|
|
-
|
|
|
// 统计userId每个项目所需工时
|
|
|
List<WorkHoursStatisticsVO> userAndProject = new ArrayList<>();
|
|
|
List<PmWorkContent> pmWorkContentList = workTimeCount(userIds, pmProjectId, startDate, endDate);
|
|
@@ -859,7 +867,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
for (PmProject project : pmProjects) {
|
|
|
Integer projectId2 = project.getId();
|
|
|
String projectName = project.getProjectName();
|
|
|
- if (projectId2 == projectId1) {
|
|
|
+ if (Objects.equals(projectId2, projectId1)) {
|
|
|
workHoursStatisticsVO.setProjectName(projectName);
|
|
|
}
|
|
|
}
|
|
@@ -868,6 +876,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
}
|
|
|
List<WorkHoursStatisticsVO> userAndProjectD = userAndProject;
|
|
|
|
|
|
+ //判断是否为项目维度
|
|
|
if (workerOrProject != 1) {
|
|
|
returnList.add(nickName);
|
|
|
// 重组返回数据结构
|
|
@@ -910,45 +919,81 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
returnList.add(projectWorkTime);
|
|
|
|
|
|
|
|
|
- returnList.add(pmProjectName);
|
|
|
+ // 先过滤掉总工时为0的项目
|
|
|
+ Set<Integer> nonZeroProjectIndices = new HashSet<>();
|
|
|
+ for (int i = 0; i < pmProjectName.size(); i++) {
|
|
|
+ BigDecimal totalWorkTime = BigDecimal.ZERO;
|
|
|
+ for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
|
|
|
+ if (workHoursStatisticsVO.getProjectName().equals(pmProjectName.get(i))) {
|
|
|
+ totalWorkTime = totalWorkTime.add(workHoursStatisticsVO.getWorkTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (totalWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ nonZeroProjectIndices.add(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 重组返回数据结构
|
|
|
for (String uName : nickName) {
|
|
|
String name1 = uName;
|
|
|
UserWorkTimeVO userWorkTimeVO2 = new UserWorkTimeVO();
|
|
|
userWorkTimeVO2.setProjectOrPerson(name1);
|
|
|
List<BigDecimal> workTime1 = new ArrayList<>();
|
|
|
- boolean hasNonZeroWorkTime1 = false;
|
|
|
- if (userAndProjectD.isEmpty()) {
|
|
|
- for (String currentNickName : pmProjectName) {
|
|
|
- workTime1.add(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (String currentNickName : pmProjectName) {
|
|
|
- boolean foundWorkTime = false;
|
|
|
- for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
|
|
|
- String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
- String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
- BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
- if (userNickName == name1 && projectName == currentNickName) {
|
|
|
- workTime1.add(userProjectWorkTime);
|
|
|
- if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
- hasNonZeroWorkTime1 = true;
|
|
|
- }
|
|
|
- foundWorkTime = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!foundWorkTime) {
|
|
|
- workTime1.add(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ for (int i = 0; i < pmProjectName.size(); i++) {
|
|
|
+ BigDecimal userProjectWorkTime = BigDecimal.ZERO;
|
|
|
+ boolean foundWorkTime = false;
|
|
|
+ for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
|
|
|
+ String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
+ String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
+ if (userNickName.equals(name1) && projectName.equals(pmProjectName.get(i))) {
|
|
|
+ userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
+ foundWorkTime = true;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
+ if (foundWorkTime && nonZeroProjectIndices.contains(i)) {
|
|
|
+ workTime1.add(userProjectWorkTime);
|
|
|
+ } else {
|
|
|
+ workTime1.add(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
// 过滤0工时
|
|
|
+ boolean hasNonZeroWorkTime1 = false;
|
|
|
+ for (BigDecimal time : workTime1) {
|
|
|
+ if (time.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ hasNonZeroWorkTime1 = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (filter != 2 || hasNonZeroWorkTime1) {
|
|
|
userWorkTimeVO2.setWorkTime(workTime1);
|
|
|
userWorkTimeVO.add(userWorkTimeVO2);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (filter == 2){
|
|
|
+ for (int i = pmProjectName.size() - 1; i >= 0; i--) {
|
|
|
+ if (!nonZeroProjectIndices.contains(i)) {
|
|
|
+ pmProjectName.remove(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = userWorkTimeVO.size() - 1; i >= 0; i--) {
|
|
|
+ List<BigDecimal> workTime = userWorkTimeVO.get(i).getWorkTime();
|
|
|
+ for (int j = workTime.size() - 1; j >= 0; j--) {
|
|
|
+ if (!nonZeroProjectIndices.contains(j)) {
|
|
|
+ workTime.remove(j);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (workTime.isEmpty()) {
|
|
|
+ userWorkTimeVO.remove(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ returnList.add(pmProjectName);
|
|
|
returnList.add(userWorkTimeVO);
|
|
|
|
|
|
} else {
|
|
@@ -971,7 +1016,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
- if (userNickName == name && projectName == currentNickName) {
|
|
|
+ if (Objects.equals(userNickName, name) && Objects.equals(projectName, currentNickName)) {
|
|
|
workTime.add(userProjectWorkTime);
|
|
|
if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
hasNonZeroWorkTime = true;
|
|
@@ -994,13 +1039,15 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
returnList.add(userWorkTimeVO);
|
|
|
|
|
|
|
|
|
- returnList.add(nickName);
|
|
|
- // 重组返回数据结构
|
|
|
+ List<String> filteredNickName = new ArrayList<>();
|
|
|
+ List<ProjectWorkTimeVO> filteredProjectWorkTime = new ArrayList<>();
|
|
|
+
|
|
|
for (String name : pmProjectName) {
|
|
|
ProjectWorkTimeVO projectWorkTimeVO = new ProjectWorkTimeVO();
|
|
|
projectWorkTimeVO.setProjectOrPerson(name);
|
|
|
List<BigDecimal> workTime = new ArrayList<>();
|
|
|
boolean hasNonZeroWorkTime = false;
|
|
|
+
|
|
|
if (userAndProject.isEmpty()) {
|
|
|
for (String currentNickName : nickName) {
|
|
|
workTime.add(BigDecimal.ZERO);
|
|
@@ -1012,7 +1059,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
- if (projectName == name && userNickName == currentNickName) {
|
|
|
+ if (projectName.equals(name) && userNickName.equals(currentNickName)) {
|
|
|
workTime.add(userProjectWorkTime);
|
|
|
if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
hasNonZeroWorkTime = true;
|
|
@@ -1026,18 +1073,49 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// 过滤0工时
|
|
|
if (filter != 2 || hasNonZeroWorkTime) {
|
|
|
projectWorkTimeVO.setWorkTime(workTime);
|
|
|
- projectWorkTime.add(projectWorkTimeVO);
|
|
|
+ filteredProjectWorkTime.add(projectWorkTimeVO);
|
|
|
}
|
|
|
}
|
|
|
- returnList.add(projectWorkTime);
|
|
|
+
|
|
|
+ // 过滤 nickName 和 projectWorkTime
|
|
|
+ if (filter == 2) {
|
|
|
+ Set<Integer> nonZeroIndices = new HashSet<>();
|
|
|
+ for (int i = 0; i < nickName.size(); i++) {
|
|
|
+ BigDecimal totalWorkTime = BigDecimal.ZERO;
|
|
|
+ for (int j = 0; j < filteredProjectWorkTime.size(); j++) {
|
|
|
+ totalWorkTime = totalWorkTime.add(filteredProjectWorkTime.get(j).getWorkTime().get(i));
|
|
|
+ }
|
|
|
+ if (totalWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ filteredNickName.add(nickName.get(i));
|
|
|
+ nonZeroIndices.add(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = filteredProjectWorkTime.size() - 1; i >= 0; i--) {
|
|
|
+ List<BigDecimal> workTime = filteredProjectWorkTime.get(i).getWorkTime();
|
|
|
+ for (int j = workTime.size() - 1; j >= 0; j--) {
|
|
|
+ if (!nonZeroIndices.contains(j)) {
|
|
|
+ workTime.remove(j);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (workTime.isEmpty()) {
|
|
|
+ filteredProjectWorkTime.remove(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ filteredNickName.addAll(nickName);
|
|
|
+ }
|
|
|
+
|
|
|
+ returnList.add(filteredNickName);
|
|
|
+ returnList.add(filteredProjectWorkTime);
|
|
|
}
|
|
|
return returnList;
|
|
|
}
|
|
|
|
|
|
- //回退代码
|
|
|
+ // 回退代码
|
|
|
@DataScope
|
|
|
@Override
|
|
|
public List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
|
|
@@ -1062,7 +1140,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
if (userId != null) {
|
|
|
userIdS.add(userId);
|
|
|
}
|
|
|
- List<SysUser> users = userNameList(userIdS);
|
|
|
+ List<SysUser> users = userNameList(userIdS, workerOrProject);
|
|
|
List<Long> userIds = new ArrayList<>();
|
|
|
List<String> nickName = new ArrayList<>();
|
|
|
for (SysUser user : users) {
|
|
@@ -1276,7 +1354,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
@Override
|
|
|
public List<WorkTimeExportVO> workHourStatisticExport(PmWorkHourStatisticRequestVO requestVO) {
|
|
|
List<Long> userIds = new ArrayList<>();
|
|
|
- if (Objects.isNull(requestVO.getUserIds()) || requestVO.getUserIds().isEmpty()){
|
|
|
+ if (Objects.isNull(requestVO.getUserIds()) || requestVO.getUserIds().isEmpty()) {
|
|
|
userIds.add(SecurityUtils.getUserId());
|
|
|
requestVO.setUserIds(userIds);
|
|
|
}
|