瀏覽代碼

product save & get

create_edit_user
MSI\derek 5 月之前
父節點
當前提交
546463d810
共有 4 個文件被更改,包括 95 次插入7 次删除
  1. +1
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt
  2. +62
    -3
      src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt
  3. +28
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt
  4. +4
    -4
      src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt

+ 1
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt 查看文件

@@ -6,4 +6,5 @@ interface ProductRepository: AbstractRepository<Product, Long> {
fun findAllByDeletedFalse(): List<Product>;

fun findByIdAndDeletedFalse(id: Long): Product;
fun findByCodeAndDeletedIsFalse(code: String): Product?;
}

+ 62
- 3
src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt 查看文件

@@ -2,14 +2,73 @@ package com.ffii.fpsms.modules.master.service

import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.fpsms.modules.master.entity.Material
import com.ffii.fpsms.modules.master.entity.MaterialRepository
import com.ffii.fpsms.enums.RelationColumnType
import com.ffii.fpsms.modules.master.entity.Product
import com.ffii.fpsms.modules.master.entity.ProductRepository
import com.ffii.fpsms.modules.master.web.models.NewProductRequest
import com.ffii.fpsms.modules.master.web.models.NewProductResponse
import org.springframework.transaction.annotation.Transactional
import kotlin.jvm.optionals.getOrNull

class ProductService(
private val jdbcDao: JdbcDao,
private val productRepository: ProductRepository
private val productRepository: ProductRepository,
private val uomService: ProductMaterialUomService,
private val typeService: ProductMaterialTypeService,
private val weightUnitService: ProductMaterialWeightUnitService,
): AbstractBaseEntityService<Product, Long, ProductRepository>(jdbcDao, productRepository) {
// do mapping with projection
open fun allProduct(): List<Product> {
// TODO: Replace by actual logic
val materials = productRepository.findAll()
return materials
}
open fun getProduct(id: Long): Product? {
return productRepository.findById(id).getOrNull()
}
@Transactional
open fun saveProduct(request: NewProductRequest): NewProductResponse {
val duplicateProduct = productRepository.findByCodeAndDeletedIsFalse(request.code)
val product =
if (request.id != null && request.id > 0) productRepository.findByIdAndDeletedFalse(request.id)
else Product()
if (duplicateProduct != null && duplicateProduct.id != request.id) {
return NewProductResponse(
id = request.id,
code = request.code,
name = request.name,
message = "The product code has already existed",
errorPosition = "code"
)
}
product.apply {
code = request.code
name = request.name
isConsumables = request.isConsumables
description = request.description
remarks = request.remarks
shelfLife = request.shelfLife
countryOfOrigin = request.countryOfOrigin
minHumid = request.minHumid
maxHumid = request.maxHumid
minTemp = request.minTemp
maxTemp = request.maxTemp
sampleRate = request.sampleRate
passingRate = request.passingRate
netWeight = request.netWeight
}
val savedProduct = productRepository.saveAndFlush(product)

val columnName = RelationColumnType.PRODUCT
if (!request.uom.isNullOrEmpty()) uomService.saveUom(savedProduct.id!!, columnName, request.uom)
if (!request.weightUnit.isNullOrEmpty()) weightUnitService.saveWeightUnit(savedProduct.id!!, columnName, request.weightUnit)
if (!request.type.isNullOrEmpty()) typeService.saveType(savedProduct.id!!, columnName, request.type)
return NewProductResponse(
id = savedProduct.id,
name = savedProduct.name,
code = savedProduct.code,
message = "Product Save Success",
errorPosition = null,
)
}
}

+ 28
- 0
src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt 查看文件

@@ -0,0 +1,28 @@
package com.ffii.fpsms.modules.master.web

import com.ffii.core.exception.NotFoundException
import com.ffii.fpsms.modules.master.entity.Product
import com.ffii.fpsms.modules.master.service.ProductService
import com.ffii.fpsms.modules.master.web.models.NewProductRequest
import com.ffii.fpsms.modules.master.web.models.NewProductResponse
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/product")
class ProductController(
private val productService: ProductService
) {
@GetMapping
fun allProduct(): List<Product> {
return productService.allProduct()
}
@GetMapping("/details/{id}")
fun getProduct(@PathVariable id: Long): Product {
return productService.getProduct(id) ?: throw NotFoundException()
}
@PostMapping("/new")
fun saveProduct(@Valid @RequestBody newProduct: NewProductRequest): NewProductResponse {
return productService.saveProduct(newProduct)
}
}

+ 4
- 4
src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt 查看文件

@@ -15,7 +15,7 @@ data class NewProductRequest(
val id: Long?,
val description: String?,
val remarks: String?,
val shelfLife: Number?,
val shelfLife: Double?,
val countryOfOrigin: String?,
val minHumid: Double?,
val maxHumid: Double?,
@@ -24,7 +24,7 @@ data class NewProductRequest(
val sampleRate: Double?,
val passingRate: Double?,
val netWeight: Double?,
val type: List<String>?,
val uom: List<String>?,
val weightUnit: List<String>?,
val type: List<NewTypeRequest>?,
val uom: List<NewUomRequest>?,
val weightUnit: List<NewWeightUnitRequest>?,
)

Loading…
取消
儲存