Browse Source

2026-04-23

优化
master
fengyuan_yang 2 months ago
parent
commit
a3fe71fe03
  1. 223
      src/main/resources/mapper/shopOrder/ProductionReportMapper.xml

223
src/main/resources/mapper/shopOrder/ProductionReportMapper.xml

@ -364,27 +364,44 @@
T.Orderno T.Orderno
</select> </select>
<select id="searchSfdcRollsReport" resultType="com.gaotao.modules.rollNoReview.data.SFDCRollsOutData"> <select id="searchSfdcRollsReport" resultType="com.gaotao.modules.rollNoReview.data.SFDCRollsOutData">
WITH LatestMaterial AS (
SELECT SELECT
A.site,
A.bu_no,
A.RollNo,
A.RollQty,
A.parent_roll_no,
A.parent_roll_type,
A.OrderNo,
A.CreatedOpsSeqNo,
S.S_ResourceID AS productionResourceID, -- 生产机台
A.CreatedOpsItemNo,
A.Createdby,
A.CreatedDate,
B.OrderNo as consumeOrderNo,
B.SeqNo as consumeSeqNo,
B.S_ResourceID as consumptionResourceID, -- 消耗机台
B.ItemNo as consumeItemNo,
B.StartDate as date1,
B.ReportDate as date2,
B.Reportedby,
B.HistType,
M.Site, M.StartFromRollNo, M.OrderNo, M.SeqNo, M.ItemNo,
M.StartDate, M.ReportDate, M.Reportedby, M.HistType, M.RollNo,
ROW_NUMBER() OVER (PARTITION BY M.Site, M.StartFromRollNo ORDER BY M.ReportDate DESC) AS rn
FROM SFDC_MaterialHist M WITH(NOLOCK)
WHERE M.site in (select site from AccessSite where userID = #{userName})
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND M.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(M.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(M.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND M.Reportedby like '%' + #{consumptionResourceID} + '%'
</if>
),
AggregatedReport AS (
SELECT
Site, Roll_No, Seq_No,
SUM(Good_Qty) AS Good_Qty,
SUM(Surface_Loss_Qty) AS Surface_Loss_Qty,
SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty,
SUM(Total_Qty) AS Total_Qty
FROM ProductionReport WITH(NOLOCK)
GROUP BY Site, Roll_No, Seq_No
)
SELECT
A.site, A.bu_no, A.RollNo, A.RollQty, A.parent_roll_no, A.parent_roll_type,
A.OrderNo, A.CreatedOpsSeqNo, A.Createdby AS productionResourceID,
A.CreatedOpsItemNo, A.Createdby, A.CreatedDate,
B.OrderNo as consumeOrderNo, B.SeqNo as consumeSeqNo, B.Reportedby as consumptionResourceID,
B.ItemNo as consumeItemNo, B.StartDate as date1, B.ReportDate as date2, B.HistType,
A.RollType, A.RollType,
CASE CASE
WHEN A.RollType = '删除卷' THEN '删除卷' WHEN A.RollType = '删除卷' THEN '删除卷'
@ -393,29 +410,20 @@
WHEN ISNULL(A.status, '*') = '*' THEN '未消耗' WHEN ISNULL(A.status, '*') = '*' THEN '未消耗'
ELSE '待入库' ELSE '待入库'
END AS finalStatus, END AS finalStatus,
A.partNo,
P.PartDescription AS partDesc,
P.Spec AS spec,
A.partNo, P.PartDescription AS partDesc, P.Spec AS spec,
ISNULL(R.Good_Qty, 0) as goodQty, ISNULL(R.Good_Qty, 0) as goodQty,
ISNULL(R.Surface_Loss_Qty, 0) as surfaceLossQty, ISNULL(R.Surface_Loss_Qty, 0) as surfaceLossQty,
ISNULL(R.Poor_Performance_Qty, 0) as poorPerformanceQty, ISNULL(R.Poor_Performance_Qty, 0) as poorPerformanceQty,
ISNULL(R.Defect_Qty, 0) as defectQty, ISNULL(R.Defect_Qty, 0) as defectQty,
ISNULL(R.Total_Qty, 0) as totalQty, ISNULL(R.Total_Qty, 0) as totalQty,
ROUND(ISNULL(R.YieldRate, 100), 2) as yieldRate
ROUND(ISNULL(100.0 * R.Good_Qty / NULLIF(R.Total_Qty, 0), 100), 2) as yieldRate
FROM SFDC_Rolls A WITH(NOLOCK) FROM SFDC_Rolls A WITH(NOLOCK)
INNER JOIN SOScheduledRouting S WITH(NOLOCK) ON A.Site = S.Site AND A.CreatedOpsSeqNo = S.SeqNo
LEFT JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
OUTER APPLY ( SELECT TOP (1) M.SITE, M.OrderNo, M.SeqNo, M.ItemNo, StartDate, ReportDate, Reportedby, HistType, StartFromRollNo, RollNo, sos.S_ResourceID
FROM SFDC_MaterialHist M WITH(NOLOCK)
INNER JOIN SOScheduledRouting SOS WITH(NOLOCK) ON M.Site = SOS.Site AND M.SeqNo = SOS.SeqNo
WHERE M.Site = A.Site AND M.OrderNo = A.OrderNo AND M.StartFromRollNo = A.RollNo AND M.HistType = '发料'
ORDER BY M.ReportDate DESC) B
LEFT JOIN ( SELECT Site, Order_No, Roll_No, Seq_No, SUM(Good_Qty) AS Good_Qty, SUM(Surface_Loss_Qty) AS Surface_Loss_Qty, SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty, SUM(Total_Qty) AS Total_Qty, (CASE WHEN SUM(Total_Qty) = 0 THEN NULL ELSE 100.0 * SUM(Good_Qty) / SUM(Total_Qty) END ) AS YieldRate
FROM ProductionReport WITH(NOLOCK) GROUP BY Site, Order_No, Roll_No, Seq_No) R ON R.Site = A.Site AND R.Roll_No = A.RollNo
INNER JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
LEFT JOIN LatestMaterial B ON A.Site = B.Site AND A.RollNo = B.StartFromRollNo AND B.rn = 1
LEFT JOIN AggregatedReport R ON A.Site = R.Site AND A.RollNo = R.Roll_No AND A.CreatedOpsSeqNo = R.Seq_No
<where> <where>
ISNULL(A.VirtualNewRollFlag,'Y') = 'N'
AND a.site in (select site from AccessSite where userID = #{userName})
A.site in (select site from AccessSite where userID = #{userName})
AND ISNULL(A.VirtualNewRollFlag, 'Y') = 'N'
<if test=" createdDate2 != null"> <if test=" createdDate2 != null">
AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2} AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2}
</if> </if>
@ -431,15 +439,6 @@
<if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0"> <if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0">
AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%' AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%'
</if> </if>
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND B.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(B.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(B.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" partNo != null and partNo != ''"> <if test=" partNo != null and partNo != ''">
AND A.partNo like '%'+#{partNo}+'%' AND A.partNo like '%'+#{partNo}+'%'
</if> </if>
@ -459,10 +458,7 @@
AND A.Createdby like '%' + #{createdby} + '%' AND A.Createdby like '%' + #{createdby} + '%'
</if> </if>
<if test=" productionResourceID != null and productionResourceID != ''"> <if test=" productionResourceID != null and productionResourceID != ''">
AND S.S_ResourceID like '%' + #{productionResourceID} + '%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND B.S_ResourceID like '%' + #{consumptionResourceID} + '%'
AND A.Createdby like '%' + #{productionResourceID} + '%'
</if> </if>
<if test=" finalStatus != null and finalStatus != ''"> <if test=" finalStatus != null and finalStatus != ''">
AND (CASE AND (CASE
@ -478,10 +474,42 @@
<if test="page != null and limit != null"> <if test="page != null and limit != null">
OFFSET #{page} ROWS FETCH NEXT #{limit} ROWS ONLY OFFSET #{page} ROWS FETCH NEXT #{limit} ROWS ONLY
</if> </if>
</select> </select>
<!-- 查询订单产出标签汇总数据 --> <!-- 查询订单产出标签汇总数据 -->
<select id="searchSfdcRollsReportSummary" resultType="com.gaotao.modules.rollNoReview.data.SFDCRollsOutData"> <select id="searchSfdcRollsReportSummary" resultType="com.gaotao.modules.rollNoReview.data.SFDCRollsOutData">
WITH LatestMaterial AS (
SELECT
M.Site, M.StartFromRollNo, M.OrderNo, M.SeqNo, M.ItemNo,
M.StartDate, M.ReportDate, M.Reportedby, M.HistType, M.RollNo,
ROW_NUMBER() OVER (PARTITION BY M.Site, M.StartFromRollNo ORDER BY M.ReportDate DESC) AS rn
FROM SFDC_MaterialHist M WITH(NOLOCK)
WHERE M.site in (select site from AccessSite where userID = #{userName})
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND M.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(M.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(M.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND M.Reportedby like '%' + #{consumptionResourceID} + '%'
</if>
),
AggregatedReport AS (
SELECT
Site, Roll_No, Seq_No,
SUM(Good_Qty) AS Good_Qty,
SUM(Surface_Loss_Qty) AS Surface_Loss_Qty,
SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty,
SUM(Total_Qty) AS Total_Qty
FROM ProductionReport WITH(NOLOCK)
GROUP BY Site, Roll_No, Seq_No
)
SELECT SELECT
ISNULL(SUM(A.RollQty), 0) AS rollQty, ISNULL(SUM(A.RollQty), 0) AS rollQty,
ISNULL(SUM(ISNULL(R.Good_Qty, 0)), 0) AS goodQty, ISNULL(SUM(ISNULL(R.Good_Qty, 0)), 0) AS goodQty,
@ -490,19 +518,12 @@
ISNULL(SUM(ISNULL(R.Defect_Qty, 0)), 0) AS defectQty, ISNULL(SUM(ISNULL(R.Defect_Qty, 0)), 0) AS defectQty,
ISNULL(SUM(ISNULL(R.Total_Qty, 0)), 0) AS totalQty ISNULL(SUM(ISNULL(R.Total_Qty, 0)), 0) AS totalQty
FROM SFDC_Rolls A WITH(NOLOCK) FROM SFDC_Rolls A WITH(NOLOCK)
INNER JOIN SOScheduledRouting S WITH(NOLOCK) ON A.Site = S.Site AND A.CreatedOpsSeqNo = S.SeqNo
LEFT JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
OUTER APPLY ( SELECT TOP (1) M.SITE, M.OrderNo, M.SeqNo, M.ItemNo, StartDate, ReportDate, Reportedby, HistType, StartFromRollNo, RollNo, sos.S_ResourceID
FROM SFDC_MaterialHist M WITH(NOLOCK)
INNER JOIN SOScheduledRouting SOS WITH(NOLOCK) ON M.Site = SOS.Site AND M.SeqNo = SOS.SeqNo
WHERE M.Site = A.Site AND M.OrderNo = A.OrderNo AND M.StartFromRollNo = A.RollNo AND M.HistType = '发料'
ORDER BY M.ReportDate DESC) B
LEFT JOIN ( SELECT Site, Order_No, Roll_No, Seq_No, SUM(Good_Qty) AS Good_Qty, SUM(Surface_Loss_Qty) AS Surface_Loss_Qty, SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty, SUM(Total_Qty) AS Total_Qty, (CASE WHEN SUM(Total_Qty) = 0 THEN NULL ELSE 100.0 * SUM(Good_Qty) / SUM(Total_Qty) END ) AS YieldRate
FROM ProductionReport WITH(NOLOCK) GROUP BY Site, Order_No, Roll_No, Seq_No) R ON R.Site = A.Site AND R.Roll_No = A.RollNo
INNER JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
LEFT JOIN LatestMaterial B ON A.Site = B.Site AND A.RollNo = B.StartFromRollNo AND B.rn = 1
LEFT JOIN AggregatedReport R ON A.Site = R.Site AND A.RollNo = R.Roll_No AND A.CreatedOpsSeqNo = R.Seq_No
<where> <where>
ISNULL(A.VirtualNewRollFlag,'Y') = 'N'
AND a.site in (select site from AccessSite where userID = #{userName})
A.site in (select site from AccessSite where userID = #{userName})
AND ISNULL(A.VirtualNewRollFlag, 'Y') = 'N'
<if test=" createdDate2 != null"> <if test=" createdDate2 != null">
AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2} AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2}
</if> </if>
@ -518,15 +539,6 @@
<if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0"> <if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0">
AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%' AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%'
</if> </if>
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND B.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(B.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(B.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" partNo != null and partNo != ''"> <if test=" partNo != null and partNo != ''">
AND A.partNo like '%'+#{partNo}+'%' AND A.partNo like '%'+#{partNo}+'%'
</if> </if>
@ -546,10 +558,7 @@
AND A.Createdby like '%' + #{createdby} + '%' AND A.Createdby like '%' + #{createdby} + '%'
</if> </if>
<if test=" productionResourceID != null and productionResourceID != ''"> <if test=" productionResourceID != null and productionResourceID != ''">
AND S.S_ResourceID like '%' + #{productionResourceID} + '%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND B.S_ResourceID like '%' + #{consumptionResourceID} + '%'
AND A.Createdby like '%' + #{productionResourceID} + '%'
</if> </if>
<if test=" finalStatus != null and finalStatus != ''"> <if test=" finalStatus != null and finalStatus != ''">
AND (CASE AND (CASE
@ -565,21 +574,46 @@
<!-- 查询订单产出标签总数 --> <!-- 查询订单产出标签总数 -->
<select id="searchSfdcRollsReportCount" resultType="int"> <select id="searchSfdcRollsReportCount" resultType="int">
SELECT COUNT(*)
FROM SFDC_Rolls A WITH(NOLOCK)
INNER JOIN SOScheduledRouting S WITH(NOLOCK) ON A.Site = S.Site AND A.CreatedOpsSeqNo = S.SeqNo
LEFT JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
OUTER APPLY ( SELECT TOP (1) M.SITE, M.OrderNo, M.SeqNo, M.ItemNo, StartDate, ReportDate, Reportedby, HistType, StartFromRollNo, RollNo, sos.S_ResourceID
WITH LatestMaterial AS (
SELECT
M.Site, M.StartFromRollNo, M.OrderNo, M.SeqNo, M.ItemNo,
M.StartDate, M.ReportDate, M.Reportedby, M.HistType, M.RollNo,
ROW_NUMBER() OVER (PARTITION BY M.Site, M.StartFromRollNo ORDER BY M.ReportDate DESC) AS rn
FROM SFDC_MaterialHist M WITH(NOLOCK) FROM SFDC_MaterialHist M WITH(NOLOCK)
INNER JOIN SOScheduledRouting SOS WITH(NOLOCK) ON M.Site = SOS.Site AND M.SeqNo = SOS.SeqNo
WHERE M.Site = A.Site AND M.OrderNo = A.OrderNo AND M.StartFromRollNo = A.RollNo AND M.HistType = '发料'
ORDER BY M.ReportDate DESC) B
LEFT JOIN ( SELECT Site, Order_No, Roll_No, Seq_No, SUM(Good_Qty) AS Good_Qty, SUM(Surface_Loss_Qty) AS Surface_Loss_Qty, SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty, SUM(Total_Qty) AS Total_Qty, (CASE WHEN SUM(Total_Qty) = 0 THEN NULL ELSE 100.0 * SUM(Good_Qty) / SUM(Total_Qty) END ) AS YieldRate
FROM ProductionReport WITH(NOLOCK) GROUP BY Site, Order_No, Roll_No, Seq_No) R ON R.Site = A.Site AND R.Roll_No = A.RollNo
WHERE M.site in (select site from AccessSite where userID = #{userName})
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND M.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(M.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(M.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND M.Reportedby like '%' + #{consumptionResourceID} + '%'
</if>
),
AggregatedReport AS (
SELECT
Site, Roll_No, Seq_No,
SUM(Good_Qty) AS Good_Qty,
SUM(Surface_Loss_Qty) AS Surface_Loss_Qty,
SUM(Poor_Performance_Qty) AS Poor_Performance_Qty,
SUM(Defect_Qty) AS Defect_Qty,
SUM(Total_Qty) AS Total_Qty
FROM ProductionReport WITH(NOLOCK)
GROUP BY Site, Roll_No, Seq_No
)
SELECT
COUNT(1)
FROM SFDC_Rolls A WITH(NOLOCK)
INNER JOIN part P WITH(NOLOCK) ON A.Site = P.Site AND A.PartNo = P.PartNo
LEFT JOIN LatestMaterial B ON A.Site = B.Site AND A.RollNo = B.StartFromRollNo AND B.rn = 1
LEFT JOIN AggregatedReport R ON A.Site = R.Site AND A.RollNo = R.Roll_No AND A.CreatedOpsSeqNo = R.Seq_No
<where> <where>
ISNULL(A.VirtualNewRollFlag,'Y') = 'N'
AND a.site in (select site from AccessSite where userID = #{userName})
A.site in (select site from AccessSite where userID = #{userName})
AND ISNULL(A.VirtualNewRollFlag, 'Y') = 'N'
<if test=" createdDate2 != null"> <if test=" createdDate2 != null">
AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2} AND CONVERT(varchar(10), a.CreatedDate, 120) >= #{createdDate2}
</if> </if>
@ -595,16 +629,6 @@
<if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0"> <if test=" createdOpsItemNo != null and createdOpsItemNo != '' and createdOpsItemNo != 0">
AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%' AND CAST(A.CreatedOpsItemNo AS VARCHAR) like '%'+CAST(#{createdOpsItemNo} AS VARCHAR)+'%'
</if> </if>
<if test=" consumeOrderNo != null and consumeOrderNo != ''">
AND B.OrderNo like '%'+#{consumeOrderNo}+'%'
</if>
<if test=" consumeSeqNo != null and consumeSeqNo != ''">
AND CAST(B.SeqNo AS VARCHAR) like '%'+#{consumeSeqNo}+'%'
</if>
<if test=" consumeItemNo != null and consumeItemNo != ''">
AND CAST(B.ItemNo AS VARCHAR) like '%'+#{consumeItemNo}+'%'
</if>
<if test=" partNo != null and partNo != ''"> <if test=" partNo != null and partNo != ''">
AND A.partNo like '%'+#{partNo}+'%' AND A.partNo like '%'+#{partNo}+'%'
</if> </if>
@ -624,10 +648,7 @@
AND A.Createdby like '%' + #{createdby} + '%' AND A.Createdby like '%' + #{createdby} + '%'
</if> </if>
<if test=" productionResourceID != null and productionResourceID != ''"> <if test=" productionResourceID != null and productionResourceID != ''">
AND S.S_ResourceID like '%' + #{productionResourceID} + '%'
</if>
<if test=" consumptionResourceID != null and consumptionResourceID != ''">
AND B.S_ResourceID like '%' + #{consumptionResourceID} + '%'
AND A.Createdby like '%' + #{productionResourceID} + '%'
</if> </if>
<if test=" finalStatus != null and finalStatus != ''"> <if test=" finalStatus != null and finalStatus != ''">
AND (CASE AND (CASE

Loading…
Cancel
Save