From 9bb49d2d3d6fdee8661ef2413b07f16330fc340d Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Thu, 25 Apr 2024 16:54:43 +0800 Subject: [PATCH] update --- .../modules/data/entity/StaffRepository.java | 1 + .../entity/projections/StaffSearchInfo.kt | 3 + .../modules/data/service/StaffsService.kt | 3 + .../tsms/modules/data/service/TeamService.kt | 56 +++++++++++++++++++ .../tsms/modules/data/web/StaffsController.kt | 5 ++ .../tsms/modules/data/web/TeamController.kt | 12 ++-- .../data/web/models/NewStaffResponse.kt | 9 +++ .../data/web/models/NewSubsidiaryRequest.kt | 19 +++++++ .../modules/data/web/models/NewTeamRequest.kt | 5 +- 9 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt create mode 100644 src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java index 36296dd..bc595bb 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java @@ -11,6 +11,7 @@ import java.util.Optional; public interface StaffRepository extends AbstractRepository { List findStaffSearchInfoByAndDeletedFalse(); + List findStaffSearchInfoByAndDeletedFalseAndTeamIdIsNull(); List findAllStaffSearchInfoByIdIn(List ids); Optional findByStaffId(@Param("staffId") String staffId); diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt b/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt index 2ba2859..8deb4d7 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/StaffSearchInfo.kt @@ -13,6 +13,9 @@ interface StaffSearchInfo { @get:Value("#{target.team?.code}") val team: String? + @get:Value("#{target.team?.id}") + val teamId: Long? + @get:Value("#{target.grade?.name}") val grade: String? 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 36f3534..f4f710f 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 @@ -37,6 +37,9 @@ open class StaffsService( open fun allStaff(): List { return staffRepository.findStaffSearchInfoByAndDeletedFalse(); } + open fun StaffWithoutTeam(): List { + return staffRepository.findStaffSearchInfoByAndDeletedFalseAndTeamIdIsNull(); + } open fun getStaff(id: Long): Staff { return staffRepository.findById(id).orElseThrow(); diff --git a/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt b/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt index 761e832..7da8a82 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt @@ -34,6 +34,7 @@ open class TeamService( val team = Team().apply { name = teamName code = teamCode + description = req.description } teamRepository.saveAndFlush(team) for (id in ids) { @@ -46,6 +47,61 @@ open class TeamService( return team } + @Transactional(rollbackFor = [Exception::class]) + open fun updateTeam(req: NewTeamRequest, team: Team): Team { + val ids = req.addStaffIds + val teamLead = staffRepository.findById(ids[0]).orElseThrow() + val teamName = "Team " + teamLead.name + + val initials = teamLead.name.split(" ").map { it.first() } + val teamCode = initials.joinToString("") + + team.apply { + name = teamName + code = teamCode + description = req.description + } + + for (id in ids) { + val staff = staffRepository.findById(id).orElseThrow() + staff.apply { + this.team = team + } + staffRepository.save(staff) + } + return team + } + + open fun saveOrUpdate(req: NewTeamRequest): Team { + val team = if(req.id != null) find(req.id).get() else Team() + if (req.id != null) { + updateTeam(req, team) + } else { + saveTeam(req) + } + return team + } + + open fun getTeamDetail(args: Map): List> { + val sql = StringBuilder("select" + + " t.id as teamId, " + + " t.name, " + + " t.code, " + + " t.description, " + + " s.id, " + + " s.staffId, " + + " s.name as staffName, " + + " p.name as posLabel, " + + " p.code as posCode " + + " from team t " + + " inner join staff s on s.teamId = t.id " + + " inner join position p on p.id = s.currentPosition " + + " where t.deleted = false " +// + " and t.id = :id " + ) + return jdbcDao.queryForList(sql.toString(), args) + } + open fun combo(args: Map): List> { val sql = StringBuilder("select" + " t.id as id," 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 da0791c..2c8dd71 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 @@ -26,6 +26,11 @@ class StaffsController(private val staffsService: StaffsService) { fun allStaff(): List { return staffsService.allStaff() } + + @GetMapping("/noteam") + fun StaffWithoutTeam(): List { + return staffsService.StaffWithoutTeam() + } // @GetMapping("/list") // fun list(): List { // return staffsService.getTeamLeads() diff --git a/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt b/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt index b0cd5d5..9b017f7 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt @@ -2,11 +2,8 @@ package com.ffii.tsms.modules.data.web import com.ffii.core.response.RecordsRes import com.ffii.core.utils.CriteriaArgsBuilder -import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.Team -import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo import com.ffii.tsms.modules.data.service.TeamService -import com.ffii.tsms.modules.data.web.models.NewStaffRequest import com.ffii.tsms.modules.data.web.models.NewTeamRequest import jakarta.servlet.http.HttpServletRequest import jakarta.validation.Valid @@ -25,7 +22,14 @@ class TeamController(private val teamService: TeamService) { @PostMapping("/save") fun saveStaff(@Valid @RequestBody newTeam: NewTeamRequest): Team { - return teamService.saveTeam(newTeam) + return teamService.saveOrUpdate(newTeam) + } + + @GetMapping("/detail") + fun getTeamDetail(): List> { + val args: MutableMap = HashMap() +// args["id"] = id; + return teamService.getTeamDetail(args); } @GetMapping("/combo") diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt new file mode 100644 index 0000000..6e8c02d --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt @@ -0,0 +1,9 @@ +package com.ffii.tsms.modules.data.web.models + +import com.ffii.tsms.modules.data.entity.Staff + +data class NewStaffResponse ( + val staff: Staff, + val message: String, + +) \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt new file mode 100644 index 0000000..e9eb675 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt @@ -0,0 +1,19 @@ +package com.ffii.tsms.modules.project.web.models + +import jakarta.validation.constraints.NotBlank + +data class NewSubsidiaryRequest( + @field:NotBlank(message = "subsidary code cannot be empty") + val code: String, + @field:NotBlank(message = "subsidary name cannot be empty") + val name: String, + + val brNo: String, + val contactName: String, + val phone: String, + val address: String, + val district: String, + val email: String, + + val allocatedCustomerIds: List, +) \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.kt index b2d1923..3935ad8 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.kt @@ -6,5 +6,8 @@ import java.time.LocalDate data class NewTeamRequest ( @field:NotNull(message = "ids cannot be empty") - val addStaffIds: List + val addStaffIds: List, + val deleteStaffIds: List?, + val description: String, + val id: Long? ) \ No newline at end of file