From 3e144b2eb8fc9447d2d092edb71db533d12abc52 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 24 九月 2026 19:06:39 +0800
Subject: [PATCH] feat(生产核算): 新增大类「中提琴」并打通工资/核算折算
---
src/main/resources/mapper/quality/QualityInspectMapper.xml | 72 +++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 1 deletions(-)
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index ed01cad..74b0ef3 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -10,7 +10,8 @@
</when>
<otherwise>
pot.work_order_no,
- po_sales.sales_contract_no
+ po_sales.sales_contract_no,
+ ppm.product_no as report_no
</otherwise>
</choose>
FROM
@@ -59,6 +60,9 @@
</if>
<if test="qualityInspect.workOrderNo != null and qualityInspect.workOrderNo != '' ">
AND pot.work_order_no like concat('%',#{qualityInspect.workOrderNo},'%')
+ </if>
+ <if test="qualityInspect.reportNo != null and qualityInspect.reportNo != '' ">
+ AND ppm.product_no like concat('%',#{qualityInspect.reportNo},'%')
</if>
<if test="qualityInspect.salesContractNo != null and qualityInspect.salesContractNo != '' ">
AND po_sales.sales_contract_no like concat('%',#{qualityInspect.salesContractNo},'%')
@@ -469,5 +473,71 @@
</select>
+ <sql id="personGroupRateJoin">
+ 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
+ </sql>
+
+ <sql id="personGroupRateWhere">
+ WHERE qi.inspect_type IN (1, 2)
+ AND qi.inspect_state = 1
+ AND qi.product_main_id IS NOT NULL
+ </sql>
+
+ <select id="getPersonRateStatistics" resultType="com.ruoyi.quality.dto.QualityPersonGroupRateDto">
+ 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
+ <include refid="personGroupRateJoin"/>
+ LEFT JOIN sys_user su ON su.user_id = ppm.user_id
+ <include refid="personGroupRateWhere"/>
+ 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>
+
+ <select id="getGroupRateStatistics" resultType="com.ruoyi.quality.dto.QualityPersonGroupRateDto">
+ 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
+ <include refid="personGroupRateJoin"/>
+ LEFT JOIN sys_user su ON su.user_id = ppm.user_id
+ <include refid="personGroupRateWhere"/>
+ 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>
+
</mapper>
--
Gitblit v1.9.3