@ -217,8 +217,8 @@
FORMAT(ppd.create_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.endDate}
FORMAT(ppd.create_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.endDate}
</if>
</if>
<!-- <if test="map.processId != null and map.processId != ''">
<!-- <if test="map.processId != null and map.processId != ''">
<!-- AND ppi.process_id = #{map.processId}
AND ppi.process_id = #{map.processId}
<!-- </if> -->
</if>-->
<if test= "map.machineId != null and map.machineId != ''" >
<if test= "map.machineId != null and map.machineId != ''" >
AND ppi.release_id = #{map.machineId}
AND ppi.release_id = #{map.machineId}
</if>
</if>
@ -321,7 +321,7 @@
),
),
ProcessStats AS (
ProcessStats AS (
-- 统计每个订单的工序进度信息, 仅统计已过滤的订单范围( UNION ALL 提升性能)
-- 统计每个订单的工序进度信息, 仅统计已过滤的订单范围( UNION ALL 提升性能)
SELECT
SELECT
ap.product_order_id,
ap.product_order_id,
ap.tenant_id,
ap.tenant_id,
COUNT(*) AS totalProcessCount,
COUNT(*) AS totalProcessCount,
@ -336,7 +336,7 @@
SUM(CASE WHEN ap.plan_status = '2' THEN ISNULL(ap.plan_amount - ap.complete_amount, 0) * ap.process_order ELSE 0 END) AS wipWeightedSum
SUM(CASE WHEN ap.plan_status = '2' THEN ISNULL(ap.plan_amount - ap.complete_amount, 0) * ap.process_order ELSE 0 END) AS wipWeightedSum
FROM (
FROM (
-- 半制品工序( prod_plan_info_2)
-- 半制品工序( prod_plan_info_2)
SELECT
SELECT
p2.product_order_id,
p2.product_order_id,
p2.tenant_id,
p2.tenant_id,
p2.process_id,
p2.process_id,
@ -349,11 +349,11 @@
LEFT JOIN prod_base_process_info pr2 ON pr2.process_id = p2.process_id
LEFT JOIN prod_base_process_info pr2 ON pr2.process_id = p2.process_id
INNER JOIN Orders ord ON ord.product_order_id = p2.product_order_id AND ord.tenant_id = p2.tenant_id
INNER JOIN Orders ord ON ord.product_order_id = p2.product_order_id AND ord.tenant_id = p2.tenant_id
WHERE p2.product_order_id IS NOT NULL
WHERE p2.product_order_id IS NOT NULL
UNION ALL
UNION ALL
-- 成型工序( prod_plan_info_3)
-- 成型工序( prod_plan_info_3)
SELECT
SELECT
p3.product_order_id,
p3.product_order_id,
p3.tenant_id,
p3.tenant_id,
p3.process_id,
p3.process_id,
@ -366,11 +366,11 @@
LEFT JOIN prod_base_process_info pr3 ON pr3.process_id = p3.process_id
LEFT JOIN prod_base_process_info pr3 ON pr3.process_id = p3.process_id
INNER JOIN Orders ord ON ord.product_order_id = p3.product_order_id AND ord.tenant_id = p3.tenant_id
INNER JOIN Orders ord ON ord.product_order_id = p3.product_order_id AND ord.tenant_id = p3.tenant_id
WHERE p3.product_order_id IS NOT NULL
WHERE p3.product_order_id IS NOT NULL
UNION ALL
UNION ALL
-- 硫化工序( prod_plan_info_4)
-- 硫化工序( prod_plan_info_4)
SELECT
SELECT
p4.product_order_id,
p4.product_order_id,
p4.tenant_id,
p4.tenant_id,
p4.process_id,
p4.process_id,
@ -406,18 +406,18 @@
-- 整体进度计算:已完成数量占比 + 在制品进度占比
-- 整体进度计算:已完成数量占比 + 在制品进度占比
CONCAT(
CONCAT(
CAST(
CAST(
CASE
CASE
WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0
WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0
THEN (
THEN (
-- 已完成数量占比
-- 已完成数量占比
(CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 +
(CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 +
-- 在制品进度占比:(在制数量/计划总数量) * (当前工序位置/总工序数)
-- 在制品进度占比:(在制数量/计划总数量) * (当前工序位置/总工序数)
(CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) *
(CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) *
(CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100
(CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100
)
)
WHEN o.plan_amount > 0
WHEN o.plan_amount > 0
THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100
THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100
ELSE 0
ELSE 0
END
END
AS DECIMAL(10,2)), '%'
AS DECIMAL(10,2)), '%'
) AS overallProgress,
) AS overallProgress,
@ -431,18 +431,18 @@
CAST(ISNULL(ps.wipWeightedSum, 0) AS DECIMAL(18,2)) AS wipWeightedSum,
CAST(ISNULL(ps.wipWeightedSum, 0) AS DECIMAL(18,2)) AS wipWeightedSum,
-- 数值型整体进度
-- 数值型整体进度
CAST(
CAST(
CASE
CASE
WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0
WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0
THEN (
THEN (
-- 已完成数量占比
-- 已完成数量占比
(CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 +
(CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 +
-- 在制品进度占比
-- 在制品进度占比
(CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) *
(CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) *
(CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100
(CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100
)
)
WHEN o.plan_amount > 0
WHEN o.plan_amount > 0
THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100
THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100
ELSE 0
ELSE 0
END
END
AS DECIMAL(10,2)) AS overallProgressNum
AS DECIMAL(10,2)) AS overallProgressNum
FROM prod_order_info o
FROM prod_order_info o
@ -547,4 +547,44 @@
</select>
</select>
<!-- 小时产量统计( 按扫描时间小时分桶, 来源于生产产出扫描表, 不依赖QC质检表) -->
<select id= "hourlyOutputByHour" resultType= "java.util.HashMap" >
SELECT
CONVERT(DATE, t.create_time) AS productionDate,
RIGHT('00' + CAST(DATEPART(HOUR, t.create_time) AS VARCHAR(2)), 2) + ':00' AS hourSlot,
CAST(COUNT(1) AS DECIMAL(18,4)) AS productionQuantity,
CAST(SUM(CASE WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 1 ELSE 0 END) AS DECIMAL(18,4)) AS qualifiedQuantity,
CAST(SUM(CASE WHEN t.scan_result IS NULL THEN 0 WHEN (UPPER(t.scan_result) IN ('OK','PASS') OR t.scan_result IN (N'通过')) THEN 0 ELSE 1 END) AS DECIMAL(18,4)) AS unqualifiedQuantity
FROM prod_output_scan_info t
LEFT JOIN ${planTableName} ppi
ON ppi.process_id = t.process_id
AND ppi.release_id = t.machine_id
AND t.create_time > = COALESCE(ppi.real_begin_time, ppi.plan_begin_time)
AND t.create_time < COALESCE(ppi.real_end_time, ppi.plan_end_time, DATEADD(day, 1, COALESCE(ppi.real_begin_time, ppi.plan_begin_time)))
LEFT JOIN base_material_info bmi ON bmi.material_id = t.materiel_id
<where >
<if test= "map.beginDate != null and map.beginDate != '' and map.endDate != null and map.endDate != ''" >
AND t.create_time > = CAST(#{map.beginDate} AS DATETIME)
AND t.create_time < DATEADD(day, 1, CAST(#{map.endDate} AS DATETIME))
</if>
<if test= "map.processId != null and map.processId != ''" >
AND t.process_id = #{map.processId}
</if>
<if test= "map.machineId != null and map.machineId != ''" >
AND t.machine_id = #{map.machineId}
</if>
<if test= "map.shiftId != null and map.shiftId != ''" >
AND ppi.shift_id = #{map.shiftId}
</if>
<if test= "map.classTeamId != null and map.classTeamId != ''" >
AND ppi.class_team_id = #{map.classTeamId}
</if>
<if test= "map.materialName != null and map.materialName != ''" >
AND bmi.material_name LIKE CONCAT('%', #{map.materialName}, '%')
</if>
</where>
GROUP BY CONVERT(DATE, t.create_time), DATEPART(HOUR, t.create_time)
ORDER BY productionDate, DATEPART(HOUR, t.create_time)
</select>
</mapper>
</mapper>