diff --git a/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt b/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt index 23a7231..bb09b19 100644 --- a/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt +++ b/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt @@ -721,51 +721,47 @@ fun searchMaterialStockOutTraceabilityReport( } else "" val sql = """ - SELECT - COALESCE(it.code, '') as itemNo, - COALESCE(it.name, '') as itemName, - COALESCE(uc.code, '') as unitOfMeasure, - COALESCE(sil.dnNo, '') as dnNo, - COALESCE(sil.lotNo, il.lotNo, '') as lotNo, - COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as stockInQty, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as iqcSampleQty, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(qr.failQty, 0), 2))) as iqcDefectQty, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(CASE - WHEN COALESCE(sil.acceptedQty, 0) > 0 - THEN ROUND((COALESCE(qr.failQty, 0) / sil.acceptedQty) * 100, 2) - ELSE 0 - END, 2))) as iqcDefectPercentage, - CASE - WHEN qr.qcPassed = true OR qr.qcPassed IS NULL THEN 'Accept' - ELSE 'Reject' - END as iqcResult, - COALESCE(qr.remarks, '') as iqcRemarks, - COALESCE(wh.code, '') as storeLocation, - COALESCE(sp_si.code, sp_po.code, '') as supplierID, - COALESCE(sp_si.name, sp_po.name, '') as supplierName, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalStockInQty, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcSampleQty, - TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(qr.failQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcDefectQty - FROM stock_in_line sil - LEFT JOIN stock_in si ON sil.stockInId = si.id - LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id - LEFT JOIN items it ON sil.itemId = it.id - LEFT JOIN item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true - LEFT JOIN uom_conversion uc ON iu.uomId = uc.id - LEFT JOIN qc_result qr ON sil.id = qr.stockInLineId - LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id - LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId - LEFT JOIN warehouse wh ON ill.warehouseId = wh.id - LEFT JOIN shop sp_si ON si.supplierId = sp_si.id - LEFT JOIN shop sp_po ON po.supplierId = sp_po.id - WHERE sil.deleted = false - $stockCategorySql - $itemCodeSql - $lastInDateStartSql - $lastInDateEndSql - ORDER BY it.code, sil.lotNo - """.trimIndent() + SELECT + COALESCE(it.code, '') as itemNo, + COALESCE(it.name, '') as itemName, + COALESCE(uc.code, '') as unitOfMeasure, + COALESCE(sil.dnNo, '') as dnNo, + COALESCE(sil.lotNo, il.lotNo, '') as lotNo, + COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as stockInQty, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as iqcSampleQty, + + -- ↓↓↓ 这四个/五个栏位改成不依赖 qc_result ↓↓↓ + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as iqcDefectQty, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as iqcDefectPercentage, + 'Accept' as iqcResult, -- 或 '' 看你报表需求 + '' as iqcRemarks, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as totalIqcDefectQty, + + COALESCE(wh.code, '') as storeLocation, + COALESCE(sp_si.code, sp_po.code, '') as supplierID, + COALESCE(sp_si.name, sp_po.name, '') as supplierName, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalStockInQty, + TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcSampleQty + -- 注意:这里已经不再有 totalIqcDefectQty 的 window function 了 + FROM stock_in_line sil + LEFT JOIN stock_in si ON sil.stockInId = si.id + LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id + LEFT JOIN items it ON sil.itemId = it.id + LEFT JOIN item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true + LEFT JOIN uom_conversion uc ON iu.uomId = uc.id + LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id + LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId + LEFT JOIN warehouse wh ON ill.warehouseId = wh.id + LEFT JOIN shop sp_si ON si.supplierId = sp_si.id + LEFT JOIN shop sp_po ON po.supplierId = sp_po.id + WHERE sil.deleted = false + $stockCategorySql + $itemCodeSql + $lastInDateStartSql + $lastInDateEndSql + ORDER BY it.code, sil.lotNo + """.trimIndent() return jdbcDao.queryForList(sql, args) }