소스 검색

resource summary api

tags/Baseline_30082024_BACKEND_UAT
Mac\David 1 년 전
부모
커밋
361602436b
2개의 변경된 파일130개의 추가작업 그리고 0개의 파일을 삭제
  1. +105
    -0
      src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt
  2. +25
    -0
      src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt

+ 105
- 0
src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt 파일 보기

@@ -907,6 +907,111 @@ open class DashboardService(

return jdbcDao.queryForList(sql.toString(), args)
}
fun projectResourceSummarySearch(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " p.id as id,"
+ " p.code as projectCode,"
+ " p.name as projectName,"
+ " concat(c.code,'-',c.name) as customerCodeAndName"
+ " from project p"
+ " left join customer c on p.customerId = c.id"
+ " where p.status = 'On-going'"
+ " and p.deleted = 0"
)

return jdbcDao.queryForList(sql.toString(), args)
}
fun projectResourceSummaryInformation(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " concat(p.code,'-',p.name) as projectCodeAndName,"
+ " p.expectedTotalFee as totalFee,"
+ " expenditure.expenditure as expenditure,"
+ " case"
+ " when p.expectedTotalFee - expenditure.expenditure >= 0 then 'Within Budget'"
+ " when p.expectedTotalFee - expenditure.expenditure < 0 then 'Overconsumption'"
+ " end as status,"
+ " p.totalManhour as plannedResources,"
+ " sum(t.normalConsumed) + sum(t.otConsumed) as resourcesSpent,"
+ " p.totalManhour - sum(t.normalConsumed) + sum(t.otConsumed) as remainingResources"
+ " from project p"
+ " left join project_task pt on p.id = pt.project_id"
+ " left join timesheet t on pt.id = t.projectTaskId"
+ " left join("
+ " select"
+ " sum(r.expenditure) as expenditure"
+ " from("
+ " select"
+ " (coalesce(sum(t.normalConsumed),0) * s2.hourlyRate) + (coalesce(sum(t.otConsumed),0) * s2.hourlyRate * 1.0) as expenditure"
+ " from project p"
+ " left join project_task pt on p.id = pt.project_id"
+ " left join timesheet t on pt.id = t.projectTaskId"
+ " left join staff s on t.staffId = s.id"
+ " left join salary s2 on s.salaryId = s2.salaryPoint"
+ " where t.id is not null"
+ " and p.id = :projectId"
+ " group by s2.hourlyRate"
+ " ) as r"
+ " ) as expenditure on 1 = 1"
+ " where p.id = :projectId"
+ " group by expenditure.expenditure"
)

return jdbcDao.queryForList(sql.toString(), args)
}
fun projectResourceSummaryMainStage(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " p.id as projectId,"
+ " tg.id,"
+ " tg.name,"
+ " count(distinct pt.id) as taskCount,"
+ " g.name,"
+ " ifnull(ga.manhour, 0) as plannedResourcesPercentage,"
+ " ifnull(p.totalManhour, 0) * ifnull(ga.manhour, 0) / 100 as plannedResources,"
+ " ifnull(p.totalManhour, 0) as totalPlannedResources,"
+ " sum(ifnull(case when s.gradeId = g.id then t.normalConsumed else 0 end, 0) + ifnull(case when s.gradeId = g.id and ga.projectId = p.id then t.otConsumed else 0 end, 0)) as actualResourcesSpent,"
+ " sum(ifnull(t.normalConsumed, 0) + ifnull(t.otConsumed, 0)) as totalActualResourcesSpent"
+ " from project p"
+ " left join project_task pt on pt.project_id = p.id"
+ " left join milestone m on m.projectId = p.id and m.id = pt.milestoneId"
+ " left join task_group tg on tg.id = m.taskGroupId"
+ " left join grade_allocation ga ON ga.projectId = p.id"
+ " left join grade g ON g.id = ga.gradeId"
+ " left join timesheet t on t.projectTaskId = pt.id"
+ " left join staff s on s.id = t.staffId"
+ " where p.deleted = false"
+ " and p.id = :projectId"
+ " group by p.id, tg.id, tg.name, g.name, plannedResourcesPercentage, plannedResources"
+ " order by p.id;"
)

return jdbcDao.queryForList(sql.toString(), args)
}
fun projectResourceSummarySubStage(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " p.id as projectId,"
+ " t.id,"
+ " t.taskGroupId as tgId,"
+ " t.name,"
+ " g.name,"
+ " '-' as taskCount,"
+ " '-' as plannedResources,"
+ " '-' as totalPlannedResource,"
+ " sum(ifnull(case when s.gradeId = g.id then ts.normalConsumed else 0 end, 0) + ifnull(case when s.gradeId = g.id and ga.projectId = p.id then ts.otConsumed else 0 end, 0)) as actualResourcesSpent,"
+ " sum(ifnull(ts.normalConsumed, 0) + ifnull(ts.otConsumed, 0)) as totalActualResourcesSpent"
+ " from project p"
+ " left join project_task pt on pt.project_id = p.id"
+ " left join task t on t.id = pt.task_id"
+ " left join grade_allocation ga on ga.projectId = p.id"
+ " left join grade g on g.id = ga.gradeId"
+ " left join timesheet ts on ts.projectTaskId = pt.id"
+ " left join staff s on s.id = ts.staffId"
+ " where p.id = :projectId"
+ " group by p.id, t.id, t.name, g.name"
+ " order by p.id;"
)

return jdbcDao.queryForList(sql.toString(), args)
}

}



+ 25
- 0
src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt 파일 보기

@@ -207,4 +207,29 @@ class DashboardController(
result["teamCashFlowExpenditure"] = teamCashFlowExpenditure
return listOf(result)
}
@GetMapping("/searchProjectResourcesSummary")
fun searchProjectResourcesSummary(request: HttpServletRequest?): List<Map<String, Any>> {
val args = mutableMapOf<String, Any>()
val projectId = request?.getParameter("projectId")
if (projectId != null) {
args["projectId"] = projectId
}
return dashboardService.projectResourceSummarySearch(args)
}
@GetMapping("/searchProjectResourcesSummaryDetails")
fun searchProjectResourcesSummaryDetails(request: HttpServletRequest?): List<Map<String, Any>> {
val args = mutableMapOf<String, Any>()
val projectId = request?.getParameter("projectId")
if (projectId != null) {
args["projectId"] = projectId
}
val result = mutableMapOf<String, Any>()
val summaryInformation = dashboardService.projectResourceSummaryInformation(args)
val summaryMainStage = dashboardService.projectResourceSummaryMainStage(args)
val summarySubStage = dashboardService.projectResourceSummarySubStage(args)
result["summaryInformation"] = summaryInformation
result["summaryMainStage"] = summaryMainStage
result["summarySubStage"] = summarySubStage
return listOf(result)
}
}

불러오는 중...
취소
저장