浏览代码

update customer master & add subsidiary master

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui 1年前
父节点
当前提交
f85d458a0c
共有 18 个文件被更改,包括 315 次插入74 次删除
  1. +2
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java
  2. +14
    -3
      src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java
  3. +4
    -1
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContactRepository.java
  4. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java
  5. +9
    -12
      src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt
  6. +4
    -5
      src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt
  7. +48
    -0
      src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt
  8. +48
    -0
      src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryContactService.kt
  9. +77
    -17
      src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt
  10. +7
    -7
      src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt
  11. +5
    -0
      src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt
  12. +40
    -8
      src/main/java/com/ffii/tsms/modules/data/web/SubsidiaryController.kt
  13. +0
    -19
      src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt
  14. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt
  15. +1
    -1
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerResponse.kt
  16. +27
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveSubsidiaryRequest.kt
  17. +8
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/SaveSubsidiaryResponse.kt
  18. +13
    -0
      src/main/java/com/ffii/tsms/modules/data/web/models/SubsidiaryResponse.kt

+ 2
- 0
src/main/java/com/ffii/tsms/modules/data/entity/CustomerSubsidiaryRepository.java 查看文件

@@ -11,5 +11,7 @@ public interface CustomerSubsidiaryRepository extends AbstractRepository<Custome
List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId); List<CustomerSubsidiary> findAllByCustomerId(@Param("customerId") Long customerId);


List<CustomerSubsidiary> findAllBySubsidiaryId(@Param("subsidiaryId") Long subsidiaryId);

Optional<CustomerSubsidiary> findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId); Optional<CustomerSubsidiary> findByCustomerIdAndSubsidiaryId(@Param("customerId") Long customerId, @Param("subsidiaryId") Long subsidiaryId);
} }

+ 14
- 3
src/main/java/com/ffii/tsms/modules/data/entity/Subsidiary.java 查看文件

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


import com.ffii.core.entity.BaseEntity; import com.ffii.core.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;


import java.time.LocalTime; import java.time.LocalTime;
@@ -28,6 +26,11 @@ public class Subsidiary extends BaseEntity<Long> {
@Column(name = "district", length = 30) @Column(name = "district", length = 30)
private String district; private String district;


@OneToOne
@NotNull
@JoinColumn(name = "typeId")
private SubsidiaryType subsidiaryType;

public String getAddress() { public String getAddress() {
return address; return address;
} }
@@ -67,4 +70,12 @@ public class Subsidiary extends BaseEntity<Long> {
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }

public SubsidiaryType getSubsidiaryType() {
return subsidiaryType;
}

public void setSubsidiaryType(SubsidiaryType subsidiaryType) {
this.subsidiaryType = subsidiaryType;
}
} }

+ 4
- 1
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryContactRepository.java 查看文件

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


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


public interface SubsidiaryContactRepository extends AbstractRepository<SubsidiaryContact, Long> {
import java.util.List;


public interface SubsidiaryContactRepository extends AbstractRepository<SubsidiaryContact, Long> {
List<SubsidiaryContact> findAllBySubsidiaryId(@Param("subsidiary") Long subsidiaryId);
} }

+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/entity/SubsidiaryRepository.java 查看文件

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


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

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


public interface SubsidiaryRepository extends AbstractRepository<Subsidiary, Long> { public interface SubsidiaryRepository extends AbstractRepository<Subsidiary, Long> {
List<Subsidiary> findAllByDeletedFalse();

Optional<Subsidiary> findByCode(@Param("code") String code);
} }

+ 9
- 12
src/main/java/com/ffii/tsms/modules/data/service/CustomerContactService.kt 查看文件

@@ -3,6 +3,7 @@ package com.ffii.tsms.modules.data.service
import com.ffii.tsms.modules.data.entity.CustomerContact import com.ffii.tsms.modules.data.entity.CustomerContact
import com.ffii.tsms.modules.data.entity.CustomerContactRepository import com.ffii.tsms.modules.data.entity.CustomerContactRepository
import com.ffii.tsms.modules.data.entity.CustomerRepository import com.ffii.tsms.modules.data.entity.CustomerRepository
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service import org.springframework.stereotype.Service


