@@ -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<Staff, Long> { | |||
List<StaffSearchInfo> findStaffSearchInfoByAndDeletedFalse(); | |||
List<StaffSearchInfo> findAllStaffSearchInfoByIdIn(List<Long> ids); | |||
Optional<Staff> findByStaffId(@Param("staffId") String staffId); | |||
} |
@@ -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<Team, Long> { | |||
List<Team> findByDeletedFalse(); | |||
} |
@@ -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<Staff> { | |||
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<String, Any>): List<Map<String, Any>> { | |||
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) | |||
} | |||
} |
@@ -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<Team, Long, TeamRepository>(jdbcDao, teamRepository) { | |||
open fun allTeam(): List<Team> { | |||
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<String, Any>): List<Map<String, Any>> { | |||
val sql = StringBuilder("select" | |||
+ " t.id as id," | |||
@@ -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<Map<String, Any>> { | |||
println(request) | |||
return RecordsRes<Map<String, Any>>( | |||
staffsService.combo( | |||
CriteriaArgsBuilder.withRequest(request) | |||
.build() | |||
) | |||
) | |||
} | |||
@PostMapping("/save") | |||
fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { | |||
return staffsService.saveOrUpdate(newStaff) | |||
@@ -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<Team> { | |||
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<Map<String, Any>> { | |||
@@ -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<Long> | |||
) |