Przeglądaj źródła

update item save with qc checks

create_edit_user
MSI\derek 4 miesięcy temu
rodzic
commit
38257cfb4f
9 zmienionych plików z 168 dodań i 10 usunięć
  1. +1
    -1
      src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt
  2. +36
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt
  3. +10
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt
  4. +22
    -7
      src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt
  5. +59
    -0
      src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt
  6. +5
    -2
      src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt
  7. +22
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt
  8. +4
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/ItemWithQcResponse.kt
  9. +9
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/NewQcCheckRequest.kt

+ 1
- 1
src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt Wyświetl plik

@@ -8,5 +8,5 @@ import org.springframework.stereotype.Repository
interface ItemsRepository : AbstractRepository<Items, Long> { interface ItemsRepository : AbstractRepository<Items, Long> {
fun findAllByDeletedFalse(): List<Items>; fun findAllByDeletedFalse(): List<Items>;
fun findByIdAndDeletedFalse(id: Long): Items; fun findByIdAndDeletedFalse(id: Long): Items;
fun findByCodeAndTypeAndDeletedFalse(code: String, type: ItemType): Items?;
fun findByCodeAndTypeAndDeletedFalse(code: String, type: String): Items?;
} }

+ 36
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt Wyświetl plik

@@ -0,0 +1,36 @@
package com.ffii.fpsms.modules.master.entity

import com.ffii.core.entity.BaseEntity
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull

@Entity
@Table(name = "qc_check")
open class QcCheck: BaseEntity<Long>() {
@NotNull
@ManyToOne
@JoinColumn(name = "qcItemId")
open var qcItem: QcItem? = null

@NotNull
@Column(name = "isRange")
open var isRange: Boolean? = null

@Column(name = "description")
open var description: String? = null

@NotNull
@Column(name = "systemInput")
open var systemInput: Boolean? = null

@Column(name = "lowerLimit")
open var lowerLimit: Double? = null

@Column(name = "upperLimit")
open var upperLimit: Double? = null

@NotNull
@ManyToOne
@JoinColumn(name = "itemId")
open var item: Items? = null
}

+ 10
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt Wyświetl plik

@@ -0,0 +1,10 @@
package com.ffii.fpsms.modules.master.entity

import com.ffii.core.support.AbstractRepository
import org.springframework.stereotype.Repository

@Repository
interface QcCheckRepository: AbstractRepository<QcCheck, Long> {
fun findAllByDeletedIsFalse(): List<QcCheck>
fun findAllByItemIdAndDeletedFalse(itemId: Long): List<QcCheck>
}

+ 22
- 7
src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt Wyświetl plik

