diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt index 64b73e0..f3c2e48 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt @@ -1,6 +1,9 @@ package com.ffii.fpsms.modules.jobOrder.entity import com.ffii.core.support.AbstractRepository +import com.ffii.fpsms.modules.jobOrder.entity.projections.JobOrderInfo +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.Query import org.springframework.stereotype.Repository @@ -10,4 +13,6 @@ interface JobOrderRepository : AbstractRepository { select jo.code from JobOrder jo where jo.code like :prefix% order by jo.code desc limit 1 """) fun findLatestCodeByPrefix(prefix: String): String? + + fun findJobOrderInfoByCodeContainsAndBomNameContainsAndDeletedIsFalseOrderByIdDesc(code: String, bomName: String, pageable: Pageable): Page } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt new file mode 100644 index 0000000..27d46c6 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt @@ -0,0 +1,15 @@ +package com.ffii.fpsms.modules.jobOrder.entity.projections + +import org.springframework.beans.factory.annotation.Value +import java.math.BigDecimal + +interface JobOrderInfo { + val id: Long; + val code: String; + @get:Value("#{target.bom.name}") + val name: String; + val reqQty: BigDecimal; + @get:Value("#{target.bom.outputQtyUom}") + val uom: String; + val status: String; +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt index 1fa69a1..2f6f17b 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt @@ -1,12 +1,16 @@ package com.ffii.fpsms.modules.jobOrder.service +import com.ffii.core.response.RecordsRes import com.ffii.fpsms.modules.jobOrder.entity.JobOrder import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository +import com.ffii.fpsms.modules.jobOrder.entity.projections.JobOrderInfo import com.ffii.fpsms.modules.jobOrder.web.model.CreateJobOrderRequest +import com.ffii.fpsms.modules.jobOrder.web.model.SearchJobOrderInfoRequest import com.ffii.fpsms.modules.master.entity.ProductionScheduleLineRepository import com.ffii.fpsms.modules.master.service.BomService import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.user.service.UserService +import org.springframework.data.domain.PageRequest import org.springframework.stereotype.Service import java.time.LocalDate import java.time.LocalDateTime @@ -20,6 +24,19 @@ open class JobOrderService( val userService: UserService, val productionScheduleLineRepository: ProductionScheduleLineRepository, ) { + open fun allJobOrdersByPage(request: SearchJobOrderInfoRequest): RecordsRes { + val pageable = PageRequest.of(request.pageNum ?: 0, request.pageSize ?: 10); + + val response = jobOrderRepository.findJobOrderInfoByCodeContainsAndBomNameContainsAndDeletedIsFalseOrderByIdDesc( + code = request.code ?: "", + bomName = request.name ?: "", + pageable = pageable + ) + + val records = response.content + val total = response.totalElements + return RecordsRes(records, total.toInt()); + } open fun assignJobNo(): String { val suffixFormat = "%03d" val pattern = "yyyyMMdd" diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt new file mode 100644 index 0000000..c28dde5 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt @@ -0,0 +1,22 @@ +package com.ffii.fpsms.modules.jobOrder.web + +import com.ffii.core.response.RecordsRes +import com.ffii.fpsms.modules.jobOrder.entity.projections.JobOrderInfo +import com.ffii.fpsms.modules.jobOrder.service.JobOrderService +import com.ffii.fpsms.modules.jobOrder.web.model.SearchJobOrderInfoRequest +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.ModelAttribute +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/jo") +class JobOrderController( + private val jobOrderService: JobOrderService, +) { + + @GetMapping("/getRecordByPage") + fun allJobOrdersByPage(@ModelAttribute request: SearchJobOrderInfoRequest): RecordsRes { + return jobOrderService.allJobOrdersByPage(request); + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt new file mode 100644 index 0000000..c3c05cb --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt @@ -0,0 +1,8 @@ +package com.ffii.fpsms.modules.jobOrder.web.model + +data class SearchJobOrderInfoRequest( + val code: String?, + val name: String?, + val pageSize: Int?, + val pageNum: Int?, +) diff --git a/src/main/resources/db/changelog/changes/20250717_01_cyril/01_update_job_order_bom_material.sql b/src/main/resources/db/changelog/changes/20250717_01_cyril/01_update_job_order_bom_material.sql new file mode 100644 index 0000000..580b49d --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250717_01_cyril/01_update_job_order_bom_material.sql @@ -0,0 +1,14 @@ +-- liquibase formatted sql +-- changeset cyril:update_job_order_bom_material + +ALTER TABLE `job_order_bom_material` + DROP FOREIGN KEY `FK_JOBM_TO_SUGGESTED_PICK_LOT_ON_SUGGESTED_PICK_LOT_ID`; +ALTER TABLE `job_order_bom_material` + CHANGE COLUMN `suggestedPickLotId` `stockOutLineId` INT NULL DEFAULT NULL , + DROP INDEX `FK_JOBM_TO_SUGGESTED_PICK_LOT_ON_SUGGESTED_PICK_LOT_ID` , + ADD INDEX `FK_JOBM_TO_STOCK_OUT_LINE_ID` (`stockOutLineId` ASC) VISIBLE; +; +ALTER TABLE `job_order_bom_material` + ADD CONSTRAINT `FK_JOBM_TO_STOCK_OUT_LINE_ON_STOCK_OUT_LINE_ID` + FOREIGN KEY (`stockOutLineId`) + REFERENCES `stock_out_line` (`id`);