| @@ -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) | |||||
| } | |||||
| } | } | ||||