Преглед на файлове

update create customer

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui преди 1 година
родител
ревизия
bfe5506ef9
променени са 10 файла, в които са добавени 129 реда и са изтрити 38 реда
  1. +4
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerContactRepository.java
  2. +4
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java
  3. +43
    -0
      src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt
  4. +49
    -19
      src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt
  5. +10
    -14
      src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt
  6. +3
    -2
      src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt
  7. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt
  8. +3
    -2
      src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt
  9. +8
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/NewCustomerResponse.kt
  10. +4
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt

+ 4
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerContactRepository.java Целия файл

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

import com.ffii.core.support.AbstractRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface CustomerContactRepository extends AbstractRepository<CustomerContact, Long> {

List<CustomerContact> findAllByCustomerId(@Param("customerId") Long customerId);
}

+ 4
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerRepository.java Целия файл

@@ -1,9 +1,13 @@
package com.ffii.tsms.modules.data.entity;

import java.util.Optional;
import java.util.List;

import org.springframework.data.repository.query.Param;

import com.ffii.core.support.AbstractRepository;

public interface CustomerRepository extends AbstractRepository<Customer, Long> {
Optional<Customer> findByCode(@Param("code") String code);
}

+ 43
- 0
src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt Целия файл

@@ -0,0 +1,43 @@
package com.ffii.tsms.modules.data.service

import com.ffii.tsms.modules.data.entity.CustomerContact
import com.ffii.tsms.modules.data.entity.CustomerContactRepository
import com.ffii.tsms.modules.data.entity.CustomerRepository
import org.springframework.stereotype.Service

@Service
class CustomerContactService(
private val customerContactRepository: CustomerContactRepository,
private val customerRepository: CustomerRepository
) {

fun findAllByCustomerId(customerId: Long): List<CustomerContact> {
return customerContactRepository.findAllByCustomerId(customerId)
}

fun saveContactsByCustomer(saveCustomerId: Long, saveCustomerContact: List<CustomerContact>) {

val customerContactList = mutableListOf<CustomerContact>()

val customerContactSize = saveCustomerContact.size

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
}

customerContactList.add(customerContact)
}

customerContactRepository.saveAll(customerContactList)
}

fun deleteContactsByCustomer(deleteContactIds: List<Long>) {
customerContactRepository.deleteAllById(deleteContactIds.filter { it > 0 })
}
}

+ 49
- 19
src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt Целия файл

@@ -1,14 +1,22 @@
package com.ffii.tsms.modules.data.service

import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerContact
import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.entity.CustomerRepository
import com.ffii.tsms.modules.data.entity.CustomerTypeRepository
import com.ffii.tsms.modules.data.web.models.NewCustomerResponse
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import org.springframework.stereotype.Service
import java.util.Optional

