|
@@ -717,4 +717,39 @@ public class OkrService {
|
|
|
target.add(value);
|
|
target.add(value);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public com.yimeng.okr.dto.OkrWorkbenchDto getWorkbench(Long periodId, Long userId) {
|
|
|
|
|
+ com.yimeng.okr.dto.OkrWorkbenchDto dto = new com.yimeng.okr.dto.OkrWorkbenchDto();
|
|
|
|
|
+ dto.setMyObjectives(getMyOkrForPeriod(periodId, userId));
|
|
|
|
|
+ dto.setWorkflowState(determineWorkflowState(periodId, userId));
|
|
|
|
|
+ dto.setVersion(System.currentTimeMillis());
|
|
|
|
|
+ return dto;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private String determineWorkflowState(Long periodId, Long userId) {
|
|
|
|
|
+ var period = periodMapper.selectById(periodId);
|
|
|
|
|
+ if (period == null) return "NO_PERIOD";
|
|
|
|
|
+ var objectives = objectiveMapper.selectList(
|
|
|
|
|
+ new LambdaQueryWrapper<OkrObjective>()
|
|
|
|
|
+ .eq(OkrObjective::getPeriodId, periodId)
|
|
|
|
|
+ .eq(OkrObjective::getUserId, userId));
|
|
|
|
|
+ if (objectives.isEmpty()) return "DRAFT_REQUIRED";
|
|
|
|
|
+ boolean hasSubmitted = objectives.stream().anyMatch(o -> "SUBMITTED".equals(o.getStatus()));
|
|
|
|
|
+ return hasSubmitted ? "SUBMITTED" : "DRAFT";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private java.util.List<com.yimeng.okr.dto.OkrWorkbenchDto.ObjectiveDto> getMyOkrForPeriod(Long periodId, Long userId) {
|
|
|
|
|
+ return objectiveMapper.selectList(
|
|
|
|
|
+ new LambdaQueryWrapper<OkrObjective>()
|
|
|
|
|
+ .eq(OkrObjective::getPeriodId, periodId)
|
|
|
|
|
+ .eq(OkrObjective::getUserId, userId)).stream()
|
|
|
|
|
+ .map(o -> {
|
|
|
|
|
+ com.yimeng.okr.dto.OkrWorkbenchDto.ObjectiveDto od = new com.yimeng.okr.dto.OkrWorkbenchDto.ObjectiveDto();
|
|
|
|
|
+ od.setId(o.getId());
|
|
|
|
|
+ od.setTitle(o.getTitle());
|
|
|
|
|
+ od.setStatus(o.getStatus());
|
|
|
|
|
+ od.setProgress(o.getProgress());
|
|
|
|
|
+ return od;
|
|
|
|
|
+ }).toList();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|