fix: align monthly completed metrics to completion time
This commit is contained in:
parent
65d77a80fe
commit
e7554c746d
@ -637,6 +637,25 @@ public class AnalyticsService {
|
||||
int designerWithData = 0;
|
||||
|
||||
for (User designer : designers) {
|
||||
java.util.function.Predicate<Task> mainCreatedInRange = t ->
|
||||
t.getCreateTime() != null
|
||||
&& !t.getCreateTime().isBefore(queryStartTime)
|
||||
&& !t.getCreateTime().isAfter(queryEndTime);
|
||||
java.util.function.Predicate<Task> mainCompletedInRange = t ->
|
||||
"completed".equals(t.getStatus())
|
||||
&& t.getActualEndTime() != null
|
||||
&& !t.getActualEndTime().isBefore(queryStartTime)
|
||||
&& !t.getActualEndTime().isAfter(queryEndTime);
|
||||
java.util.function.Predicate<TaskItem> subCreatedInRange = t ->
|
||||
t.getCreateTime() != null
|
||||
&& !t.getCreateTime().isBefore(queryStartTime)
|
||||
&& !t.getCreateTime().isAfter(queryEndTime);
|
||||
java.util.function.Predicate<TaskItem> subCompletedInRange = t ->
|
||||
"completed".equals(t.getStatus())
|
||||
&& t.getCompleteTime() != null
|
||||
&& !t.getCompleteTime().isBefore(queryStartTime)
|
||||
&& !t.getCompleteTime().isAfter(queryEndTime);
|
||||
|
||||
// 获取该设计师的主任务
|
||||
List<Task> designerTasks = tasks.stream()
|
||||
.filter(t -> designer.getId().equals(t.getReceiverId()))
|
||||
@ -660,21 +679,25 @@ public class AnalyticsService {
|
||||
);
|
||||
|
||||
// 主任务统计
|
||||
int mainReceivedCount = designerTasks.size();
|
||||
int mainReceivedCount = (int) designerTasks.stream()
|
||||
.filter(mainCreatedInRange)
|
||||
.count();
|
||||
int mainCompletedCount = (int) designerTasks.stream()
|
||||
.filter(t -> "completed".equals(t.getStatus()))
|
||||
.filter(mainCompletedInRange)
|
||||
.count();
|
||||
int mainInProgressCount = (int) designerTasks.stream()
|
||||
.filter(t -> "in_progress".equals(t.getStatus()))
|
||||
.filter(t -> "in_progress".equals(t.getStatus()) && mainCreatedInRange.test(t))
|
||||
.count();
|
||||
|
||||
// 子任务统计
|
||||
int subReceivedCount = designerTaskItems.size();
|
||||
int subReceivedCount = (int) designerTaskItems.stream()
|
||||
.filter(subCreatedInRange)
|
||||
.count();
|
||||
int subCompletedCount = (int) designerTaskItems.stream()
|
||||
.filter(t -> "completed".equals(t.getStatus()))
|
||||
.filter(subCompletedInRange)
|
||||
.count();
|
||||
int subInProgressCount = (int) designerTaskItems.stream()
|
||||
.filter(t -> "in_progress".equals(t.getStatus()))
|
||||
.filter(t -> "in_progress".equals(t.getStatus()) && subCreatedInRange.test(t))
|
||||
.count();
|
||||
|
||||
// 合计(主任务 + 子任务)
|
||||
@ -690,7 +713,7 @@ public class AnalyticsService {
|
||||
|
||||
// 主任务准时率计算
|
||||
for (Task task : designerTasks) {
|
||||
if ("completed".equals(task.getStatus()) && task.getActualEndTime() != null) {
|
||||
if (mainCompletedInRange.test(task)) {
|
||||
LocalDateTime start = task.getActualStartTime() != null ? task.getActualStartTime() : task.getStartTime();
|
||||
if (start != null) {
|
||||
long hours = Duration.between(start, task.getActualEndTime()).toHours();
|
||||
@ -713,7 +736,7 @@ public class AnalyticsService {
|
||||
|
||||
// 子任务准时率计算
|
||||
for (TaskItem item : designerTaskItems) {
|
||||
if ("completed".equals(item.getStatus()) && item.getCompleteTime() != null) {
|
||||
if (subCompletedInRange.test(item)) {
|
||||
// 判断是否准时
|
||||
if (item.getDeadline() != null) {
|
||||
if (!item.getCompleteTime().isAfter(item.getDeadline())) {
|
||||
@ -737,7 +760,7 @@ public class AnalyticsService {
|
||||
double satisfactionRate = 0;
|
||||
try {
|
||||
List<Long> completedTaskIds = designerTasks.stream()
|
||||
.filter(t -> "completed".equals(t.getStatus()))
|
||||
.filter(mainCompletedInRange)
|
||||
.map(Task::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@ -1203,8 +1226,9 @@ public class AnalyticsService {
|
||||
List<Task> completedTasks = taskMapper.selectList(
|
||||
new LambdaQueryWrapper<Task>()
|
||||
.eq(Task::getStatus, "completed")
|
||||
.ge(Task::getCreateTime, startTime)
|
||||
.le(Task::getCreateTime, endTime)
|
||||
.isNotNull(Task::getActualEndTime)
|
||||
.ge(Task::getActualEndTime, startTime)
|
||||
.le(Task::getActualEndTime, endTime)
|
||||
);
|
||||
|
||||
// 计算各环节平均耗时
|
||||
@ -2776,8 +2800,9 @@ public class AnalyticsService {
|
||||
LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Task::getIsPrimaryTask, 1)
|
||||
.eq(Task::getStatus, "completed")
|
||||
.ge(Task::getCreateTime, startTime)
|
||||
.le(Task::getCreateTime, endTime)
|
||||
.isNotNull(Task::getCompleteTime)
|
||||
.ge(Task::getCompleteTime, startTime)
|
||||
.le(Task::getCompleteTime, endTime)
|
||||
.eq(Task::getDeleted, 0);
|
||||
|
||||
List<Task> completedTasks = taskMapper.selectList(queryWrapper);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user