@Service
class CustomerService(private val customerRepository: CustomerRepository, private val customerTypeRepository: CustomerTypeRepository, private val customerSubsidiaryService: CustomerSubsidiaryService) {
class CustomerService(
private val customerRepository: CustomerRepository,
private val customerTypeRepository: CustomerTypeRepository,
private val customerSubsidiaryService: CustomerSubsidiaryService,
private val customerContactService: CustomerContactService,
) {

fun allCustomers(): List<Customer> {
return customerRepository.findAll()
@@ -17,41 +25,63 @@ class CustomerService(private val customerRepository: CustomerRepository, privat
fun allCustomerTypes(): List<CustomerType> {
return customerTypeRepository.findAll()
}
fun findCustomer(id: Long): Customer {
return customerRepository.findById(id).orElseThrow()
}

fun saveCustomer(saveCustomer: SaveCustomerRequest): Customer {
fun findCustomerByCode(code: String): Optional<Customer> {
return customerRepository.findByCode(code);
}

fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse {

val duplicateCustomer = findCustomerByCode(saveCustomer.code)

//TODO: check duplicate customer
if (duplicateCustomer.isPresent()) {
return NewCustomerResponse(
customer = duplicateCustomer.get(),
message = "The customer code has already existed"
);
}

val customerType = customerTypeRepository.findById(saveCustomer.typeId).orElseThrow()

val customer =
customerRepository.saveAndFlush(
Customer().apply {
id = saveCustomer.id
code = saveCustomer.code
name = saveCustomer.name
this.customerType = customerType
address = saveCustomer.address
district = saveCustomer.district
brNo = saveCustomer.brNo
}
)
customerRepository.saveAndFlush(
Customer().apply {
id = saveCustomer.id
code = saveCustomer.code
name = saveCustomer.name
this.customerType = customerType
address = saveCustomer.address
district = saveCustomer.district
brNo = saveCustomer.brNo
}
)

val customerId = customer.id
if (customerId != null && customerId > 0) {

if (saveCustomer.deleteSubsidiaryIds.size > 0) {
if (saveCustomer.deleteSubsidiaryIds.isNotEmpty()) {
customerSubsidiaryService.deleteSubsidiariesByCustomer(customerId, saveCustomer.deleteSubsidiaryIds)
}

if (saveCustomer.addSubsidiaryIds.size > 0) {
if (saveCustomer.addSubsidiaryIds.isNotEmpty()) {
customerSubsidiaryService.saveSubsidiariesByCustomer(customerId, saveCustomer.addSubsidiaryIds)
}

if (saveCustomer.deleteContactIds.isNotEmpty()) {
customerContactService.deleteContactsByCustomer( saveCustomer.deleteContactIds)
}

if (saveCustomer.addContacts.isNotEmpty()) {
customerContactService.saveContactsByCustomer(customerId, saveCustomer.addContacts)
}
}
return customer
return NewCustomerResponse(customer = customer, message = "Success");
}
}

+ 10
- 14
src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt Целия файл

@@ -18,12 +18,15 @@ class CustomerSubsidiaryService(
return customerSubsidiaryRepository.findAll()
}

fun findAllByCustomerId(customerId : Long) : List<CustomerSubsidiary> {
return customerSubsidiaryRepository.findAllByCustomerId(customerId)
}
fun findAllSubsidiaryIdsByCustomerId(customerId : Long) : List<Long> {

val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllByCustomerId(customerId)

if (customerSubsidiaryList.size > 0) {
return customerSubsidiaryList.map { it.subsidiary.id }.filterNotNull()
if (customerSubsidiaryList.isNotEmpty()) {
return customerSubsidiaryList.mapNotNull { it.subsidiary.id }
} else return emptyList()
}

@@ -49,19 +52,12 @@ class CustomerSubsidiaryService(

fun deleteSubsidiariesByCustomer(deleteCustomerId: Long, deleteSubsidiaryIds: List<Long>) {

val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>()

val subsidiaryIdsSize = deleteSubsidiaryIds.size

for (i in 0 until subsidiaryIdsSize) {
val customer = customerRepository.findById(deleteCustomerId).orElseThrow()
val subsidiary = subsidiaryRepository.findById(deleteSubsidiaryIds[i]).orElseThrow()
val customerSubsidiary = CustomerSubsidiary().apply {
this.customer = customer
this.subsidiary = subsidiary
}
val customerSubsidiaryList: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId)

customerSubsidiaryList.add(customerSubsidiary)
if (customerSubsidiaryList.isNotEmpty()) {
val filteredSubsidiaryIds: List<Long> =
customerSubsidiaryList.filter { deleteSubsidiaryIds.contains(it.subsidiary.id!!) }.mapNotNull { it.id }
customerSubsidiaryRepository.deleteAllById(filteredSubsidiaryIds)
}
}
}

+ 3
- 2
src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt Целия файл

@@ -4,8 +4,9 @@ import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerType
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
import com.ffii.tsms.modules.data.web.models.NewCustomerResponse
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import com.ffii.tsms.modules.project.web.models.CustomerResponse
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@@ -37,7 +38,7 @@ class CustomerController(private val customerService: CustomerService, private v
}

@PostMapping("/save")
fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): Customer {
fun saveCustomer(@Valid @RequestBody saveCustomer: SaveCustomerRequest): NewCustomerResponse {
return customerService.saveCustomer(saveCustomer)
}
}

+ 1
- 1
src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt Целия файл

@@ -5,7 +5,7 @@ import com.ffii.tsms.modules.data.entity.CustomerSubsidiary
import com.ffii.tsms.modules.data.service.CustomerService
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import com.ffii.tsms.modules.project.web.models.CustomerResponse
import com.ffii.tsms.modules.data.web.models.CustomerResponse
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController


+ 3
- 2
src/main/java/com/ffii/tsms/modules/data/web/models/CustomerResponse.kt Целия файл

@@ -1,8 +1,9 @@
package com.ffii.tsms.modules.project.web.models
package com.ffii.tsms.modules.data.web.models

import com.ffii.tsms.modules.data.entity.Customer

data class CustomerResponse(
val customer: Customer,
val subsidiaryIds: List<Long>,
)
)


+ 8
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/NewCustomerResponse.kt Целия файл

@@ -0,0 +1,8 @@
package com.ffii.tsms.modules.data.web.models

import com.ffii.tsms.modules.data.entity.Customer

data class NewCustomerResponse (
val customer: Customer,
val message: String,
)

+ 4
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt Целия файл

@@ -1,5 +1,6 @@
package com.ffii.tsms.modules.project.web.models

import com.ffii.tsms.modules.data.entity.CustomerContact
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.NotNull

@@ -18,5 +19,8 @@ data class SaveCustomerRequest(
val deleteSubsidiaryIds: List<Long>,
val addSubsidiaryIds: List<Long>,

val deleteContactIds: List<Long>,
val addContacts: List<CustomerContact>,

val id: Long?,
)

Зареждане…
Отказ
Запис