瀏覽代碼

update report

pull/3/head
MSI\derek 7 月之前
父節點
當前提交
7088673d7c
共有 2 個文件被更改,包括 106 次插入15 次删除
  1. +106
    -15
      src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt
  2. 二進制
      src/main/resources/templates/report/Project Manhour Summary.xlsx

+ 106
- 15
src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt 查看文件

@@ -55,7 +55,8 @@ open class ReportService(
private val salaryEffectiveRepository: SalaryEffectiveRepository, private val salaryEffectiveRepository: SalaryEffectiveRepository,
private val salaryRepository: SalaryRepository, private val salaryRepository: SalaryRepository,
private val timesheetRepository: TimesheetRepository, private val timesheetRepository: TimesheetRepository,
private val teamLogRepository: TeamLogRepository
private val teamLogRepository: TeamLogRepository,
private val teamRepository: TeamRepository
) { ) {
private val logger: Log = LogFactory.getLog(javaClass) private val logger: Log = LogFactory.getLog(javaClass)
private val DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd") private val DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd")
@@ -3712,6 +3713,7 @@ open class ReportService(
val templateInputStream = resource.inputStream val templateInputStream = resource.inputStream
val workbook: Workbook = XSSFWorkbook(templateInputStream) val workbook: Workbook = XSSFWorkbook(templateInputStream)
val sheet: Sheet = workbook.getSheetAt(0) val sheet: Sheet = workbook.getSheetAt(0)
val sheet2: Sheet = workbook.getSheetAt(1)
val accountingStyle = workbook.createDataFormat().getFormat("_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)") val accountingStyle = workbook.createDataFormat().getFormat("_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)")
fun getMonthsBetweenToColumn(start: LocalDate, end: LocalDate, startValue: Int): Map<String, Int> { fun getMonthsBetweenToColumn(start: LocalDate, end: LocalDate, startValue: Int): Map<String, Int> {
// Get the first day of the start month // Get the first day of the start month
@@ -3730,6 +3732,7 @@ open class ReportService(
} }
val startDate = LocalDate.parse(args["startDate"].toString()) val startDate = LocalDate.parse(args["startDate"].toString())
val endDate = LocalDate.parse(args["endDate"].toString()) val endDate = LocalDate.parse(args["endDate"].toString())
val team = teamRepository.findById(args["teamId"].toString().toLong()).orElseThrow().name
val monthList = getMonthsBetweenToColumn(startDate, endDate, 4) val monthList = getMonthsBetweenToColumn(startDate, endDate, 4)
if (monthList.isEmpty()) { if (monthList.isEmpty()) {
throw IllegalArgumentException("illegal time period") throw IllegalArgumentException("illegal time period")
@@ -3742,37 +3745,69 @@ open class ReportService(
"client" to entry.key["client"]) + monthlyConsumption "client" to entry.key["client"]) + monthlyConsumption
} }
.sortedBy { it["projectCode"] as String } .sortedBy { it["projectCode"] as String }

val result2 = manhourSummary.groupBy { mapOf("staff" to it["staff"], "projectCode" to it["projectCode"], "projectName" to it["projectName"], "client" to it["client"]) }
.map { entry ->
val monthlyConsumption = entry.value.associate { it["recordMonth"] to it["consumed"] }
mapOf(
"staff" to entry.key["staff"],
"projectCode" to entry.key["projectCode"],
"projectName" to entry.key["projectName"],
"client" to entry.key["client"]) + monthlyConsumption
}
//start from col4 //start from col4
var rowIndex = 1
var columnIndex = 1
var tempRow: Row var tempRow: Row
var tempRow2: Row
var tempCell: Cell var tempCell: Cell
var tempCell2: Cell
var columnIndex = 1
var rowIndex = 1 // generation time
tempRow = getOrCreateRow(sheet, rowIndex) tempRow = getOrCreateRow(sheet, rowIndex)
tempRow2 = getOrCreateRow(sheet2, rowIndex)
tempCell = getOrCreateCell(tempRow, columnIndex) tempCell = getOrCreateCell(tempRow, columnIndex)
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
tempCell.setCellValue(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")).toString()) tempCell.setCellValue(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")).toString())
//write months header
tempCell2.setCellValue(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")).toString())
rowIndex = 2 // Team
tempRow = getOrCreateRow(sheet, rowIndex)
tempRow2 = getOrCreateRow(sheet2, rowIndex)
tempCell = getOrCreateCell(tempRow, columnIndex)
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
tempCell.setCellValue(team)
tempCell2.setCellValue(team)
rowIndex = 3 // report period
tempRow = getOrCreateRow(sheet, rowIndex)
tempRow2 = getOrCreateRow(sheet2, rowIndex)
tempCell = getOrCreateCell(tempRow, columnIndex)
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
tempCell.setCellValue("${args["startDate"].toString()} - ${args["endDate"].toString()}")
tempCell2.setCellValue("${args["startDate"].toString()} - ${args["endDate"].toString()}")
// write months header
rowIndex = 5 rowIndex = 5
columnIndex = 3 columnIndex = 3
tempRow = getOrCreateRow(sheet, rowIndex) tempRow = getOrCreateRow(sheet, rowIndex)
tempRow2 = getOrCreateRow(sheet2, rowIndex)
for (curr in monthList) { for (curr in monthList) {
tempCell = getOrCreateCell(tempRow, columnIndex) tempCell = getOrCreateCell(tempRow, columnIndex)
tempCell2 = getOrCreateCell(tempRow2, columnIndex + 1)
alignTopCenter(tempCell) alignTopCenter(tempCell)
alignTopCenter(tempCell2)
tempCell.setCellValue(curr.key) tempCell.setCellValue(curr.key)
tempCell2.setCellValue(curr.key)
CellUtil.setCellStyleProperties(tempCell, CellUtil.setCellStyleProperties(tempCell,
cellBorderArgs(0,1,0,0) cellBorderArgs(0,1,0,0)
+ fontArgs2(sheet, "Times New Roman",false)) + fontArgs2(sheet, "Times New Roman",false))
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(0,1,0,0)
+ fontArgs2(sheet2, "Times New Roman",false))
columnIndex++ columnIndex++
} }
//write content
// write content
// sheet 1
rowIndex = 6 rowIndex = 6
for ( curr in result) {
columnIndex = 0
for (curr in result) {
tempRow = getOrCreateRow(sheet, rowIndex) tempRow = getOrCreateRow(sheet, rowIndex)
// columnIndex = 0
// tempCell = getOrCreateCell(tempRow, columnIndex)
// CellUtil.setCellStyleProperties(tempCell,
// cellBorderArgs(1,1,1,1)
// + fontArgs2(sheet, "Times New Roman",false))
// tempCell.setCellValue(curr["staff"].toString())
columnIndex = 0 columnIndex = 0
tempCell = getOrCreateCell(tempRow, columnIndex) tempCell = getOrCreateCell(tempRow, columnIndex)
CellUtil.setCellStyleProperties(tempCell, CellUtil.setCellStyleProperties(tempCell,
@@ -3793,9 +3828,6 @@ open class ReportService(
tempCell.setCellValue(curr["client"].toString()) tempCell.setCellValue(curr["client"].toString())
for ( month in monthList) { for ( month in monthList) {
var manhour = 0.0 var manhour = 0.0
// println("curr-rM ${curr["recordMonth"]}")
// println("curr ${curr}")
// println("month $month")
if (curr.containsKey(month.key.toString())) { if (curr.containsKey(month.key.toString())) {
manhour = curr[month.key.toString()] as Double manhour = curr[month.key.toString()] as Double
} }
@@ -3824,6 +3856,65 @@ open class ReportService(
+ fontArgs2(sheet, "Times New Roman",false)) + fontArgs2(sheet, "Times New Roman",false))
tempCell.cellFormula = "SUM(${columnLetter}7:$columnLetter$rowIndex)" tempCell.cellFormula = "SUM(${columnLetter}7:$columnLetter$rowIndex)"
} }
// sheet 2
rowIndex = 6
columnIndex = 0
for (curr in result2) {
tempRow2 = getOrCreateRow(sheet2, rowIndex)
columnIndex = 0
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
tempCell2.setCellValue(curr["staff"].toString())
columnIndex = 1
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
tempCell2.setCellValue(curr["projectCode"].toString())
columnIndex = 2
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
tempCell2.setCellValue(curr["projectName"].toString())
columnIndex = 3
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
tempCell2.setCellValue(curr["client"].toString())
for ( month in monthList) {
var manhour = 0.0
if (curr.containsKey(month.key.toString())) {
manhour = curr[month.key.toString()] as Double
}
columnIndex = month.value
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
tempCell2.setCellValue(manhour)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
}
rowIndex++
}
// total
tempRow2 = getOrCreateRow(sheet2, rowIndex)
columnIndex = monthList.values.firstNotNullOfOrNull { it }!! - 1
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
tempCell2.setCellValue("Total:")
CellUtil.setCellStyleProperties(tempCell2, fontArgs2(sheet2, "Times New Roman",false))
setAlignment(tempCell2,"top", "right")
for (curr in monthList) {
columnIndex = curr.value
val columnLetter = CellReference.convertNumToColString(columnIndex)
tempCell2 = getOrCreateCell(tempRow2, columnIndex)
CellUtil.setCellStyleProperties(tempCell2,
cellBorderArgs(1,1,1,1)
+ fontArgs2(sheet2, "Times New Roman",false))
tempCell2.cellFormula = "SUM(${columnLetter}7:$columnLetter$rowIndex)"
}
return workbook return workbook
} }
private fun generateTeamsInOutMap( private fun generateTeamsInOutMap(


二進制
src/main/resources/templates/report/Project Manhour Summary.xlsx 查看文件


Loading…
取消
儲存