From bd185250975dbf6f0d34625006af70a87ff5f8ed Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Tue, 3 Sep 2024 14:34:38 +0800 Subject: [PATCH] write team/position/team log when edit staff --- .../tsms/modules/data/entity/GradeLog.java | 5 ++- .../data/entity/GradeLogRepository.java | 3 +- .../tsms/modules/data/entity/PositionLog.java | 5 ++- .../data/entity/PositionLogRepository.java | 5 ++- .../tsms/modules/data/entity/TeamLog.java | 5 ++- .../data/entity/TeamLogRepository.java | 4 +- .../data/entity/projections/GradeLogInfo.kt | 2 + .../entity/projections/PositionLogInfo.kt | 2 + .../data/entity/projections/TeamLogInfo.kt | 2 + .../modules/data/service/GradeLogService.kt | 2 +- .../data/service/PositionLogService.kt | 2 +- .../modules/data/service/StaffsService.kt | 44 ++++++++++++++++++- .../modules/data/service/TeamLogService.kt | 2 +- .../tsms/modules/data/web/StaffsController.kt | 5 +-- .../data/web/models/NewStaffRequest.kt | 26 ++++++++++- 15 files changed, 99 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/GradeLog.java b/src/main/java/com/ffii/tsms/modules/data/entity/GradeLog.java index 75681a9..9722f0e 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/GradeLog.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/GradeLog.java @@ -24,7 +24,6 @@ public class GradeLog extends BaseEntity { @Column(name = "from", length = 30) private LocalDate from; - @NotNull @Column(name = "to", length = 30) private LocalDate to; @@ -43,4 +42,8 @@ public class GradeLog extends BaseEntity { public LocalDate getFrom() { return from; } public void setFrom(LocalDate from) { this.from = from; } + + public LocalDate getTo() { return to; } + + public void setTo(LocalDate to) { this.to = to; } } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/GradeLogRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/GradeLogRepository.java index de1920e..5daad9b 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/GradeLogRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/GradeLogRepository.java @@ -6,5 +6,6 @@ import com.ffii.tsms.modules.data.entity.projections.GradeLogInfo; import java.util.List; public interface GradeLogRepository extends AbstractRepository { - List findGradeLogInfoByStaffIdAndDeletedFalse(Long staffId); + List findGradeLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); + GradeLog findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/PositionLog.java b/src/main/java/com/ffii/tsms/modules/data/entity/PositionLog.java index 6e37a4b..54bf278 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/PositionLog.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/PositionLog.java @@ -24,7 +24,6 @@ public class PositionLog extends BaseEntity { @Column(name = "from", length = 30) private LocalDate from; - @NotNull @Column(name = "to", length = 30) private LocalDate to; @@ -43,4 +42,8 @@ public class PositionLog extends BaseEntity { public LocalDate getFrom() { return from; } public void setFrom(LocalDate from) { this.from = from; } + + public LocalDate getTo() { return to; } + + public void setTo(LocalDate to) { this.to = to; } } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/PositionLogRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/PositionLogRepository.java index 969c632..4909889 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/PositionLogRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/PositionLogRepository.java @@ -7,5 +7,8 @@ import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo; import java.util.List; public interface PositionLogRepository extends AbstractRepository { - List findPositionLogInfoByStaffIdAndDeletedFalse(Long staffId); + List findPositionLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); + + PositionLog findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); + } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/TeamLog.java b/src/main/java/com/ffii/tsms/modules/data/entity/TeamLog.java index a35ba9c..28a449a 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/TeamLog.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/TeamLog.java @@ -24,7 +24,6 @@ public class TeamLog extends BaseEntity { @Column(name = "from", length = 30) private LocalDate from; - @NotNull @Column(name = "to", length = 30) private LocalDate to; @@ -43,4 +42,8 @@ public class TeamLog extends BaseEntity { public LocalDate getFrom() { return from; } public void setFrom(LocalDate from) { this.from = from; } + + public LocalDate getTo() { return to; } + + public void setTo(LocalDate to) { this.to = to; } } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/TeamLogRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/TeamLogRepository.java index 0405b05..7e151b7 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/TeamLogRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/TeamLogRepository.java @@ -1,11 +1,11 @@ package com.ffii.tsms.modules.data.entity; import com.ffii.core.support.AbstractRepository; -import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo; import com.ffii.tsms.modules.data.entity.projections.TeamLogInfo; import java.util.List; public interface TeamLogRepository extends AbstractRepository { - List findTeamLogInfoByStaffIdAndDeletedFalse(Long staffId); + List findTeamLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); + TeamLog findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(Long staffId); } diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/GradeLogInfo.kt b/src/main/java/com/ffii/tsms/modules/data/entity/projections/GradeLogInfo.kt index abdd5d2..0fbc93b 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/GradeLogInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/GradeLogInfo.kt @@ -3,9 +3,11 @@ package com.ffii.tsms.modules.data.entity.projections import com.ffii.tsms.modules.data.entity.Grade import org.springframework.beans.factory.annotation.Value import java.time.LocalDate +import java.time.LocalDateTime interface GradeLogInfo { val id: Long + val created: LocalDateTime @get:Value("#{target.staff.id}") val staffId: Long diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionLogInfo.kt b/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionLogInfo.kt index 701be09..5bf395f 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionLogInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionLogInfo.kt @@ -2,9 +2,11 @@ package com.ffii.tsms.modules.data.entity.projections import com.ffii.tsms.modules.data.entity.Position import org.springframework.beans.factory.annotation.Value import java.time.LocalDate +import java.time.LocalDateTime interface PositionLogInfo { val id: Long + val created: LocalDateTime @get:Value("#{target.staff.id}") val staffId: Long diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/TeamLogInfo.kt b/src/main/java/com/ffii/tsms/modules/data/entity/projections/TeamLogInfo.kt index dd35ae5..344aa74 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/TeamLogInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/TeamLogInfo.kt @@ -4,6 +4,7 @@ import com.ffii.tsms.modules.data.entity.Grade import com.ffii.tsms.modules.data.entity.Team import org.springframework.beans.factory.annotation.Value import java.time.LocalDate +import java.time.LocalDateTime interface TeamInfo { val id: Long @@ -23,6 +24,7 @@ interface TeamInfo { interface TeamLogInfo { val id: Long + val created: LocalDateTime @get:Value("#{target.staff.id}") val staffId: Long diff --git a/src/main/java/com/ffii/tsms/modules/data/service/GradeLogService.kt b/src/main/java/com/ffii/tsms/modules/data/service/GradeLogService.kt index 6e1b9a8..4dff7f9 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/GradeLogService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/GradeLogService.kt @@ -15,7 +15,7 @@ open class GradeLogService( private val jdbcDao: JdbcDao, ) : AbstractBaseEntityService(jdbcDao, gradeLogRepository) { open fun allGradeLog(staffId: Long): List { - return gradeLogRepository.findGradeLogInfoByStaffIdAndDeletedFalse(staffId) + return gradeLogRepository.findGradeLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(staffId).drop(1) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/service/PositionLogService.kt b/src/main/java/com/ffii/tsms/modules/data/service/PositionLogService.kt index 849f14d..9ba5cf2 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/PositionLogService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/PositionLogService.kt @@ -15,6 +15,6 @@ open class PositionLogService ( private val jdbcDao: JdbcDao, ) : AbstractBaseEntityService(jdbcDao, positionLogRepository) { open fun allPositionLog(staffId: Long): List { - return positionLogRepository.findPositionLogInfoByStaffIdAndDeletedFalse(staffId) + return positionLogRepository.findPositionLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(staffId).drop(1) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt index f16765f..9dd4710 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt @@ -28,9 +28,12 @@ open class StaffsService( private val staffRepository: StaffRepository, private val userRepository: UserRepository, private val positionRepository: PositionRepository, + private val positionLogRepository: PositionLogRepository, private val companyRepository: CompanyRepository, private val gradeRepository: GradeRepository, + private val gradeLogRepository: GradeLogRepository, private val teamRepository: TeamRepository, + private val teamLogRepository: TeamLogRepository, private val skillRepository: SkillRepository, private val salaryRepository: SalaryRepository, private val salaryEffectiveRepository: SalaryEffectiveRepository, @@ -49,7 +52,7 @@ open class StaffsService( open fun allStaff(): List { return staffRepository.findStaffSearchInfoByAndDeletedFalseOrderByStaffIdAsc(); } - open fun StaffWithoutTeam(): List { + open fun staffWithoutTeam(): List { return staffRepository.findStaffSearchInfoByAndDeletedFalseAndTeamIdIsNullOrderByStaffIdAsc(); } @@ -214,6 +217,45 @@ open class StaffsService( val salary = salaryRepository.findBySalaryPoint(salaryPoint).orElseThrow() val department = if (req.departmentId != null && req.departmentId > 0L) departmentRepository.findById(req.departmentId).orElseThrow() else null + val latestTeam = teamLogRepository.findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(staff.id) + val latestGrade = gradeLogRepository.findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(staff.id) + val latestPosition = positionLogRepository.findFirstByStaffIdAndDeletedFalseOrderByCreatedDesc(staff.id) + if (latestTeam.team.id != req.teamId) { + val teamLog = TeamLog().apply { + this.staff = staff + this.team = team + from = LocalDate.now() + } + val lastRecordTeam = latestTeam.apply { + to = LocalDate.now() + } + teamLogRepository.save(teamLog) + teamLogRepository.save(lastRecordTeam) + } + if (latestGrade.grade.id != req.gradeId) { + val gradeLog = GradeLog().apply { + this.staff = staff + this.grade = grade + from = LocalDate.now() + } + val lastRecordGrade = latestGrade.apply { + to = LocalDate.now() + } + gradeLogRepository.save(gradeLog) + gradeLogRepository.save(lastRecordGrade) + } + if (latestPosition.position.id != req.currentPositionId) { + val positionLog = PositionLog().apply { + this.staff = staff + this.position = currentPosition + from = LocalDate.now() + } + val lastRecordPosition = latestPosition.apply { + to = LocalDate.now() + } + positionLogRepository.save(positionLog) + positionLogRepository.save(lastRecordPosition) + } staff.apply { joinDate = req.joinDate name = req.name diff --git a/src/main/java/com/ffii/tsms/modules/data/service/TeamLogService.kt b/src/main/java/com/ffii/tsms/modules/data/service/TeamLogService.kt index bec29dd..efcfc71 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/TeamLogService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/TeamLogService.kt @@ -14,6 +14,6 @@ open class TeamLogService ( private val jdbcDao: JdbcDao, ) : AbstractBaseEntityService(jdbcDao, teamLogRepository) { open fun allTeamLog(staffId: Long): List { - return teamLogRepository.findTeamLogInfoByStaffIdAndDeletedFalse(staffId) + return teamLogRepository.findTeamLogInfoByStaffIdAndDeletedFalseOrderByCreatedDesc(staffId).drop(1) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt index 703d545..aa7af12 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt @@ -29,8 +29,8 @@ class StaffsController(private val staffsService: StaffsService) { } @GetMapping("/noteam") - fun StaffWithoutTeam(): List { - return staffsService.StaffWithoutTeam() + fun staffWithoutTeam(): List { + return staffsService.staffWithoutTeam() } @GetMapping("/staff-projects/{id}") @@ -71,7 +71,6 @@ class StaffsController(private val staffsService: StaffsService) { } @PostMapping("/save") fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { - println("---------------------------------------------------------") return staffsService.saveOrUpdate(newStaff) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt index 895183c..e923a38 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt @@ -38,11 +38,35 @@ data class NewStaffRequest( val departReason: String?, val remark: String?, val salaryEffectiveInfo: List?, - val delSalaryEffectiveInfo: List? + val teamHistory: List?, + val gradeHistory: List?, + val positionHistory: List?, + val delSalaryEffectiveInfo: List?, + val delTeamHistory: List?, + val delGradeHistory: List?, + val delPositionHistory: List?, ) data class SalaryEffectiveInfo( val id: Long, val salaryPoint: Long, val date: LocalDate +) +data class TeamHistory( + val id: Long, + val team: Long, + val from: LocalDate, + val to: LocalDate? +) +data class GradeHistory( + val id: Long, + val grade: Long, + val from: LocalDate, + val to: LocalDate? +) +data class PositionHistory( + val id: Long, + val position: Long, + val from: LocalDate, + val to: LocalDate? ) \ No newline at end of file