@@ -5,6 +5,8 @@ import com.ffii.core.entity.BaseEntity | |||||
import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder | import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder | ||||
import com.ffii.fpsms.modules.jobOrder.entity.JobOrder | import com.ffii.fpsms.modules.jobOrder.entity.JobOrder | ||||
import com.ffii.fpsms.modules.master.entity.BomMaterial | import com.ffii.fpsms.modules.master.entity.BomMaterial | ||||
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus | |||||
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatusConverter | |||||
import com.ffii.fpsms.modules.user.entity.User | import com.ffii.fpsms.modules.user.entity.User | ||||
import jakarta.persistence.* | import jakarta.persistence.* | ||||
import jakarta.validation.constraints.NotNull | import jakarta.validation.constraints.NotNull | ||||
@@ -42,10 +44,10 @@ open class PickOrder: BaseEntity<Long>() { | |||||
@Column(name = "type", length = 30) | @Column(name = "type", length = 30) | ||||
open var type: String? = null | open var type: String? = null | ||||
@Size(max = 30) | |||||
@NotNull | @NotNull | ||||
@Convert(converter = PickOrderStatusConverter::class) | |||||
@Column(name = "status", nullable = false, length = 30) | @Column(name = "status", nullable = false, length = 30) | ||||
open var status: String? = null | |||||
open var status: PickOrderStatus? = null | |||||
@ManyToOne | @ManyToOne | ||||
@JoinColumn(name = "releasedBy", referencedColumnName = "id") | @JoinColumn(name = "releasedBy", referencedColumnName = "id") | ||||
@@ -2,6 +2,7 @@ package com.ffii.fpsms.modules.pickOrder.entity | |||||
import com.ffii.core.support.AbstractRepository | import com.ffii.core.support.AbstractRepository | ||||
import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | ||||
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus | |||||
import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest | import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest | ||||
import org.springframework.data.domain.Page | import org.springframework.data.domain.Page | ||||
import org.springframework.data.domain.Pageable | import org.springframework.data.domain.Pageable | ||||
@@ -47,7 +48,9 @@ interface PickOrderRepository : AbstractRepository<PickOrder, Long> { | |||||
select po.consoCode from PickOrder po where po.consoCode like :prefix% order by po.consoCode desc limit 1 | select po.consoCode from PickOrder po where po.consoCode like :prefix% order by po.consoCode desc limit 1 | ||||
""") | """) | ||||
fun findLatestConsoCodeByPrefix(prefix: String): String? | fun findLatestConsoCodeByPrefix(prefix: String): String? | ||||
fun findAllByIdIn(id: List<Serializable>): List<PickOrder> | |||||
fun findAllByIdInAndStatus(id: List<Serializable>, status: PickOrderStatus): List<PickOrder> | |||||
fun findAllByIdInAndConsoCodeIsNullAndStatus(id: List<Serializable>, status: PickOrderStatus): List<PickOrder> | |||||
fun findPickOrderInfoByIdIn(id: List<Serializable>): List<PickOrderInfo> | fun findPickOrderInfoByIdIn(id: List<Serializable>): List<PickOrderInfo> | ||||
} | } |
@@ -0,0 +1,13 @@ | |||||
package com.ffii.fpsms.modules.pickOrder.enums | |||||
enum class PickOrderStatus(val value: String) { | |||||
PENDING ("pending"), | |||||
PICKING ("picking"), | |||||
COMPLETED ("completed"); | |||||
} | |||||
enum class PickOrderType(val value: String) { | |||||
MATERIAL ("material"), | |||||
JOB_ORDER ("jo"), | |||||
DELIVERY_ORDER ("do") | |||||
} |
@@ -0,0 +1,32 @@ | |||||
package com.ffii.fpsms.modules.pickOrder.enums | |||||
import jakarta.persistence.AttributeConverter | |||||
import jakarta.persistence.Converter | |||||
// Pick Order Status | |||||
@Converter(autoApply = true) | |||||
class PickOrderStatusConverter : AttributeConverter<PickOrderStatus, String>{ | |||||
override fun convertToDatabaseColumn(status: PickOrderStatus?): String? { | |||||
return status?.value | |||||
} | |||||
override fun convertToEntityAttribute(value: String?): PickOrderStatus? { | |||||
return value?.let { v -> | |||||
PickOrderStatus.entries.find { it.value == v } | |||||
} | |||||
} | |||||
} | |||||
// Pick Order Type | |||||
@Converter(autoApply = true) | |||||
class PickOrderTypeConverter : AttributeConverter<PickOrderType, String>{ | |||||
override fun convertToDatabaseColumn(status: PickOrderType?): String? { | |||||
return status?.value | |||||
} | |||||
override fun convertToEntityAttribute(value: String?): PickOrderType? { | |||||
return value?.let { v -> | |||||
PickOrderType.entries.find { it.value == v } | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
package com.ffii.fpsms.modules.pickOrder.enums | |||||
enum class PickOrderLineStatus(val value: String) { | |||||
PENDING("pending"), | |||||
PICKING("picking"), | |||||
COMPLETED("completed"); | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package com.ffii.fpsms.modules.pickOrder.enums | |||||
import jakarta.persistence.AttributeConverter | |||||
import jakarta.persistence.Converter | |||||
@Converter(autoApply = true) | |||||
class PickOrderLineStatusConverter : AttributeConverter<PickOrderLineStatus, String> { | |||||
override fun convertToDatabaseColumn(status: PickOrderLineStatus?): String? { | |||||
return status?.value | |||||
} | |||||
override fun convertToEntityAttribute(value: String?): PickOrderLineStatus? { | |||||
return value?.let { v -> | |||||
PickOrderLineStatus.entries.find { it.value == v } | |||||
} | |||||
} | |||||
} |
@@ -5,6 +5,7 @@ import com.ffii.fpsms.modules.pickOrder.entity.PickOrder | |||||
import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository | import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository | ||||
import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | ||||
import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderLineInfo | import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderLineInfo | ||||
import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus | |||||
import com.ffii.fpsms.modules.pickOrder.web.models.ConsoPickOrderRequest | import com.ffii.fpsms.modules.pickOrder.web.models.ConsoPickOrderRequest | ||||
import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest | import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest | ||||
import org.springframework.context.annotation.Lazy | import org.springframework.context.annotation.Lazy | ||||
@@ -75,8 +76,7 @@ open class PickOrderService( | |||||
open fun consoPickOrders(request: ConsoPickOrderRequest): List<PickOrderInfo> { | open fun consoPickOrders(request: ConsoPickOrderRequest): List<PickOrderInfo> { | ||||
val newConsoCode = assignConsoCode() | val newConsoCode = assignConsoCode() | ||||
val pickOrders = pickOrderRepository.findAllByIdIn(request.ids) | |||||
val pickOrderInfos = mutableListOf<PickOrderInfo>() | |||||
val pickOrders = pickOrderRepository.findAllByIdInAndConsoCodeIsNullAndStatus(request.ids, PickOrderStatus.PENDING) | |||||
pickOrders.forEach { | pickOrders.forEach { | ||||
it.consoCode = newConsoCode | it.consoCode = newConsoCode | ||||
} | } | ||||
@@ -86,4 +86,16 @@ open class PickOrderService( | |||||
return updatedPickOrderInfos | return updatedPickOrderInfos | ||||
} | } | ||||
open fun deconsoPickOrders(request: ConsoPickOrderRequest): List<PickOrderInfo> { | |||||
val pickOrders = pickOrderRepository.findAllByIdInAndStatus(request.ids, PickOrderStatus.PENDING) | |||||
pickOrders.forEach { | |||||
it.consoCode = null | |||||
} | |||||
val updatedPickOrders = pickOrderRepository.saveAll(pickOrders) | |||||
val updatedPickOrderInfos = updatedPickOrders.map { po -> po.id as Serializable }.let { pickOrderRepository.findPickOrderInfoByIdIn(it) } | |||||
return updatedPickOrderInfos | |||||
} | |||||
} | } |
@@ -42,4 +42,9 @@ class PickOrderController( | |||||
fun consoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List<PickOrderInfo> { | fun consoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List<PickOrderInfo> { | ||||
return pickOrderService.consoPickOrders(request) | return pickOrderService.consoPickOrders(request) | ||||
} | } | ||||
@PostMapping("/deconso") | |||||
fun deconsoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List<PickOrderInfo> { | |||||
return pickOrderService.deconsoPickOrders(request) | |||||
} | |||||
} | } |