@@ -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>, | |||||
) | ) | ||||