SELECT
qi.*,
pl.purchase_contract_number as purchase_contract_no
pot.work_order_no,
po_sales.sales_contract_no
FROM
quality_inspect qi
LEFT JOIN purchase_ledger pl ON pl.id = qi.purchase_ledger_id
LEFT JOIN production_product_main ppm ON qi.product_main_id = ppm.id
LEFT JOIN production_operation_task pot ON ppm.production_operation_task_id = pot.id
left join production_order po ON po.id = pot.production_order_id
left join (
select po2.id as order_id,
group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as sales_contract_no
from production_order po2
left join production_plan pp2
on find_in_set(pp2.id, replace(replace(replace(po2.production_plan_ids, '[', ''), ']', ''), ' ', '')) > 0
left join sales_ledger sl2 on sl2.id = pp2.sales_ledger_id
group by po2.id
) po_sales ON po_sales.order_id = po.id
WHERE
inspect_type=#{qualityInspect.inspectType}
AND qi.supplier like concat('%',#{qualityInspect.supplier},'%')
AND qi.customer like concat('%',#{qualityInspect.customer},'%')
AND qi.process like concat('%',#{qualityInspect.process},'%')
AND qi.product_name like concat('%',#{qualityInspect.productName},'%')
AND qi.check_time >= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
AND qi.check_time <= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
AND pl.purchase_contract_number like concat('%',#{qualityInspect.purchaseContractNo},'%')
AND pot.work_order_no like concat('%',#{qualityInspect.workOrderNo},'%')
AND po_sales.sales_contract_no like concat('%',#{qualityInspect.salesContractNo},'%')
ORDER BY qi.check_time DESC
SELECT
*
FROM quality_inspect
where
inspect_type=#{qualityInspect.inspectType}
AND supplier = #{qualityInspect.supplier}
AND customer = #{qualityInspect.customer}
AND process = #{qualityInspect.process}
AND product_name = #{qualityInspect.productName}
DELETE FROM quality_inspect
WHERE product_main_id IN
#{id}
SELECT CASE pp.product_name
WHEN '原材料' THEN 0
WHEN '半成品' THEN 1
WHEN '成品' THEN 2
END AS modelType,
IFNULL(SUM(qi.quantity), 0) AS totalCount,
IFNULL(SUM(CASE
WHEN qi.inspect_state = 1 THEN qi.quantity
ELSE 0
END), 0) AS completedCount
FROM product p
INNER JOIN product pp
ON p.parent_id = pp.id
LEFT JOIN product_model pm
ON pm.product_id = p.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
WHERE pp.product_name IN ('原材料', '半成品', '成品')
GROUP BY pp.product_name
SELECT t.modelType,
COALESCE(SUM(qi.quantity), 0) AS totalCount,
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1 THEN qi.quantity
ELSE 0
END
), 0) AS completedCount,
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.qualified_quantity
ELSE 0
END
), 0) AS qualifiedCount,
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.unqualified_quantity
ELSE 0
END
), 0) AS unqualifiedCount,
/* 完成率 */
IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
ROUND(
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1 THEN qi.quantity
ELSE 0
END
), 0)
/ SUM(qi.quantity) * 100, 2)
) AS completionRate,
/* 合格率 */
IF(COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1 THEN qi.quantity
ELSE 0
END
), 0) = 0, 0,
ROUND(
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.qualified_quantity
ELSE 0
END
), 0)
/
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1 THEN qi.quantity
ELSE 0
END
), 0) * 100, 2)
) AS passRate
FROM (SELECT 0 AS modelType
UNION ALL
SELECT 1
UNION ALL
SELECT 2) t
LEFT JOIN product p
ON 1 = 1
LEFT JOIN product pp
ON p.parent_id = pp.id
LEFT JOIN product_model pm
ON pm.product_id = p.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
AND (
(pp.product_name = '原材料' AND t.modelType = 0) OR
(pp.product_name = '半成品' AND t.modelType = 1) OR
(pp.product_name = '成品' AND t.modelType = 2)
)
GROUP BY t.modelType
ORDER BY t.modelType;
WITH RECURSIVE
months AS (SELECT 1 AS month_num
UNION ALL
SELECT month_num + 1
FROM months
WHERE month_num < 12),
types AS (SELECT 0 AS modelType
UNION ALL
SELECT 1
UNION ALL
SELECT 2),
base AS (SELECT m.month_num, t.modelType
FROM months m
CROSS JOIN types t)
SELECT CASE b.month_num
WHEN 1 THEN '一月'
WHEN 2 THEN '二月'
WHEN 3 THEN '三月'
WHEN 4 THEN '四月'
WHEN 5 THEN '五月'
WHEN 6 THEN '六月'
WHEN 7 THEN '七月'
WHEN 8 THEN '八月'
WHEN 9 THEN '九月'
WHEN 10 THEN '十月'
WHEN 11 THEN '十一月'
WHEN 12 THEN '十二月'
END AS month,
b.modelType,
/* 总数量 */
COALESCE(SUM(qi.quantity), 0) AS totalCount,
/* 已完成 */
COALESCE(SUM(
CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
), 0) AS completedCount,
/* 合格 */
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.qualified_quantity
ELSE 0
END
), 0) AS qualifiedCount,
/* 不合格 */
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.unqualified_quantity
ELSE 0
END
), 0) AS unqualifiedCount,
/* 完成率 */
IF(COALESCE(SUM(qi.quantity), 0) = 0, 0,
ROUND(
COALESCE(SUM(
CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
), 0) / SUM(qi.quantity) * 100, 2
)
) AS completionRate,
/* 合格率 */
IF(COALESCE(SUM(
CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
), 0) = 0, 0,
ROUND(
COALESCE(SUM(
CASE
WHEN qi.inspect_state = 1
THEN qi.qualified_quantity
ELSE 0
END
), 0)
/
COALESCE(SUM(
CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END
), 0) * 100, 2
)
) AS passRate
FROM base b
LEFT JOIN product p ON 1 = 1
LEFT JOIN product pp ON p.parent_id = pp.id
LEFT JOIN product_model pm ON pm.product_id = p.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
AND YEAR(qi.check_time) = #{year}
AND MONTH(qi.check_time) = b.month_num
AND (
(pp.product_name = '原材料' AND b.modelType = 0)
OR (pp.product_name = '半成品' AND b.modelType = 1)
OR (pp.product_name = '成品' AND b.modelType = 2)
)
GROUP BY b.month_num, b.modelType
ORDER BY b.month_num, b.modelType;
SELECT t.modelType,
COALESCE(SUM(
CASE
WHEN pp.product_name = '原材料' AND t.modelType = 0 THEN qi.quantity
WHEN pp.product_name = '半成品' AND t.modelType = 1 THEN qi.quantity
WHEN pp.product_name = '成品' AND t.modelType = 2 THEN qi.quantity
ELSE 0
END
), 0) AS totalCount,
COALESCE(SUM(
CASE
WHEN pp.product_name = '原材料' AND t.modelType = 0 THEN qi.qualified_quantity
WHEN pp.product_name = '半成品' AND t.modelType = 1 THEN qi.qualified_quantity
WHEN pp.product_name = '成品' AND t.modelType = 2 THEN qi.qualified_quantity
ELSE 0
END
), 0) AS qualifiedCount,
COALESCE(SUM(
CASE
WHEN pp.product_name = '原材料' AND t.modelType = 0 THEN qi.unqualified_quantity
WHEN pp.product_name = '半成品' AND t.modelType = 1 THEN qi.unqualified_quantity
WHEN pp.product_name = '成品' AND t.modelType = 2 THEN qi.unqualified_quantity
ELSE 0
END
), 0) AS unqualifiedCount
FROM (SELECT 0 AS modelType
UNION ALL
SELECT 1
UNION ALL
SELECT 2) t
LEFT JOIN product p ON 1 = 1
LEFT JOIN product pp ON p.parent_id = pp.id
LEFT JOIN product_model pm ON pm.product_id = p.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
AND YEAR(qi.check_time) = #{year}
AND qi.inspect_state = 1
GROUP BY t.modelType
ORDER BY t.modelType;
WITH RECURSIVE months AS (SELECT 1 AS month_num
UNION ALL
SELECT month_num + 1
FROM months
WHERE month_num < 12)
SELECT CASE m.month_num
WHEN 1 THEN '一月'
WHEN 2 THEN '二月'
WHEN 3 THEN '三月'
WHEN 4 THEN '四月'
WHEN 5 THEN '五月'
WHEN 6 THEN '六月'
WHEN 7 THEN '七月'
WHEN 8 THEN '八月'
WHEN 9 THEN '九月'
WHEN 10 THEN '十月'
WHEN 11 THEN '十一月'
WHEN 12 THEN '十二月'
END AS month,
/* 原材料 */
COALESCE(SUM(
CASE
WHEN pp.product_name = '原材料'
THEN qi.quantity
ELSE 0
END
), 0) AS rawMaterialCount,
/* 半成品 */
COALESCE(SUM(
CASE
WHEN pp.product_name = '半成品'
THEN qi.quantity
ELSE 0
END
), 0) AS processCount,
/* 成品 */
COALESCE(SUM(
CASE
WHEN pp.product_name = '成品'
THEN qi.quantity
ELSE 0
END
), 0) AS outgoingCount
FROM months m
LEFT JOIN product p ON 1 = 1
LEFT JOIN product pp ON p.parent_id = pp.id
LEFT JOIN product_model pm ON pm.product_id = p.id
LEFT JOIN quality_inspect qi
ON qi.product_model_id = pm.id
AND qi.inspect_state = 1
AND YEAR(qi.check_time) = #{year}
AND MONTH(qi.check_time) = m.month_num
GROUP BY m.month_num
ORDER BY m.month_num;
WITH parameter_counts AS (SELECT qip.parameter_item AS name,
COUNT(*) AS count
FROM quality_inspect_param qip
JOIN quality_inspect qi
ON qip.inspect_id = qi.id
JOIN product p
ON qi.product_id = p.id
JOIN product pp
ON p.parent_id = pp.id
WHERE qi.inspect_state = 1
AND (
(#{modelType} = 1 AND pp.product_name = '原材料')
OR (#{modelType} = 2 AND pp.product_name = '半成品')
OR (#{modelType} = 3 AND pp.product_name = '成品')
)
GROUP BY qip.parameter_item),
ranked AS (SELECT name,
count,
ROW_NUMBER() OVER (ORDER BY count DESC) AS rn
FROM parameter_counts),
total AS (SELECT SUM(count) AS total_count
FROM parameter_counts)
SELECT name,
count,
CASE
WHEN (SELECT total_count FROM total) = 0 THEN 0
ELSE ROUND(count / (SELECT total_count FROM total) * 100, 2)
END AS percentage
FROM (SELECT name, count, rn
FROM ranked
WHERE rn <= 4
UNION ALL
SELECT '其他检测' AS name,
SUM(count) AS count,
5 AS rn
FROM ranked
WHERE rn > 4
HAVING SUM(count) > 0) t
ORDER BY rn;
FROM quality_inspect qi
INNER JOIN production_product_main ppm ON qi.product_main_id = ppm.id
LEFT JOIN (
SELECT production_product_main_id,
CAST(SUM(IFNULL(scrap_qty, 0)) AS DECIMAL(18,4)) AS scrapCount
FROM production_product_output
GROUP BY production_product_main_id
) ppo ON ppo.production_product_main_id = ppm.id
LEFT JOIN (
SELECT inspect_id,
CAST(SUM(CASE WHEN deal_type IN (0, 1) THEN IFNULL(quantity, 0) ELSE 0 END) AS DECIMAL(18,4)) AS reworkCount
FROM quality_unqualified
WHERE inspect_state = 1
GROUP BY inspect_id
) qu ON qu.inspect_id = qi.id
WHERE qi.inspect_type IN (1, 2)
AND qi.inspect_state = 1
AND qi.product_main_id IS NOT NULL
SELECT ppm.user_id AS dimensionId,
COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('用户', ppm.user_id)) AS dimensionName,
CAST(SUM(IFNULL(qi.quantity, 0)) AS DECIMAL(18,4)) AS totalCount,
CAST(SUM(IFNULL(qi.qualified_quantity, 0)) AS DECIMAL(18,4)) AS qualifiedCount,
CAST(SUM(IFNULL(qi.unqualified_quantity, 0)) AS DECIMAL(18,4)) AS unqualifiedCount,
CAST(SUM(IFNULL(qu.reworkCount, 0)) AS DECIMAL(18,4)) AS reworkCount,
CAST(SUM(IFNULL(ppo.scrapCount, 0)) AS DECIMAL(18,4)) AS scrapCount,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
ROUND(SUM(IFNULL(qi.qualified_quantity, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS passRate,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
ROUND(SUM(IFNULL(qu.reworkCount, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS reworkRate,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0)) = 0, 0,
ROUND(SUM(IFNULL(ppo.scrapCount, 0)) / (SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0))) * 100, 2)) AS DECIMAL(18,2)) AS scrapRate
LEFT JOIN sys_user su ON su.user_id = ppm.user_id
GROUP BY ppm.user_id, COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('用户', ppm.user_id))
ORDER BY passRate DESC, totalCount DESC, dimensionId ASC
SELECT ppm.user_id AS dimensionId,
COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('班组人员', ppm.user_id)) AS dimensionName,
CAST(SUM(IFNULL(qi.quantity, 0)) AS DECIMAL(18,4)) AS totalCount,
CAST(SUM(IFNULL(qi.qualified_quantity, 0)) AS DECIMAL(18,4)) AS qualifiedCount,
CAST(SUM(IFNULL(qi.unqualified_quantity, 0)) AS DECIMAL(18,4)) AS unqualifiedCount,
CAST(SUM(IFNULL(qu.reworkCount, 0)) AS DECIMAL(18,4)) AS reworkCount,
CAST(SUM(IFNULL(ppo.scrapCount, 0)) AS DECIMAL(18,4)) AS scrapCount,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
ROUND(SUM(IFNULL(qi.qualified_quantity, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS passRate,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
ROUND(SUM(IFNULL(qu.reworkCount, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS reworkRate,
CAST(IF(SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0)) = 0, 0,
ROUND(SUM(IFNULL(ppo.scrapCount, 0)) / (SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0))) * 100, 2)) AS DECIMAL(18,2)) AS scrapRate
LEFT JOIN sys_user su ON su.user_id = ppm.user_id
GROUP BY ppm.user_id, COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('班组人员', ppm.user_id))
ORDER BY passRate DESC, totalCount DESC, dimensionId ASC