From 7a4abfa7e9299f2aa416a836c705535a789232bd Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Tue, 11 Mar 2025 15:12:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BD=AF=E4=BB=B6=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1):=20=E4=BB=8A=E6=97=A5=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=80=81=E5=8A=BF=E3=80=81=E5=91=A8=E6=9C=88=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=80=81=E5=8A=BF=E3=80=81=E9=A1=B9=E7=9B=AE=E7=A0=94=E5=8F=91?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/specialArea/constant/Constant.java | 30 ++ .../SoftwareFactStatisticsController.java | 38 +++ .../pms/specialArea/domain/ForgeProject.java | 25 ++ .../specialArea/domain/ZonePmsProject.java | 42 +++ .../pms/specialArea/domain/vo/KeyValVO.java | 9 + .../domain/vo/ProjectSituationVO.java | 19 ++ .../mapper/SoftwareFactStatisForgeMapper.java | 19 ++ .../mapper/SoftwareFactStatisPmsMapper.java | 30 ++ .../SoftwareFactStatisticsServiceImpl.java | 276 ++++++++++++++++++ .../pms/SoftwareFactStatisForgeMapper.xml | 82 ++++++ .../pms/SoftwareFactStatisPmsMapper.xml | 89 ++++++ 11 files changed, 659 insertions(+) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java new file mode 100644 index 000000000..bd9227093 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java @@ -0,0 +1,30 @@ +package com.microservices.pms.specialArea.constant; + +import java.util.Arrays; +import java.util.List; + +public class Constant { + + private Constant() {} + + public static final List ISSUE_NOT_FINISHED = Arrays.asList(1,2); + public static final List ISSUE_FINISHED = Arrays.asList(3,5,6); + + public static final Integer NEED = 1; + public static final Integer TASK = 2; + public static final Integer BUG = 3; + + + public static final Integer TASK_CASE_STATUS_NOT_EXEC = 0; + public static final Integer TASK_CASE_STATUS_PASS = 1; + public static final Integer TASK_CASE_STATUS_FAIL = 2; + public static final Integer TASK_CASE_STATUS_BLOCK = 3; + public static final Integer TASK_CASE_STATUS_SKIP = 4; + + + public static final Integer SPRINT_STATUS_CLOSED = 2; + public static final Integer SPRINT_STATUS_PROCESSING = 1; + public static final Integer SPRINT_STATUS_NOT_START = 0; + + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java new file mode 100644 index 000000000..90953edcf --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java @@ -0,0 +1,38 @@ +package com.microservices.pms.specialArea.controller; + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.pms.specialArea.service.SoftwareFactStatisticsServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController() +@RequestMapping("/specialArea/softwareFact/statis") +@Api(tags = "项目管理-软件工厂统计相关接口") +@RequiredArgsConstructor +public class SoftwareFactStatisticsController { + + private final SoftwareFactStatisticsServiceImpl softwareFactStatisticsService; + + @ApiOperation(value = "今日工作态势") + @GetMapping("/todayWorkSituation") + public AjaxResult todayWorkSituation(){ + return AjaxResult.success(softwareFactStatisticsService.todayWorkSituation()); + } + + @ApiOperation(value = "周、月工作态势") + @GetMapping("/weekMonthWorkSituation") + public AjaxResult weekMonthWorkSituation(String type){ + return AjaxResult.success(softwareFactStatisticsService.weekMonthWorkSituation(type)); + } + + @ApiOperation(value = "项目研发状态") + @GetMapping("/projectSituation") + public AjaxResult projectSituation(){ + return AjaxResult.success(softwareFactStatisticsService.projectSituation()); + } + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java new file mode 100644 index 000000000..e111a1ef3 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java @@ -0,0 +1,25 @@ +package com.microservices.pms.specialArea.domain; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class ForgeProject { + + //项目ID + private Long pmProjectId; + // 需求1 任务2 缺陷3,默认为 1 + private Integer pmIssueType; + + //状态ID + private List statusIds; + //创建时间开始 + private Date createTimeS; + //创建时间结束 + private Date createTimeE; + //更新时间开始 + private Date updateTimeS; + private Date updateTimeE; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java new file mode 100644 index 000000000..619ed55e4 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java @@ -0,0 +1,42 @@ +package com.microservices.pms.specialArea.domain; + +import com.microservices.common.core.annotation.Excel; +import lombok.Data; + +@Data +public class ZonePmsProject { + + /** 项目ID */ + private Long id; + + /** + * 组织Id + */ + private Long deptId; + + /** 项目标识 */ + @Excel(name = "项目标识") + private String projectIdentifier; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 项目负责人 */ + @Excel(name = "项目负责人") + private Long projectAssigneeId; + + /** 项目负责人 */ + @Excel(name = "项目负责人") + private String projectAssigneeName; + /** 所属企业ID */ + @Excel(name = "所属企业ID") + private Long pmsEnterpriseId; + /** 所属企业ID */ + @Excel(name = "所属企业") + private String pmsEnterpriseName; + + /** 状态 0关闭 1开启 2暂停 */ + @Excel(name = "状态 0关闭 1开启 2暂停") + private String status; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java new file mode 100644 index 000000000..c45ea9b8b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java @@ -0,0 +1,9 @@ +package com.microservices.pms.specialArea.domain.vo; + +import lombok.Data; + +@Data +public class KeyValVO { + private Integer key; + private Long val; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java new file mode 100644 index 000000000..f90e70baa --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java @@ -0,0 +1,19 @@ +package com.microservices.pms.specialArea.domain.vo; + +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ProjectSituationVO extends ZonePmsProject { + private Long needCount; + private Long needFinishedCount; + private Long taskCount; + private Long taskFinishedCount; + private Long sprintCount; + private Long sprintFinishedCount; + private Long testCaseCount; + private Long testBugCount; + private Long notExecTestCaseCount; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java new file mode 100644 index 000000000..a58a5e647 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java @@ -0,0 +1,19 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Slave; +import com.microservices.pms.specialArea.domain.ForgeProject; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +@Slave +public interface SoftwareFactStatisForgeMapper { + + List selectForgeProject(ForgeProject forgeProject); + + Long countForgeProject(ForgeProject forgeProject); + Long countForgeProjectByCUES(ForgeProject forgeProject); + Long countForgeProjectByProject(ForgeProject forgeProject); + Long countForgeProjectByAssigner(ForgeProject forgeProject); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java new file mode 100644 index 000000000..a9f75432f --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java @@ -0,0 +1,30 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Master; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Master +@Mapper +public interface SoftwareFactStatisPmsMapper { + + List selectPmsProjectList(); + + ZonePmsProject selectPmsProjectById(@Param("id") Long id); + // 状态 0待开始 1进行中 2已关闭 + List countSprintByStatus(Long projectId); + Long countSprintByCUES(ForgeProject forgeProject); + Long countTestCaseBy(Long projectId); + Long countTestCaseInSheet(ForgeProject forgeProject); + Long countTestCaseByCUES(ForgeProject forgeProject); + + String selectPmsUserByGitlinkId(@Param("gitlinkId") Long gitlinkId); + + List selectPmsProjectListByDict(); + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java new file mode 100644 index 000000000..3f216f91b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java @@ -0,0 +1,276 @@ +package com.microservices.pms.specialArea.service; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import com.microservices.pms.specialArea.domain.vo.ProjectSituationVO; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisForgeMapper; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisPmsMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +import static com.microservices.pms.specialArea.constant.Constant.*; + +@Service +@RequiredArgsConstructor +public class SoftwareFactStatisticsServiceImpl extends BaseController { + + private final SoftwareFactStatisPmsMapper statisPmsMapper; + private final SoftwareFactStatisForgeMapper statisForgeMapper; + + public static Date[] getDayStartAndEnd(int days) { + // 获取今天的日期 + LocalDate today = LocalDate.now(); + today = today.plusDays(days); + // 获取今天的开始时间(00:00:00) + LocalDateTime startOfDay = today.atStartOfDay(); + + // 获取今天的结束时间(23:59:59.999999999) + LocalDateTime endOfDay = today.atTime(LocalTime.MAX); + + // 转换为 Date 对象 + Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()); + + return new Date[]{startDate, endDate}; + } + + public static Date[] getCurrentWeek() { + LocalDate today = LocalDate.now(); + LocalDate startOfWeek = today.with(java.time.DayOfWeek.MONDAY); + LocalDate endOfWeek = today.with(java.time.DayOfWeek.SUNDAY); + + LocalDateTime startDateTime = startOfWeek.atStartOfDay(); + LocalDateTime endDateTime = endOfWeek.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + + public static Date[] getCurrentMonth() { + LocalDate today = LocalDate.now(); + LocalDate startOfMonth = today.withDayOfMonth(1); + LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth()); + + LocalDateTime startDateTime = startOfMonth.atStartOfDay(); + LocalDateTime endDateTime = endOfMonth.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + + public Map todayWorkSituation() { + + Map res = new HashMap<>(); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setStatusIds(ISSUE_NOT_FINISHED); + + //需求待评审 + forgeProject.setPmIssueType(NEED); + Long needNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("needNotFinishCount", needNotFinishCount); + + //任务待完成 + forgeProject.setPmIssueType(TASK); + Long taskNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("taskNotFinishCount", taskNotFinishCount); + + //缺陷待修复 + forgeProject.setPmIssueType(BUG); + Long bugNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("bugNotFinishCount", bugNotFinishCount); + //测试用例未执行数 + forgeProject.setStatusIds(Collections.singletonList(TASK_CASE_STATUS_NOT_EXEC)); + Long notExecTestCaseCount = statisPmsMapper.countTestCaseInSheet(forgeProject); + res.put("notExecTestCaseCount", notExecTestCaseCount); + + ForgeProject f2 = new ForgeProject(); + f2.setStatusIds(ISSUE_NOT_FINISHED); + f2.setPmIssueType(TASK); + //任务最多项目 + Long taskMaxProjectId = statisForgeMapper.countForgeProjectByProject(f2); + ZonePmsProject taskMaxProject = statisPmsMapper.selectPmsProjectById(taskMaxProjectId); + res.put("taskMaxProject", taskMaxProject == null ?"": taskMaxProject.getProjectName()); + //任务最多个人 + Long taskMaxAssignerId = statisForgeMapper.countForgeProjectByAssigner(f2); + String taskMaxAssigner = statisPmsMapper.selectPmsUserByGitlinkId(taskMaxAssignerId); + res.put("taskMaxAssigner", taskMaxAssigner); + f2.setPmIssueType(BUG); + //缺陷最多项目 + Long bugMaxProjectId = statisForgeMapper.countForgeProjectByProject(f2); + ZonePmsProject bugMaxProject = statisPmsMapper.selectPmsProjectById(bugMaxProjectId); + res.put("bugMaxProject", bugMaxProject == null ?"": bugMaxProject.getProjectName()); + //缺陷最多个人 + Long bugMaxAssignerId = statisForgeMapper.countForgeProjectByAssigner(f2); + String bugMaxAssigner = statisPmsMapper.selectPmsUserByGitlinkId(bugMaxAssignerId); + res.put("bugMaxAssigner", bugMaxAssigner); + + + // 昨日完成、昨日新增 + Date[] dayStartAndEnd = getDayStartAndEnd(-1); + ForgeProject forgeProjectTime = new ForgeProject(); + forgeProjectTime.setCreateTimeS(dayStartAndEnd[0]); + forgeProjectTime.setCreateTimeE(dayStartAndEnd[1]); + buildDayWeekMonthData(forgeProjectTime, res, dayStartAndEnd); + + return res; + } + + private void buildDayWeekMonthData(ForgeProject forgeProjectTime, Map res, Date[] dayStartAndEnd) { + // 昨日新增需求 + forgeProjectTime.setPmIssueType(NEED); + Long yesterdayAddNeed = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddNeed", yesterdayAddNeed); +//昨日新增 任务 + forgeProjectTime.setPmIssueType(TASK); + Long yesterdayAddTask = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddTask", yesterdayAddTask); +//昨日新增 缺陷 + forgeProjectTime.setPmIssueType(BUG); + Long yesterdayAddBug = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddBug", yesterdayAddBug); + + ForgeProject forgeProjectFinish = new ForgeProject(); + forgeProjectFinish.setStatusIds(ISSUE_FINISHED); + forgeProjectFinish.setUpdateTimeS(dayStartAndEnd[0]); + forgeProjectFinish.setUpdateTimeE(dayStartAndEnd[1]); + //昨日任务完结 + forgeProjectFinish.setPmIssueType(TASK); + Long yesterdayFinishTask = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishTask", yesterdayFinishTask); + //昨日缺陷关闭数 + forgeProjectFinish.setPmIssueType(BUG); + Long yesterdayFinishBug = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishBug", yesterdayFinishBug); +// 昨日需求评审数 + forgeProjectFinish.setPmIssueType(NEED); + Long yesterdayFinishNeed = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishNeed", yesterdayFinishNeed); + //昨日测试用例执行 + ForgeProject forgeProjectTest = new ForgeProject(); + forgeProjectFinish.setStatusIds(Arrays.asList(TASK_CASE_STATUS_PASS, TASK_CASE_STATUS_FAIL, TASK_CASE_STATUS_BLOCK, TASK_CASE_STATUS_SKIP)); + forgeProjectFinish.setUpdateTimeS(dayStartAndEnd[0]); + forgeProjectFinish.setUpdateTimeE(dayStartAndEnd[1]); + Long yesterdayTestCase = statisPmsMapper.countTestCaseInSheet(forgeProjectTest); + res.put("yesterdayTestCase", yesterdayTestCase); + + // 昨日最活跃项目 + List zonePmsProjects = statisPmsMapper.selectPmsProjectList(); + long pmsProjectIdMax = 0L, maxVal = -1L; + for (ZonePmsProject p : zonePmsProjects) { + ForgeProject f = new ForgeProject(); + f.setCreateTimeS(dayStartAndEnd[0]); + f.setCreateTimeE(dayStartAndEnd[1]); + f.setUpdateTimeS(dayStartAndEnd[0]); + f.setUpdateTimeE(dayStartAndEnd[1]); + f.setPmProjectId(p.getId()); + + f.setPmIssueType(NEED); + Long a = statisForgeMapper.countForgeProjectByCUES(f); + f.setPmIssueType(TASK); + Long b = statisForgeMapper.countForgeProjectByCUES(f); + f.setPmIssueType(BUG); + Long c = statisForgeMapper.countForgeProjectByCUES(f); + Long d = statisPmsMapper.countSprintByCUES(f); + Long e = statisPmsMapper.countTestCaseByCUES(f); + + long total = a + b + c + d + e; + if (total > maxVal) { + pmsProjectIdMax = p.getId(); + maxVal = total; + } + } + + ZonePmsProject zonePmsProjectMax = statisPmsMapper.selectPmsProjectById(pmsProjectIdMax); + res.put("zonePmsProjectMax", zonePmsProjectMax==null? "": zonePmsProjectMax.getProjectName()); + } + + public List projectSituation() { + + List zonePmsProjects = statisPmsMapper.selectPmsProjectList(); + List showProjectList = statisPmsMapper.selectPmsProjectListByDict() + .stream().filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (!showProjectList.isEmpty()) { + zonePmsProjects = zonePmsProjects.stream().filter(e->showProjectList.contains(e.getId())) + .collect(Collectors.toList()); + } + List res = new ArrayList<>(); + zonePmsProjects.forEach(zonePmsProject -> { + + ProjectSituationVO vo = new ProjectSituationVO(); + BeanUtils.copyProperties(zonePmsProject, vo); + + Map sprintCountMap = statisPmsMapper.countSprintByStatus(zonePmsProject.getId()) + .stream() + .collect(Collectors.toMap(KeyValVO::getKey, KeyValVO::getVal, (o, n) -> n)); + + vo.setSprintFinishedCount(sprintCountMap.getOrDefault(SPRINT_STATUS_CLOSED,0L)); + vo.setSprintCount(sprintCountMap.values().stream().reduce(0L, Long::sum)); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setPmProjectId(zonePmsProject.getId()); + forgeProject.setPmIssueType(NEED); + Long planCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedCount(planCount); + forgeProject.setStatusIds(ISSUE_FINISHED); + Long planFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedFinishedCount(planFinishCount); + forgeProject.setPmIssueType(TASK); + Long taskFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskFinishedCount(taskFinishCount); + forgeProject.setStatusIds(new ArrayList<>()); + Long taskCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskCount(taskCount); + + // 测试相关 + //测试用例数 + Long testCaseCount = statisPmsMapper.countTestCaseBy(zonePmsProject.getId()); + forgeProject.setPmIssueType(BUG); + forgeProject.setStatusIds(ISSUE_NOT_FINISHED); + vo.setTestCaseCount(testCaseCount); +// 测试缺陷数 + Long testBugCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTestBugCount(testBugCount); +// 测试用例未执行数 + forgeProject.setStatusIds(Collections.singletonList(TASK_CASE_STATUS_NOT_EXEC)); + Long notExecTestCaseCount = statisPmsMapper.countTestCaseInSheet(forgeProject); + vo.setNotExecTestCaseCount(notExecTestCaseCount); + + res.add(vo); + }); + + return res; + } + + public Map weekMonthWorkSituation(String type) { + Map res = new HashMap<>(); + Date[] dayStartAndEnd = getDayStartAndEnd(-1); + if (Objects.equals(type, "week")) { + dayStartAndEnd = getCurrentWeek(); + } else if (Objects.equals(type, "month")) { + dayStartAndEnd = getCurrentMonth(); + } + ForgeProject forgeProjectTime = new ForgeProject(); + forgeProjectTime.setCreateTimeS(dayStartAndEnd[0]); + forgeProjectTime.setCreateTimeE(dayStartAndEnd[1]); + buildDayWeekMonthData(forgeProjectTime, res, dayStartAndEnd); + + return res; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml new file mode 100644 index 000000000..d82bf9417 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml new file mode 100644 index 000000000..964903987 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file