@Service @Service
@@ -31,18 +32,14 @@ class CustomerContactService(
val customerContact = val customerContact =
if (customerContactId != null && customerContactId > 0) customerContactRepository.findById( if (customerContactId != null && customerContactId > 0) customerContactRepository.findById(
customerContactId 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
}

).orElseThrow() else CustomerContact()

customerContact.apply {
this.customer = customer
name = saveCustomerContact[i].name
phone = saveCustomerContact[i].phone
email = saveCustomerContact[i].email
}
customerContactList.add(customerContact) customerContactList.add(customerContact)
} }




+ 4
- 5
src/main/java/com/ffii/tsms/modules/data/service/CustomerService.kt 查看文件

@@ -3,11 +3,10 @@ package com.ffii.tsms.modules.data.service
import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao 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.CustomerType import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.entity.CustomerRepository import com.ffii.tsms.modules.data.entity.CustomerRepository
import com.ffii.tsms.modules.data.entity.CustomerTypeRepository import com.ffii.tsms.modules.data.entity.CustomerTypeRepository
import com.ffii.tsms.modules.data.web.models.NewCustomerResponse
import com.ffii.tsms.modules.data.web.models.SaveCustomerResponse
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import org.springframework.beans.BeanUtils import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@@ -38,13 +37,13 @@ open class CustomerService(
return customerRepository.findByCode(code); return customerRepository.findByCode(code);
} }


open fun saveCustomer(saveCustomer: SaveCustomerRequest): NewCustomerResponse {
open fun saveCustomer(saveCustomer: SaveCustomerRequest): SaveCustomerResponse {


val duplicateCustomer = findCustomerByCode(saveCustomer.code) val duplicateCustomer = findCustomerByCode(saveCustomer.code)


//check duplicate customer //check duplicate customer
if (duplicateCustomer.isPresent && duplicateCustomer.orElseThrow().id?.equals(saveCustomer.id) == false) { if (duplicateCustomer.isPresent && duplicateCustomer.orElseThrow().id?.equals(saveCustomer.id) == false) {
return NewCustomerResponse(
return SaveCustomerResponse(
customer = duplicateCustomer.get(), customer = duplicateCustomer.get(),
message = "The customer code has already existed" message = "The customer code has already existed"
); );
@@ -85,6 +84,6 @@ open class CustomerService(
} }
} }


return NewCustomerResponse(customer = customer, message = "Success");
return SaveCustomerResponse(customer = customer, message = "Success");
} }
} }

+ 48
- 0
src/main/java/com/ffii/tsms/modules/data/service/CustomerSubsidiaryService.kt 查看文件

@@ -24,6 +24,10 @@ class CustomerSubsidiaryService(
return customerSubsidiaryRepository.findAllByCustomerId(customerId) return customerSubsidiaryRepository.findAllByCustomerId(customerId)
} }


fun findAllBySubsidiaryId(subsidiaryId : Long) : List<CustomerSubsidiary> {
return customerSubsidiaryRepository.findAllBySubsidiaryId(subsidiaryId)
}

fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? { fun findByCustomerIdAndSubsidiaryId(customerId : Long, subsidiaryId: Long) : CustomerSubsidiary? {
return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull() return customerSubsidiaryRepository.findByCustomerIdAndSubsidiaryId(customerId, subsidiaryId).getOrNull()
} }
@@ -36,6 +40,15 @@ class CustomerSubsidiaryService(
} else return emptyList() } else return emptyList()
} }


fun findAllCustomerIdsBySubsidiaryId(subsidiaryId : Long) : List<Long> {

val customerSubsidiaryList: List<CustomerSubsidiary> = customerSubsidiaryRepository.findAllBySubsidiaryId(subsidiaryId)

if (customerSubsidiaryList.isNotEmpty()) {
return customerSubsidiaryList.mapNotNull { it.customer.id }
} else return emptyList()
}

