|
@@ -794,7 +794,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
**/
|
|
|
@DataScope
|
|
|
@Override
|
|
|
- public List<Object> workHourStatistic(PmWorkHourStatisticRequestVO requestVO) {
|
|
|
+ public List<Object> workHourStatisticNew(PmWorkHourStatisticRequestVO requestVO) {
|
|
|
List<Long> userId = new ArrayList<>();
|
|
|
if (requestVO.getUserIds() != null) {
|
|
|
userId = requestVO.getUserIds();
|
|
@@ -1037,6 +1037,237 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
return returnList;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @DataScope
|
|
|
+ @Override
|
|
|
+ public List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
|
|
|
+ List<ProjectWorkTimeVO> projectWorkTime = new ArrayList<>();
|
|
|
+ List<UserWorkTimeVO> userWorkTimeVO = new ArrayList<>();
|
|
|
+ List<ProjectWorkTimeVO> projectWorkTime1 = new ArrayList<>();
|
|
|
+ List<UserWorkTimeVO> userWorkTimeVO1 = new ArrayList<>();
|
|
|
+ List<Object> returnList = new ArrayList<>();
|
|
|
+ if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
|
|
|
+ throw new BusinessException("请设置查询时间范围!");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<PmProject> pmProjects = projects(projectId);
|
|
|
+ List<String> pmProjectName = new ArrayList<>();
|
|
|
+ List<Integer> pmProjectId = new ArrayList<>();
|
|
|
+ for (PmProject project : pmProjects) {
|
|
|
+ pmProjectName.add(project.getProjectName());
|
|
|
+ pmProjectId.add(project.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> userIdS = new ArrayList<>();
|
|
|
+ if (userId != null) {
|
|
|
+ userIdS.add(userId);
|
|
|
+ }
|
|
|
+ List<SysUser> users = userNameList(userIdS);
|
|
|
+ List<Long> userIds = new ArrayList<>();
|
|
|
+ List<String> nickName = new ArrayList<>();
|
|
|
+ for (SysUser user : users) {
|
|
|
+ userIds.add(user.getUserId());
|
|
|
+ nickName.add(user.getNickName());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<WorkHoursStatisticsVO> userAndProject = new ArrayList<>();
|
|
|
+ List<PmWorkContent> pmWorkContentList = workTimeCount(userIds, pmProjectId, startDate, endDate);
|
|
|
+ if (!pmWorkContentList.isEmpty()) {
|
|
|
+ for (PmWorkContent content : pmWorkContentList) {
|
|
|
+ WorkHoursStatisticsVO workHoursStatisticsVO = new WorkHoursStatisticsVO();
|
|
|
+ Long submitterId = content.getSubmitterId();
|
|
|
+ Integer projectId1 = content.getProjectId();
|
|
|
+ BigDecimal workTime = content.getWorkTime();
|
|
|
+ workHoursStatisticsVO.setWorkTime(workTime);
|
|
|
+ for (SysUser user : users) {
|
|
|
+ Long userId1 = user.getUserId();
|
|
|
+ String nickName1 = user.getNickName();
|
|
|
+ if (userId1.equals(submitterId)) {
|
|
|
+ workHoursStatisticsVO.setNickName(nickName1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (PmProject project : pmProjects) {
|
|
|
+ Integer projectId2 = project.getId();
|
|
|
+ String projectName = project.getProjectName();
|
|
|
+ if (projectId2 == projectId1) {
|
|
|
+ workHoursStatisticsVO.setProjectName(projectName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ userAndProject.add(workHoursStatisticsVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<WorkHoursStatisticsVO> userAndProjectD = userAndProject;
|
|
|
+
|
|
|
+ if (workerOrProject != 1) {
|
|
|
+ returnList.add(nickName);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (String currentNickName : nickName) {
|
|
|
+ boolean foundWorkTime = false;
|
|
|
+ for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
|
|
|
+ String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
+ String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
+ BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
+ if (projectName == name && userNickName == currentNickName) {
|
|
|
+ workTime.add(userProjectWorkTime);
|
|
|
+ if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ hasNonZeroWorkTime = true;
|
|
|
+ }
|
|
|
+ foundWorkTime = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!foundWorkTime) {
|
|
|
+ workTime.add(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (filter != 2 || hasNonZeroWorkTime) {
|
|
|
+ projectWorkTimeVO.setWorkTime(workTime);
|
|
|
+ projectWorkTime.add(projectWorkTimeVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnList.add(projectWorkTime);
|
|
|
+
|
|
|
+
|
|
|
+ returnList.add(pmProjectName);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (filter != 2 || hasNonZeroWorkTime1) {
|
|
|
+ userWorkTimeVO2.setWorkTime(workTime1);
|
|
|
+ userWorkTimeVO.add(userWorkTimeVO2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnList.add(userWorkTimeVO);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ returnList.add(pmProjectName);
|
|
|
+
|
|
|
+ for (String uName : nickName) {
|
|
|
+ String name = uName;
|
|
|
+ UserWorkTimeVO userWorkTimeVO2 = new UserWorkTimeVO();
|
|
|
+ userWorkTimeVO2.setProjectOrPerson(name);
|
|
|
+ List<BigDecimal> workTime = new ArrayList<>();
|
|
|
+ boolean hasNonZeroWorkTime = false;
|
|
|
+ if (userAndProjectD.isEmpty()) {
|
|
|
+ for (String currentNickName : pmProjectName) {
|
|
|
+ workTime.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 == name && projectName == currentNickName) {
|
|
|
+ workTime.add(userProjectWorkTime);
|
|
|
+ if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ hasNonZeroWorkTime = true;
|
|
|
+ }
|
|
|
+ foundWorkTime = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!foundWorkTime) {
|
|
|
+ workTime.add(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (filter != 2 || hasNonZeroWorkTime) {
|
|
|
+ userWorkTimeVO2.setWorkTime(workTime);
|
|
|
+ userWorkTimeVO.add(userWorkTimeVO2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnList.add(userWorkTimeVO);
|
|
|
+
|
|
|
+
|
|
|
+ returnList.add(nickName);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (String currentNickName : nickName) {
|
|
|
+ boolean foundWorkTime = false;
|
|
|
+ for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
|
|
|
+ String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
+ String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
+ BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
+ if (projectName == name && userNickName == currentNickName) {
|
|
|
+ workTime.add(userProjectWorkTime);
|
|
|
+ if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ hasNonZeroWorkTime = true;
|
|
|
+ }
|
|
|
+ foundWorkTime = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!foundWorkTime) {
|
|
|
+ workTime.add(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (filter != 2 || hasNonZeroWorkTime) {
|
|
|
+ projectWorkTimeVO.setWorkTime(workTime);
|
|
|
+ projectWorkTime.add(projectWorkTimeVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnList.add(projectWorkTime);
|
|
|
+ }
|
|
|
+ return returnList;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 工时-明细-导出
|
|
|
* @return
|