|
|
@@ -16188,8 +16188,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
|
|
|
@Override
|
|
|
public HttpRespMsg getTop3ProjectReportGroupByDept(Integer companyId, String ymonth) {
|
|
|
+ return getTop3ProjectReportGroupByDept(companyId, ymonth, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ public HttpRespMsg getTop3ProjectReportGroupByDept(Integer companyId, String ymonth, String deptMode) {
|
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
|
String month = normalizeYearMonth(ymonth);
|
|
|
+ boolean useTopLevel = "top".equals(deptMode);
|
|
|
+
|
|
|
List<Map<String, Object>> topProjectList = reportMapper.selectMaps(new QueryWrapper<Report>()
|
|
|
.select("project_id as projectId", "sum(working_time) as workingTime")
|
|
|
.eq("company_id", companyId)
|
|
|
@@ -16221,15 +16227,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
Map<Integer, Department> departmentMap = getDepartmentMap(companyId);
|
|
|
Map<String, HashMap<String, Object>> projectDeptMap = new LinkedHashMap<>();
|
|
|
fillProjectInfo(companyId, projectDeptReportList).forEach(item -> {
|
|
|
- Integer deptId = toInteger(item.get("deptId"));
|
|
|
- Integer topDeptId = getTopDepartmentId(deptId, departmentMap);
|
|
|
+ Integer rawDeptId = toInteger(item.get("deptId"));
|
|
|
+ Integer deptId = useTopLevel ? getTopDepartmentId(rawDeptId, departmentMap) : rawDeptId;
|
|
|
Integer projectId = toInteger(item.get("projectId"));
|
|
|
- String key = (topDeptId == null ? -1 : topDeptId) + "_" + projectId;
|
|
|
+ String key = (deptId == null ? -1 : deptId) + "_" + projectId;
|
|
|
HashMap<String, Object> target = projectDeptMap.computeIfAbsent(key, groupKey -> {
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
map.putAll(item);
|
|
|
- map.put("deptId", topDeptId);
|
|
|
- fillDepartmentInfo(map, topDeptId, departmentMap);
|
|
|
+ fillDepartmentInfo(map, deptId, departmentMap);
|
|
|
map.put("projectRank", projectRankMap.getOrDefault(projectId, Integer.MAX_VALUE));
|
|
|
map.put("workingTime", 0D);
|
|
|
map.put("overtimeHours", 0D);
|
|
|
@@ -16240,29 +16245,43 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
});
|
|
|
|
|
|
Map<Integer, HashMap<String, Object>> deptGroupMap = new LinkedHashMap<>();
|
|
|
- departmentMap.values().stream()
|
|
|
- .filter(department -> department.getDepartmentId() != null)
|
|
|
- .filter(department -> department.getDepartmentId().equals(getTopDepartmentId(department.getDepartmentId(), departmentMap)))
|
|
|
- .filter(department -> !Integer.valueOf(1).equals(department.getCorpwxDeptid()))
|
|
|
- .sorted(Comparator
|
|
|
- .comparing((Department department) -> department.getSeq(), Comparator.nullsLast(Integer::compareTo))
|
|
|
- .thenComparing(Department::getDepartmentId))
|
|
|
- .forEach(department -> {
|
|
|
- HashMap<String, Object> map = new HashMap<>();
|
|
|
- fillDepartmentInfo(map, department.getDepartmentId(), departmentMap);
|
|
|
- map.put("workingTime", 0D);
|
|
|
- map.put("overtimeHours", 0D);
|
|
|
- map.put("items", new ArrayList<HashMap>());
|
|
|
- deptGroupMap.put(department.getDepartmentId(), map);
|
|
|
- });
|
|
|
+ if (useTopLevel) {
|
|
|
+ departmentMap.values().stream()
|
|
|
+ .filter(department -> department.getDepartmentId() != null)
|
|
|
+ .filter(department -> department.getDepartmentId().equals(getTopDepartmentId(department.getDepartmentId(), departmentMap)))
|
|
|
+ .filter(department -> !Integer.valueOf(1).equals(department.getCorpwxDeptid()))
|
|
|
+ .sorted(Comparator
|
|
|
+ .comparing((Department department) -> department.getSeq(), Comparator.nullsLast(Integer::compareTo))
|
|
|
+ .thenComparing(Department::getDepartmentId))
|
|
|
+ .forEach(department -> {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ fillDepartmentInfo(map, department.getDepartmentId(), departmentMap);
|
|
|
+ map.put("workingTime", 0D);
|
|
|
+ map.put("overtimeHours", 0D);
|
|
|
+ map.put("items", new ArrayList<HashMap>());
|
|
|
+ deptGroupMap.put(department.getDepartmentId(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
projectDeptMap.values().stream()
|
|
|
.sorted(Comparator.comparingInt(item -> toInteger(item.get("projectRank")) == null ? Integer.MAX_VALUE : toInteger(item.get("projectRank"))))
|
|
|
.forEach(item -> {
|
|
|
Integer deptId = toInteger(item.get("departmentId"));
|
|
|
Integer key = deptId == null ? -1 : deptId;
|
|
|
- HashMap<String, Object> deptMap = deptGroupMap.get(key);
|
|
|
- if (deptMap == null) {
|
|
|
- return;
|
|
|
+ HashMap<String, Object> deptMap;
|
|
|
+ if (useTopLevel) {
|
|
|
+ deptMap = deptGroupMap.get(key);
|
|
|
+ if (deptMap == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ deptMap = deptGroupMap.computeIfAbsent(key, groupKey -> {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ fillDepartmentInfo(map, key == -1 ? null : key, departmentMap);
|
|
|
+ map.put("workingTime", 0D);
|
|
|
+ map.put("overtimeHours", 0D);
|
|
|
+ map.put("items", new ArrayList<HashMap>());
|
|
|
+ return map;
|
|
|
+ });
|
|
|
}
|
|
|
deptMap.put("workingTime", roundHours(toDouble(deptMap.get("workingTime")) + toDouble(item.get("workingTime"))));
|
|
|
deptMap.put("overtimeHours", roundHours(toDouble(deptMap.get("overtimeHours")) + toDouble(item.get("overtimeHours"))));
|