fun saveSubsidiariesByCustomer(saveCustomerId: Long, saveSubsidiaryIds: List<Long>) { fun saveSubsidiariesByCustomer(saveCustomerId: Long, saveSubsidiaryIds: List<Long>) {


val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>() val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>()
@@ -60,6 +73,30 @@ class CustomerSubsidiaryService(
customerSubsidiaryRepository.saveAll(customerSubsidiaryList) customerSubsidiaryRepository.saveAll(customerSubsidiaryList)
} }


fun saveCustomersBySubsidiary(saveSubsidiaryId: Long, saveCustomerIds: List<Long>) {

val customerSubsidiaryList = mutableListOf<CustomerSubsidiary>()

val customerIdsSize = saveCustomerIds.size

for (i in 0 until customerIdsSize) {
val checkExist = findByCustomerIdAndSubsidiaryId(saveSubsidiaryId, saveCustomerIds[i])

if (checkExist == null) {
val customer = customerRepository.findById(saveCustomerIds[i]).orElseThrow()
val subsidiary = subsidiaryRepository.findById(saveSubsidiaryId).orElseThrow()
val customerSubsidiary = CustomerSubsidiary().apply {
this.customer = customer
this.subsidiary = subsidiary
}

customerSubsidiaryList.add(customerSubsidiary)
}
}

customerSubsidiaryRepository.saveAll(customerSubsidiaryList)
}

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


val customerSubsidiaryList: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId) val customerSubsidiaryList: List<CustomerSubsidiary> = findAllByCustomerId(deleteCustomerId)
@@ -70,4 +107,15 @@ class CustomerSubsidiaryService(
customerSubsidiaryRepository.deleteAllById(filteredSubsidiaryIds) customerSubsidiaryRepository.deleteAllById(filteredSubsidiaryIds)
} }
} }

fun deleteCustomersBySubsidiary(deleteSubsidiaryId: Long, deleteCustomerIds: List<Long>) {

val customerSubsidiaryList: List<CustomerSubsidiary> = findAllBySubsidiaryId(deleteSubsidiaryId)

if (customerSubsidiaryList.isNotEmpty()) {
val filteredCustomerIds: List<Long> =
customerSubsidiaryList.filter { deleteCustomerIds.contains(it.customer.id!!) }.mapNotNull { it.id }
customerSubsidiaryRepository.deleteAllById(filteredCustomerIds)
}
}
} }

+ 48
- 0
src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryContactService.kt 查看文件

@@ -0,0 +1,48 @@
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 com.ffii.tsms.modules.data.entity.SubsidiaryContact
import com.ffii.tsms.modules.data.entity.SubsidiaryContactRepository
import com.ffii.tsms.modules.data.entity.SubsidiaryRepository
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service

