| @@ -1,6 +1,9 @@ | |||||
| package com.ffii.fpsms.modules.jobOrder.entity | package com.ffii.fpsms.modules.jobOrder.entity | ||||
| import com.ffii.core.support.AbstractRepository | 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.data.jpa.repository.Query | ||||
| import org.springframework.stereotype.Repository | import org.springframework.stereotype.Repository | ||||
| @@ -10,4 +13,6 @@ interface JobOrderRepository : AbstractRepository<JobOrder, Long> { | |||||
| select jo.code from JobOrder jo where jo.code like :prefix% order by jo.code desc limit 1 | select jo.code from JobOrder jo where jo.code like :prefix% order by jo.code desc limit 1 | ||||
| """) | """) | ||||
| fun findLatestCodeByPrefix(prefix: String): String? | fun findLatestCodeByPrefix(prefix: String): String? | ||||
| fun findJobOrderInfoByCodeContainsAndBomNameContainsAndDeletedIsFalseOrderByIdDesc(code: String, bomName: String, pageable: Pageable): Page<JobOrderInfo> | |||||
| } | } | ||||
| @@ -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; | |||||
| } | |||||
| @@ -1,12 +1,16 @@ | |||||
| package com.ffii.fpsms.modules.jobOrder.service | 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.JobOrder | ||||
| import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository | 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.CreateJobOrderRequest | ||||
| import com.ffii.fpsms.modules.jobOrder.web.model.SearchJobOrderInfoRequest | |||||
| import com.ffii.fpsms.modules.master.entity.ProductionScheduleLineRepository | import com.ffii.fpsms.modules.master.entity.ProductionScheduleLineRepository | ||||
| import com.ffii.fpsms.modules.master.service.BomService | import com.ffii.fpsms.modules.master.service.BomService | ||||
| import com.ffii.fpsms.modules.master.web.models.MessageResponse | import com.ffii.fpsms.modules.master.web.models.MessageResponse | ||||
| import com.ffii.fpsms.modules.user.service.UserService | import com.ffii.fpsms.modules.user.service.UserService | ||||
| import org.springframework.data.domain.PageRequest | |||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
| import java.time.LocalDate | import java.time.LocalDate | ||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| @@ -20,6 +24,19 @@ open class JobOrderService( | |||||
| val userService: UserService, | val userService: UserService, | ||||
| val productionScheduleLineRepository: ProductionScheduleLineRepository, | val productionScheduleLineRepository: ProductionScheduleLineRepository, | ||||
| ) { | ) { | ||||
| open fun allJobOrdersByPage(request: SearchJobOrderInfoRequest): RecordsRes<JobOrderInfo> { | |||||
| 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<JobOrderInfo>(records, total.toInt()); | |||||
| } | |||||
| open fun assignJobNo(): String { | open fun assignJobNo(): String { | ||||
| val suffixFormat = "%03d" | val suffixFormat = "%03d" | ||||
| val pattern = "yyyyMMdd" | val pattern = "yyyyMMdd" | ||||
| @@ -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<JobOrderInfo> { | |||||
| return jobOrderService.allJobOrdersByPage(request); | |||||
| } | |||||
| } | |||||
| @@ -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?, | |||||
| ) | |||||
| @@ -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`); | |||||