| @@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; | |||||
| import com.ffii.core.support.AbstractRepository; | import com.ffii.core.support.AbstractRepository; | ||||
| public interface CustomerRepository extends AbstractRepository<Customer, Long> { | public interface CustomerRepository extends AbstractRepository<Customer, Long> { | ||||
| List<Customer> findAllByDeletedFalse(); | |||||
| Optional<Customer> findByCode(@Param("code") String code); | Optional<Customer> findByCode(@Param("code") String code); | ||||
| } | } | ||||
| @@ -11,4 +11,5 @@ public interface CustomerSubsidiaryRepository extends AbstractRepository<Custome | |||||
| List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId); | List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId); | ||||
| Optional<CustomerSubsidiary> findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId); | |||||
| } | } | ||||
| @@ -23,13 +23,21 @@ class CustomerContactService( | |||||
| for (i in 0 until customerContactSize) { | for (i in 0 until customerContactSize) { | ||||
| val customer = customerRepository.findById(saveCustomerId).orElseThrow() | val customer = customerRepository.findById(saveCustomerId).orElseThrow() | ||||
| val customerContact = CustomerContact().apply { | |||||
| id = if(saveCustomerContact[i].id!! > 0) saveCustomerContact[i].id else null | |||||
| this.customer = customer | |||||
| name = saveCustomerContact[i].name | |||||
| phone = saveCustomerContact[i].phone | |||||
| email = saveCustomerContact[i].email | |||||
| } | |||||
| val customerContactId = saveCustomerContact[i].id | |||||
| val customerContact = | |||||
| if (customerContactId != null && customerContactId > 0) customerContactRepository.findById( | |||||
| customerContactId | |||||
| ).orElseThrow().apply { | |||||
| this.customer = customer | |||||
| name = saveCustomerContact[i].name | |||||
| phone = saveCustomerContact[i].phone | |||||
| email = saveCustomerContact[i].email | |||||
| } else CustomerContact().apply { | |||||
| this.customer = customer | |||||
| name = saveCustomerContact[i].name | |||||
| phone = saveCustomerContact[i].phone | |||||
| email = saveCustomerContact[i].email | |||||
| } | |||||
| customerContactList.add(customerContact) | customerContactList.add(customerContact) | ||||
| } | } | ||||
| @@ -1,5 +1,7 @@ | |||||
| package com.ffii.tsms.modules.data.service | 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.Customer | import com.ffii.tsms.modules.data.entity.Customer | ||||
| import com.ffii.tsms.modules.data.entity.CustomerContact | import com.ffii.tsms.modules.data.entity.CustomerContact | ||||
| import com.ffii.tsms.modules.data.entity.CustomerType | import com.ffii.tsms.modules.data.entity.CustomerType | ||||
| @@ -12,30 +14,31 @@ import org.springframework.stereotype.Service | |||||
| import java.util.Optional | import java.util.Optional | ||||
| @Service | @Service | ||||
| class CustomerService( | |||||
| open class CustomerService( | |||||
| private val customerRepository: CustomerRepository, | private val customerRepository: CustomerRepository, | ||||
| private val customerTypeRepository: CustomerTypeRepository, | private val customerTypeRepository: CustomerTypeRepository, | ||||
| private val customerSubsidiaryService: CustomerSubsidiaryService, | private val customerSubsidiaryService: CustomerSubsidiaryService, | ||||
| private val customerContactService: CustomerContactService, | private val customerContactService: CustomerContactService, | ||||
| ) { | |||||
| private val jdbcDao: JdbcDao | |||||
| ) : AbstractBaseEntityService<Customer, Long, CustomerRepository>(jdbcDao, customerRepository){ | |||||
| fun allCustomers(): List<Customer> { | |||||
| return customerRepository.findAll() | |||||
| open fun allCustomers(): List<Customer> { | |||||
| return customerRepository.findAllByDeletedFalse() | |||||
| } | } | ||||
| fun allCustomerTypes(): List<CustomerType> { | |||||
| open fun allCustomerTypes(): List<CustomerType> { | |||||
| return customerTypeRepository.findAll() | return customerTypeRepository.findAll() | ||||
| } | } | ||||
| fun findCustomer(id: Long): Customer { | |||||
| open fun findCustomer(id: Long): Customer { | |||||
| return customerRepository.findById(id).orElseThrow() | return customerRepository.findById(id).orElseThrow() | ||||
| } | } | ||||
| fun findCustomerByCode(code: String): Optional<Customer> { | |||||
| open fun findCustomerByCode(code: String): Optional<Customer> { | |||||
| return customerRepository.findByCode(code); | return customerRepository.findByCode(code); | ||||
| } | } | ||||
| fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||||
| open fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { | |||||
| val duplicateCustomer = findCustomerByCode(saveCustomer.code) | val duplicateCustomer = findCustomerByCode(saveCustomer.code) | ||||
| @@ -53,7 +56,10 @@ class CustomerService( | |||||
| .orElseThrow() else Customer(); | .orElseThrow() else Customer(); | ||||
| BeanUtils.copyProperties(saveCustomer, instance) | BeanUtils.copyProperties(saveCustomer, instance) | ||||
| instance.customerType = customerType | |||||
| instance.apply { | |||||
| this.customerType = customerType | |||||
| } | |||||
| val customer = | val customer = | ||||
| customerRepository.saveAndFlush(instance) | customerRepository.saveAndFlush(instance) | ||||
| @@ -5,6 +5,8 @@ import com.ffii.tsms.modules.data.entity.CustomerSubsidiary | |||||
| import com.ffii.tsms.modules.data.entity.CustomerSubsidiaryRepository | import com.ffii.tsms.modules.data.entity.CustomerSubsidiaryRepository | ||||
| import com.ffii.tsms.modules.data.entity.SubsidiaryRepository | import com.ffii.tsms.modules.data.entity.SubsidiaryRepository | ||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
| import java.util.Optional | |||||
| import kotlin.jvm.optionals.getOrNull | |||||
| @Service | @Service | ||||
| class CustomerSubsidiaryService( | class CustomerSubsidiaryService( | ||||
| @@ -14,13 +16,17 @@ class CustomerSubsidiaryService( | |||||
| ) { | ) { | ||||
| fun allCustomeriesSubsidiaries(): List<CustomerSubsidiary> { | |||||
| fun allCustomersSubsidiaries(): List<CustomerSubsidiary> { | |||||
| return customerSubsidiaryRepository.findAll() | return customerSubsidiaryRepository.findAll() | ||||
| } | } | ||||
| fun findAllByCustomerId(customerId : Long) : List<CustomerSubsidiary> { | fun findAllByCustomerId(customerId : Long) : List<CustomerSubsidiary> { | ||||
| return customerSubsidiaryRepository.findAllByCustomerId(customerId) | return customerSubsidiaryRepository.findAllByCustomerId(customerId) | ||||
| } | } | ||||
| fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { | |||||
| return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() | |||||
| } | |||||
| fun findAllSubsidiaryIdsByCustomerId(customerId : Long) : List<Long> { | fun findAllSubsidiaryIdsByCustomerId(customerId : Long) : List<Long> { | ||||
| val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllByCustomerId(customerId) | val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllByCustomerId(customerId) | ||||
| @@ -37,14 +43,18 @@ class CustomerSubsidiaryService( | |||||
| val subsidiaryIdsSize = saveSubsidiaryIds.size | val subsidiaryIdsSize = saveSubsidiaryIds.size | ||||
| for (i in 0 until subsidiaryIdsSize) { | for (i in 0 until subsidiaryIdsSize) { | ||||
| val customer = customerRepository.findById(saveCustomerId).orElseThrow() | |||||
| val subsidiary = subsidiaryRepository.findById(saveSubsidiaryIds[i]).orElseThrow() | |||||
| val customerSubsidiary = CustomerSubsidiary().apply { | |||||
| this.customer = customer | |||||
| this.subsidiary = subsidiary | |||||
| } | |||||
| val checkExist = findByCustomerIdAndSubsidiaryId(saveCustomerId, saveSubsidiaryIds[i]) | |||||
| customerSubsidiaryList.add(customerSubsidiary) | |||||
| if (checkExist == null) { | |||||
| val customer = customerRepository.findById(saveCustomerId).orElseThrow() | |||||
| val subsidiary = subsidiaryRepository.findById(saveSubsidiaryIds[i]).orElseThrow() | |||||
| val customerSubsidiary = CustomerSubsidiary().apply { | |||||
| this.customer = customer | |||||
| this.subsidiary = subsidiary | |||||
| } | |||||
| customerSubsidiaryList.add(customerSubsidiary) | |||||
| } | |||||
| } | } | ||||
| customerSubsidiaryRepository.saveAll(customerSubsidiaryList) | customerSubsidiaryRepository.saveAll(customerSubsidiaryList) | ||||
| @@ -1,7 +1,8 @@ | |||||
| package com.ffii.tsms.modules.data.web | package com.ffii.tsms.modules.data.web | ||||
| import com.ffii.tsms.modules.data.entity.Customer | |||||
| import com.ffii.tsms.modules.data.entity.CustomerType | |||||
| 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.service.CustomerService | import com.ffii.tsms.modules.data.service.CustomerService | ||||
| import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService | ||||
| import com.ffii.tsms.modules.data.web.models.CustomerResponse | import com.ffii.tsms.modules.data.web.models.CustomerResponse | ||||
| @@ -14,10 +15,15 @@ import org.springframework.web.bind.annotation.RequestBody | |||||
| import org.springframework.web.bind.annotation.PostMapping | import org.springframework.web.bind.annotation.PostMapping | ||||
| import org.springframework.web.bind.annotation.PathVariable | import org.springframework.web.bind.annotation.PathVariable | ||||
| import jakarta.validation.Valid | import jakarta.validation.Valid | ||||
| import org.springframework.http.HttpStatus | |||||
| import org.springframework.web.bind.annotation.DeleteMapping | |||||
| import org.springframework.web.bind.annotation.ResponseStatus | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/customer") | @RequestMapping("/customer") | ||||
| class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService) { | |||||
| class CustomerController(private val customerService: CustomerService, private val customerSubsidiaryService: CustomerSubsidiaryService, | |||||
| private val customerContactRepository: CustomerContactRepository | |||||
| ) { | |||||
| @GetMapping | @GetMapping | ||||
| fun allCustomers(): List<Customer> { | fun allCustomers(): List<Customer> { | ||||
| return customerService.allCustomers() | return customerService.allCustomers() | ||||
| @@ -28,13 +34,20 @@ class CustomerController(private val customerService: CustomerService, private v | |||||
| return customerService.allCustomerTypes() | return customerService.allCustomerTypes() | ||||
| } | } | ||||
| @DeleteMapping("/{id}") | |||||
| @ResponseStatus(HttpStatus.NO_CONTENT) | |||||
| fun deleteCustomer(@PathVariable id: Long) { | |||||
| customerService.markDelete(id) | |||||
| } | |||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| fun findCustomer(@PathVariable id: Long): CustomerResponse { | fun findCustomer(@PathVariable id: Long): CustomerResponse { | ||||
| val customer = customerService.findCustomer(id) | val customer = customerService.findCustomer(id) | ||||
| val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) | val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) | ||||
| val contacts = customerContactRepository.findAllByCustomerId(id) | |||||
| return CustomerResponse(customer, subsidiaryIds) | |||||
| return CustomerResponse(customer, subsidiaryIds, contacts) | |||||
| } | } | ||||
| @PostMapping("/save") | @PostMapping("/save") | ||||
| @@ -19,9 +19,9 @@ import com.ffii.core.support.JdbcDao | |||||
| @RequestMapping("/customer-subsidiary") | @RequestMapping("/customer-subsidiary") | ||||
| class CustomerSubsidiaryController(private val customerSubsidiaryService: CustomerSubsidiaryService) { | class CustomerSubsidiaryController(private val customerSubsidiaryService: CustomerSubsidiaryService) { | ||||
| @GetMapping | @GetMapping | ||||
| fun allCustomeriesSubsidiaries(): List<CustomerSubsidiary> { | |||||
| fun allCustomerSubsidiaries(): List<CustomerSubsidiary> { | |||||
| // JdbcDao.queryForString(sql) | // JdbcDao.queryForString(sql) | ||||
| return customerSubsidiaryService.allCustomeriesSubsidiaries() | |||||
| return customerSubsidiaryService.allCustomersSubsidiaries() | |||||
| } | } | ||||
| @GetMapping("/subsidiaries/{customerId}") | @GetMapping("/subsidiaries/{customerId}") | ||||
| @@ -1,9 +1,11 @@ | |||||
| package com.ffii.tsms.modules.data.web.models | package com.ffii.tsms.modules.data.web.models | ||||
| import com.ffii.tsms.modules.data.entity.Customer | import com.ffii.tsms.modules.data.entity.Customer | ||||
| import com.ffii.tsms.modules.data.entity.CustomerContact | |||||
| data class CustomerResponse( | data class CustomerResponse( | ||||
| val customer: Customer, | val customer: Customer, | ||||
| val subsidiaryIds: List<Long>, | val subsidiaryIds: List<Long>, | ||||
| val contacts: List<CustomerContact>, | |||||
| ) | ) | ||||