@Service
class SubsidiaryContactService(
private val subsidiaryContactRepository: SubsidiaryContactRepository,
private val subsidiaryRepository: SubsidiaryRepository
) {

fun findAllBySubsidiaryId(subsidiaryId: Long): List<SubsidiaryContact> {
return subsidiaryContactRepository.findAllBySubsidiaryId(subsidiaryId)
}

fun saveContactsBySubsidiary(saveSubsidiaryId: Long, saveSubsidiaryContact: List<SubsidiaryContact>) {

val subsidiaryContactList = mutableListOf<SubsidiaryContact>()
val subsidiaryContactSize = saveSubsidiaryContact.size
for (i in 0 until subsidiaryContactSize) {
val subsidiary = subsidiaryRepository.findById(saveSubsidiaryId).orElseThrow()
val subsidiaryContactId = saveSubsidiaryContact[i].id
val subsidiaryContact =
if (subsidiaryContactId != null && subsidiaryContactId > 0) subsidiaryContactRepository.findById(
subsidiaryContactId
).orElseThrow() else SubsidiaryContact()
subsidiaryContact.apply {
this.subsidiary = subsidiary
name = saveSubsidiaryContact[i].name
phone = saveSubsidiaryContact[i].phone
email = saveSubsidiaryContact[i].email
}
subsidiaryContactList.add(subsidiaryContact)
}

subsidiaryContactRepository.saveAll(subsidiaryContactList)
}

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

+ 77
- 17
src/main/java/com/ffii/tsms/modules/data/service/SubsidiaryService.kt 查看文件

@@ -1,30 +1,90 @@
package com.ffii.tsms.modules.project.service package com.ffii.tsms.modules.project.service


import com.ffii.tsms.modules.data.entity.SubsidiaryRepository
import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.tsms.modules.data.entity.Subsidiary import com.ffii.tsms.modules.data.entity.Subsidiary
import com.ffii.tsms.modules.data.service.CustomerService
import com.ffii.tsms.modules.project.web.models.NewSubsidiaryRequest
import com.ffii.tsms.modules.data.entity.SubsidiaryRepository
import com.ffii.tsms.modules.data.entity.SubsidiaryType
import com.ffii.tsms.modules.data.entity.SubsidiaryTypeRepository
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService
import com.ffii.tsms.modules.data.service.SubsidiaryContactService
import com.ffii.tsms.modules.data.web.models.SaveSubsidiaryResponse
import com.ffii.tsms.modules.project.web.models.SaveSubsidiaryRequest
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import java.util.Optional


@Service @Service
class SubsidiaryService(
private val subsidiaryRepository: SubsidiaryRepository
) {
fun allSubsidiaries(): List<Subsidiary> {
return subsidiaryRepository.findAll()
open class SubsidiaryService(
private val subsidiaryRepository: SubsidiaryRepository,
private val jdbcDao: JdbcDao,
private val customerSubsidiaryService: CustomerSubsidiaryService,
private val subsidiaryTypeRepository: SubsidiaryTypeRepository,
private val subsidiaryContactService: SubsidiaryContactService,
) : AbstractBaseEntityService<Subsidiary, Long, SubsidiaryRepository>(jdbcDao, subsidiaryRepository) {
open fun allSubsidiaries(): List<Subsidiary> {
return subsidiaryRepository.findAllByDeletedFalse()
}

open fun allSubsidiaryTypes(): List<SubsidiaryType> {
return subsidiaryTypeRepository.findAll()
}

open fun findSubsidiary(id: Long): Subsidiary {
return subsidiaryRepository.findById(id).orElseThrow()
} }


fun saveSubsidiary(request: NewSubsidiaryRequest): Subsidiary {
open fun findSubsidiaryByCode(code: String): Optional<Subsidiary> {
return subsidiaryRepository.findByCode(code);
}

open fun saveSubsidiary(saveSubsidiary: SaveSubsidiaryRequest): SaveSubsidiaryResponse {

val duplicateSubsidiary = findSubsidiaryByCode(saveSubsidiary.code)

//check duplicate customer
if (duplicateSubsidiary.isPresent && duplicateSubsidiary.orElseThrow().id?.equals(saveSubsidiary.id) == false) {
logger.info(duplicateSubsidiary.get())
return SaveSubsidiaryResponse(
subsidiary = duplicateSubsidiary.get(),
message = "The subsidiary code has already existed"
);
}

val subsidiaryType = subsidiaryTypeRepository.findById(saveSubsidiary.typeId).orElseThrow()

val instance = if (saveSubsidiary.id != null && saveSubsidiary.id > 0) subsidiaryRepository.findById(saveSubsidiary.id)
.orElseThrow() else Subsidiary();

BeanUtils.copyProperties(saveSubsidiary, instance)

instance.apply {
this.subsidiaryType = subsidiaryType
}

val subsidiary =
subsidiaryRepository.saveAndFlush(instance)

val subsidiaryId = subsidiary.id

if (subsidiaryId != null && subsidiaryId > 0) {

if (saveSubsidiary.deleteCustomerIds.isNotEmpty()) {
customerSubsidiaryService.deleteCustomersBySubsidiary(subsidiaryId, saveSubsidiary.deleteCustomerIds)
}

if (saveSubsidiary.addCustomerIds.isNotEmpty()) {
customerSubsidiaryService.saveCustomersBySubsidiary(subsidiaryId, saveSubsidiary.addCustomerIds)
}


// TODO: Add tasks, milestones, allocated
val subsidary = Subsidiary().apply {
code = request.code
name = request.name
brNo = request.brNo
address = request.address
district = request.district
if (saveSubsidiary.deleteContactIds.isNotEmpty()) {
subsidiaryContactService.deleteContactsBySubsidiary(saveSubsidiary.deleteContactIds)
}
if (saveSubsidiary.addContacts.isNotEmpty()) {
subsidiaryContactService.saveContactsBySubsidiary(subsidiaryId, saveSubsidiary.addContacts)
}
} }


return subsidiaryRepository.save(subsidary)
return SaveSubsidiaryResponse(subsidiary = subsidiary, message = "Success");
} }
} }

+ 7
- 7
src/main/java/com/ffii/tsms/modules/data/web/CustomerController.kt 查看文件

@@ -1,12 +1,12 @@
package com.ffii.tsms.modules.data.web package com.ffii.tsms.modules.data.web


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.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.service.CustomerContactService
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
import com.ffii.tsms.modules.data.web.models.NewCustomerResponse
import com.ffii.tsms.modules.data.web.models.SaveCustomerResponse
import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest import com.ffii.tsms.modules.project.web.models.SaveCustomerRequest
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
@@ -22,7 +22,7 @@ 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
private val customerContactService: CustomerContactService
) { ) {
@GetMapping @GetMapping
fun allCustomers(): List<Customer> { fun allCustomers(): List<Customer> {
@@ -45,13 +45,13 @@ class CustomerController(private val customerService: CustomerService, private v
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)
val contacts = customerContactService.findAllByCustomerId(id)


return CustomerResponse(customer, subsidiaryIds, contacts) return CustomerResponse(customer, subsidiaryIds, contacts)
} }


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

+ 5
- 0
src/main/java/com/ffii/tsms/modules/data/web/CustomerSubsidiaryController.kt 查看文件

@@ -28,4 +28,9 @@ class CustomerSubsidiaryController(private val customerSubsidiaryService: Custom
fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> { fun findAllSubsidiaryIdsByCustomerId(@PathVariable customerId: Long): List<Long> {
return customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(customerId) return customerSubsidiaryService.findAllSubsidiaryIdsByCustomerId(customerId)
} }

@GetMapping("/customers/{subsidiaryId}")
fun findAllCustomerIdsBySubsidiaryId(@PathVariable subsidiaryId: Long): List<Long> {
return customerSubsidiaryService.findAllCustomerIdsBySubsidiaryId(subsidiaryId)
}
} }

