| @@ -721,51 +721,47 @@ fun searchMaterialStockOutTraceabilityReport( | |||||
| } else "" | } else "" | ||||
| val sql = """ | 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) | return jdbcDao.queryForList(sql, args) | ||||
| } | } | ||||