From cebda2dbb4f91f212790c46a868c0c95bf51c180 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Tue, 9 Sep 2025 12:30:35 +0800 Subject: [PATCH 1/4] update proportion/ratio --- .../modules/jobOrder/service/JobOrderBomMaterialService.kt | 2 +- .../master/entity/ProductionScheduleLineRepository.kt | 3 ++- .../modules/master/entity/ProductionScheduleRepository.kt | 3 ++- .../modules/master/service/ProductionScheduleService.kt | 6 +++--- .../fpsms/modules/pickOrder/service/PickOrderService.kt | 2 +- .../ffii/fpsms/modules/stock/service/StockInLineService.kt | 2 +- .../ffii/fpsms/modules/stock/service/StockOutLineService.kt | 2 +- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderBomMaterialService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderBomMaterialService.kt index 9265e68..ed1294b 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderBomMaterialService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderBomMaterialService.kt @@ -24,7 +24,7 @@ open class JobOrderBomMaterialService( open fun createJobOrderBomMaterialRequests(joId: Long): List { val zero = BigDecimal.ZERO val jo = jobOrderRepository.findById(joId).getOrNull() ?: throw NoSuchElementException() - val proportion = (jo.reqQty ?: zero).divide(jo.bom?.outputQty ?: BigDecimal.ONE, 5, RoundingMode.HALF_UP) + val proportion = BigDecimal.ONE //(jo.reqQty ?: zero).divide(jo.bom?.outputQty ?: BigDecimal.ONE, 5, RoundingMode.HALF_UP) val jobmRequests = jo.bom?.bomMaterials?.map { bm -> val salesUnit = bm.item?.id?.let { itemUomService.findSalesUnitByItemId(it) } diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleLineRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleLineRepository.kt index e87758d..018878b 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleLineRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleLineRepository.kt @@ -14,7 +14,8 @@ interface ProductionScheduleLineRepository : AbstractRepository itemUomService.findSalesUnitByItemId(_itemId) } - val ratio = (salesUnit?.ratioN ?: zero).divide(salesUnit?.ratioD ?: one) + val ratio = BigDecimal.ONE //(salesUnit?.ratioN ?: zero).divide(salesUnit?.ratioD ?: one) val remainingQty = (inventoryLotLine?.inQty ?: zero) .minus(inventoryLotLine?.outQty ?: zero) diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 4b90c05..40a32b5 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -373,7 +373,7 @@ open class StockInLineService( val purchaseItemUom = itemUomRespository.findByItemIdAndPurchaseUnitIsTrueAndDeletedIsFalse(request.itemId) val stockItemUom = itemUomRespository.findByItemIdAndStockUnitIsTrueAndDeletedIsFalse(request.itemId) val ratio = if (stockItemUom != null && purchaseItemUom != null) { - (purchaseItemUom.ratioN!! / purchaseItemUom.ratioD!!) / (stockItemUom.ratioN!! / stockItemUom.ratioD!!) + BigDecimal.ONE // (purchaseItemUom.ratioN!! / purchaseItemUom.ratioD!!) / (stockItemUom.ratioN!! / stockItemUom.ratioD!!) } else { BigDecimal.ONE } diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt index b535700..4ca62dd 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt @@ -142,7 +142,7 @@ fun handleQc(stockOutLine: StockOutLine, request: UpdateStockOutLineRequest): Li val one = BigDecimal.ONE val targetLotLine = inventoryLotLineRepository.findById(request.inventoryLotLineId!!).orElseThrow() val salesUnit = inventoryLotLine?.inventoryLot?.item?.id?.let {_itemId -> itemUomRespository.findByItemIdAndSalesUnitIsTrueAndDeletedIsFalse(_itemId) } - val ratio = (salesUnit?.ratioN ?: zero).divide(salesUnit?.ratioD ?: one).toDouble() + val ratio = 1.0 //(salesUnit?.ratioN ?: zero).divide(salesUnit?.ratioD ?: one).toDouble() val targetLotLineEntry = targetLotLine.apply { this.outQty = (this.outQty?: BigDecimal.ZERO) + (request.qty.div(ratio)).toBigDecimal() From 4cfc4fd71156687129c65951c7a54543c7e3d695 Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Tue, 9 Sep 2025 18:54:41 +0800 Subject: [PATCH 2/4] update scheduler --- .../ffii/fpsms/m18/web/M18TestController.kt | 10 ++-- .../scheduler/web/SchedulerController.kt | 30 ++++++++++++ .../entity/ProductionScheduleRepository.kt | 47 ++++++++++++++----- .../entity/projections/ProdScheduleInfo.kt | 1 + 4 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/common/scheduler/web/SchedulerController.kt diff --git a/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt b/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt index 5da2114..74e7768 100644 --- a/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt +++ b/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt @@ -64,11 +64,11 @@ class M18TestController ( return schedulerService.getM18Pos(); } // --------------------------------------------- Scheduler --------------------------------------------- /// - @GetMapping("/schedule/po") // - fun schedulePo(@RequestParam @Valid newCron: String) { - settingsService.update(SettingNames.SCHEDULE_M18_PO, newCron); - schedulerService.scheduleM18PoTask() - } +// @GetMapping("/schedule/po") +// fun schedulePo(@RequestParam @Valid newCron: String) { +// settingsService.update(SettingNames.SCHEDULE_M18_PO, newCron); +// schedulerService.scheduleM18PoTask() +// } // --------------------------------------------- Master Data --------------------------------------------- /// @GetMapping("/all") diff --git a/src/main/java/com/ffii/fpsms/modules/common/scheduler/web/SchedulerController.kt b/src/main/java/com/ffii/fpsms/modules/common/scheduler/web/SchedulerController.kt new file mode 100644 index 0000000..54d0ff8 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/common/scheduler/web/SchedulerController.kt @@ -0,0 +1,30 @@ +package com.ffii.fpsms.modules.common.scheduler.web + +import com.ffii.fpsms.modules.common.SettingNames +import com.ffii.fpsms.modules.common.scheduler.service.SchedulerService +import com.ffii.fpsms.modules.settings.service.SettingsService +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/scheduler") +class SchedulerController( + val schedulerService: SchedulerService, + val settingsService: SettingsService +) { + @GetMapping("/testDetailedProd") + fun testDetailedProd(): Any { + schedulerService.getDetailedProdSchedule() + return 200 + } + + // Cron Settings + @GetMapping("/updateSetting/poCron") + fun schedulePo(@RequestParam @Valid newCron: String) { + settingsService.update(SettingNames.SCHEDULE_M18_PO, newCron); + schedulerService.scheduleM18PoTask() + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt index cb216f8..1532cc4 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt @@ -36,9 +36,17 @@ interface ProductionScheduleRepository : AbstractRepository Date: Tue, 9 Sep 2025 18:58:05 +0800 Subject: [PATCH 3/4] update putaway --- .../fpsms/modules/stock/entity/projection/StockInLineInfo.kt | 4 ++++ .../ffii/fpsms/modules/stock/service/StockInLineService.kt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt index 58ff0f4..40c6205 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt @@ -65,4 +65,8 @@ interface PutAwayLineForSil { val warehouseCode: String?; @get:Value("#{target.warehouse?.name}") val warehouseName: String?; + @get:Value("#{target.created}") + val putawayDate: LocalDateTime?; + @get:Value("#{target.createdBy}") + val putawayUser: String?; } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 40a32b5..4b90c05 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -373,7 +373,7 @@ open class StockInLineService( val purchaseItemUom = itemUomRespository.findByItemIdAndPurchaseUnitIsTrueAndDeletedIsFalse(request.itemId) val stockItemUom = itemUomRespository.findByItemIdAndStockUnitIsTrueAndDeletedIsFalse(request.itemId) val ratio = if (stockItemUom != null && purchaseItemUom != null) { - BigDecimal.ONE // (purchaseItemUom.ratioN!! / purchaseItemUom.ratioD!!) / (stockItemUom.ratioN!! / stockItemUom.ratioD!!) + (purchaseItemUom.ratioN!! / purchaseItemUom.ratioD!!) / (stockItemUom.ratioN!! / stockItemUom.ratioD!!) } else { BigDecimal.ONE } From 0128d6184e14c7eaab76a6d55f63e81bf80922a6 Mon Sep 17 00:00:00 2001 From: "kelvin.yau" Date: Tue, 9 Sep 2025 19:12:51 +0800 Subject: [PATCH 4/4] DO Update (filter) --- .../entity/DeliveryOrderRepository.kt | 8 ++++++ .../deliveryOrder/enums/DeliveryOrderEnum.kt | 2 +- .../service/DeliveryOrderService.kt | 22 ++++++++++++++++ .../web/DeliveryOrderController.kt | 26 ++++++++++++++++++- 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DeliveryOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DeliveryOrderRepository.kt index 8d34fd4..406a9e7 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DeliveryOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DeliveryOrderRepository.kt @@ -2,10 +2,12 @@ package com.ffii.fpsms.modules.deliveryOrder.entity import com.ffii.core.support.AbstractRepository import com.ffii.fpsms.modules.deliveryOrder.entity.models.DeliveryOrderInfo +import com.ffii.fpsms.modules.deliveryOrder.enums.DeliveryOrderStatus import com.ffii.fpsms.modules.master.entity.projections.SearchId import org.springframework.data.jpa.repository.Query import org.springframework.stereotype.Repository import java.io.Serializable +import java.time.LocalDateTime @Repository interface DeliveryOrderRepository : AbstractRepository { @@ -17,9 +19,15 @@ interface DeliveryOrderRepository : AbstractRepository { fun findAllByCodeAndDeletedIsFalse(code: String): List + fun findAllByShopNameAndDeletedIsFalse(shopName: String): List + fun findAllByStatusAndDeletedIsFalse(status: DeliveryOrderStatus): List + fun findByOrderDateBetweenAndDeletedIsFalse(start: LocalDateTime?, end: LocalDateTime?) : List + fun findAllByCodeContainsAndShopNameContainsAndStatusAndOrderDateBetween(code: String?, shopName: String?, status: DeliveryOrderStatus?, startDate: LocalDateTime?, endDate: LocalDateTime?) : List + fun findAllByCodeContainsAndShopNameContainsAndStatus(code: String?, shopName: String?, status: DeliveryOrderStatus?): List; + fun findAllBy() : List; } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/enums/DeliveryOrderEnum.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/enums/DeliveryOrderEnum.kt index 7c7f76f..3f919fb 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/enums/DeliveryOrderEnum.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/enums/DeliveryOrderEnum.kt @@ -3,5 +3,5 @@ package com.ffii.fpsms.modules.deliveryOrder.enums enum class DeliveryOrderStatus(val value: String) { PENDING("pending"), RECEIVING("receiving"), - COMPLETED("completed"); + COMPLETED("completed"), } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt index 498e99b..2f2c2d0 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt @@ -28,6 +28,8 @@ import com.ffii.fpsms.modules.pickOrder.service.PickOrderService import java.time.LocalDate import java.math.BigDecimal import com.ffii.fpsms.modules.master.web.models.MessageResponse +import java.time.LocalDateTime + @Service open class DeliveryOrderService( private val deliveryOrderRepository: DeliveryOrderRepository, @@ -82,6 +84,26 @@ open class DeliveryOrderService( return deliveryOrderRepository.findAllByCodeAndDeletedIsFalse(code); } + open fun searchByShopName(shopName: String) : List { + return deliveryOrderRepository.findAllByShopNameAndDeletedIsFalse(shopName); + } + + open fun searchByStatus(status: DeliveryOrderStatus): List { + return deliveryOrderRepository.findAllByStatusAndDeletedIsFalse(status); + } + + open fun searchBetweenOrderDate(start: LocalDateTime?, end: LocalDateTime?): List { + return deliveryOrderRepository.findByOrderDateBetweenAndDeletedIsFalse(start, end); + } + + open fun searchDO(code: String?, shopName: String?, status: DeliveryOrderStatus?, startDate: LocalDateTime?, endDate: LocalDateTime?):List { + if(status == null || startDate == null || endDate ==null){ + return deliveryOrderRepository.findAllBy(); + } + return deliveryOrderRepository.findAllByCodeContainsAndShopNameContainsAndStatusAndOrderDateBetween(code, shopName, status, startDate, endDate); + } + + open fun updateDeliveryOrderStatus(request: SaveDeliveryOrderStatusRequest): SaveDeliveryOrderResponse { val deliveryOrder = checkNotNull( diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt index 427b5b7..102b3f0 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt @@ -18,6 +18,8 @@ import com.ffii.fpsms.modules.deliveryOrder.web.models.DoDetailResponse import com.ffii.fpsms.modules.deliveryOrder.web.models.ReleaseDoRequest import com.ffii.fpsms.modules.master.web.models.MessageResponse import jakarta.validation.Valid +import java.time.LocalDateTime + @RequestMapping("/do") @RestController class DeliveryOrderController( @@ -34,10 +36,32 @@ class DeliveryOrderController( } @GetMapping("/search-code/{code}") - fun searchByCode(@PathVariable code: String): List{ + fun searchByCode(@PathVariable code: String): List { return deliveryOrderService.searchByCode(code); } + @GetMapping("/search-shopname/{shopName}") + fun searchByShopName(@PathVariable shopName: String): List { + return deliveryOrderService.searchByShopName(shopName); + } + + @GetMapping("/search-status/{status}") + fun searchByStatus(@PathVariable status: DeliveryOrderStatus): List { + return deliveryOrderService.searchByStatus(status); + } + + @GetMapping("/search-orderdate/{start}&{end}") + fun searchBetweenOrderDate(@PathVariable start: LocalDateTime?,@PathVariable end: LocalDateTime?): List { + return deliveryOrderService.searchBetweenOrderDate(start, end); + } + + @GetMapping("/search-DO/{code}&{shopName}&{status}&{startDate}&{endDate}") + fun searchDO(@PathVariable code: String?, @PathVariable shopName: String?, @PathVariable status: DeliveryOrderStatus?, @PathVariable startDate: LocalDateTime? , @PathVariable endDate: LocalDateTime?): List{ + return deliveryOrderService.searchDO(code, shopName, status, startDate, endDate); + } + + + @PostMapping("/update-status") fun updateDoStatus(@RequestBody request: SaveDeliveryOrderStatusRequest): SaveDeliveryOrderResponse { return deliveryOrderService.updateDeliveryOrderStatus(request);