+ 40
- 8
src/main/java/com/ffii/tsms/modules/data/web/SubsidiaryController.kt 查看文件

@@ -1,27 +1,59 @@
package com.ffii.tsms.modules.data.web package com.ffii.tsms.modules.data.web


import com.ffii.tsms.modules.data.entity.CustomerType
import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.Staff
import com.ffii.tsms.modules.data.entity.Subsidiary import com.ffii.tsms.modules.data.entity.Subsidiary
import com.ffii.tsms.modules.data.entity.SubsidiaryType
import com.ffii.tsms.modules.data.service.CustomerSubsidiaryService
import com.ffii.tsms.modules.data.service.StaffsService import com.ffii.tsms.modules.data.service.StaffsService
import com.ffii.tsms.modules.data.service.SubsidiaryContactService
import com.ffii.tsms.modules.data.web.models.CustomerResponse
import com.ffii.tsms.modules.data.web.models.SaveSubsidiaryResponse
import com.ffii.tsms.modules.data.web.models.SubsidiaryResponse
import com.ffii.tsms.modules.project.service.SubsidiaryService import com.ffii.tsms.modules.project.service.SubsidiaryService
import com.ffii.tsms.modules.project.web.models.NewSubsidiaryRequest
import com.ffii.tsms.modules.project.web.models.SaveSubsidiaryRequest
import jakarta.validation.Valid
import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseStatus
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.PostMapping
import jakarta.validation.Valid


