diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt index c2085c3..581f8fe 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt @@ -17,6 +17,7 @@ import com.ffii.fpsms.modules.stock.entity.enum.InventoryLotLineStatus import com.ffii.fpsms.modules.pickOrder.enums.PickOrderLineStatus import java.time.LocalDateTime import com.ffii.core.support.JdbcDao +import com.ffii.fpsms.modules.jobOrder.web.model.JobOrderListForPrintQrCodeResponse import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanSubmitRequest import java.util.Optional import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanIssueRequest @@ -44,6 +45,9 @@ import com.ffii.fpsms.modules.jobOrder.web.model.PickOrderInfoResponse import com.ffii.fpsms.modules.jobOrder.web.model.JobOrderBasicInfoResponse import com.ffii.fpsms.modules.jobOrder.web.model.PickOrderLineWithLotsResponse import com.ffii.fpsms.modules.jobOrder.web.model.LotDetailResponse + +import com.ffii.fpsms.modules.stock.entity.enum.StockInLineStatus +import com.ffii.fpsms.modules.stock.entity.StockInLineRepository @Service open class JoPickOrderService( private val joPickOrderRepository: JoPickOrderRepository, @@ -64,7 +68,8 @@ open class JoPickOrderService( private val productProcessRepository: ProductProcessRepository, private val productProcessLineRepository: ProductProcessLineRepository, private val stockOutRepository: StockOutRepository, - private val jobOrderProcessRepository: JobOrderProcessRepository + private val jobOrderProcessRepository: JobOrderProcessRepository, + private val stockInLineRepository: StockInLineRepository ) { @@ -1300,6 +1305,50 @@ open fun getCompletedJobOrderPickOrdersWithCompletedSecondScan(): List { + println("=== getJobOrderListForPrintQrCode ===") + return try { + val jobOrders = jobOrderRepository.findAllByStatusIn(listOf(JobOrderStatus.COMPLETED)) + // Get all stockInLines and filter for "received" status and BOM type "半成品" + val allStockInLines = stockInLineRepository.findAll() + val stockInLines = allStockInLines.filter { + it.jobOrder != null && + it.status == "received" && + it.deleted == false && + it.jobOrder?.bom?.description == "半成品" + } + val result = mutableListOf() + + for (stockInLine in stockInLines) { + val jobOrder = jobOrders.find { it.id == stockInLine.jobOrder?.id } + if (jobOrder != null && jobOrder.bom?.description == "半成品") { + // Check if this job order is already in the result (to avoid duplicates) + val existing = result.find { + it.stockInLineId == stockInLine.id + } + + if (existing == null) { + val response = JobOrderListForPrintQrCodeResponse( + id = stockInLine.id!!, + code = jobOrder.code ?: "JO-${jobOrder.id}", + name = jobOrder.bom?.name ?: "", + reqQty = jobOrder.reqQty ?: BigDecimal.ZERO, + stockInLineId = stockInLine.id!!, + stockInLineQty = stockInLine.acceptedQty?.toDouble() ?: 0.0, + stockInLineStatus = stockInLine.status ?: "received", + finihedTime = jobOrder.planEnd ?: jobOrder.modified ?: LocalDateTime.now() + ) + result.add(response) + } + } + } + result + } catch (e: Exception) { + println("❌ Error in getJobOrderListForPrintQrCode: ${e.message}") + e.printStackTrace() + emptyList() + } + } open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List> { println("=== getCompletedJobOrderPickOrderLotDetails ===") println("pickOrderId: $pickOrderId") 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 5d8c50d..d70c7a4 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 @@ -206,7 +206,7 @@ open class JobOrderService( // 过滤掉 consumables 和 CMB 类型的物料 val nonConsumablesJobms = jobOrder.jobms.filter { jobm -> val itemType = jobm.item?.type?.lowercase() - itemType != "consumables" && itemType != "cmb" + itemType != "consumables" && itemType != "cmb"&& itemType != "nm" } if (nonConsumablesJobms.isEmpty()) { @@ -394,7 +394,7 @@ open class JobOrderService( } jobOrderRepository.save(jo) - val pols = jo.jobms.filter { it.item?.type != "CMB"&& it.item?.type != "consumables"}. + val pols = jo.jobms.filter { it.item?.type != "CMB"&& it.item?.type != "consumables" && it.item?.type != "NM"}. map { SavePickOrderLineRequest( itemId = it.item?.id, 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 index 67dd108..e519043 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt @@ -41,6 +41,7 @@ import com.ffii.fpsms.modules.jobOrder.entity.projections.JobOrderInfo import com.ffii.fpsms.modules.jobOrder.entity.projections.JobOrderInfoWithTypeName import com.ffii.fpsms.modules.jobOrder.web.model.ExportFGStockInLabelRequest + @RestController @RequestMapping("/jo") class JobOrderController( @@ -230,6 +231,10 @@ fun recordSecondScanIssue( fun getCompletedJobOrderPickOrders(): List> { return joPickOrderService.getCompletedJobOrderPickOrders() } + @GetMapping("/joForPrintQrCode") + fun getJoForPrintQrCode(): List { + return joPickOrderService.getJobOrderListForPrintQrCode() + } @GetMapping("/completed-job-order-pick-order-lot-details-completed-pick/{pickOrderId}") fun getCompletedJobOrderPickOrderLotDetailsForCompletedPick(@PathVariable pickOrderId: Long): List> { diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/CreateJobOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/CreateJobOrderRequest.kt index 3561e2d..8321250 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/CreateJobOrderRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/CreateJobOrderRequest.kt @@ -121,3 +121,13 @@ data class LotDetailResponse( ) +data class JobOrderListForPrintQrCodeResponse( + val id: Long, + val code: String, + val name: String, + val reqQty: BigDecimal, + val stockInLineId: Long, + val stockInLineQty: Double, + val stockInLineStatus: String, + val finihedTime: LocalDateTime, +) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetail.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetail.kt index 8f86375..efda5c8 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetail.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetail.kt @@ -33,5 +33,4 @@ open class EquipmentDetail : BaseEntity() { @Column(name = "equipmentTypeID") open var equipmentTypeId: Long? = null - } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetailRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetailRepository.kt index 52ccb92..26b25fa 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetailRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/EquipmentDetailRepository.kt @@ -12,5 +12,5 @@ interface EquipmentDetailRepository : AbstractRepository fun findByDescriptionAndDeletedIsFalse(description: String): EquipmentDetail?; fun findByEquipmentTypeIdAndDeletedFalse(equipmentTypeId: Long): List; - + fun findByEquipmentCode(equipmentCode: String): EquipmentDetail?; } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/projections/BomCombo.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/projections/BomCombo.kt index 344d859..6584d98 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/projections/BomCombo.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/projections/BomCombo.kt @@ -11,4 +11,6 @@ interface BomCombo { val label: String; val outputQty: BigDecimal; val outputQtyUom: String?; + @get:Value("#{target.description}") + val description: String?; } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt index c4ee669..565fc28 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt @@ -50,6 +50,7 @@ data class ProductProcessLineInfo( val operatorId: Long?, val operatorName: String?, val equipmentId: Long?, + val equipmentDetailId: Long?, val handlerId: Long?, val seqNo: Long?, val name: String?, diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt index e9a50d6..51830d6 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt @@ -45,6 +45,8 @@ import com.ffii.fpsms.modules.jobOrder.entity.JobTypeRepository import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import java.time.ZoneOffset import com.ffii.fpsms.modules.jobOrder.entity.JoPickOrderRepository +import com.ffii.fpsms.modules.jobOrder.enums.JoPickOrderStatus +import com.ffii.fpsms.modules.master.entity.UomConversionRepository @Service @Transactional open class ProductProcessService( @@ -68,6 +70,7 @@ open class ProductProcessService( private val jobTypeRepository: JobTypeRepository, private val pickOrderRepository: PickOrderRepository, private val joPickOrderRepository: JoPickOrderRepository, + private val uomConversionRepository: UomConversionRepository, ) { open fun findAll(pageable: Pageable): Page { @@ -603,6 +606,7 @@ open class ProductProcessService( operatorId = line.operator?.id?:0, operatorName = line.operator?.name?:"", equipmentId = line.equipment?.id?:0, + equipmentDetailId = line.equipmentDetailId?:0, handlerId = line.handler?.id?:0, seqNo = line.seqNo?:0, name = line.name?:"", @@ -637,12 +641,15 @@ open class ProductProcessService( jobOrderLines = bomMaterials.map { line -> val itemId = line.item?.id ?: 0L val stockQty = stockQtyMap[itemId]?.toInt() ?: 0 - val uom = line.uom - val shortUom = uom?.udfShortDesc ?: uom?.udfudesc ?: "" // 首先通过 bomId 和 itemId 找到 BomMaterial val bomMaterial = bom?.id?.let { bomId -> bomMaterialRepository.findByBomIdAndItemId(bomId, itemId) } + + // 使用 bom_material.uom_name 而不是关联的 uom 对象 + val uom = uomConversionRepository.findByCodeAndDeletedFalse(bomMaterial?.uomName?:"") + val uomName = uom?.udfShortDesc + val shortUom = uom?.udfShortDesc // 然后遍历 bomProcessIds 找到第一个匹配的 BomProcessMaterial val bomProcessMaterial = bomMaterial?.id?.let { bomMaterialId -> bomProcessIds.firstNotNullOfOrNull { bomProcessId -> @@ -663,8 +670,8 @@ open class ProductProcessService( itemName = line.item?.name?:"", reqQty = line.reqQty?.toInt() ?: 0, stockQty = stockQty, - uom = uom?.udfudesc ?: "", - shortUom = shortUom, + uom = uomName?:"", + shortUom = shortUom?:"", type = line.item?.type?: "", availableStatus = availableStatus, bomProcessId = bomProcessMaterial?.bomProcess?.id?:0, @@ -723,59 +730,36 @@ open class ProductProcessService( } open fun UpdateProductProcessLineOperatorIdOrEquipmentId(request: UpdateProductProcessLineOperatorIdOrEquipmentIdRequest): MessageResponse { val productProcessLine = productProcessLineRepository.findById(request.productProcessLineId).orElse(null) - /* - val equipmentId = request.equipmentId - val user = userRepository.findById(request.operatorId?:0L).orElse(null) - val bomProcess= bomProcessRepository.findById(productProcessLine?.bomProcess?.id?:0L).orElse(null) - val bomProcessEquipment=bomProcess?.equipment - if (equipmentId != null && user != null) { - // 检查 equipmentId 是否与 bomProcessEquipment 匹配 - if (equipmentId != bomProcessEquipment?.id) { - println("productProcessLine id${request.productProcessLineId}") - println("operator id${request.operatorId}") - println("user ${user?.id}") - println("bomProcess ${bomProcess?.id}") - println("not match equipment id${equipmentId} and ${bomProcessEquipment?.id}") - - // 返回错误响应 - return MessageResponse( - id = request.productProcessLineId, - code = "400", - name = "Equipment Validation Failed", - type = "error", - message = "Input Equipment ID($equipmentId) and BOM Process Equipment ID(${bomProcessEquipment?.id}) not match", - errorPosition = "equipmentId" - ) - } - } - if(equipmentId != null &&( equipmentId==bomProcessEquipment?.id)) { - - productProcessLine?.equipment = bomProcessEquipment - - productProcessLineRepository.save(productProcessLine) - } - else - { println("productProcessLine id${request.productProcessLineId}") - println("operator id${request?.operatorId}") - println("user ${user?.id}") - println("bomProcess ${bomProcess?.id}") - println("not match equipment id${equipmentId} and ${bomProcessEquipment?.id}") - - } - if(user != null) { - productProcessLine.operator = user - productProcessLineRepository.save(productProcessLine) - } - */ val equipmentTypeSubTypeEquipmentNo = request.equipmentTypeSubTypeEquipmentNo println("equipmentTypeSubTypeEquipmentNo ${equipmentTypeSubTypeEquipmentNo}") val staffNo = request.staffNo println("staffNo ${staffNo}") + if (staffNo.isNullOrBlank()) { + println("staffNo is null or blank") + return MessageResponse( + id = request.productProcessLineId, + code = "400", + name = "Staff No Required", + type = "error", + message = "Staff No is required", + errorPosition = "staffNo" + ) + } val user = userRepository.findByStaffNo(staffNo?:"").orElse(null) println("user ${user?.id}") - + if (user == null) { + println("User not found with staffNo: $staffNo") + return MessageResponse( + id = request.productProcessLineId, + code = "404", + name = "User Not Found", + type = "error", + message = "User not found with staffNo: $staffNo", + errorPosition = "staffNo" + ) + } val equipmentDetail = equipmentDetailRepository.findByCode(equipmentTypeSubTypeEquipmentNo?:"") println("equipmentDetail ${equipmentDetail?.id}") val equipmentId = equipmentDetail?.equipmentTypeId @@ -809,10 +793,10 @@ open class ProductProcessService( productProcessLine?.equipmentDetailId = equipmentDetail?.id productProcessLineRepository.save(productProcessLine) } - if(user != null) { + productProcessLine.operator = user productProcessLineRepository.save(productProcessLine) - } + return MessageResponse( id = null, @@ -826,61 +810,77 @@ open class ProductProcessService( open fun NewUpdateProductProcessLineOperatorIdOrEquipmentIdAndEquipmentDetail(request: NewUpdateProductProcessLineOperatorIdOrEquipmentIdAndEquipmentDetailRequest): MessageResponse { val productProcessLine = productProcessLineRepository.findById(request.productProcessLineId).orElse(null) - val equipmentDetail = equipmentDetailRepository.findByCode(request.EquipmentTypeSubTypeEquipmentNo) + val equipmentDetail = equipmentDetailRepository.findByEquipmentCode(request.equipmentCode) - val user = userRepository.findByName(request.Name?:"") + val user = userRepository.findByStaffNo(request.staffNo?:"").orElse(null) val bomProcess= bomProcessRepository.findById(productProcessLine?.bomProcess?.id?:0L).orElse(null) val bomProcessEquipment=bomProcess?.equipment - if (equipmentDetail != null && user != null) { - // 检查 equipmentId 是否与 bomProcessEquipment 匹配 - if (equipmentDetail.equipmentTypeId != bomProcessEquipment?.id) { - println("productProcessLine id${request.productProcessLineId}") - println("operator Name${request.Name}") - println("user ${user}") - println("bomProcess ${bomProcess?.id}") - println("not match equipment id${equipmentDetail.equipmentTypeId} and ${bomProcessEquipment?.id}") - - // 返回错误响应 - return MessageResponse( - id = request.productProcessLineId, - code = "400", - name = "Equipment Validation Failed", - type = "error", - message = "Input Equipment ID($equipmentDetail.equipmentTypeId ) and BOM Process Equipment ID(${bomProcessEquipment?.id}) not match", - errorPosition = "equipmentId" - ) - } - } - if(equipmentDetail?.equipmentTypeId != null &&( equipmentDetail.equipmentTypeId ==bomProcessEquipment?.id)) { + // ===== 校验区 ===== - val equipment = equipmentRepository.findById(equipmentDetail.equipmentTypeId).orElse(null) - productProcessLine?.equipment = equipment - productProcessLine?.equipmentDetailId = equipmentDetail.id - productProcessLineRepository.save(productProcessLine) - } - else - { println("productProcessLine id${request.productProcessLineId}") - println("operator Name${request?.Name}") - println("user ${user}") - println("bomProcess ${bomProcess?.id}") - println("not match equipment id${equipmentDetail?.equipmentTypeId} and ${bomProcessEquipment?.id}") - - } - if(user != null) { - //productProcessLine.operator = user.name - // productProcessLineRepository.save(productProcessLine) - } + // 情况:设备有 + 人空 → 不通过 + if (equipmentDetail != null && user == null) { + return MessageResponse( + id = request.productProcessLineId, + code = "400", + name = "User Required", + type = "error", + message = "Staff No is required when equipment is provided", + errorPosition = "staffNo" + ) + } + // 情况:设备有 + 人有 + 设备不匹配 → 不通过 + if (equipmentDetail != null && user != null && + equipmentDetail.equipmentTypeId != bomProcessEquipment?.id + ) { + println("not match equipment id${equipmentDetail.equipmentTypeId} and ${bomProcessEquipment?.id}") + return MessageResponse( + id = request.productProcessLineId, + code = "400", + name = "Equipment Validation Failed", + type = "error", + message = "Input Equipment ID(${equipmentDetail.equipmentTypeId}) and BOM Process Equipment ID(${bomProcessEquipment?.id}) not match", + errorPosition = "equipmentId" + ) + } + // 情况:设备空 + 人空 → 不通过(如你不需要这个,可以去掉或改成通过) + if (equipmentDetail == null && user == null) { return MessageResponse( - id = null, - code = null, - name = null, - type = null, - message = null, - errorPosition = null, + id = request.productProcessLineId, + code = "400", + name = "User Required", + type = "error", + message = "Staff No is required", + errorPosition = "staffNo" ) } + + // ===== 通过校验,开始更新 ===== + + // 设备有(且已通过匹配校验) → 更新 equipment / equipmentDetailId + if (equipmentDetail != null) { + val equipment = equipmentRepository.findById(equipmentDetail.equipmentTypeId!!).orElse(null) + productProcessLine?.equipment = equipment + productProcessLine?.equipmentDetailId = equipmentDetail.id + } + + // 人有(设备可以有也可以没有) → 更新 operator + if (user != null) { + productProcessLine?.operator = user + } + + productProcessLineRepository.save(productProcessLine) + + return MessageResponse( + id = null, + code = null, + name = null, + type = null, + message = null, + errorPosition = null, + ) +} open fun UpdateProductProcessLineHandlerId(request: UpdateProductProcessLineHandlerIdRequest): MessageResponse { val productProcessLine = productProcessLineRepository.findById(request.productProcessLineId).orElse(null) val handlerId = request.handlerId @@ -1081,7 +1081,7 @@ open class ProductProcessService( val stockInLine = jobOrder?.stockInLines?.firstOrNull() val stockInLineId = stockInLine?.id val pickOrder = pickOrderRepository.findAllByJobOrder_Id(jobOrder?.id?:0L).firstOrNull() - val joPickOrders = joPickOrderRepository.findByPickOrderId(pickOrder?.id?:0L).firstOrNull() + val joPickOrdersList = joPickOrderRepository.findByPickOrderId(pickOrder?.id?:0L) //val silHandlerId = stockInLine?.escalationLog?.firstOrNull { it.status == "pending" }?.handler?.id @@ -1091,13 +1091,21 @@ open class ProductProcessService( status = productProcesses.status.value, startTime = productProcesses.startTime, endTime = productProcesses.endTime, - matchStatus = joPickOrders?.matchStatus?.value?:"", + matchStatus = if (joPickOrdersList.isNotEmpty() && + joPickOrdersList.all { it.matchStatus == JoPickOrderStatus.completed }) { + "completed" + } else if (joPickOrdersList.any { it.matchStatus == JoPickOrderStatus.scanned }) { + "scanned" + } else { + "pending" + }, RequiredQty = jobOrder?.reqQty?.toInt() ?: 0, date = productProcesses.date, bomId = productProcesses.bom?.id, assignedTo = pickOrder?.assignTo?.id, itemName = productProcesses.item?.name, pickOrderId = pickOrder?.id, + pickOrderStatus = pickOrder?.status?.value, jobOrderId = productProcesses.jobOrder?.id, stockInLineId = stockInLineId, jobOrderCode = jobOrder?.code, diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt index 98e02bf..395fced 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt @@ -168,6 +168,10 @@ class ProductProcessController( fun demoupdate(@RequestBody request: UpdateProductProcessLineOperatorIdOrEquipmentIdRequest): MessageResponse { return productProcessService.UpdateProductProcessLineOperatorIdOrEquipmentId(request) } + @PostMapping("/Demo/NewUpdate") + fun demoNewUpdate(@RequestBody request: NewUpdateProductProcessLineOperatorIdOrEquipmentIdAndEquipmentDetailRequest): MessageResponse { + return productProcessService.NewUpdateProductProcessLineOperatorIdOrEquipmentIdAndEquipmentDetail(request) + } @PostMapping("/Demo/update/handler") fun demoupdatehandler(@RequestBody request: UpdateProductProcessLineHandlerIdRequest): MessageResponse { return productProcessService.UpdateProductProcessLineHandlerId(request) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt index 2fa8c04..9ef8e0c 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt @@ -9,8 +9,6 @@ data class SaveProductProcessRequest( ) data class UpdateProductProcessLineOperatorIdOrEquipmentIdRequest( val productProcessLineId: Long, - //val operatorId: Long?, - //val equipmentId: Long?, @JsonProperty("EquipmentType-SubType-EquipmentNo") val equipmentTypeSubTypeEquipmentNo: String?, val staffNo: String?, @@ -169,6 +167,7 @@ data class AllJoborderProductProcessInfoResponse( val jobOrderCode: String?, val assignedTo: Long?, val pickOrderId: Long?, + val pickOrderStatus: String?, val productProcessLineCount: Int, val FinishedProductProcessLineCount: Int, val stockInLineId: Long?, @@ -191,9 +190,8 @@ data class UpdateProductProcessLineStatusRequest( ) data class NewUpdateProductProcessLineOperatorIdOrEquipmentIdAndEquipmentDetailRequest( val productProcessLineId: Long, - val EquipmentTypeSubTypeEquipmentNo: String, + val equipmentCode: String, val staffNo: String?, - val Name: String?, ) data class SaveProductProcessIssueTimeRequest( val productProcessLineId: Long, 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 cf6bb1d..78e3f8d 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 @@ -47,8 +47,8 @@ interface StockInLineInfo { @get:Value("#{target.item?.type}") val itemType: String? val dnNo: String? - // val dnDate: LocalDateTime? -// val qcDecision: LocalDateTime? + @get:Value("#{target.jobOrder?.bom?.description}") + val bomDescription: String? @get:Value("#{target.escalationLog.^[status.value == 'pending']?.handler?.id}") val handlerId: Long? @get:Value("#{target.inventoryLot?.inventoryLotLines ?: new java.util.ArrayList()}")