From 7d871b4e37721018ced1e24d755c54cec5f7d98b Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Fri, 12 Apr 2024 15:17:59 +0800 Subject: [PATCH] update customer --- .../data/entity/CustomerRepository.java | 3 ++- .../entity/CustomerSubsidiaryRepository.java | 1 + .../data/service/CustomerContactService.kt | 22 +++++++++++----- .../modules/data/service/CustomerService.kt | 24 ++++++++++------- .../data/service/CustomerSubsidiaryService.kt | 26 +++++++++++++------ .../modules/data/web/CustomerController.kt | 21 ++++++++++++--- .../data/web/CustomerSubsidiaryController.kt | 4 +-- .../data/web/models/CustomerResponse.kt | 2 ++ 8 files changed, 72 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java index a83a25b..8580704 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; import com.ffii.core.support.AbstractRepository; public interface CustomerRepository extends AbstractRepository { - + + List findAllByDeletedFalse(); Optional findByCode(@Param("code") String code); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java index c9b3347..7b6ce3e 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java @@ -11,4 +11,5 @@ public interface CustomerSubsidiaryRepository extends AbstractRepository findAllByCustomerId(@Param("customerId") Long customerId); + Optional findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId); } diff --git a/src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt b/src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt index 72bc9a8..ec14db0 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt @@ -23,13 +23,21 @@ class CustomerContactService( for (i in 0 until customerContactSize) { 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) } diff --git a/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt b/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt index 8c82f6d..6ee99c1 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt @@ -1,5 +1,7 @@ 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.CustomerContact import com.ffii.tsms.modules.data.entity.CustomerType @@ -12,30 +14,31 @@ import org.springframework.stereotype.Service import java.util.Optional @Service -class CustomerService( +open class CustomerService( private val customerRepository: CustomerRepository, private val customerTypeRepository: CustomerTypeRepository, private val customerSubsidiaryService: CustomerSubsidiaryService, private val customerContactService: CustomerContactService, -) { + private val jdbcDao: JdbcDao +) : AbstractBaseEntityService(jdbcDao, customerRepository){ - fun allCustomers(): List { - return customerRepository.findAll() + open fun allCustomers(): List { + return customerRepository.findAllByDeletedFalse() } - fun allCustomerTypes(): List { + open fun allCustomerTypes(): List { return customerTypeRepository.findAll() } - fun findCustomer(id: Long): Customer { + open fun findCustomer(id: Long): Customer { return customerRepository.findById(id).orElseThrow() } - fun findCustomerByCode(code: String): Optional { + open fun findCustomerByCode(code: String): Optional { return customerRepository.findByCode(code); } - fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { + open fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse { val duplicateCustomer = findCustomerByCode(saveCustomer.code) @@ -53,7 +56,10 @@ class CustomerService( .orElseThrow() else Customer(); BeanUtils.copyProperties(saveCustomer, instance) - instance.customerType = customerType + + instance.apply { + this.customerType = customerType + } val customer = customerRepository.saveAndFlush(instance) diff --git a/src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt b/src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt index 757cab2..564554e 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt @@ -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.SubsidiaryRepository import org.springframework.stereotype.Service +import java.util.Optional +import kotlin.jvm.optionals.getOrNull @Service class CustomerSubsidiaryService( @@ -14,13 +16,17 @@ class CustomerSubsidiaryService( ) { - fun allCustomeriesSubsidiaries(): List { + fun allCustomersSubsidiaries(): List { return customerSubsidiaryRepository.findAll() } fun findAllByCustomerId(customerId : Long) : List { return customerSubsidiaryRepository.findAllByCustomerId(customerId) } + + fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { + return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() + } fun findAllSubsidiaryIdsByCustomerId(customerId : Long) : List { val customerSubsidiaryList: List = customerSubsidiaryRepository.findAllByCustomerId(customerId) @@ -37,14 +43,18 @@ class CustomerSubsidiaryService( val subsidiaryIdsSize = saveSubsidiaryIds.size 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) diff --git a/src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt b/src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt index e7072f6..ac810dd 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt @@ -1,7 +1,8 @@ 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.CustomerSubsidiaryService 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.PathVariable import jakarta.validation.Valid +import org.springframework.http.HttpStatus +import org.springframework.web.bind.annotation.DeleteMapping +import org.springframework.web.bind.annotation.ResponseStatus @RestController @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 fun allCustomers(): List { return customerService.allCustomers() @@ -28,13 +34,20 @@ class CustomerController(private val customerService: CustomerService, private v return customerService.allCustomerTypes() } + @DeleteMapping("/{id}") + @ResponseStatus(HttpStatus.NO_CONTENT) + fun deleteCustomer(@PathVariable id: Long) { + customerService.markDelete(id) + } + @GetMapping("/{id}") fun findCustomer(@PathVariable id: Long): CustomerResponse { val customer = customerService.findCustomer(id) val subsidiaryIds = customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(id) + val contacts = customerContactRepository.findAllByCustomerId(id) - return CustomerResponse(customer, subsidiaryIds) + return CustomerResponse(customer, subsidiaryIds, contacts) } @PostMapping("/save") diff --git a/src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt b/src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt index f24436f..00a1631 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt @@ -19,9 +19,9 @@ import com.ffii.core.support.JdbcDao @RequestMapping("/customer-subsidiary") class CustomerSubsidiaryController(private val customerSubsidiaryService: CustomerSubsidiaryService) { @GetMapping - fun allCustomeriesSubsidiaries(): List { + fun allCustomerSubsidiaries(): List { // JdbcDao.queryForString(sql) - return customerSubsidiaryService.allCustomeriesSubsidiaries() + return customerSubsidiaryService.allCustomersSubsidiaries() } @GetMapping("/subsidiaries/{customerId}") diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt index 1317cd0..754045b 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt @@ -1,9 +1,11 @@ package com.ffii.tsms.modules.data.web.models import com.ffii.tsms.modules.data.entity.Customer +import com.ffii.tsms.modules.data.entity.CustomerContact data class CustomerResponse( val customer: Customer, val subsidiaryIds: List, + val contacts: List, )