From d83f62059588db3e20ff621673cf5648664cff06 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Wed, 24 Apr 2024 16:11:12 +0800 Subject: [PATCH] update team master --- .../modules/data/entity/StaffRepository.java | 2 ++ .../modules/data/entity/TeamRepository.java | 4 +++ .../modules/data/service/StaffsService.kt | 26 +++++++++++--- .../tsms/modules/data/service/TeamService.kt | 34 +++++++++++++++++++ .../tsms/modules/data/web/StaffsController.kt | 17 ++++++++++ .../tsms/modules/data/web/TeamController.kt | 20 +++++++++-- .../modules/data/web/models/NewTeamRequest.kt | 10 ++++++ 7 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.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 c566c08..36296dd 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 @@ -7,9 +7,11 @@ import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Map; +import java.util.Optional; public interface StaffRepository extends AbstractRepository { List findStaffSearchInfoByAndDeletedFalse(); List findAllStaffSearchInfoByIdIn(List ids); + Optional findByStaffId(@Param("staffId") String staffId); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java index f9bca98..39038c0 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/TeamRepository.java @@ -1,6 +1,10 @@ package com.ffii.tsms.modules.data.entity; import com.ffii.core.support.AbstractRepository; +import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo; + +import java.util.List; public interface TeamRepository extends AbstractRepository { + List findByDeletedFalse(); } \ 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 1333c2c..b0fdcaa 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 @@ -4,13 +4,16 @@ import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.JdbcDao import com.ffii.tsms.modules.data.entity.* import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo +//import com.ffii.tsms.modules.data.web.models.NewCustomerResponse import com.ffii.tsms.modules.data.web.models.NewStaffRequest +import com.ffii.tsms.modules.data.web.models.NewStaffResponse import com.ffii.tsms.modules.user.entity.User import com.ffii.tsms.modules.user.entity.UserRepository import org.springframework.beans.BeanUtils import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import java.util.* @Service @@ -63,13 +66,17 @@ open class StaffsService( // return jdbcDao.queryForList(sql.toString(), args) // } + open fun findByStaffId(id: String): Optional { + return staffRepository.findByStaffId(id); + } + @Transactional(rollbackFor = [Exception::class]) open fun saveStaff(req: NewStaffRequest): Staff { val user = userRepository.saveAndFlush( User().apply { - username = req.name - password = passwordEncoder.encode("mms1234") - name = req.name + username = req.name + password = passwordEncoder.encode("mms1234") + name = req.name } ) val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow() @@ -113,7 +120,6 @@ open class StaffsService( logger.info(staff.id) return staff } - @Transactional(rollbackFor = [Exception::class]) open fun updateStaff(req: NewStaffRequest, staff: Staff): Staff { val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow() @@ -152,7 +158,7 @@ open class StaffsService( salaryEffectiveService.saveSalaryEffective(staff.id!!, salary.id!!) return staffRepository.save(staff) - } + } @Transactional(rollbackFor = [Exception::class]) open fun saveOrUpdate(req: NewStaffRequest): Staff { @@ -164,4 +170,14 @@ open class StaffsService( } return staff; } + + open fun combo(args: Map): List> { + val sql = StringBuilder("select" + + " s.id as id," + + " s.name as label" + + " from staff s" + + " where s.deleted = false " + ) + return jdbcDao.queryForList(sql.toString(), args) + } } \ No newline at end of file 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 bbd5c3f..761e832 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 @@ -2,16 +2,50 @@ package com.ffii.tsms.modules.data.service import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.JdbcDao +import com.ffii.tsms.modules.data.entity.Staff +import com.ffii.tsms.modules.data.entity.StaffRepository import com.ffii.tsms.modules.data.entity.Team import com.ffii.tsms.modules.data.entity.TeamRepository +import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo +import com.ffii.tsms.modules.data.web.models.NewTeamRequest import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional @Service open class TeamService( private val teamRepository: TeamRepository, + private val staffRepository: StaffRepository, private val jdbcDao: JdbcDao, ) : AbstractBaseEntityService(jdbcDao, teamRepository) { + open fun allTeam(): List { + return teamRepository.findByDeletedFalse(); + } + + @Transactional(rollbackFor = [Exception::class]) + open fun saveTeam(req: NewTeamRequest): 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("") + + val team = Team().apply { + name = teamName + code = teamCode + } + teamRepository.saveAndFlush(team) + for (id in ids) { + val staff = staffRepository.findById(id).orElseThrow() + staff.apply { + this.team = team + } + staffRepository.save(staff) + } + return team + } + 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 2f882fa..11b2088 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 @@ -1,13 +1,18 @@ package com.ffii.tsms.modules.data.web import com.ffii.core.exception.NotFoundException +import com.ffii.core.response.RecordsRes +import com.ffii.core.utils.CriteriaArgsBuilder import com.ffii.core.utils.Params import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo import com.ffii.tsms.modules.data.service.StaffsService import com.ffii.tsms.modules.data.web.models.NewStaffRequest +import com.ffii.tsms.modules.data.web.models.NewStaffResponse +import jakarta.servlet.http.HttpServletRequest import jakarta.validation.Valid import org.springframework.http.HttpStatus +import org.springframework.web.bind.ServletRequestBindingException import org.springframework.web.bind.annotation.* @@ -38,6 +43,18 @@ class StaffsController(private val staffsService: StaffsService) { fun delete(@PathVariable id: Long?) { staffsService.markDelete(id) } + + @GetMapping("/combo") + @Throws(ServletRequestBindingException::class) + fun combo(request: HttpServletRequest?): RecordsRes> { + println(request) + return RecordsRes>( + staffsService.combo( + CriteriaArgsBuilder.withRequest(request) + .build() + ) + ) + } @PostMapping("/save") fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { return staffsService.saveOrUpdate(newStaff) 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 1bbd5a4..b0cd5d5 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,18 +2,32 @@ 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 import org.springframework.web.bind.ServletRequestBindingException -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @RestController @RequestMapping("/team") class TeamController(private val teamService: TeamService) { + @GetMapping + fun allStaff(): List { + return teamService.allTeam() + } + + @PostMapping("/save") + fun saveStaff(@Valid @RequestBody newTeam: NewTeamRequest): Team { + return teamService.saveTeam(newTeam) + } + @GetMapping("/combo") @Throws(ServletRequestBindingException::class) fun combo(request: HttpServletRequest?): RecordsRes> { 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 new file mode 100644 index 0000000..b2d1923 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewTeamRequest.kt @@ -0,0 +1,10 @@ +package com.ffii.tsms.modules.data.web.models + +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.NotNull +import java.time.LocalDate + +data class NewTeamRequest ( + @field:NotNull(message = "ids cannot be empty") + val addStaffIds: List +) \ No newline at end of file