Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

merge: (#749) 외출 엑셀 수정 #756

Merged
merged 6 commits into from
Sep 21, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package team.aliens.dms.domain.file.service

import team.aliens.dms.domain.manager.spi.vo.StudentWithTag
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.point.model.PointHistory
import team.aliens.dms.domain.remain.dto.StudentRemainInfo
import team.aliens.dms.domain.student.model.Student
Expand Down Expand Up @@ -30,5 +30,5 @@ interface WriteFileService {
studentSeats: List<StudentSeatInfo>
): ByteArray

fun writeOutingApplicationExcelFile(outingApplicationVos: List<OutingApplicationVO>): ByteArray
fun writeOutingApplicationExcelFile(outingApplicationExcelVos: List<OutingApplicationExcelVO>): ByteArray
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package team.aliens.dms.domain.file.service
import team.aliens.dms.common.annotation.Service
import team.aliens.dms.domain.file.spi.WriteFilePort
import team.aliens.dms.domain.manager.spi.vo.StudentWithTag
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.point.model.PointHistory
import team.aliens.dms.domain.remain.dto.StudentRemainInfo
import team.aliens.dms.domain.student.model.Student
Expand Down Expand Up @@ -39,6 +39,6 @@ class WriteFileServiceImpl(
studentSeats: List<StudentSeatInfo>
) = writeFilePort.writeStudyRoomApplicationStatusExcelFile(timeSlots, studentSeats)

override fun writeOutingApplicationExcelFile(outingApplicationVos: List<OutingApplicationVO>) =
writeFilePort.writeOutingApplicationExcelFile(outingApplicationVos)
override fun writeOutingApplicationExcelFile(outingApplicationExcelVos: List<OutingApplicationExcelVO>) =
writeFilePort.writeOutingApplicationExcelFile(outingApplicationExcelVos)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package team.aliens.dms.domain.file.spi

import team.aliens.dms.domain.manager.spi.vo.StudentWithTag
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.point.model.PointHistory
import team.aliens.dms.domain.remain.dto.StudentRemainInfo
import team.aliens.dms.domain.student.model.Student
Expand Down Expand Up @@ -30,5 +30,5 @@ interface WriteFilePort {
studentSeats: List<StudentSeatInfo>
): ByteArray

fun writeOutingApplicationExcelFile(outingApplicationVos: List<OutingApplicationVO>): ByteArray
fun writeOutingApplicationExcelFile(outingApplicationExcelVos: List<OutingApplicationExcelVO>): ByteArray
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class CheckOutingServiceImpl(
) {
queryOutingAvailableTimePort.queryOutingAvailableTimeByDayOfWeek(outingDate.dayOfWeek)
?.checkAvailable(outingTime, arrivalTime)
?:throw OutingAvailableTimeMismatchException
?: throw OutingAvailableTimeMismatchException
}

override fun checkOutingTypeExists(outingType: OutingType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ package team.aliens.dms.domain.outing.service
import team.aliens.dms.domain.outing.model.OutingApplication
import team.aliens.dms.domain.outing.model.OutingAvailableTime
import team.aliens.dms.domain.outing.model.OutingType
import team.aliens.dms.domain.outing.spi.vo.CurrentOutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingCompanionDetailsVO
import team.aliens.dms.domain.outing.spi.vo.OutingHistoryVO
import team.aliens.dms.domain.outing.spi.vo.*
import java.time.DayOfWeek
import java.time.LocalDate
import java.util.UUID
Expand All @@ -21,6 +18,8 @@ interface GetOutingService {

fun getAllOutingApplicationVOsBetweenStartAndEnd(start: LocalDate, end: LocalDate): List<OutingApplicationVO>

fun getAllOutingApplicationVOsBetweenStartAndEnd2(start: LocalDate, end: LocalDate): List<OutingApplicationExcelVO>

fun getCurrentOutingApplication(studentId: UUID): CurrentOutingApplicationVO

fun getOutingHistoriesByStudentNameAndDate(studentName: String?, date: LocalDate): List<OutingHistoryVO>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ import team.aliens.dms.domain.outing.spi.QueryOutingApplicationPort
import team.aliens.dms.domain.outing.spi.QueryOutingAvailableTimePort
import team.aliens.dms.domain.outing.spi.QueryOutingCompanionPort
import team.aliens.dms.domain.outing.spi.QueryOutingTypePort
import team.aliens.dms.domain.outing.spi.vo.CurrentOutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingCompanionDetailsVO
import team.aliens.dms.domain.outing.spi.vo.OutingHistoryVO
import team.aliens.dms.domain.outing.spi.vo.*
import java.time.DayOfWeek
import java.time.LocalDate
import java.util.UUID
Expand All @@ -39,6 +37,9 @@ class GetOutingServiceImpl(
override fun getAllOutingApplicationVOsBetweenStartAndEnd(start: LocalDate, end: LocalDate) =
queryOutingApplicationPort.queryAllOutingApplicationVOsBetweenStartAndEnd(start, end)

override fun getAllOutingApplicationVOsBetweenStartAndEnd2(start: LocalDate, end: LocalDate) =
queryOutingApplicationPort.queryAllOutingApplicationVOsBetweenStartAndEnd2(start, end)

override fun getCurrentOutingApplication(studentId: UUID): CurrentOutingApplicationVO =
queryOutingApplicationPort.queryCurrentOutingApplicationVO(studentId)
?: throw OutingApplicationNotFoundException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package team.aliens.dms.domain.outing.spi

import team.aliens.dms.domain.outing.model.OutingApplication
import team.aliens.dms.domain.outing.spi.vo.CurrentOutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingHistoryVO
import java.time.LocalDate
Expand All @@ -15,6 +16,8 @@ interface QueryOutingApplicationPort {

fun queryAllOutingApplicationVOsBetweenStartAndEnd(start: LocalDate, end: LocalDate): List<OutingApplicationVO>

fun queryAllOutingApplicationVOsBetweenStartAndEnd2(start: LocalDate, end: LocalDate): List<OutingApplicationExcelVO>

fun queryCurrentOutingApplicationVO(studentId: UUID): CurrentOutingApplicationVO?

fun queryOutingHistoriesByStudentNameAndDate(studentName: String?, date: LocalDate): List<OutingHistoryVO>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package team.aliens.dms.domain.outing.spi.vo

import team.aliens.dms.domain.student.model.Student
import java.time.LocalDate
import java.time.LocalTime

open class OutingApplicationExcelVO(
val studentName: String,
val studentGrade: Int,
val studentClassRoom: Int,
val studentNumber: Int,
val outingType: String,
val reason: String,
val outingDate: LocalDate,
val outingTime: LocalTime,
val arrivalTime: LocalTime,
val outingCompanionVOs: List<OutingCompanionVO>
) {
val studentGcn = Student.processGcn(studentGrade, studentClassRoom, studentNumber)
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package team.aliens.dms.domain.outing.usecase

import team.aliens.dms.common.annotation.ReadOnlyUseCase
import team.aliens.dms.domain.file.model.File
import team.aliens.dms.domain.file.service.FileService
import team.aliens.dms.domain.outing.dto.response.ExportAllOutingApplicationsResponse
import team.aliens.dms.domain.outing.service.OutingService
import team.aliens.dms.domain.school.service.SchoolService
import team.aliens.dms.domain.user.service.UserService
import java.time.LocalDate
import java.time.LocalDateTime

@ReadOnlyUseCase
class ExportAllOutingApplicationsUseCase(
Expand All @@ -19,9 +17,10 @@ class ExportAllOutingApplicationsUseCase(
) {

fun execute(start: LocalDate, end: LocalDate): ExportAllOutingApplicationsResponse {
val outingApplicationVOs = outingService.getAllOutingApplicationVOsBetweenStartAndEnd(start, end)

val file = fileService.writeOutingApplicationExcelFile(outingApplicationVOs)
val outingApplicationExcelVOs = outingService.getAllOutingApplicationVOsBetweenStartAndEnd2(start, end)

val file = fileService.writeOutingApplicationExcelFile(outingApplicationExcelVOs)

val user = userService.getCurrentUser()
val school = schoolService.getSchoolById(user.schoolId)
Expand All @@ -33,5 +32,5 @@ class ExportAllOutingApplicationsUseCase(
}

private fun getFileName(schoolName: String) =
"${schoolName.replace(" ", "")}_외출_신청상태_${LocalDateTime.now().format(File.FILE_DATE_FORMAT)}"
"ss"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import team.aliens.dms.domain.file.spi.ParseFilePort
import team.aliens.dms.domain.file.spi.WriteFilePort
import team.aliens.dms.domain.file.spi.vo.ExcelStudentVO
import team.aliens.dms.domain.manager.spi.vo.StudentWithTag
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.point.model.PointHistory
import team.aliens.dms.domain.point.model.PointType
import team.aliens.dms.domain.remain.dto.StudentRemainInfo
Expand Down Expand Up @@ -247,14 +247,15 @@ class ExcelAdapter : ParseFilePort, WriteFilePort, ExcelPort() {
)
}

override fun writeOutingApplicationExcelFile(outingApplicationVos: List<OutingApplicationVO>): ByteArray {
val attributes = mutableListOf("학번", "이름", "외출 시간", "도착 시간", "외출 서명", "복귀 확인")
override fun writeOutingApplicationExcelFile(outingApplicationExcelVos: List<OutingApplicationExcelVO>): ByteArray {
val attributes = mutableListOf("ㅤ학번ㅤ", "ㅤ이름ㅤ", "외출 사유", "외출 시간", "도착 시간", "외출 확인", "복귀 확인")

val outingApplicationInfoSet = outingApplicationVos.map { outingApplication ->
val outingApplicationInfoSet = outingApplicationExcelVos.map { outingApplication ->
val outingApplicationInfoList = mutableListOf(
listOf(
outingApplication.studentGcn,
outingApplication.studentName,
outingApplication.reason,
outingApplication.outingTime.toString(),
outingApplication.arrivalTime.toString(),
null,
Expand All @@ -268,6 +269,8 @@ class ExcelAdapter : ParseFilePort, WriteFilePort, ExcelPort() {
listOf(
outingCompanions.studentGcn,
outingCompanions.studentName,
null,
null,
outingApplication.outingTime.toString(),
outingApplication.arrivalTime.toString(),
null,
Expand All @@ -283,7 +286,7 @@ class ExcelAdapter : ParseFilePort, WriteFilePort, ExcelPort() {
dataListSet = outingApplicationInfoSet,
colors = listOf(
IndexedColors.WHITE,
IndexedColors.GREY_25_PERCENT
IndexedColors.LIGHT_GREEN
)
)
}
Expand Down
4 changes: 2 additions & 2 deletions dms-infrastructure/src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ spring:
datasource:
url: jdbc:mysql://${MYSQL_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:dms}?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true&tinyInt1isBit=false&rewriteBatchedStatements=true
username: ${MYSQL_USERNAME:root}
password: ${MYSQL_PASSWORD:qaz}
password: ${MYSQL_PASSWORD:070211}

data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:1234}
password: ${REDIS_PASSWORD:asdf}
6 changes: 3 additions & 3 deletions dms-infrastructure/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ spring:

jpa:
hibernate:
ddl-auto: validate
ddl-auto: update
order_inserts: true
order_updates: true
jdbc:
Expand Down Expand Up @@ -44,11 +44,11 @@ spring:
max-request-size: 20MB

fcm:
file-url: ${FCM_FILE_URL}
file-url: ${FCM_FILE_URL:https://image-dms.s3.ap-northeast-2.amazonaws.com/team-dms-firebase-adminsdk-vrfz3-d92cd1ba9b.json}

secret:
secret-key: ${SECRET_KEY:asdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfdsasdfghgfds}
access-exp: 120
access-exp: ${ACCESS_EXP:3600}
refresh-exp: ${REFRESH_EXP:1205600}

open-feign:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import team.aliens.dms.domain.outing.model.OutingApplication
import team.aliens.dms.domain.outing.model.OutingStatus
import team.aliens.dms.domain.outing.spi.OutingApplicationPort
import team.aliens.dms.domain.outing.spi.vo.CurrentOutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationVO
import team.aliens.dms.domain.outing.spi.vo.OutingHistoryVO
import team.aliens.dms.persistence.outing.entity.QOutingApplicationJpaEntity.outingApplicationJpaEntity
Expand All @@ -19,10 +20,7 @@ import team.aliens.dms.persistence.outing.entity.QOutingTypeJpaEntity.outingType
import team.aliens.dms.persistence.outing.mapper.OutingApplicationMapper
import team.aliens.dms.persistence.outing.repository.OutingApplicationJpaRepository
import team.aliens.dms.persistence.outing.repository.OutingCompanionJpaRepository
import team.aliens.dms.persistence.outing.repository.vo.QQueryCurrentOutingApplicationVO
import team.aliens.dms.persistence.outing.repository.vo.QQueryOutingApplicationVO
import team.aliens.dms.persistence.outing.repository.vo.QQueryOutingCompanionVO
import team.aliens.dms.persistence.outing.repository.vo.QQueryOutingHistoryVO
import team.aliens.dms.persistence.outing.repository.vo.*
import team.aliens.dms.persistence.student.entity.QStudentJpaEntity
import java.time.LocalDate
import java.util.UUID
Expand Down Expand Up @@ -82,6 +80,48 @@ class OutingApplicationPersistenceAdapter(
)
}

override fun queryAllOutingApplicationVOsBetweenStartAndEnd2(
start: LocalDate,
end: LocalDate
): List<OutingApplicationExcelVO> {

val studentJpaEntity = QStudentJpaEntity("studentJpaEntity")
val outingCompanionStudentJpaEntity = QStudentJpaEntity("outingCompanionStudentJpaEntity")

return queryFactory
.selectFrom(outingApplicationJpaEntity)
.join(outingApplicationJpaEntity.student, studentJpaEntity)
.leftJoin(outingCompanionJpaEntity)
.on(outingApplicationJpaEntity.id.eq(outingCompanionJpaEntity.outingApplication.id))
.leftJoin(outingCompanionJpaEntity.student, outingCompanionStudentJpaEntity)
.where(outingApplicationJpaEntity.outingDate.between(start, end))
.orderBy(outingApplicationJpaEntity.outingDate.asc())
.transform(
groupBy(outingApplicationJpaEntity.id)
.list(
QQueryOutingApplicationExcelVO(
studentJpaEntity.name,
studentJpaEntity.grade,
studentJpaEntity.classRoom,
studentJpaEntity.number,
outingApplicationJpaEntity.reason,
outingApplicationJpaEntity.reason,
outingApplicationJpaEntity.outingDate,
outingApplicationJpaEntity.outingTime,
outingApplicationJpaEntity.arrivalTime,
list(
QQueryOutingCompanionVO(
outingCompanionStudentJpaEntity.name,
outingCompanionStudentJpaEntity.grade,
outingCompanionStudentJpaEntity.classRoom,
outingCompanionStudentJpaEntity.number
)
)
)
)
)
}

override fun queryCurrentOutingApplicationVO(studentId: UUID): CurrentOutingApplicationVO? {
val studentJpaEntity = QStudentJpaEntity("studentJpaEntity")
val outingCompanionStudentJpaEntity = QStudentJpaEntity("outingCompanionStudentJpaEntity")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package team.aliens.dms.persistence.outing.repository.vo

import com.querydsl.core.annotations.QueryProjection
import team.aliens.dms.domain.outing.spi.vo.OutingApplicationExcelVO
import team.aliens.dms.domain.outing.spi.vo.OutingCompanionVO
import java.time.LocalDate
import java.time.LocalTime

class QueryOutingApplicationExcelVO @QueryProjection constructor(
studentName: String,
studentGrade: Int,
studentClassRoom: Int,
studentNumber: Int,
outingType: String,
reason: String,
outingDate: LocalDate,
outingTime: LocalTime,
arrivalTime: LocalTime,
outingCompanionVOs: List<OutingCompanionVO>
) : OutingApplicationExcelVO(
studentName = studentName,
studentGrade = studentGrade,
studentClassRoom = studentClassRoom,
studentNumber = studentNumber,
outingType = outingType,
reason = reason,
outingDate = outingDate,
outingTime = outingTime,
arrivalTime = arrivalTime,
outingCompanionVOs = outingCompanionVOs
)
Loading