@@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.master.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.fpsms.modules.master.entity.* import com.ffii.fpsms.modules.master.entity.*
import com.ffii.fpsms.modules.master.web.models.ItemQc
import com.ffii.fpsms.modules.master.web.models.ItemWithQcResponse import com.ffii.fpsms.modules.master.web.models.ItemWithQcResponse
import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest import com.ffii.fpsms.modules.master.web.models.NewItemRequest
@@ -16,6 +17,7 @@ open class ItemsService(
private val jdbcDao: JdbcDao, private val jdbcDao: JdbcDao,
private val itemsRepository: ItemsRepository, private val itemsRepository: ItemsRepository,
private val qcCheckRepository: QcCheckRepository, private val qcCheckRepository: QcCheckRepository,
private val qcItemsRepository: QcItemRepository,
): AbstractBaseEntityService<Items, Long, ItemsRepository>(jdbcDao, itemsRepository) { ): AbstractBaseEntityService<Items, Long, ItemsRepository>(jdbcDao, itemsRepository) {
// do mapping with projection // do mapping with projection
open fun allItems(): List<Items> { open fun allItems(): List<Items> {
@@ -28,14 +30,27 @@ open class ItemsService(
open fun getItem(id: Long): ItemWithQcResponse { open fun getItem(id: Long): ItemWithQcResponse {
val list = listOf(1,2) val list = listOf(1,2)
val item = itemsRepository.findByIdAndDeletedFalse(id) val item = itemsRepository.findByIdAndDeletedFalse(id)
val qcChecks = qcCheckRepository.findAllByItemIdAndDeletedFalse(id).map { qcCheck ->
val qcItems = qcItemsRepository.findAllByDeletedIsFalse()
val qcCheckMap = qcCheckRepository.findAllByItemIdAndDeletedFalse(id).associateBy { it.id }
val qc = qcItems.map {
val check = qcCheckMap[it.id] // Find the corresponding qcCheck
println(check?.description)
println(check?.lowerLimit)
ItemQc(
id = it.id!!,
name = it.name!!,
code = it.code!!,
description = it.description!!,
instruction = check?.description,
lowerLimit = check?.lowerLimit,
upperLimit = check?.upperLimit,
isActive = check != null
) // Create combined item
} }
val response = ItemWithQcResponse( val response = ItemWithQcResponse(
item = item
item = item,
qcChecks = qc
) )
// val test = ItemWithQC(list)
// TODO: Return with QC items // TODO: Return with QC items
return response return response
} }
@@ -46,7 +61,7 @@ open class ItemsService(
@Throws(IOException::class) @Throws(IOException::class)
@Transactional @Transactional
open fun saveItem(request: NewItemRequest): MessageResponse { open fun saveItem(request: NewItemRequest): MessageResponse {
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type)
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type.name)
if (duplicatedItem != null && duplicatedItem.id != request.id) { if (duplicatedItem != null && duplicatedItem.id != request.id) {
return MessageResponse( return MessageResponse(
id = request.id, id = request.id,
@@ -67,7 +82,7 @@ open class ItemsService(
shelfLife = request.shelfLife shelfLife = request.shelfLife
countryOfOrigin = request.countryOfOrigin countryOfOrigin = request.countryOfOrigin
maxQty = request.maxQty maxQty = request.maxQty
this.type = type
this.type = request.type.name
} }
val savedItem = itemsRepository.saveAndFlush(item) val savedItem = itemsRepository.saveAndFlush(item)
return MessageResponse( return MessageResponse(


+ 59
- 0
src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt Wyświetl plik

@@ -0,0 +1,59 @@
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.*
import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest
import com.ffii.fpsms.modules.master.web.models.NewQcCheckRequest
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.io.IOException

@Service
open class QcCheckService(
private val jdbcDao: JdbcDao,
private val itemsRepository: ItemsRepository,
private val qcCheckRepository: QcCheckRepository,
private val qcItemRepository: QcItemRepository,
): AbstractBaseEntityService<QcCheck, Long, QcCheckRepository>(jdbcDao, qcCheckRepository) {

@Throws(IOException::class)
@Transactional
open fun saveQcChecks(request: List<NewQcCheckRequest>): MessageResponse {
if (request.isEmpty()) {
return MessageResponse(
id = null,
name = null,
code = null,
type = null,
message = "empty list",
errorPosition = null,
)
}
val qcChecks = qcCheckRepository.findAllByItemIdAndDeletedFalse(request[0].itemId)
val qcChecksList = request.map { req ->
val qc = qcChecks.find { it.qcItem!!.id == req.qcItemId } ?: QcCheck()
val _qcItem = qcItemRepository.findById(req.qcItemId).orElseThrow()
qc.apply {
this.qcItem = _qcItem
isRange = (req.lowerLimit !== null && req.upperLimit !== null && req.lowerLimit != req.upperLimit)
description = req.instruction
systemInput = false
lowerLimit = req.lowerLimit
upperLimit = req.upperLimit
this.item = itemsRepository.findById(req.itemId).orElseThrow()
}
}
val savedQcChecks = qcCheckRepository.saveAllAndFlush(qcChecksList)
return MessageResponse(
id = 1,
name = "total saved: ${savedQcChecks.size}",
code = null,
type = null,
message = "Qc Check Save Success",
errorPosition = null,
)
}

}

+ 5
- 2
src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt Wyświetl plik

@@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.master.web
import com.ffii.core.exception.NotFoundException import com.ffii.core.exception.NotFoundException
import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.master.entity.Items
import com.ffii.fpsms.modules.master.service.ItemsService import com.ffii.fpsms.modules.master.service.ItemsService
import com.ffii.fpsms.modules.master.web.models.ItemWithQcResponse
import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest import com.ffii.fpsms.modules.master.web.models.NewItemRequest
import jakarta.validation.Valid import jakarta.validation.Valid
@@ -18,11 +19,13 @@ class ItemsController(
return itemsService.allItems() return itemsService.allItems()
} }
@GetMapping("/details/{id}") @GetMapping("/details/{id}")
fun getItems(@PathVariable id: Long): Items {
return itemsService.getItem(id) ?: throw NotFoundException()
fun getItems(@PathVariable id: Long): ItemWithQcResponse {
return itemsService.getItem(id)
} }

@PostMapping("/new") @PostMapping("/new")
fun saveItem(@Valid @RequestBody newItem: NewItemRequest): MessageResponse { fun saveItem(@Valid @RequestBody newItem: NewItemRequest): MessageResponse {
println("`````TESTING`````")
return itemsService.saveItem(newItem) return itemsService.saveItem(newItem)
} }
} }

+ 22
- 0
src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt Wyświetl plik

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

import com.ffii.fpsms.modules.master.service.QcCheckService
import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest
import com.ffii.fpsms.modules.master.web.models.NewQcCheckRequest
import jakarta.validation.Valid
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.RestController

@RestController
@RequestMapping("/qcCheck")
class QcCheckController(
private val qcCheckService: QcCheckService
) {
@PostMapping("/new")
fun saveItem(@Valid @RequestBody newQcs: List<NewQcCheckRequest>): MessageResponse {
return qcCheckService.saveQcChecks(newQcs)
}
}

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/ItemWithQcResponse.kt Wyświetl plik

@@ -5,9 +5,13 @@ import com.ffii.fpsms.modules.master.entity.QcItem


data class ItemQc( data class ItemQc(
val id: Long, val id: Long,
val name: String,
val code: String,
val description: String?, val description: String?,
val instruction: String?,
val lowerLimit: Double?, val lowerLimit: Double?,
val upperLimit: Double?, val upperLimit: Double?,
val isActive: Boolean?,
) )
data class ItemWithQcResponse( data class ItemWithQcResponse(
val item: Items, val item: Items,


+ 9
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/NewQcCheckRequest.kt Wyświetl plik

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

data class NewQcCheckRequest(
val qcItemId: Long,
val instruction: String?,
val lowerLimit: Double?,
val upperLimit: Double?,
val itemId: Long,
)

Ładowanie…
Anuluj
Zapisz