Procházet zdrojové kódy

add staff list api

tags/Baseline_30082024_BACKEND_UAT
MSI\derek před 1 rokem
rodič
revize
e6db78a01f
4 změnil soubory, kde provedl 164 přidání a 1 odebrání
  1. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffectiveRepository.java
  2. +76
    -1
      src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt
  3. +28
    -0
      src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt
  4. +53
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SalaryEffectiveRepository.java Zobrazit soubor

@@ -0,0 +1,7 @@
package com.ffii.tsms.modules.data.entity;

import com.ffii.core.support.AbstractRepository;

public interface SalaryEffectiveRepository extends AbstractRepository<SalaryEffective, Long> {
}

+ 76
- 1
src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt Zobrazit soubor

@@ -2,12 +2,87 @@ package com.ffii.tsms.modules.data.service
import com.ffii.tsms.modules.data.entity.Staff
import com.ffii.tsms.modules.data.entity.StaffRepository
import com.ffii.tsms.modules.user.entity.UserRepository
import com.ffii.tsms.modules.data.entity.PositionRepository
import com.ffii.tsms.modules.data.entity.CompanyRepository
import com.ffii.tsms.modules.data.entity.GradeRepository
import com.ffii.tsms.modules.data.entity.TeamRepository
import com.ffii.tsms.modules.data.entity.SkillRepository
import com.ffii.tsms.modules.data.entity.SalaryEffectiveRepository
import com.ffii.tsms.modules.data.entity.DepartmentRepository
import com.ffii.tsms.modules.project.web.models.NewStaffRequest
// import com.ffii.tsms.modules.data.web.models.NewStaffRequest
import org.springframework.stereotype.Service
import com.ffii.core.support.JdbcDao;
import com.ffii.core.support.AbstractBaseEntityService;
@Service
class StaffsService(private val staffRepository: StaffRepository) {
public final class StaffsService(
private val staffRepository: StaffRepository,
private val userRepository: UserRepository,
private val positionRepository: PositionRepository,
private val companyRepository: CompanyRepository,
private val gradeRepository: GradeRepository,
private val teamRepository: TeamRepository,
private val skillRepository: SkillRepository,
private val salaryEffectiveRepository: SalaryEffectiveRepository,
private val departmentRepository: DepartmentRepository,
private val jdbcDao: JdbcDao,
) {
fun getTeamLeads(): List<Staff> {
// TODO: Replace with actual logic and make a projection instead of returning all fields
return staffRepository.findAll()
}
fun fetchStaffList(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " s.*,"
+ " date_format(s.created, '%Y-%m-%d') as created,"
+ " date_format(s.departDate, '%Y-%m-%d') as departDate,"
+ " date_format(s.joinDate, '%Y-%m-%d') as joinDate"
+ " from staff s"
+ " where s.deleted = false"
)
return jdbcDao.queryForList(sql.toString(), args)
}
fun saveStaff(req: NewStaffRequest): Staff {
val user = userRepository.findById(req.userId).orElseThrow()
val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow()
val joinPosition = positionRepository.findById(req.joinPositionId).orElseThrow()
val company = companyRepository.findById(req.companyId).orElseThrow()
val grade = gradeRepository.findById(req.gradeId).orElseThrow()
val team = teamRepository.findById(req.teamId).orElseThrow()
val skill = skillRepository.findById(req.skillSetId).orElseThrow()
val salaryEffective = salaryEffectiveRepository.findById(req.salaryEffId).orElseThrow()
val department = departmentRepository.findById(req.departmentId).orElseThrow()
// // TODO: Add tasks, milestones, allocated
val staff = Staff().apply {
joinDate = req.joinDate
name = req.name
staffId = req.staffId
phone1 = req.phone1
phone2 = req.phone2
email = req.email
emergContactName = req.emergContactName
emergContactPhone = req.emergContactPhone
employType = req.employType
departDate = req.departDate
departReason = req.departReason
remark = req.remark
this.user = user
this.currentPosition = currentPosition
this.joinPosition = joinPosition
this.company = company
this.grade = grade
this.team = team
this.skill = skill
this.salaryEffective = salaryEffective
this.department = department
}
return staffRepository.save(staff)
}
}

+ 28
- 0
src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt Zobrazit soubor

@@ -5,6 +5,16 @@ import com.ffii.tsms.modules.data.service.StaffsService
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.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import com.ffii.tsms.modules.project.web.models.NewStaffRequest
// import com.ffii.tsms.modules.data.web.models.NewStaffRequest
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.*
import jakarta.servlet.http.HttpServletRequest;
import com.ffii.core.utils.CriteriaArgsBuilder;
import com.ffii.core.response.IdRes;
import com.ffii.core.response.RecordsRes;
@RestController
@RequestMapping("/staffs")
@@ -13,4 +23,22 @@ class StaffsController(private val staffsService: StaffsService) {
fun teamLeads(): List<Staff> {
return staffsService.getTeamLeads()
}
@GetMapping("/list")
fun list(): List<Staff> {
return staffsService.getTeamLeads()
}
@PostMapping("/new")
fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff {
return staffsService.saveStaff(newStaff)
}
@GetMapping("/newlist")
fun list(request: HttpServletRequest): RecordsRes<Map<String, Any>> {
return RecordsRes(staffsService.fetchStaffList(
CriteriaArgsBuilder.withRequest(request)
.build()
))
}
}

+ 53
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffRequest.kt Zobrazit soubor

@@ -0,0 +1,53 @@
package com.ffii.tsms.modules.project.web.models

import jakarta.validation.constraints.NotBlank
import java.time.LocalDate

data class NewStaffRequest(
@field:NotBlank(message = "Staff userId cannot be empty")
val userId: Long,

val joinDate: LocalDate,

@field:NotBlank(message = "Staff name cannot be empty")
val name: String,

@field:NotBlank(message = "Staff staffId cannot be empty")
val staffId: String,

val currentPositionId: Long,
val joinPositionId: Long,

@field:NotBlank(message = "Staff companyId cannot be empty")
val companyId: Long,

val gradeId: Long,

val teamId: Long,

val skillSetId: Long,

@field:NotBlank(message = "Staff salaryEffId cannot be empty")
val salaryEffId: Long,
val departmentId: Long,

val phone1: String,

val phone2: String,
val email: String,
val emergContactName: String,
val emergContactPhone: String,
val employType: String,
val departDate: LocalDate,
val departReason: String,
val remark: String,
)

Načítá se…
Zrušit
Uložit