@RestController @RestController
@RequestMapping("/subsidiary") @RequestMapping("/subsidiary")
class SubsidiaryController(private val subsidiaryService: SubsidiaryService) {
class SubsidiaryController(private val subsidiaryService: SubsidiaryService, private val customerSubsidiaryService: CustomerSubsidiaryService, private val subsidiaryContactService: SubsidiaryContactService) {
@GetMapping @GetMapping
fun allSubsidiaries(): List<Subsidiary> { fun allSubsidiaries(): List<Subsidiary> {
return subsidiaryService.allSubsidiaries() return subsidiaryService.allSubsidiaries()
} }


@PostMapping("/new")
fun saveSubsidiary(@Valid @RequestBody newSubsidary: NewSubsidiaryRequest): Subsidiary {
return subsidiaryService.saveSubsidiary(newSubsidary)
@GetMapping("/types")
fun allCustomerTypes(): List<SubsidiaryType> {
return subsidiaryService.allSubsidiaryTypes()
}

@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
fun deleteCustomer(@PathVariable id: Long) {
subsidiaryService.markDelete(id)
}

@GetMapping("/{id}")
fun findSubsidiary(@PathVariable id: Long): SubsidiaryResponse {

val subsidiary = subsidiaryService.findSubsidiary(id)
val customerIds = customerSubsidiaryService.findAllCustomerIdsBySubsidiaryId(id)
val contacts = subsidiaryContactService.findAllBySubsidiaryId(id)

return SubsidiaryResponse(subsidiary, customerIds, contacts)
}

@PostMapping("/save")
fun saveSubsidiary(@Valid @RequestBody saveSubsidiary: SaveSubsidiaryRequest): SaveSubsidiaryResponse {
return subsidiaryService.saveSubsidiary(saveSubsidiary)
} }
} }

+ 0
- 19
src/main/java/com/ffii/tsms/modules/data/web/models/NewSubsidiaryRequest.kt 查看文件

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

import jakarta.validation.constraints.NotBlank

data class NewSubsidiaryRequest(
@field:NotBlank(message = "subsidary code cannot be empty")
val code: String,
@field:NotBlank(message = "subsidary name cannot be empty")
val name: String,

val brNo: String,
val contactName: String,
val phone: String,
val address: String,
val district: String,
val email: String,

val allocatedCustomerIds: List<Long>,
)

+ 1
- 1
src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerRequest.kt 查看文件

@@ -9,7 +9,7 @@ data class SaveCustomerRequest(
val code: String, val code: String,
@field:NotBlank(message = "customer name cannot be empty") @field:NotBlank(message = "customer name cannot be empty")
val name: String, val name: String,
@field:NotNull(message = "customer name cannot be empty")
@field:NotNull(message = "customer type cannot be empty")
val typeId: Long, val typeId: Long,


val brNo: String?, val brNo: String?,


src/main/java/com/ffii/tsms/modules/data/web/models/NewCustomerResponse.kt → src/main/java/com/ffii/tsms/modules/data/web/models/SaveCustomerResponse.kt 查看文件

@@ -2,7 +2,7 @@ package com.ffii.tsms.modules.data.web.models


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


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

+ 27
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/SaveSubsidiaryRequest.kt 查看文件

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

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

data class SaveSubsidiaryRequest(
@field:NotBlank(message = "subsidiary code cannot be empty")
val code: String,
@field:NotBlank(message = "subsidiary name cannot be empty")
val name: String,
@field:NotNull(message = "subsidiary type cannot be empty")
val typeId: Long,

val brNo: String?,
val address: String?,
val district: String?,

val deleteCustomerIds: List<Long>,
val addCustomerIds: List<Long>,

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

val id: Long?,
)

+ 8
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/SaveSubsidiaryResponse.kt 查看文件

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

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

data class SaveSubsidiaryResponse (
val subsidiary: Subsidiary,
val message: String,
)

+ 13
- 0
src/main/java/com/ffii/tsms/modules/data/web/models/SubsidiaryResponse.kt 查看文件

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

import com.ffii.tsms.modules.data.entity.Customer
import com.ffii.tsms.modules.data.entity.CustomerContact
import com.ffii.tsms.modules.data.entity.Subsidiary
import com.ffii.tsms.modules.data.entity.SubsidiaryContact

data class SubsidiaryResponse(
val subsidiary: Subsidiary,
val customerIds: List<Long>,
val contacts: List<SubsidiaryContact>,
)


正在加载...
取消
保存