You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

4815 lines
233 KiB

using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using NFine.Code;
using NFine.Data.Extensions;
using NFine.Domain._03_Entity.SRM;
using NFine.Repository;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Common;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using NFine.Application.Entity;
using NFine.Application.Models;
using NFine.Application.WMS;
using System.Web.UI.WebControls;
using System.Net.NetworkInformation;
using System.Collections;
using System.Xml;
using NFine.Domain._03_Entity.WMS;
namespace NFine.Application.KBSWMS
{
public class ICSInspectionReportsApp : RepositoryFactory<ICSVendor>
{
public static DataTable Invmes = new DataTable();
#region
/// <summary>
/// 月度一次检验合格率
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public string GetPassFirstTime(string queryJson)
{
try
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
List<PassFirstTimeModel> passFirstTimeModel = new List<PassFirstTimeModel>();
PassFirstTimeModel passFirstTimeModel1 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel2 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel3 = new PassFirstTimeModel();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
var firstDayofYear = new DateTime(year, 1, 1).ToString("yyyy-MM-dd");
var firstDayofNextYear = new DateTime(year+1, 1, 1).ToString("yyyy-MM-dd");
#region [SQL]
#region fistNGsql 一次不良数量
string fistNGsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
) b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 ";
#endregion
#region IncomingMterialssql 来料数量
string incomingMterialssql = $@"SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ1
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ2
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
";
#endregion
#region 复判ng sencondNgsql
string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.SecondNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(SecondNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 待判中 underReRudgmentsql
string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#endregion
var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
var dt2 = SqlHelper.CmdExecuteDataTable(fistNGsql);
var dt3 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
var dt4 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
passFirstTimeModel1.Decomposition1 = "TOTAL(一次检验合格率)";
passFirstTimeModel2.Decomposition1 = "不良率(对外改善)";
passFirstTimeModel3.Decomposition1 = "复判合格率(对内改善)";
passFirstTimeModel1.Decomposition2 = "";
passFirstTimeModel2.Decomposition2 = "";
passFirstTimeModel3.Decomposition2 = "";
var data = PassCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1, dt2, dt3, dt4);
#region 周数据
passFirstTimeModel1.Week1 = data["Week1"].V1;
passFirstTimeModel3.Week1 = data["Week1"].V2;
passFirstTimeModel2.Week1 = data["Week1"].V3;
passFirstTimeModel1.Week2 = data["Week2"].V1;
passFirstTimeModel3.Week2 = data["Week2"].V2;
passFirstTimeModel2.Week2 = data["Week2"].V3;
passFirstTimeModel1.Week3 = data["Week3"].V1;
passFirstTimeModel3.Week3 = data["Week3"].V2;
passFirstTimeModel2.Week3 = data["Week3"].V3;
passFirstTimeModel1.Week4 = data["Week4"].V1;
passFirstTimeModel3.Week4 = data["Week4"].V2;
passFirstTimeModel2.Week4 = data["Week4"].V3;
passFirstTimeModel1.Week5 = data["Week5"].V1;
passFirstTimeModel3.Week5 = data["Week5"].V2;
passFirstTimeModel2.Week5 = data["Week5"].V3;
passFirstTimeModel1.Week6 = data["Week6"].V1;
passFirstTimeModel3.Week6 = data["Week6"].V2;
passFirstTimeModel2.Week6 = data["Week6"].V3;
#endregion
#region 月数据
passFirstTimeModel1.Month1 = data["Month1"].V1;
passFirstTimeModel3.Month1 = data["Month1"].V2;
passFirstTimeModel2.Month1 = data["Month1"].V3;
passFirstTimeModel1.Month2 = data["Month2"].V1;
passFirstTimeModel3.Month2 = data["Month2"].V2;
passFirstTimeModel2.Month2 = data["Month2"].V3;
passFirstTimeModel1.Month3 = data["Month3"].V1;
passFirstTimeModel3.Month3 = data["Month3"].V2;
passFirstTimeModel2.Month3 = data["Month3"].V3;
passFirstTimeModel1.Month4 = data["Month4"].V1;
passFirstTimeModel3.Month4 = data["Month4"].V2;
passFirstTimeModel2.Month4 = data["Month4"].V3;
passFirstTimeModel1.Month5 = data["Month5"].V1;
passFirstTimeModel3.Month5 = data["Month5"].V2;
passFirstTimeModel2.Month5 = data["Month5"].V3;
passFirstTimeModel1.Month6 = data["Month6"].V1;
passFirstTimeModel3.Month6 = data["Month6"].V2;
passFirstTimeModel2.Month6 = data["Month6"].V3;
passFirstTimeModel1.Month7 = data["Month7"].V1;
passFirstTimeModel3.Month7 = data["Month7"].V2;
passFirstTimeModel2.Month7 = data["Month7"].V3;
passFirstTimeModel1.Month8 = data["Month8"].V1;
passFirstTimeModel3.Month8 = data["Month8"].V2;
passFirstTimeModel2.Month8 = data["Month8"].V3;
passFirstTimeModel1.Month9 = data["Month9"].V1;
passFirstTimeModel3.Month9 = data["Month9"].V2;
passFirstTimeModel2.Month9 = data["Month9"].V3;
passFirstTimeModel1.Month10 = data["Month10"].V1;
passFirstTimeModel3.Month10 = data["Month10"].V2;
passFirstTimeModel2.Month10 = data["Month10"].V3;
passFirstTimeModel1.Month11 = data["Month11"].V1;
passFirstTimeModel3.Month11 = data["Month11"].V2;
passFirstTimeModel2.Month11 = data["Month11"].V3;
passFirstTimeModel1.Month12 = data["Month12"].V1;
passFirstTimeModel3.Month12 = data["Month12"].V2;
passFirstTimeModel2.Month12 = data["Month12"].V3;
#endregion
#region 汇总
passFirstTimeModel1.MonthlyCumulative = data["MonthlyCumulative"].V1;
passFirstTimeModel3.MonthlyCumulative = data["MonthlyCumulative"].V2;
passFirstTimeModel2.MonthlyCumulative = data["MonthlyCumulative"].V3;
passFirstTimeModel1.AnnualAccumulation = data["AnnualAccumulation"].V1;
passFirstTimeModel3.AnnualAccumulation = data["AnnualAccumulation"].V2;
passFirstTimeModel2.AnnualAccumulation = data["AnnualAccumulation"].V3;
#endregion
passFirstTimeModel.Add(passFirstTimeModel1);
passFirstTimeModel.Add(passFirstTimeModel2);
passFirstTimeModel.Add(passFirstTimeModel3);
return passFirstTimeModel.ToJson();
}
catch (Exception ex)
{
return ex.Message;
}
}
public DataTable ExportAll1(string DateNow)
{
string date = DateNow;
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysMonth = dates.ToString("MM");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
var firstDayofYear = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayofNextYear = new DateTime(dates.Year + 1, 1, 1).ToString("yyyy-MM-dd");
#region [SQL]
//获取传递的年份和月份
#region [SQL]
#region fistNGsql 一次不良数量
string fistNGsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
) b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 ";
#endregion
#region IncomingMterialssql 来料数量
string incomingMterialssql = $@"SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ1
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ2
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
";
#endregion
#region 复判ng sencondNgsql
string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.SecondNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(SecondNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 待判中 underReRudgmentsql
string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#endregion
var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
var dt2 = SqlHelper.CmdExecuteDataTable(fistNGsql);
var dt3 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
var dt4 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
// 创建一个新的 DataTable
DataTable table = new DataTable();
// 添加列到 DataTable
table.Columns.Add("分解指标", typeof(string));
DataRow row1 = table.NewRow();
DataRow row2 = table.NewRow();
DataRow row3 = table.NewRow();
row1["分解指标"] = "TOTAL(一次检验合格率)";
row2["分解指标"] = "不良率(对外改善)";
row3["分解指标"] = "复判合格率(对内改善)";
var data = PassCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1, dt2, dt3, dt4);
// 添加月份和周次的列
string[] weeksInJanuary = { $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周" };
for (int j = 0; j < weeksInJanuary.Length; j++)
{
string week = weeksInJanuary[j];
int i = j + 1;
table.Columns.Add(week, typeof(string));
row1[week] = data["Week" + i].V1 + "%";
row2[week] = data["Week" + i].V3 + "%";
row3[week] = data["Week" + i].V2 + "%";
}
table.Columns.Add("当月累计", typeof(string));
row1["当月累计"] = data["MonthlyCumulative"].V1 + "%";
row2["当月累计"] = data["MonthlyCumulative"].V3 + "%";
row3["当月累计"] = data["MonthlyCumulative"].V2 + "%";
// 添加月份的列
string[] months = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
for (int j = 0; j < months.Length; j++)
{
string month = months[j];
int i = j + 1;
table.Columns.Add(month, typeof(string));
row1[month] = data["Month" + i].V1 + "%";
row2[month] = data["Month" + i].V3 + "%";
row3[month] = data["Month" + i].V2 + "%";
}
table.Columns.Add("年度累计", typeof(string));
row1["年度累计"] = data["AnnualAccumulation"].V1+"%";
row2["年度累计"] = data["AnnualAccumulation"].V3+"%";
row3["年度累计"] = data["AnnualAccumulation"].V2 + "%";
table.Rows.Add(row1);
table.Rows.Add(row2);
table.Rows.Add(row3);
return table;
#endregion
}
private Dictionary<string,dynamic> PassCount(List<string> weeks,
DataTable dt1, DataTable dt2, DataTable dt3, DataTable dt4)
{
Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
foreach (var item in weeks)
{
decimal tmp1 = dt1.Rows[0][item].ToDecimal();
decimal tmp2 = dt2.Rows[0][item].ToDecimal();
decimal tmp3 = dt3.Rows[0][item].ToDecimal();
decimal tmp4 = dt4.Rows[0][item].ToDecimal();
decimal v1 = tmp1 == 0 ? 0 : Math.Round((tmp1 - tmp2) / tmp1 * 100, 1);
decimal v2 = tmp1==0?0:(tmp1 - tmp4) == 0 ? 0 : Math.Round((tmp2 - tmp3) / (tmp1 - tmp4) * 100, 1);
decimal v3 = tmp1 == 0 ? 0 : 100 - v1- v2;
result.Add(item,new {
V1 = v1,
V2 = v3,
V3 = v2
});
}
return result;
}
private decimal Count(string a, string b)
{
var x = a.ToDecimal();
if (x == 0)
return 0;
return Math.Round((x - b.ToDecimal()) /x * 100, 1);
}
#endregion
#region
/// <summary>
/// 对外改善异常追踪表
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetPassFirstTime2(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd") ;
var WYear= new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"
SELECT DISTINCT COUNT(*) AS GS, BRGDesc,A.BadReasonDesc,'周'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1) AS ZB
INTO #Table1 FROM (SELECT DISTINCT
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--不良原因
BLFL.BadDesc,
a.IQCHeaderTime,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
UNION ALL
SELECT DISTINCT
'' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
'' SFJA,'' CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '编码规则', ''),ISNULL(D.ASNCode,E.OASNCode),F.BatchCode,
ISNULL(D.MUSER,E.MUSER),ISNULL(D.MUSERName,E.MUSERName),FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc<>'复判NG' AND A.SFJA='是' AND A.BadReasonDesc IS NOT NULL
AND CHUJIANSHIJIAN BETWEEN '{0}' AND '{1}'
GROUP BY BRGDesc,A.BadReasonDesc,CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)
SELECT DISTINCT COUNT(*) AS GS, BRGDesc,A.BadReasonDesc,'月'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS ZB
INTO #MothTable1 FROM (SELECT DISTINCT
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--不良原因
BLFL.BadDesc,
a.IQCHeaderTime,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
UNION ALL
SELECT DISTINCT
'' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
'' SFJA,''CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '编码规则', ''),ISNULL(D.ASNCode,E.OASNCode),F.BatchCode,
ISNULL(D.MUSER,E.MUSER),ISNULL(D.MUSERName,E.MUSERName),FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc<>'复判NG' AND A.SFJA='是' AND A.BadReasonDesc IS NOT NULL
AND CHUJIANSHIJIAN BETWEEN '{2}' AND '{3}'
GROUP BY BRGDesc,A.BadReasonDesc, DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(GS) AS HZcount,BRGDesc INTO #Table2 FROM #Table1 GROUP BY BRGDesc
SELECT SUM(GS) AS HZcount,BRGDesc INTO #MothTable2 FROM #MothTable1 GROUP BY BRGDesc
SELECT * INTO #Table3 FROM #Table1
UNION
SELECT b.GS,b.BRGDesc,b.BadReasonDesc,a.Num FROM [ICSMonth] a
LEFT JOIN #MothTable1 b ON a.Num=b.ZB
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.ZB
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT * INTO #Table4 FROM #Table3
PIVOT ( SUM(GS) FOR ZB IN ('+
@cols+') )a orDER BY BRGDesc
SELECT ROW_NUMBER() OVER( order by CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)) desc)NUM, A.*,b.HZcount as ZBCount,C.HZcount as YBCount,CONVERT(nvarchar(20), CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)))+''%''
AS Proportion,D.EATTRIBUTE1 as Improvementmeasures,D.EATTRIBUTE2 as Responsibledepartment FROM #Table4 A
LEFT JOIN #Table2 B ON A.BRGDesc=B.BRGDesc
LEFT JOIN #MothTable2 C ON A.BRGDesc=C.BRGDesc
LEFT JOIN ICSBadReason D ON A.BadReasonDesc=D.BadReasonDesc
Where A.BRGDesc is not NULL
ORDER BY CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)) DESC
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year,WYear);
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
#region
/// <summary>
/// 对外改善异常追踪表
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetPassFirstTime4(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"
SELECT DISTINCT * INTO #Temp1
FROM (SELECT DISTINCT
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
a.InvCode,
c.VenName,
d.InvName,
b.BLMX,
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.FinalResult IS NULL THEN a.IQCHeaderResult WHEN a.IQCHeaderResult IS NULL THEN
SQEEngineerResult WHEN SQEEngineerResult IS NULL THEN IQCGroupHeaderResult ELSE a.FinalResult END AS Result,
a.SQEEngineerRemark,
d.ClassName,
'第'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DN.MTIME))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)+'周' AS ZB,
BLFL.BadDesc,
a.IQCHeaderTime,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
UNION ALL
SELECT DISTINCT
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
'' AS ZB,
a.InvCode,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
C.InvName,
'' BLMX,
'' BRGDesc,'' BadDesc,
'' AS Result,
'' AS SQEEngineerRemark,
c.ClassName,
''AS YB,
NULL IQCHeaderTime,'' SQEFA,
'' SFJA
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='复判NG' AND A.SFJA='是'
AND MTIME BETWEEN '{0}' AND '{1}'
--SELECT * FROM #Temp1
SELECT DISTINCT * INTO #YearTemp1 FROM (SELECT DISTINCT
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
a.InvCode,
c.VenName,
d.InvName,
b.BLMX,
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult IS NULL THEN a.IQCGroupHeaderResult WHEN a.IQCGroupHeaderResult IS NULL THEN
Result ELSE a.SQEEngineerResult END AS Result,
a.SQEEngineerRemark,
d.ClassName,
'' AS ZB,
BLFL.BadDesc,
a.IQCHeaderTime,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
UNION ALL
SELECT DISTINCT
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
'' AS ZB,
a.InvCode,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
C.InvName,
'' BLMX,
'' BRGDesc,'' BadDesc,
'' AS Result,
'' AS SQEEngineerRemark,
c.ClassName,
''AS YB,
NULL IQCHeaderTime,'' SQEFA,
'' SFJA
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='复判NG' AND A.SFJA='是'
AND MTIME BETWEEN '{2}' AND '{3}'
--SELECT * FROM #YearTemp1
-- SELECT COUNT(*) AS cc,InvCode,MTIME INTO #Table2 FROM #Temp1 GROUP BY InvCode,MTIME
--UNION
SELECT COUNT(*) AS cc, b.InvCode,b.MTIME,a.Num INTO #Table3 FROM [ICSMonthByNew] a
LEFT JOIN #YearTemp1 b ON a.Num=b.YB
GROUP BY b.InvCode,b.MTIME,a.Num
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Num
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT * INTO #Table4 FROM #Table3
PIVOT ( SUM(cc) FOR Num IN ('+
@cols+') )a orDER BY InvCode
select distinct A.*,D.* from #Temp1 A
LEFT JOIN #YearTemp1 C ON A.InvCode=C.InvCode
LEFT JOIN #Table4 D ON A.InvCode=D.InvCode
Where A.InvCode is not null
order by A.MTIME desc
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Temp1 DROP TABLE #YearTemp1 DROP TABLE #Table3
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year,WYear);
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
#region
/// <summary>
/// 对外改善异常追踪表
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetPassFirstTime6(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"SELECT c.Num,c.[Month]
INTO #TempMonth
FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
ORDER BY c.Num
select '1' Num,'交货批次数' Type INTO #TempType UNION select '2' Num,'异常批次数' Type UNION select '3' Num,'批次不良率' Type
SELECT
VenName,
WLFL
INTO #temp1
FROM (
SELECT
VenName,
WLFL,
ROW_NUMBER() OVER (PARTITION BY WLFL ORDER BY SL DESC) AS RowNum
FROM (
SELECT
COUNT(*) AS SL,
VenName,
WLFL
FROM (
SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
UNION ALL
SELECT DISTINCT
REPLACE(C.ClassName, '编码规则', '') WLFL,
ISNULL(D.MUSERName, E.MUSERName) VENNAME,
FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
'' ZGJG
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9')
AND G.LotNo IS NULL
AND a.MUSER <> 'admin'
) AS A WHERE CHUJIANSHIJIAN IN (SELECT [Month] FROM #TempMonth)
GROUP BY VenName, WLFL
) AS GroupedResults
) AS RankedResults
WHERE RowNum <= 3
ORDER BY WLFL DESC, VenName;
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempForecast
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
UNION ALL
SELECT DISTINCT REPLACE(C.ClassName, '编码规则', '') WLFL,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a with (nolock)
INNER JOIN ICSWareHouseLotInfo b with (nolock) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C with (nolock) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D with (nolock) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E with (nolock) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE with (nolock) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F with (nolock) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G with (nolock) ON G.LOTNO =A.LotNo
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
and a.MUSER<>'admin'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 and FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempDetail
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
a.IQCGroupHeaderResult ZGJG
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 AND a.ZGJG='NG'
AND FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT VenName,'1' AS Num,'交货批次数' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
INTO #TempForecastMonth
FROM #TempForecast
UNION ALL
SELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
FROM #TempDetail
UNION ALL
SELECT a.VenName,'3' AS Num,'批次不良率' AS Type,a.WLFL,
CONVERT(NVARCHAR(20),CONVERT(DECIMAL(16,1),ROUND(b.Quantity*1.0/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END) * 100, 2)))
+'%' AS Quantity,a.CHUJIANSHIJIAN
FROM #TempForecast a
LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
INTO #TempForecastAll
FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
DECLARE @sql varchar(4000)
SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
FROM (SELECT [Month] FROM #TempMonth) AS a
SET @sql='SELECT Type AS 类别, WLFL AS 产品大类,VenName AS 供应商,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a ORDER BY WLFL, VenName'
PRINT(@sql)
EXEC(@sql)
DROP TABLE #TempMonth
DROP TABLE #TempDetail
DROP TABLE #TempForecast
DROP TABLE #TempForecastMonth
DROP TABLE #TempForecastAll
DROP TABLE #TempType
DROP TABLE #temp1";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
#region
/// <summary>
/// 对外改善异常追踪表
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable ExportAll6(string DateNow)
{
//站点信息
string date = DateNow;
var dates = date.ToDate();
var daysMonth = dates.ToString("MM");
var month = dates.ToString("yyyy-MM");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"SELECT c.Num,c.[Month]
INTO #TempMonth
FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
ORDER BY c.Num
select '1' Num,'交货批次数' Type INTO #TempType UNION select '2' Num,'异常批次数' Type UNION select '3' Num,'批次不良率' Type
SELECT
VenName,
WLFL
INTO #temp1
FROM (
SELECT
VenName,
WLFL,
ROW_NUMBER() OVER (PARTITION BY WLFL ORDER BY SL DESC) AS RowNum
FROM (
SELECT
COUNT(*) AS SL,
VenName,
WLFL
FROM (
SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
UNION ALL
SELECT DISTINCT
REPLACE(C.ClassName, '编码规则', '') WLFL,
ISNULL(D.MUSERName, E.MUSERName) VENNAME,
FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
'' ZGJG
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9')
AND G.LotNo IS NULL
AND a.MUSER <> 'admin'
) AS A WHERE CHUJIANSHIJIAN IN (SELECT [Month] FROM #TempMonth)
GROUP BY VenName, WLFL
) AS GroupedResults
) AS RankedResults
WHERE RowNum <= 3
ORDER BY WLFL DESC, VenName;
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempForecast
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
UNION ALL
SELECT DISTINCT REPLACE(C.ClassName, '编码规则', '') WLFL,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a with (nolock)
INNER JOIN ICSWareHouseLotInfo b with (nolock) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C with (nolock) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D with (nolock) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E with (nolock) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE with (nolock) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F with (nolock) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G with (nolock) ON G.LOTNO =A.LotNo
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
and a.MUSER<>'admin'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 and FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempDetail
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.ClassName, '编码规则', '') WLFL,
c.VenName,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
a.IQCGroupHeaderResult ZGJG
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 AND a.ZGJG='NG'
AND FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT VenName,'1' AS Num,'交货批次数' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
INTO #TempForecastMonth
FROM #TempForecast
UNION ALL
SELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
FROM #TempDetail
UNION ALL
SELECT a.VenName,'3' AS Num,'批次不良率' AS Type,a.WLFL,
CONVERT(NVARCHAR(20),CONVERT(DECIMAL(16,1),ROUND(b.Quantity*1.0/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END) * 100, 2)))
+'%' AS Quantity,a.CHUJIANSHIJIAN
FROM #TempForecast a
LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
INTO #TempForecastAll
FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
DECLARE @sql varchar(4000)
SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
FROM (SELECT [Month] FROM #TempMonth) AS a
SET @sql='SELECT WLFL AS 材料类型,VenName AS TOP厂商,Type AS 项目别,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a ORDER BY WLFL, VenName'
PRINT(@sql)
EXEC(@sql)
DROP TABLE #TempMonth
DROP TABLE #TempDetail
DROP TABLE #TempForecast
DROP TABLE #TempForecastMonth
DROP TABLE #TempForecastAll
DROP TABLE #TempType
DROP TABLE #temp1";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
var dt = SqlHelper.GetDataTableBySql(sql);
string[] vs = new string[] { "材料类型", "TOP厂商", "项目别", $"{month}" };
// 创建一个新的 DataTable
DataTable table = new DataTable();
for (int j = 0; j < vs.Length; j++)
{
table.Columns.Add(vs[j], typeof(string));
}
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row1 = table.NewRow();
row1["材料类型"] = dt.Rows[i]["材料类型"].ToString();
row1["TOP厂商"] = dt.Rows[i]["TOP厂商"].ToString();
row1["项目别"] = dt.Rows[i]["项目别"].ToString();
row1[$"{month}"] = dt.Rows[i][$"{month}"].ToString();
table.Rows.Add(row1);
}
return table;
#endregion
}
#endregion
#region
/// <summary>
/// 对外改善异常追踪表
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetPassFirstTime5(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"SELECT top 20
Sum (count) Invcount,VenName
INTO #VanName
from
(SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.IQCHeaderResult ZGJG,
a.InvBatcgNo BatchCode,
1 as count
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT
REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
'' ZGJG,
F.BatchCode,
1 as count
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
) a
GROUP BY a.VenName
ORDER BY Invcount DESC
SELECT c.Num,c.[Month]
INTO #TempMonth
FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
ORDER BY c.Num
select '1' Num,'交货批次数' Type INTO #TempType UNION select '2' Num,'异常批次数' Type UNION select '3' Num,'批次不良率' Type
SELECT
VenName,
WLFL
INTO #temp1
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY VenName ORDER BY SL DESC) AS RowNum,
VenName,
WLFL,
SL
FROM (
SELECT
COUNT(*) AS SL,
VenName,
WLFL
FROM (
SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT
REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
f.BatchCode,
FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
'' ZGJG
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
inner JOIN #VanName v ON J.VenName=v.VenName
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
AND G.LotNo IS NULL
AND a.MUSER <> 'admin'
) AS A
GROUP BY VenName, WLFL
) AS GroupedResults
) AS RankedResults
WHERE RowNum <= 5
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempForecast
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
f.BatchCode,
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
inner JOIN #VanName v ON J.VenName=v.VenName
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
and a.MUSER<>'admin' AND a.MTIME>'{0}' AND a.MTIME<'{1}'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName --AND a.BatchCode=b.BatchCode
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempDetail
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}' AND a.IQCHeaderResult='NG'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT VenName,'1' AS Num,'交货批次数' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
INTO #TempForecastMonth
FROM #TempForecast
UNION ALL
SELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
FROM #TempDetail
UNION ALL
SELECT a.VenName,'3' AS Num,'批次不良率' AS Type,a.WLFL,CAST(CAST(ISNULL(b.Quantity,0)/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END)*100 AS DECIMAL(18,1)) AS VARCHAR(100))+'%' AS Quantity,a.CHUJIANSHIJIAN
FROM #TempForecast a
LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
INTO #TempForecastAll
FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
DECLARE @sql varchar(4000)
SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
FROM (SELECT [Month] FROM #TempMonth) AS a
SET @sql='SELECT Type AS 类别, WLFL AS 物料编码,VenName AS 供应商,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a order BY VenName,WLFL,Type '
PRINT(@sql)
EXEC(@sql)
DROP TABLE #TempMonth
DROP TABLE #TempDetail
DROP TABLE #TempForecast
DROP TABLE #TempForecastMonth
DROP TABLE #TempForecastAll
DROP TABLE #TempType
DROP TABLE #temp1
DROP TABLE #VanName
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
#region 复判NG--对外改善
/// <summary>
/// 复判NG--对外改善
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public string GetPassFirstTime3(string queryJson)
{
try
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
List<PassFirstTimeModel> passFirstTimeModel = new List<PassFirstTimeModel>();
//获取传递的年份和月份
int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
string date = queryParam["DateNow"].ToString();
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
var firstDayofYear = new DateTime(year, 1, 1).ToString("yyyy-MM-dd");
var firstDayofNextYear = new DateTime(year + 1, 1, 1).ToString("yyyy-MM-dd");
int month = dates.Month;
#region [SQL]
#region IncomingMterialssql 来料数量
string incomingMterialssql = $@"SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ1
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ2
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime ) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
";
#endregion
#region 复判ng sencondNgsql
string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.SecondNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(SecondNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 待判中 underReRudgmentsql
string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 分类不良数量 calssNGsql
var calssNGsql = $@"DECLARE @M int = {month}
SELECT ClassName,
'0' MonthlyCumulative,
'0' AnnualAccumulation,
sum(case when Month = 1 then Rec else 0 end) Month1Rec,
sum(case when Month = 1 then Ng else 0 end) Month1,
sum(case when Month = 2 then Rec else 0 end) Month2Rec,
sum(case when Month = 2 then Ng else 0 end) Month2,
sum(case when Month = 3 then Rec else 0 end) Month3Rec,
sum(case when Month = 3 then Ng else 0 end) Month3,
sum(case when Month = 4 then Rec else 0 end) Month4Rec,
sum(case when Month = 4 then Ng else 0 end) Month4,
sum(case when Month = 5 then Rec else 0 end) Month5Rec,
sum(case when Month = 5 then Ng else 0 end) Month5,
sum(case when Month = 6 then Rec else 0 end) Month6Rec,
sum(case when Month = 6 then Ng else 0 end) Month6,
sum(case when Month = 7 then Rec else 0 end) Month7Rec,
sum(case when Month = 7 then Ng else 0 end) Month7,
sum(case when Month = 8 then Rec else 0 end) Month8Rec,
sum(case when Month = 8 then Ng else 0 end) Month8,
sum(case when Month = 9 then Rec else 0 end) Month9Rec,
sum(case when Month = 9 then Ng else 0 end) Month9,
sum(case when Month = 10 then Rec else 0 end) Month10Rec,
sum(case when Month = 10 then Ng else 0 end) Month10,
sum(case when Month = 11 then Rec else 0 end) Month11Rec,
sum(case when Month = 11 then Ng else 0 end) Month11,
sum(case when Month = 12 then Rec else 0 end) Month12Rec,
sum(case when Month = 12 then Ng else 0 end) Month12,
sum(case when Month = @M and week = 1 then Rec else 0 end) Week1Rec,
sum(case when Month = @M and week = 1 then Ng else 0 end) Week1,
sum(case when Month = @M and week = 2 then Rec else 0 end) Week2Rec,
sum(case when Month = @M and week = 2 then Ng else 0 end) Week2,
sum(case when Month = @M and week = 3 then Rec else 0 end) Week3Rec,
sum(case when Month = @M and week = 3 then Ng else 0 end) Week3,
sum(case when Month = @M and week = 4 then Rec else 0 end) Week4Rec,
sum(case when Month = @M and week = 4 then Ng else 0 end) Week4,
sum(case when Month = @M and week = 5 then Rec else 0 end) Week5Rec,
sum(case when Month = @M and week = 5 then Ng else 0 end) Week5,
sum(case when Month = @M and week = 6 then Rec else 0 end) Week6Rec,
sum(case when Month = @M and week = 6 then Ng else 0 end) Week6
from (
SELECT ClassName,Rec,NG,
dateName(month, DT) Month,
CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DT))%DATEPART(WEEK,DATEADD(DAY,-1,DATEADD(month, DATEDIFF(month, 0, DT), 0)))+1) Week
From(
SELECT count(1) Rec, sum((case when a.SQEEngineerResult='NG' and a.IQCGroupHeaderResult='NG' then 1 else 0 end)) as NG,
d.ClassName,
CAST(a.FirstCheckTime AS DATE) DT
      FROM IcsMatCheckResult a
      LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
      LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
      LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
      LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
      LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
      LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
    WHERE a.FirstCheckTime BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'    
    GROUP BY d.ClassName, CAST(a.FirstCheckTime AS DATE)
)a)a group by classname";
#endregion
#endregion
var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
var dt2 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
var dt3 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
var dt4 = SqlHelper.CmdExecuteDataTable(calssNGsql);
for (int i=0;i<dt4.Rows.Count;i++)
{
PassFirstTimeModel passFirstTimeModel1 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel2 = new PassFirstTimeModel();
passFirstTimeModel1.Decomposition1 = dt4.Rows[i]["ClassName"].ToString();
passFirstTimeModel1.Decomposition2 = "异常数量";
passFirstTimeModel1.Week1 = dt4.Rows[i]["Week1"].ToDecimal();
passFirstTimeModel1.Week2 = dt4.Rows[i]["Week2"].ToDecimal();
passFirstTimeModel1.Week3 = dt4.Rows[i]["Week3"].ToDecimal();
passFirstTimeModel1.Week4 = dt4.Rows[i]["Week4"].ToDecimal();
passFirstTimeModel1.Week5 = dt4.Rows[i]["Week5"].ToDecimal();
passFirstTimeModel1.Week6 = dt4.Rows[i]["Week6"].ToDecimal();
passFirstTimeModel1.MonthlyCumulative=dt4.Rows[i]["Week1"].ToDecimal()+dt4.Rows[i]["Week2"].ToDecimal()+
dt4.Rows[i]["Week3"].ToDecimal()+dt4.Rows[i]["Week4"].ToDecimal()+dt4.Rows[i]["Week5"].ToDecimal()+
dt4.Rows[i]["Week6"].ToDecimal();
passFirstTimeModel1.Month1 = dt4.Rows[i]["Month1"].ToDecimal();
passFirstTimeModel1.Month2 = dt4.Rows[i]["Month2"].ToDecimal();
passFirstTimeModel1.Month3 = dt4.Rows[i]["Month3"].ToDecimal();
passFirstTimeModel1.Month4 = dt4.Rows[i]["Month4"].ToDecimal();
passFirstTimeModel1.Month5 = dt4.Rows[i]["Month5"].ToDecimal();
passFirstTimeModel1.Month6 = dt4.Rows[i]["Month6"].ToDecimal();
passFirstTimeModel1.Month7 = dt4.Rows[i]["Month7"].ToDecimal();
passFirstTimeModel1.Month8 = dt4.Rows[i]["Month8"].ToDecimal();
passFirstTimeModel1.Month9 = dt4.Rows[i]["Month9"].ToDecimal();
passFirstTimeModel1.Month10 =dt4.Rows[i]["Month10"].ToDecimal();
passFirstTimeModel1.Month11 =dt4.Rows[i]["Month12"].ToDecimal();
passFirstTimeModel1.Month12 = dt4.Rows[i]["Month12"].ToDecimal();
passFirstTimeModel1.AnnualAccumulation =dt4.Rows[i]["Month1"].ToDecimal()+dt4.Rows[i]["Month2"].ToDecimal()+
dt4.Rows[i]["Month3"].ToDecimal()+dt4.Rows[i]["Month4"].ToDecimal()+dt4.Rows[i]["Month5"].ToDecimal()+
dt4.Rows[i]["Month6"].ToDecimal()+dt4.Rows[i]["Month7"].ToDecimal()+dt4.Rows[i]["Month8"].ToDecimal()+
dt4.Rows[i]["Month9"].ToDecimal()+dt4.Rows[i]["Month10"].ToDecimal()+dt4.Rows[i]["Month12"].ToDecimal()+
dt4.Rows[i]["Month12"].ToDecimal();
dt4.Rows[i]["MonthlyCumulative"] = passFirstTimeModel1.MonthlyCumulative.ToString();
dt4.Rows[i]["AnnualAccumulation"] = passFirstTimeModel1.AnnualAccumulation.ToString();
DataRow dt5 = dt4.Rows[i];
passFirstTimeModel2.Decomposition1 = dt4.Rows[i]["ClassName"].ToString();
passFirstTimeModel2.Decomposition2 = "不良率";
var data = NGCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1,dt3, dt5);
#region 周数据
passFirstTimeModel2.Week1 = data["Week1"].V1;
passFirstTimeModel2.Week2 = data["Week2"].V1;
passFirstTimeModel2.Week3 = data["Week3"].V1;
passFirstTimeModel2.Week4 = data["Week4"].V1;
passFirstTimeModel2.Week5 = data["Week5"].V1;
passFirstTimeModel2.Week6 = data["Week6"].V1;
#endregion
#region 月数据
passFirstTimeModel2.Month1 = data["Month1"].V1;
passFirstTimeModel2.Month2 = data["Month2"].V1;
passFirstTimeModel2.Month3 = data["Month3"].V1;
passFirstTimeModel2.Month4 = data["Month4"].V1;
passFirstTimeModel2.Month5 = data["Month5"].V1;
passFirstTimeModel2.Month6 = data["Month6"].V1;
passFirstTimeModel2.Month7 = data["Month7"].V1;
passFirstTimeModel2.Month8 = data["Month8"].V1;
passFirstTimeModel2.Month9 = data["Month9"].V1;
passFirstTimeModel2.Month10 = data["Month10"].V1;
passFirstTimeModel2.Month11 = data["Month11"].V1;
passFirstTimeModel2.Month12 = data["Month12"].V1;
#endregion
#region 汇总
passFirstTimeModel2.MonthlyCumulative = data["MonthlyCumulative"].V1;
passFirstTimeModel2.AnnualAccumulation = data["AnnualAccumulation"].V1;
passFirstTimeModel.Add(passFirstTimeModel1);
passFirstTimeModel.Add(passFirstTimeModel2);
#endregion
}
//合计信息
#region 合计信息
PassFirstTimeModel passFirstTimeModel3 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel4 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel5 = new PassFirstTimeModel();
PassFirstTimeModel passFirstTimeModel6 = new PassFirstTimeModel();
passFirstTimeModel3.Decomposition1 = "合计";
passFirstTimeModel3.Decomposition2 = "异常数量";
passFirstTimeModel3.Week1 = dt2.Rows[0]["Week1"].ToDecimal();
passFirstTimeModel3.Week2 = dt2.Rows[0]["Week2"].ToDecimal();
passFirstTimeModel3.Week3 = dt2.Rows[0]["Week3"].ToDecimal();
passFirstTimeModel3.Week4 = dt2.Rows[0]["Week4"].ToDecimal();
passFirstTimeModel3.Week5 = dt2.Rows[0]["Week5"].ToDecimal();
passFirstTimeModel3.Week6 = dt2.Rows[0]["Week6"].ToDecimal();
passFirstTimeModel3.MonthlyCumulative = dt2.Rows[0]["MonthlyCumulative"].ToDecimal();
passFirstTimeModel3.Month1 = dt2.Rows[0]["Month1"].ToDecimal();
passFirstTimeModel3.Month2 = dt2.Rows[0]["Month2"].ToDecimal();
passFirstTimeModel3.Month3 = dt2.Rows[0]["Month3"].ToDecimal();
passFirstTimeModel3.Month4 = dt2.Rows[0]["Month4"].ToDecimal();
passFirstTimeModel3.Month5 = dt2.Rows[0]["Month5"].ToDecimal();
passFirstTimeModel3.Month6 = dt2.Rows[0]["Month6"].ToDecimal();
passFirstTimeModel3.Month7 = dt2.Rows[0]["Month7"].ToDecimal();
passFirstTimeModel3.Month8 = dt2.Rows[0]["Month8"].ToDecimal();
passFirstTimeModel3.Month9 = dt2.Rows[0]["Month9"].ToDecimal();
passFirstTimeModel3.Month10 = dt2.Rows[0]["Month10"].ToDecimal();
passFirstTimeModel3.Month11 = dt2.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel3.Month12 = dt2.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel3.AnnualAccumulation = dt2.Rows[0]["AnnualAccumulation"].ToDecimal();
passFirstTimeModel4.Decomposition1 = "合计";
passFirstTimeModel4.Decomposition2 = "来料数量";
passFirstTimeModel4.Week1 = dt1.Rows[0]["Week1"].ToDecimal();
passFirstTimeModel4.Week2 = dt1.Rows[0]["Week2"].ToDecimal();
passFirstTimeModel4.Week3 = dt1.Rows[0]["Week3"].ToDecimal();
passFirstTimeModel4.Week4 = dt1.Rows[0]["Week4"].ToDecimal();
passFirstTimeModel4.Week5 = dt1.Rows[0]["Week5"].ToDecimal();
passFirstTimeModel4.Week6 = dt1.Rows[0]["Week6"].ToDecimal();
passFirstTimeModel4.MonthlyCumulative = dt1.Rows[0]["MonthlyCumulative"].ToDecimal();
passFirstTimeModel4.Month1 = dt1.Rows[0]["Month1"].ToDecimal();
passFirstTimeModel4.Month2 = dt1.Rows[0]["Month2"].ToDecimal();
passFirstTimeModel4.Month3 = dt1.Rows[0]["Month3"].ToDecimal();
passFirstTimeModel4.Month4 = dt1.Rows[0]["Month4"].ToDecimal();
passFirstTimeModel4.Month5 = dt1.Rows[0]["Month5"].ToDecimal();
passFirstTimeModel4.Month6 = dt1.Rows[0]["Month6"].ToDecimal();
passFirstTimeModel4.Month7 = dt1.Rows[0]["Month7"].ToDecimal();
passFirstTimeModel4.Month8 = dt1.Rows[0]["Month8"].ToDecimal();
passFirstTimeModel4.Month9 = dt1.Rows[0]["Month9"].ToDecimal();
passFirstTimeModel4.Month10 = dt1.Rows[0]["Month10"].ToDecimal();
passFirstTimeModel4.Month11 = dt1.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel4.Month12 = dt1.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel4.AnnualAccumulation = dt1.Rows[0]["AnnualAccumulation"].ToDecimal();
var data1 = NGCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1, dt3, dt2);
#region 周数据
passFirstTimeModel5.Decomposition1 = "合计";
passFirstTimeModel5.Decomposition2 = "不良率";
passFirstTimeModel5.Week1 = data1["Week1"].V1;
passFirstTimeModel5.Week2 = data1["Week2"].V1;
passFirstTimeModel5.Week3 = data1["Week3"].V1;
passFirstTimeModel5.Week4 = data1["Week4"].V1;
passFirstTimeModel5.Week5 = data1["Week5"].V1;
passFirstTimeModel5.Week6 = data1["Week6"].V1;
#endregion
#region 月数据
passFirstTimeModel5.Month1 = data1["Month1"].V1;
passFirstTimeModel5.Month2 = data1["Month2"].V1;
passFirstTimeModel5.Month3 = data1["Month3"].V1;
passFirstTimeModel5.Month4 = data1["Month4"].V1;
passFirstTimeModel5.Month5 = data1["Month5"].V1;
passFirstTimeModel5.Month6 = data1["Month6"].V1;
passFirstTimeModel5.Month7 = data1["Month7"].V1;
passFirstTimeModel5.Month8 = data1["Month8"].V1;
passFirstTimeModel5.Month9 = data1["Month9"].V1;
passFirstTimeModel5.Month10 = data1["Month10"].V1;
passFirstTimeModel5.Month11 = data1["Month11"].V1;
passFirstTimeModel5.Month12 = data1["Month12"].V1;
#endregion
#region 汇总
passFirstTimeModel5.MonthlyCumulative = data1["MonthlyCumulative"].V1;
passFirstTimeModel5.AnnualAccumulation = data1["AnnualAccumulation"].V1;
#endregion
passFirstTimeModel6.Decomposition1 = "";
passFirstTimeModel6.Decomposition2 = "待判数量";
passFirstTimeModel6.Week1 = dt3.Rows[0]["Week1"].ToDecimal();
passFirstTimeModel6.Week2 = dt3.Rows[0]["Week2"].ToDecimal();
passFirstTimeModel6.Week3 = dt3.Rows[0]["Week3"].ToDecimal();
passFirstTimeModel6.Week4 = dt3.Rows[0]["Week4"].ToDecimal();
passFirstTimeModel6.Week5 = dt3.Rows[0]["Week5"].ToDecimal();
passFirstTimeModel6.Week6 = dt3.Rows[0]["Week6"].ToDecimal();
passFirstTimeModel6.MonthlyCumulative = dt3.Rows[0]["MonthlyCumulative"].ToDecimal();
passFirstTimeModel6.Month1 = dt3.Rows[0]["Month1"].ToDecimal();
passFirstTimeModel6.Month2 = dt3.Rows[0]["Month2"].ToDecimal();
passFirstTimeModel6.Month3 = dt3.Rows[0]["Month3"].ToDecimal();
passFirstTimeModel6.Month4 = dt3.Rows[0]["Month4"].ToDecimal();
passFirstTimeModel6.Month5 = dt3.Rows[0]["Month5"].ToDecimal();
passFirstTimeModel6.Month6 = dt3.Rows[0]["Month6"].ToDecimal();
passFirstTimeModel6.Month7 = dt3.Rows[0]["Month7"].ToDecimal();
passFirstTimeModel6.Month8 = dt3.Rows[0]["Month8"].ToDecimal();
passFirstTimeModel6.Month9 = dt3.Rows[0]["Month9"].ToDecimal();
passFirstTimeModel6.Month10 = dt3.Rows[0]["Month10"].ToDecimal();
passFirstTimeModel6.Month11 = dt3.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel6.Month12 = dt3.Rows[0]["Month12"].ToDecimal();
passFirstTimeModel6.AnnualAccumulation = dt3.Rows[0]["AnnualAccumulation"].ToDecimal();
passFirstTimeModel.Add(passFirstTimeModel3);
passFirstTimeModel.Add(passFirstTimeModel4);
passFirstTimeModel.Add(passFirstTimeModel5);
passFirstTimeModel.Add(passFirstTimeModel6);
#endregion
return passFirstTimeModel.ToJson();
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
public DataTable ExportAll3(string DateNow)
{
string date = DateNow;
var dates = date.ToDate();
var daysMonth = dates.ToString("MM");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
var firstDayofYear = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayofNextYear = new DateTime(dates.Year + 1, 1, 1).ToString("yyyy-MM-dd");
int month = dates.Month;
#region [SQL]
#region IncomingMterialssql 来料数量
string incomingMterialssql = $@"SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ1
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
F.BatchCode,
SUM(A.Quantity) AS InvBatcgQty,
COALESCE(D.MUSER, E.MUSER) AS VenCode,
COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN -- 直接转换为日期,避免重复计算
into #tableMJ2
FROM
ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN
ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN
ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN
ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN
ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN
ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN
ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN
ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
WHERE
(a.BusinessCode = '1' OR a.BusinessCode = '9')
AND g.id IS NULL
AND a.MUSER <> 'admin'
AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY
a.InvCode,
COALESCE(D.ASNCode, E.OASNCode),
F.BatchCode,
COALESCE(D.MUSER, E.MUSER),
COALESCE(D.MUSERName, E.MUSERName),
CONVERT(DATE, a.MTIME),
A.MUSERName,
A.TransCode
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
UNION ALL
SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.FistNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.FistNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(FistNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
";
#endregion
#region 复判ng sencondNgsql
string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='复判NG'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.SecondNG,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(SecondNG) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 待判中 underReRudgmentsql
string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
INTO #Table1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否'
GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
order by Week
SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
INTO #MothTable1
FROM ( SELECT
a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
case when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
--LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
)
b where ZZJG='NG' AND BRGDesc='复判NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
FROM #Table1
SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
FROM #MothTable1
SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
FROM [ICSWeek] a
left JOIN #Table1 b ON a.Num=b.Week
UNION
SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
left JOIN #MothTable1 b ON a.ENum=b.Month
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
@cols+') )a
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
#endregion
#region 分类不良数量 calssNGsql
var calssNGsql = $@"DECLARE @M int = {month}
SELECT ClassName,
'0' MonthlyCumulative,
'0' AnnualAccumulation,
sum(case when Month = 1 then Rec else 0 end) Month1Rec,
sum(case when Month = 1 then Ng else 0 end) Month1,
sum(case when Month = 2 then Rec else 0 end) Month2Rec,
sum(case when Month = 2 then Ng else 0 end) Month2,
sum(case when Month = 3 then Rec else 0 end) Month3Rec,
sum(case when Month = 3 then Ng else 0 end) Month3,
sum(case when Month = 4 then Rec else 0 end) Month4Rec,
sum(case when Month = 4 then Ng else 0 end) Month4,
sum(case when Month = 5 then Rec else 0 end) Month5Rec,
sum(case when Month = 5 then Ng else 0 end) Month5,
sum(case when Month = 6 then Rec else 0 end) Month6Rec,
sum(case when Month = 6 then Ng else 0 end) Month6,
sum(case when Month = 7 then Rec else 0 end) Month7Rec,
sum(case when Month = 7 then Ng else 0 end) Month7,
sum(case when Month = 8 then Rec else 0 end) Month8Rec,
sum(case when Month = 8 then Ng else 0 end) Month8,
sum(case when Month = 9 then Rec else 0 end) Month9Rec,
sum(case when Month = 9 then Ng else 0 end) Month9,
sum(case when Month = 10 then Rec else 0 end) Month10Rec,
sum(case when Month = 10 then Ng else 0 end) Month10,
sum(case when Month = 11 then Rec else 0 end) Month11Rec,
sum(case when Month = 11 then Ng else 0 end) Month11,
sum(case when Month = 12 then Rec else 0 end) Month12Rec,
sum(case when Month = 12 then Ng else 0 end) Month12,
sum(case when Month = @M and week = 1 then Rec else 0 end) Week1Rec,
sum(case when Month = @M and week = 1 then Ng else 0 end) Week1,
sum(case when Month = @M and week = 2 then Rec else 0 end) Week2Rec,
sum(case when Month = @M and week = 2 then Ng else 0 end) Week2,
sum(case when Month = @M and week = 3 then Rec else 0 end) Week3Rec,
sum(case when Month = @M and week = 3 then Ng else 0 end) Week3,
sum(case when Month = @M and week = 4 then Rec else 0 end) Week4Rec,
sum(case when Month = @M and week = 4 then Ng else 0 end) Week4,
sum(case when Month = @M and week = 5 then Rec else 0 end) Week5Rec,
sum(case when Month = @M and week = 5 then Ng else 0 end) Week5,
sum(case when Month = @M and week = 6 then Rec else 0 end) Week6Rec,
sum(case when Month = @M and week = 6 then Ng else 0 end) Week6
from (
SELECT ClassName,Rec,NG,
dateName(month, DT) Month,
CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DT))%DATEPART(WEEK,DATEADD(DAY,-1,DATEADD(month, DATEDIFF(month, 0, DT), 0)))+1) Week
From(
SELECT count(1) Rec, sum((case when a.SQEEngineerResult='NG' and a.IQCGroupHeaderResult='NG' then 1 else 0 end)) as NG,
d.ClassName,
CAST(a.FirstCheckTime AS DATE) DT
      FROM IcsMatCheckResult a
      LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
      LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
      LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
      LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
      LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
      LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
    WHERE a.FirstCheckTime BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'    
    GROUP BY d.ClassName, CAST(a.FirstCheckTime AS DATE)
)a)a group by classname";
#endregion
#endregion
var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
var dt2 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
var dt3 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
var dt4 = SqlHelper.CmdExecuteDataTable(calssNGsql);
// 创建一个新的 DataTable
DataTable table = new DataTable();
#region 添加列到 DataTable
table.Columns.Add("材料类别", typeof(string));
table.Columns.Add("类别", typeof(string));
// 添加月份和周次的列
string[] weeksInJanuary = { $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周" };
for (int j = 0; j < weeksInJanuary.Length; j++)
{
table.Columns.Add(weeksInJanuary[j], typeof(string));
}
table.Columns.Add("当月累计", typeof(string));
// 添加月份的列
string[] months = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
for (int j = 0; j < months.Length; j++)
{
table.Columns.Add(months[j], typeof(string));
}
table.Columns.Add("年度累计", typeof(string));
#endregion
#region 循环添加数据
for (int i = 0; i < dt4.Rows.Count; i++)
{
DataRow row1 = table.NewRow();
DataRow row2 = table.NewRow();
row1["材料类别"] = dt4.Rows[i]["ClassName"].ToString();
row1["类别"] = "异常数量";
row2["材料类别"] = dt4.Rows[i]["ClassName"].ToString();
row2["类别"] = "不良率";
for (int j = 0; j < weeksInJanuary.Length; j++)
{
string week = weeksInJanuary[j];
int k = j + 1;
row1[week] = dt4.Rows[i]["Week" + k] ;
}
var monthlyCumulative = dt4.Rows[i]["Week1"].ToDecimal() + dt4.Rows[i]["Week2"].ToDecimal() +
dt4.Rows[i]["Week3"].ToDecimal() + dt4.Rows[i]["Week4"].ToDecimal() + dt4.Rows[i]["Week5"].ToDecimal() +
dt4.Rows[i]["Week6"].ToDecimal();
var annualAccumulation = dt4.Rows[i]["Month1"].ToDecimal() + dt4.Rows[i]["Month2"].ToDecimal() +
dt4.Rows[i]["Month3"].ToDecimal() + dt4.Rows[i]["Month4"].ToDecimal() + dt4.Rows[i]["Month5"].ToDecimal() +
dt4.Rows[i]["Month6"].ToDecimal() + dt4.Rows[i]["Month7"].ToDecimal() + dt4.Rows[i]["Month8"].ToDecimal() +
dt4.Rows[i]["Month9"].ToDecimal() + dt4.Rows[i]["Month10"].ToDecimal() + dt4.Rows[i]["Month12"].ToDecimal() +
dt4.Rows[i]["Month12"].ToDecimal();
row1["当月累计"] = monthlyCumulative;
for (int j = 0; j < months.Length; j++)
{
string monthIndex = months[j];
int k = j + 1;
row1[monthIndex] = dt4.Rows[i]["Month" + k];
}
row1["年度累计"] = monthlyCumulative;
dt4.Rows[i]["MonthlyCumulative"] = monthlyCumulative.ToString();
dt4.Rows[i]["AnnualAccumulation"] = annualAccumulation.ToString();
DataRow dt5 = dt4.Rows[i];
var data = NGCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1, dt3, dt5);
#region 周数据
for (int j = 0; j < weeksInJanuary.Length; j++)
{
string week = weeksInJanuary[j];
int k = j + 1;
row2[week] = data["Week" + k].V1 + "%";
}
#endregion
row2["当月累计"] = data["MonthlyCumulative"].V1 + "%";
#region 月数据
for (int j = 0; j < months.Length; j++)
{
string monthIndex = months[j];
int k = j + 1;
row2[monthIndex] = data["Month" + k].V1 + "%";
}
#endregion
#region 汇总
row2["年度累计"] = data["AnnualAccumulation"].V1;
table.Rows.Add(row1);
table.Rows.Add(row2);
#endregion
}
#endregion
#region 合计信息
DataRow row3 = table.NewRow();
DataRow row4 = table.NewRow();
DataRow row5 = table.NewRow();
DataRow row6 = table.NewRow();
#region 合计信息
var data1 = NGCount(new List<string> {
"Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
"Month1",
"Month2",
"Month3",
"Month4",
"Month5",
"Month6",
"Month7",
"Month8",
"Month9",
"Month10",
"Month11",
"Month12","MonthlyCumulative","AnnualAccumulation"},
dt1, dt3, dt2);
row3["材料类别"] = "合计";
row3["类别"] = "异常数量";
row4["材料类别"] = "合计";
row4["类别"] = "来料数量";
row5["材料类别"] = "合计";
row5["类别"] = "不良率";
row6["材料类别"] = " ";
row6["类别"] = "待判数量";
for (int j = 0; j < weeksInJanuary.Length; j++)
{
string week = weeksInJanuary[j];
int k = j + 1;
row3[week] = dt2.Rows[0]["Week" + k] ;
row4[week] = dt1.Rows[0]["Week" + k] ;
row5[week] = data1["Week" + k].V1 + "%";
row6[week] = dt3.Rows[0]["Week" + k].ToDecimal() ;
}
for (int j = 0; j < months.Length; j++)
{
string monthIndex = months[j];
int k = j + 1;
row3[monthIndex] = dt2.Rows[0]["Month" + k];
row4[monthIndex] = dt1.Rows[0]["Month" + k] ;
row5[monthIndex] = data1["Month" + k].V1 + "%";
row6[monthIndex] = dt3.Rows[0]["Month" + k].ToDecimal() ;
}
row3["当月累计"] = dt2.Rows[0]["MonthlyCumulative"].ToDecimal() ;
row3["年度累计"] = dt2.Rows[0]["AnnualAccumulation"].ToDecimal() ;
row4["当月累计"] = dt1.Rows[0]["MonthlyCumulative"].ToDecimal() ;
row4["年度累计"] = dt1.Rows[0]["AnnualAccumulation"].ToDecimal() ;
row5["当月累计"] = data1["MonthlyCumulative"].V1 + "%";
row5["年度累计"] = data1["AnnualAccumulation"].V1 + "%";
row6["当月累计"] = dt3.Rows[0]["MonthlyCumulative"].ToDecimal() ;
row6["年度累计"] = dt3.Rows[0]["AnnualAccumulation"].ToDecimal() ;
table.Rows.Add(row3);
table.Rows.Add(row4);
table.Rows.Add(row5);
table.Rows.Add(row6);
#endregion
return table;
#endregion
}
private Dictionary<string, dynamic> NGCount(List<string> weeks,
DataTable dt1, DataTable dt2, DataTable dt3)
{
Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
foreach (var item in weeks)
{
var tmp1 = dt1.Rows[0][item].ToDecimal();
var tmp2 = dt2.Rows[0][item].ToDecimal();
var tmp3 = dt3.Rows[0][item].ToDecimal();
var v1 = tmp1 == 0 ? 0 : Math.Round(tmp3/ (tmp1 - tmp2) * 100, 1);
result.Add(item, new
{
V1 = v1
});
}
return result;
}
private Dictionary<string, dynamic> NGCount(List<string> weeks,
DataTable dt1, DataTable dt2, DataRow dt3)
{
Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
foreach (var item in weeks)
{
var tmp1 = dt1.Rows[0][item].ToDecimal();
var tmp2 = dt2.Rows[0][item].ToDecimal();
var tmp3 = dt3[item].ToDecimal();
var v1 = tmp1 == 0 ? 0 : Math.Round(tmp3 / (tmp1 - tmp2) * 100, 1);
result.Add(item, new
{
V1 = v1
});
}
return result;
}
public DataTable ExportAll(string DateNow)
{
string date = DateNow;
var dates = date.ToDate();
var daysMonth = dates.ToString("MM");
var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"
SELECT DISTINCT COUNT(*) AS GS, BRGDesc, A.BadReasonDesc,'周' + CONVERT(NVARCHAR(20), DATEPART(WEEK, DATEADD(DAY, -1, CHUJIANSHIJIAN)) % DATEPART(WEEK, DATEADD(DAY, -1, '{0}')) + 1) AS ZB
INTO #Table1 FROM (SELECT DISTINCT
CASE when a.SQEEngineerResult = 'NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult = 'NG' THEN '复判NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--不良原因
BLFL.BadDesc,
a.IQCHeaderTime,
FORMAT(CONVERT(datetime, a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result = 'OK' OR(a.Result = 'NG' AND a.IsCheckComplete = '是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode = A.BRGCode
UNION ALL
SELECT DISTINCT
'' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
'' SFJA,'' CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno = G.lotno
WHERE(a.BusinessCode = '1' or a.BusinessCode = '9') AND G.lotno IS NOT NULL
and a.MUSER <> 'admin'
GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '编码规则', ''),ISNULL(D.ASNCode, E.OASNCode),F.BatchCode,
ISNULL(D.MUSER, E.MUSER),ISNULL(D.MUSERName, E.MUSERName),FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
) A WHERE 1 = 1 AND A.BRGDesc <> '' and A.BRGDesc IS NOT NULL AND A.BRGDesc <> '复判NG' AND A.SFJA = '是' AND A.BadReasonDesc IS NOT NULL
AND CHUJIANSHIJIAN BETWEEN '{0}' AND '{1}'
GROUP BY BRGDesc,A.BadReasonDesc,CONVERT(NVARCHAR(20), DATEPART(WEEK, DATEADD(DAY, -1, CHUJIANSHIJIAN)) % DATEPART(WEEK, DATEADD(DAY, -1, '{0}')) + 1)
SELECT DISTINCT COUNT(*) AS GS, BRGDesc, A.BadReasonDesc,'月' + CONVERT(NVARCHAR(20), DATEPART(MONTH, DATEADD(DAY, -1, CHUJIANSHIJIAN))) AS ZB
INTO #MothTable1 FROM (SELECT DISTINCT
CASE when a.SQEEngineerResult = 'NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult = 'NG' THEN '复判NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--不良原因
BLFL.BadDesc,
a.IQCHeaderTime,
FORMAT(CONVERT(datetime, a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result = 'OK' OR(a.Result = 'NG' AND a.IsCheckComplete = '是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode = A.BRGCode
UNION ALL
SELECT DISTINCT
'' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
'' SFJA,''CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno = G.lotno
WHERE(a.BusinessCode = '1' or a.BusinessCode = '9') AND G.lotno IS NOT NULL
and a.MUSER <> 'admin'
GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '编码规则', ''),ISNULL(D.ASNCode, E.OASNCode),F.BatchCode,
ISNULL(D.MUSER, E.MUSER),ISNULL(D.MUSERName, E.MUSERName),FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
) A WHERE 1 = 1 AND A.BRGDesc <> '' and A.BRGDesc IS NOT NULL AND A.BRGDesc <> '复判NG' AND A.SFJA = '是' AND A.BadReasonDesc IS NOT NULL
AND CHUJIANSHIJIAN BETWEEN '{2}' AND '{3}'
GROUP BY BRGDesc,A.BadReasonDesc, DATEPART(MONTH, DATEADD(DAY, -1, CHUJIANSHIJIAN))
SELECT SUM(GS) AS HZcount, BRGDesc INTO #Table2 FROM #Table1 GROUP BY BRGDesc
SELECT SUM(GS) AS HZcount, BRGDesc INTO #MothTable2 FROM #MothTable1 GROUP BY BRGDesc
SELECT* INTO #Table3 FROM #Table1
UNION
SELECT b.GS,b.BRGDesc,b.BadReasonDesc,a.Num FROM[ICSMonth] a
LEFT JOIN #MothTable1 b ON a.Num=b.ZB
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' + dr.ZB
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') + ']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols = 'SELECT * INTO #Table4 FROM #Table3
PIVOT(SUM(GS) FOR ZB IN('+
@cols + ') )a orDER BY BRGDesc
SELECT ROW_NUMBER() OVER(order by CONVERT(DECIMAL(16, 1), ROUND(c.HZcount * 1.0 / (select sum(HZcount) from #MothTable2) * 100, 2)) desc)NUM, A.*,b.HZcount as ZBCount,C.HZcount as YBCount,CONVERT(nvarchar(20), CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)))+''%''
AS Proportion, D.EATTRIBUTE1 as Improvementmeasures, D.EATTRIBUTE2 as Responsibledepartment FROM #Table4 A
LEFT JOIN #Table2 B ON A.BRGDesc=B.BRGDesc
LEFT JOIN #MothTable2 C ON A.BRGDesc=C.BRGDesc
LEFT JOIN ICSBadReason D ON A.BadReasonDesc = D.BadReasonDesc
Where A.BRGDesc is not NULL
ORDER BY CONVERT(DECIMAL(16, 1), ROUND(c.HZcount * 1.0 / (select sum(HZcount) from #MothTable2) * 100, 2)) DESC
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year, WYear); ;
var dt=SqlHelper.GetDataTableBySql(sql);
string[] vs = new string[] { "不良描述", "占比(%)", "不良原因", "改善对策", "责任部门", $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周", "合计", "年度累计", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
// 创建一个新的 DataTable
DataTable table = new DataTable();
for (int j = 0; j < vs.Length; j++)
{
table.Columns.Add(vs[j], typeof(string));
}
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row1 = table.NewRow();
row1["不良描述"] = dt.Rows[i]["BRGDesc"].ToString();
row1["占比(%)"] = dt.Rows[i]["Proportion"].ToString();
row1["不良原因"] = dt.Rows[i]["BadReasonDesc"].ToString();
row1["改善对策"] = dt.Rows[i]["Improvementmeasures"].ToString();
row1["责任部门"] = dt.Rows[i]["Responsibledepartment"].ToString();
row1[$"{daysMonth}月第1周"] = dt.Columns.Contains("周1") ==false?"": dt.Rows[i]["周1"].ToString();
row1[$"{daysMonth}月第2周"] = dt.Columns.Contains("周2") == false ? "" : dt.Rows[i]["周2"].ToString();
row1[$"{daysMonth}月第3周"] = dt.Columns.Contains("周3") == false ? "" : dt.Rows[i]["周3"].ToString();
row1[$"{daysMonth}月第4周"] = dt.Columns.Contains("周4") == false ? "" : dt.Rows[i]["周4"].ToString();
row1[$"{daysMonth}月第5周"] = dt.Columns.Contains("周5") == false ? "" : dt.Rows[i]["周5"].ToString();
row1[$"{daysMonth}月第6周"] = dt.Columns.Contains("周6") == false ? "" : dt.Rows[i]["周6"].ToString();
row1["合计"] = dt.Rows[i]["ZBCount"].ToString();
row1["年度累计"] = dt.Rows[i]["YBCount"].ToString();
row1["1月"] = dt.Rows[i]["月1"] .ToString();
row1["2月"] = dt.Rows[i]["月2"] .ToString();
row1["3月"] = dt.Rows[i]["月3"] .ToString();
row1["4月"] = dt.Rows[i]["月4"] .ToString();
row1["5月"] = dt.Rows[i]["月5"] .ToString();
row1["6月"] = dt.Rows[i]["月6"] .ToString();
row1["7月"] = dt.Rows[i]["月7"] .ToString();
row1["8月"] = dt.Rows[i]["月8"] .ToString();
row1["9月"] = dt.Rows[i]["月9"] .ToString();
row1["10月"] = dt.Rows[i]["月10"].ToString();
row1["11月"] = dt.Rows[i]["月11"].ToString();
row1["12月"] = dt.Rows[i]["月12"].ToString();
table.Rows.Add(row1);
}
return table;
#endregion
}
public DataTable ExportAll4(string DateNow)
{
string date = DateNow;
var dates = date.ToDate();
var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"
SELECT DISTINCT * INTO #Temp1
FROM (SELECT DISTINCT
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
a.InvCode,
c.VenName,
d.InvName,
b.BLMX,
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.FinalResult IS NULL THEN a.IQCHeaderResult WHEN a.IQCHeaderResult IS NULL THEN
SQEEngineerResult WHEN SQEEngineerResult IS NULL THEN IQCGroupHeaderResult ELSE a.FinalResult END AS Result,
a.SQEEngineerRemark,
d.ClassName,
'第'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DN.MTIME))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)+'周' AS ZB,
BLFL.BadDesc,
a.IQCHeaderTime,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
UNION ALL
SELECT DISTINCT
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
'' AS ZB,
a.InvCode,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
C.InvName,
'' BLMX,
'' BRGDesc,'' BadDesc,
'' AS Result,
'' AS SQEEngineerRemark,
c.ClassName,
''AS YB,
NULL IQCHeaderTime,'' SQEFA,
'' SFJA
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='复判NG' AND A.SFJA='是'
AND MTIME BETWEEN '{0}' AND '{1}'
--SELECT * FROM #Temp1
SELECT DISTINCT * INTO #YearTemp1 FROM (SELECT DISTINCT
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
a.InvCode,
c.VenName,
d.InvName,
b.BLMX,
CASE when a.SQEEngineerResult='NG' THEN '复判NG' ELSE BLXX.BRGDesc END AS BRGDesc,--不良描述
CASE when a.SQEEngineerResult IS NULL THEN a.IQCGroupHeaderResult WHEN a.IQCGroupHeaderResult IS NULL THEN
Result ELSE a.SQEEngineerResult END AS Result,
a.SQEEngineerRemark,
d.ClassName,
'' AS ZB,
BLFL.BadDesc,
a.IQCHeaderTime,
a.EATTRIBUTE1 SQEFA,
CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
ELSE '否' END AS SFJA
FROM IcsMatCheckResult a
LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
UNION ALL
SELECT DISTINCT
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
'' AS ZB,
a.InvCode,
ISNULL(D.MUSERName,E.MUSERName) VENNAME,
C.InvName,
'' BLMX,
'' BRGDesc,'' BadDesc,
'' AS Result,
'' AS SQEEngineerRemark,
c.ClassName,
''AS YB,
NULL IQCHeaderTime,'' SQEFA,
'' SFJA
FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
and a.MUSER<>'admin'
) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='复判NG' AND A.SFJA='是'
AND MTIME BETWEEN '{2}' AND '{3}'
--SELECT * FROM #YearTemp1
-- SELECT COUNT(*) AS cc,InvCode,MTIME INTO #Table2 FROM #Temp1 GROUP BY InvCode,MTIME
--UNION
SELECT COUNT(*) AS cc, b.InvCode,b.MTIME,a.Num INTO #Table3 FROM [ICSMonthByNew] a
LEFT JOIN #YearTemp1 b ON a.Num=b.YB
GROUP BY b.InvCode,b.MTIME,a.Num
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Num
FROM #Table3 dr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +']'
,1,2,'')
--SELECT * FROM #Table3
SET @cols='SELECT * INTO #Table4 FROM #Table3
PIVOT ( SUM(cc) FOR Num IN ('+
@cols+') )a orDER BY InvCode
select distinct A.*,D.* from #Temp1 A
LEFT JOIN #YearTemp1 C ON A.InvCode=C.InvCode
LEFT JOIN #Table4 D ON A.InvCode=D.InvCode
Where A.InvCode is not null
order by A.MTIME desc
'
PRINT(@cols)
EXEC(@cols)
DROP TABLE #Temp1 DROP TABLE #YearTemp1 DROP TABLE #Table3
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year, WYear);
var dt=SqlHelper.GetDataTableBySql(sql);
string[] vs = new string[] { "对外改善日期", "入料日期", "月别", "料号", "厂商", "物料名称", "不良内容详细",
"判定结果", "不良分类", "备注", "物料类别", "当月第几周", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
// 创建一个新的 DataTable
DataTable table = new DataTable();
for (int j = 0; j < vs.Length; j++)
{
table.Columns.Add(vs[j], typeof(string));
}
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row1 = table.NewRow();
row1["对外改善日期"] = dt.Rows[i]["CHUJIANSHIJIAN"].ToString();
row1["入料日期"] = dt.Rows[i]["MTIME"].ToString();
row1["月别"] = dt.Rows[i]["YB"].ToString();
row1["料号"] = dt.Rows[i]["InvCode"].ToString();
row1["厂商"] = dt.Rows[i]["VenName"].ToString();
row1["物料名称"] = dt.Rows[i]["InvName"].ToString();
row1["不良内容详细"] = dt.Rows[i]["BLMX"].ToString();
row1["判定结果"] = dt.Rows[i]["Result"].ToString();
row1["不良分类"] = dt.Rows[i]["BadDesc"].ToString();
row1["备注"] = dt.Rows[i]["SQEEngineerRemark"].ToString();
row1["物料类别"] = dt.Rows[i]["ClassName"].ToString();
row1["当月第几周"] = dt.Rows[i]["ZB"].ToString();
row1["1月"] = dt.Rows[i]["1月"].ToString();
row1["2月"] = dt.Rows[i]["2月"].ToString();
row1["3月"] = dt.Rows[i]["3月"].ToString();
row1["4月"] = dt.Rows[i]["4月"].ToString();
row1["5月"] = dt.Rows[i]["5月"].ToString();
row1["6月"] = dt.Rows[i]["6月"].ToString();
row1["7月"] = dt.Rows[i]["7月"].ToString();
row1["8月"] = dt.Rows[i]["8月"].ToString();
row1["9月"] = dt.Rows[i]["9月"].ToString();
row1["10月"] = dt.Rows[i]["10月"].ToString();
row1["11月"] = dt.Rows[i]["11月"].ToString();
row1["12月"] = dt.Rows[i]["12月"].ToString();
table.Rows.Add(row1);
}
return table;
#endregion
}
public DataTable ExportAll5(string DateNow)
{
string date = DateNow;
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
#region [SQL]
string sql = @"SELECT top 20
Sum (count) Invcount,VenName
INTO #VanName
from
(SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.IQCHeaderResult ZGJG,
a.InvBatcgNo BatchCode,
1 as count
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT
REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
'' ZGJG,
F.BatchCode,
1 as count
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
) a
GROUP BY a.VenName
ORDER BY Invcount DESC
SELECT c.Num,c.[Month]
INTO #TempMonth
FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
ORDER BY c.Num
select '1' Num,'交货批次数' Type INTO #TempType UNION select '2' Num,'异常批次数' Type UNION select '3' Num,'批次不良率' Type
SELECT
VenName,
WLFL
INTO #temp1
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY VenName ORDER BY SL DESC) AS RowNum,
VenName,
WLFL,
SL
FROM (
SELECT
COUNT(*) AS SL,
VenName,
WLFL
FROM (
SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a WITH (NOLOCK)
LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT
REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
f.BatchCode,
FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
'' ZGJG
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
inner JOIN #VanName v ON J.VenName=v.VenName
WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
AND G.LotNo IS NULL
AND a.MUSER <> 'admin'
) AS A
GROUP BY VenName, WLFL
) AS GroupedResults
) AS RankedResults
WHERE RowNum <= 5
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempForecast
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
UNION ALL
SELECT DISTINCT REPLACE(C.InvCode, '编码规则', '') WLFL,
J.VenName VENNAME,
f.BatchCode,
FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
inner JOIN #VanName v ON J.VenName=v.VenName
WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
and a.MUSER<>'admin' AND a.MTIME>'{0}' AND a.MTIME<'{1}'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName --AND a.BatchCode=b.BatchCode
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT COUNT(*) AS Quantity,
FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
INTO #TempDetail
FROM #temp1 B
INNER JOIN (SELECT DISTINCT
REPLACE(d.InvCode, '编码规则', '') WLFL,
c.VenName,
a.InvBatcgNo BatchCode,
FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
a.IQCHeaderResult ZGJG
FROM IcsMatCheckResult a with (nolock)
LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
inner JOIN #VanName v ON c.VenName=v.VenName
WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}' AND a.IQCHeaderResult='NG'
) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName
GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
SELECT VenName,'1' AS Num,'交货批次数' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
INTO #TempForecastMonth
FROM #TempForecast
UNION ALL
SELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
FROM #TempDetail
UNION ALL
SELECT a.VenName,'3' AS Num,'批次不良率' AS Type,a.WLFL,CAST(CAST(ISNULL(b.Quantity,0)/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END)*100 AS DECIMAL(18,1)) AS VARCHAR(100))+'%' AS Quantity,a.CHUJIANSHIJIAN
FROM #TempForecast a
LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
INTO #TempForecastAll
FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
DECLARE @sql varchar(4000)
SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
FROM (SELECT [Month] FROM #TempMonth) AS a
SET @sql='SELECT VenName AS TOP厂商,Type AS 项目类别, WLFL AS 物料编码,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a order BY VenName,WLFL,Type '
PRINT(@sql)
EXEC(@sql)
DROP TABLE #TempMonth
DROP TABLE #TempDetail
DROP TABLE #TempForecast
DROP TABLE #TempForecastMonth
DROP TABLE #TempForecastAll
DROP TABLE #TempType
DROP TABLE #temp1
DROP TABLE #VanName
";
sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#region
public object GetDecimalDigits()
{
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
try
{
string sql = string.Empty;
sql = @"select Figure from ICSConfiguration where Code='Figure001' and Enable='1' and WorkPoint='" + WorkPoint + "'";
object Figure = SqlHelper.ExecuteScalar(sql);
return Figure;
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
}
#endregion
#region 订单备料明细查询
/// <summary>
/// 订单备料明细查询
/// </summary>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetMOIssueApplyNegDetail(string RCVCode, ref Pagination jqgridparam)
{
DataTable dt = new DataTable();
//object Figure = GetDecimalDigits();
List<DbParameter> parameter = new List<DbParameter>();
string sql = @"SELECT a.ID,a.RCVCode,a.Sequence,a.SourceSequence,a.SourceCode,a.InvCode,a.Quantity,a.Amount,a.RCVQuantity,a.WHCode,e.WarehouseName as WHName,a.Type
,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.WorkPoint,b.InvName,a.CreateDateTime,a.CreatePerson
,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,a.EATTRIBUTE9,a.EATTRIBUTE10
from ICSManufactureReceive a
left join ICSInventory b on a.InvCode = b.InvCode and a.WorkPoint = b.WorkPoint
left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
left join ICSWarehouse e on a.WHCode = e.WarehouseCode and a.WorkPoint=e.WorkPoint
where a.RCVCode = '" + RCVCode + "' ";
//sql = string.Format(sql, Figure);
DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
}
#endregion
public void ClearTemp()
{
Invmes.Rows.Clear();
}
public string ICSMOIssueSendBackAuditRollback(string keyValue)
{
return "";
}
#region 创建一步调拨单
/// <summary>
/// 创建一步调拨单
/// </summary>
/// <param name="keyValue"></param>
/// <returns></returns>
public string AddICSTransfer(string keyValue)
{
string returnValue = string.Empty;
string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
var sql = string.Empty;
try
{
var key = keyValue.ToJObject();
//验证是否同一个供应商
sql = $@"SELECT DISTINCT WarehouseCode FROM ICSWareHouseLotInfo where LotNo in ({key["Lots"]}) AND WorkPoint ='{WorkPoint}' ";
var dt1 = SqlHelper.CmdExecuteDataTable(sql);
if (dt1.Rows.Count > 1 || dt1.Rows.Count <= 0)
{
throw new Exception("创建调拨单的条码必须是同一个供应商的物料,操作失败");
}
TransferINHead addICSTransfer = new TransferINHead();
List<TransferINBody> transferINBodies = new List<TransferINBody>();
//查询单据信息
sql = $@"SELECT Sum(Quantity) Quantity,WarehouseCode OutWhCode,LocationCode OutBinCode,InvCode from ICSWareHouseLotInfo WHERE LotNo in ({key["Lots"]}) AND WorkPoint='{WorkPoint}' GROUP BY WarehouseCode,LocationCode,InvCode ";
var dt = SqlHelper.CmdExecuteDataTable(sql);
if (dt.Rows.Count <= 1)
{
throw new Exception("条码信息有误请确认,操作失败");
}
addICSTransfer.DocDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
addICSTransfer.OrgCode = WorkPoint;
for (int i = 0; i < dt.Rows.Count; i++)
{
TransferINBody transferINBody =
new TransferINBody
{
Quantity = (dt.Rows[i]["Quantity"]).ToDecimal(),
InvCode = dt.Rows[i]["InvCode"].ToString(),
OutWhCode = dt.Rows[i]["OutWhCode"].ToString(),
OutBinCode = dt.Rows[i]["OutBinCode"].ToString(),
//SupplierCode = dt.Rows[0]["VenCode"].ToString(),
INWhCode = key["WarehouseCode"].ToString(),
INBinCode = key["LocationCode"].ToString(),
Sequence = i + 1
};
transferINBodies.Add(transferINBody);
}
addICSTransfer.details = transferINBodies;
#region 调用ERP接口
if (!addICSTransfer.IsEmpty())
{
string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "U9OneStepTransferDocIn/Create";
var erpinput = JsonConvert.SerializeObject(addICSTransfer);
string result1 = HttpPost(APIURL, erpinput);
JObject Obj = (JObject)JsonConvert.DeserializeObject(result1);//或者JObject jo = JObject.Parse(jsonText);
string MessAge = Obj["Message"].ToString();
string Success = Obj["Success"].ToString();
if (Success.ToUpper() == "FALSE")
{
throw new Exception(MessAge);
}
}
#endregion
return "";
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
#region 接口api解析
//接口api解析
public static string HttpPost(string url, string body)
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "application/json; charset=utf-8";
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region 获取当前月份每周的开始时间和结束时间
/// <summary>
/// 获取当前月份每周的开始时间和结束时间
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static List<WeekRange> GetCurrentMonthWeeks(string date)
{
var dates = date.ToDate();
var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1);
var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth);
var weeks = new List<WeekRange>();
var currentWeekStart = GetFirstMondayOfMonth(firstDayOfMonth);
while (currentWeekStart <= lastDayOfMonth)
{
var currentWeekEnd = currentWeekStart.AddDays(7);
if (currentWeekEnd > lastDayOfMonth)
{
// 如果是这个月的最后一天,计算下月第一天
currentWeekEnd = lastDayOfMonth.Date;
}
weeks.Add(new WeekRange
{
Start = currentWeekStart.ToString("yyyy-mm-dd"),
End = currentWeekEnd.ToString("yyyy-mm-dd")
});
// Move to the next week
currentWeekStart = currentWeekStart.AddDays(7);
}
return weeks;
}
#endregion
#region 获取当年每月的开始时间和结束时间
/// <summary>
/// 获取当年每月的开始时间和结束时间
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static List<MonthRange> GetMonthsOfYear(int year)
{
var months = new List<MonthRange>();
for (int month = 1; month <= 12; month++)
{
var firstDayOfMonth = new DateTime(year, month, 1);
DateTime lastDayOfMonth;
if (month == 12)
{
// 如果是12月,则下一个月是下一年的1月
lastDayOfMonth = new DateTime(year + 1, 1, 1);
}
else
{
// 否则,是下一个月的第一天
lastDayOfMonth = new DateTime(year, month + 1, 1);
}
months.Add(new MonthRange
{
Start = firstDayOfMonth.ToString("yyyy-mm-dd"),
End = lastDayOfMonth.ToString("yyyy-mm-dd")
});
}
return months;
}
#endregion
private static DateTime GetFirstMondayOfMonth(DateTime firstDayOfMonth)
{
var daysUntilMonday = (7 - (int)firstDayOfMonth.DayOfWeek + 7) % 7;
return firstDayOfMonth.AddDays(daysUntilMonday);
}
public DataTable SelectTableColumnName(string BeginTime, string EndTime)
{
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
string sql = $@"DECLARE @StartDate DATE = '{BeginTime}';
DECLARE @EndDate DATE = '{EndTime}';
WITH DateSequence AS (
SELECT @StartDate AS DateValue
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM DateSequence
WHERE DateValue < @EndDate
)
SELECT CONVERT(NVARCHAR(50),DateValue,23) DateValue
FROM DateSequence
OPTION (MAXRECURSION 0);";
DataTable dt = SqlHelper.GetDataTableBySql(sql);
return dt;
}
#region 订单所在的日期的订单未交货数量
/// <summary>
/// 订单所在的日期的订单未交货数量
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetPOUnarrivedQuantity(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
string StartDate = queryParam["DateNow"].ToString();
string EndDate = queryParam["DateNow1"].ToString();
string sql = $@"
WITH PurchaseOrders AS (
SELECT
CONVERT(NVARCHAR(50), CreateDateTime, 23) AS PODate,
InvCode ,
InvName ,
VenCode ,
VenName ,
sum(Quantity) - sum(ISNULL(RECEIVEQTY, 0)) + Sum(ISNULL(NGQTY, 0)) AS QTY
FROM (
-- 这里包含采购订单的逻辑,与之前相同,但移除了DISTINCT
SELECT
po.POCode,
po.Sequence,
po.CreateDateTime,
po.VenCode,
ven.VenName,
po.InvCode,
inv.InvName,
po.Quantity,
cc.RECEIVEQTY,
gg.NGQTY
FROM
dbo.ICSPurchaseOrder po WITH (NOLOCK)
LEFT JOIN dbo.ICSINVENTORY inv WITH (NOLOCK) ON po.InvCode = inv.INVCODE AND po.WorkPoint = inv.WorkPoint
LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON po.VenCode = ven.VenCode
LEFT JOIN (
SELECT
cc.TransCode,
cc.TransSequence,
bb.InvCode,
SUM(aa.DNQuantity) AS RECEIVEQTY
FROM
ICSASNdetail aa WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
LEFT JOIN
ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
GROUP BY
cc.TransCode,
cc.TransSequence,
bb.InvCode
) cc ON po.POCode = cc.TransCode AND po.Sequence = cc.TransSequence
LEFT JOIN (
SELECT
c.TransCode,
c.TransSequence,
SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
FROM
ICSInspection a WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot b WITH (NOLOCK) ON a.LotNo = b.lotno
LEFT JOIN
ICSInventoryLotDetail c WITH (NOLOCK) ON b.LOTNO = c.LotNO
WHERE
b.EATTRIBUTE2 IS NULL
GROUP BY
c.TransCode,
c.TransSequence
) gg ON po.POCode = gg.TransCode AND po.Sequence = gg.TransSequence
WHERE
po.Status = '2'
AND po.ReleaseState = '1'
AND po.WorkPoint = 'KC47'
AND po.CreateDateTime BETWEEN '{StartDate}' AND '{EndDate}'
AND (po.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
UNION ALL
-- 这里包含外包订单的逻辑,与之前相同,但移除了DISTINCT并添加了OrderType
SELECT
a.OOCode AS POCode,
a.Sequence,
a.CreateDateTime,
a.VenCode,
ven.VenName,
a.InvCode,
c.InvName,
a.Quantity,
cc.RECEIVEQTY,
gg.NGQTY
FROM
dbo.ICSOutsourcingOrder a
LEFT JOIN dbo.ICSINVENTORY c WITH (NOLOCK) ON a.InvCode = c.INVCODE AND a.WorkPoint = c.WorkPoint
LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON a.VenCode = ven.VenCode
LEFT JOIN (
SELECT
cc.TransCode,
cc.TransSequence,
bb.InvCode,
SUM(aa.Quantity) AS RECEIVEQTY
FROM
ICSOASNDetail aa WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
LEFT JOIN
ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
GROUP BY
cc.TransCode,
cc.TransSequence,
bb.InvCode
) cc ON a.OOCode = cc.TransCode AND a.Sequence = cc.TransSequence
LEFT JOIN (
-- 注意这里的修正:使用a.OOCode而不是cc.TransCode进行连接
SELECT
c.TransCode,
c.TransSequence,
SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
FROM
ICSInspection a
LEFT JOIN ICSInventoryLot b ON a.LotNo = b.lotno
LEFT JOIN ICSInventoryLotDetail c ON b.LOTNO = c.LotNO
WHERE
b.EATTRIBUTE2 IS NULL
GROUP BY
c.TransCode,
c.TransSequence
) gg ON a.OOCode = gg.TransCode AND a.Sequence = gg.TransSequence
WHERE
a.ReleaseState = '1'
AND a.WorkPoint = 'KC47'
AND a.Status = '2'
AND a.CreateDateTime BETWEEN '{StartDate}' AND '{EndDate}'
AND (a.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
) AS CombinedOrders
GROUP BY InvCode ,InvName,VenCode,VenName,CONVERT(NVARCHAR(50), CreateDateTime, 23)
),
PivotData AS (
SELECT
*
FROM
PurchaseOrders
)
-- 将数据插入临时表(如果需要,也可以直接使用CTE进行PIVOT)
SELECT * INTO #tempPivotData FROM PivotData
DECLARE @StartDate DATE = '{StartDate}';
DECLARE @EndDate DATE = '{EndDate}';
WITH DateSequence AS (
SELECT @StartDate AS DateValue
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM DateSequence
WHERE DateValue < @EndDate
)
SELECT CONVERT(NVARCHAR(50),DateValue,23) PODate into #table1
FROM DateSequence
OPTION (MAXRECURSION 0)
-- 构建PIVOT查询的动态SQL
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STRING_AGG('[' + PODate + ']', ',') WITHIN GROUP (ORDER BY PODate)
FROM (SELECT DISTINCT PODate FROM #table1) AS DateList
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = '
SELECT * FROM (
SELECT
*
FROM
#tempPivotData
) AS SourceTable
PIVOT (
SUM(QTY) FOR PODate IN (' + @cols + ')
) AS PivotTable
'
-- 执行动态SQL
EXEC sp_executesql @sql
-- 清理临时表
DROP TABLE #tempPivotData
DROP TABLE #table1
";
return SqlHelper.GetDataTableBySql(sql);
}
#endregion
#region 订单所在的日期的订单未交货数量导出
/// <summary>
/// 订单所在的日期的订单未交货数量导出
/// </summary>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public DataTable ExportAll7(string beginTime, string endTime)
{
#region [SQL]
string sql = $@"WITH PurchaseOrders AS (
SELECT
CONVERT(NVARCHAR(50), CreateDateTime, 23) AS PODate,
InvCode as '物料编码',
InvName as '物料名称',
VenCode as '供应商编码',
VenName as '供应商名称',
sum(Quantity) - sum(ISNULL(RECEIVEQTY, 0)) + Sum(ISNULL(NGQTY, 0)) AS QTY
FROM (
-- 这里包含采购订单的逻辑,与之前相同,但移除了DISTINCT
SELECT
po.POCode,
po.Sequence,
po.CreateDateTime,
po.VenCode,
ven.VenName,
po.InvCode,
inv.InvName,
po.Quantity,
cc.RECEIVEQTY,
gg.NGQTY
FROM
dbo.ICSPurchaseOrder po WITH (NOLOCK)
LEFT JOIN dbo.ICSINVENTORY inv WITH (NOLOCK) ON po.InvCode = inv.INVCODE AND po.WorkPoint = inv.WorkPoint
LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON po.VenCode = ven.VenCode
LEFT JOIN (
SELECT
cc.TransCode,
cc.TransSequence,
bb.InvCode,
SUM(aa.DNQuantity) AS RECEIVEQTY
FROM
ICSASNdetail aa WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
LEFT JOIN
ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
GROUP BY
cc.TransCode,
cc.TransSequence,
bb.InvCode
) cc ON po.POCode = cc.TransCode AND po.Sequence = cc.TransSequence
LEFT JOIN (
SELECT
c.TransCode,
c.TransSequence,
SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
FROM
ICSInspection a WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot b WITH (NOLOCK) ON a.LotNo = b.lotno
LEFT JOIN
ICSInventoryLotDetail c WITH (NOLOCK) ON b.LOTNO = c.LotNO
WHERE
b.EATTRIBUTE2 IS NULL
GROUP BY
c.TransCode,
c.TransSequence
) gg ON po.POCode = gg.TransCode AND po.Sequence = gg.TransSequence
WHERE
po.Status = '2'
AND po.ReleaseState = '1'
AND po.WorkPoint = 'KC47'
AND po.CreateDateTime BETWEEN '{beginTime}' AND '{endTime}'
AND (po.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
UNION ALL
-- 这里包含外包订单的逻辑,与之前相同,但移除了DISTINCT并添加了OrderType
SELECT
a.OOCode AS POCode,
a.Sequence,
a.CreateDateTime,
a.VenCode,
ven.VenName,
a.InvCode,
c.InvName,
a.Quantity,
cc.RECEIVEQTY,
gg.NGQTY
FROM
dbo.ICSOutsourcingOrder a
LEFT JOIN dbo.ICSINVENTORY c WITH (NOLOCK) ON a.InvCode = c.INVCODE AND a.WorkPoint = c.WorkPoint
LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON a.VenCode = ven.VenCode
LEFT JOIN (
SELECT
cc.TransCode,
cc.TransSequence,
bb.InvCode,
SUM(aa.Quantity) AS RECEIVEQTY
FROM
ICSOASNDetail aa WITH (NOLOCK)
LEFT JOIN
ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
LEFT JOIN
ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
GROUP BY
cc.TransCode,
cc.TransSequence,
bb.InvCode
) cc ON a.OOCode = cc.TransCode AND a.Sequence = cc.TransSequence
LEFT JOIN (
-- 注意这里的修正:使用a.OOCode而不是cc.TransCode进行连接
SELECT
c.TransCode,
c.TransSequence,
SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
FROM
ICSInspection a
LEFT JOIN ICSInventoryLot b ON a.LotNo = b.lotno
LEFT JOIN ICSInventoryLotDetail c ON b.LOTNO = c.LotNO
WHERE
b.EATTRIBUTE2 IS NULL
GROUP BY
c.TransCode,
c.TransSequence
) gg ON a.OOCode = gg.TransCode AND a.Sequence = gg.TransSequence
WHERE
a.ReleaseState = '1'
AND a.WorkPoint = 'KC47'
AND a.Status = '2'
AND a.CreateDateTime BETWEEN '{beginTime}' AND '{endTime}'
AND (a.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
) AS CombinedOrders
GROUP BY InvCode ,InvName,VenCode,VenName,CONVERT(NVARCHAR(50), CreateDateTime, 23)
),
PivotData AS (
SELECT
*
FROM
PurchaseOrders
)
-- 将数据插入临时表(如果需要,也可以直接使用CTE进行PIVOT)
SELECT * INTO #tempPivotData FROM PivotData
DECLARE @StartDate DATE = '{beginTime}';
DECLARE @EndDate DATE = '{endTime}';
WITH DateSequence AS (
SELECT @StartDate AS DateValue
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM DateSequence
WHERE DateValue < @EndDate
)
SELECT CONVERT(NVARCHAR(50),DateValue,23) PODate into #table1
FROM DateSequence
OPTION (MAXRECURSION 0)
-- 构建PIVOT查询的动态SQL
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STRING_AGG('[' + PODate + ']', ',') WITHIN GROUP (ORDER BY PODate)
FROM (SELECT DISTINCT PODate FROM #table1) AS DateList
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = '
SELECT * FROM (
SELECT
*
FROM
#tempPivotData
) AS SourceTable
PIVOT (
SUM(QTY) FOR PODate IN (' + @cols + ')
) AS PivotTable
'
-- 执行动态SQL
EXEC sp_executesql @sql
-- 清理临时表
DROP TABLE #tempPivotData
DROP TABLE #table1;";
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
#region 供应商交货的频率
/// <summary>
/// 供应商交货的频率,
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetVenDeliveries(string queryJson)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
//获取传递的年份和月份
string StartDate = queryParam["DateNow"].ToString();
string EndDate = queryParam["DateNow1"].ToString();
string sql = $@"
WITH PurchaseOrders AS (
SELECT A.InvCode,A.InvName,A.InvStd,A.VenCode,A.VenName,A.MTIME,sum(GS) GS FROM (SELECT DISTINCT
a.ASNCode,a.VenCode,c.VenName, 1 GS,
a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
FROM ICSDeliveryNotice a WITH (NOLOCK)
inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
where a.DNType='1' AND a.MTIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT DISTINCT
a.OASNCode ASNCode,a.VenCode,c.VenName,1 GS,
a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
FROM ICSODeliveryNotice a WITH (NOLOCK)
inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
where a.ODNType='1'AND a.MTIME BETWEEN '{StartDate}' AND '{EndDate}' ) A
GROUP BY A.InvCode,A.InvName,A.InvStd,A.VenCode,A.VenName,A.MTIME
),
PivotData AS (
SELECT
InvCode,
InvName,
InvStd,
VenCode,
VenName,
MTIME,
GS
FROM
PurchaseOrders
)
-- 将数据插入临时表(如果需要,也可以直接使用CTE进行PIVOT)
SELECT * INTO #tempPivotData FROM PivotData
-- 构建PIVOT查询的动态SQL
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STRING_AGG('[' + MTIME + ']', ',') WITHIN GROUP (ORDER BY MTIME)
FROM (SELECT DISTINCT MTIME FROM #tempPivotData) AS DateList
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = '
SELECT * FROM (
SELECT
InvCode,
InvName,
InvStd,
VenCode,
VenName,
MTIME,
GS
FROM
#tempPivotData
) AS SourceTable
PIVOT (
SUM(GS) FOR MTIME IN (' + @cols + ')
) AS PivotTable'
-- 执行动态SQL
EXEC sp_executesql @sql
-- 清理临时表
DROP TABLE #tempPivotData
";
return SqlHelper.GetDataTableBySql(sql);
}
#endregion
#region 供应商交货的频率导出
/// <summary>
/// 供应商交货的频率导出
/// </summary>
/// <param name="beginTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public DataTable ExportAll8(string beginTime, string endTime)
{
#region [SQL]
string sql = $@"WITH PurchaseOrders AS (
SELECT A.InvCode '物料编码',A.InvName '物料名称',A.VenCode '供应商编码',A.VenName '供应商名称',A.MTIME,sum(GS) GS FROM (SELECT DISTINCT
a.ASNCode,a.VenCode,c.VenName, 1 GS,
a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
FROM ICSDeliveryNotice a WITH (NOLOCK)
inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
where a.DNType='1' AND a.MTIME BETWEEN '{beginTime}' AND '{endTime}'
UNION ALL
SELECT DISTINCT
a.OASNCode ASNCode,a.VenCode,c.VenName,1 GS,
a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
FROM ICSODeliveryNotice a WITH (NOLOCK)
inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
where a.ODNType='1'AND a.MTIME BETWEEN '{beginTime}' AND '{endTime}' ) A
GROUP BY A.InvCode,A.InvName,A.VenCode,A.VenName,A.MTIME
),
PivotData AS (
SELECT
*
FROM
PurchaseOrders
)
-- 将数据插入临时表(如果需要,也可以直接使用CTE进行PIVOT)
SELECT * INTO #tempPivotData FROM PivotData
DECLARE @StartDate DATE = '{beginTime}';
DECLARE @EndDate DATE = '{endTime}';
WITH DateSequence AS (
SELECT @StartDate AS DateValue
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM DateSequence
WHERE DateValue < @EndDate
)
SELECT CONVERT(NVARCHAR(50),DateValue,23) MTIME into #table1
FROM DateSequence
OPTION (MAXRECURSION 0)
-- 构建PIVOT查询的动态SQL
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STRING_AGG('[' + MTIME + ']', ',') WITHIN GROUP (ORDER BY MTIME)
FROM (SELECT MTIME FROM #table1) AS DateList
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = '
SELECT * FROM (
SELECT
*
FROM
#tempPivotData
) AS SourceTable
PIVOT (
SUM(GS) FOR MTIME IN (' + @cols + ')
) AS PivotTable'
-- 执行动态SQL
EXEC sp_executesql @sql
-- 清理临时表
DROP TABLE #tempPivotData
DROP TABLE #table1
";
return SqlHelper.GetDataTableBySql(sql);
#endregion
}
#endregion
}
/// <summary>
/// api/Rd1011/Approve 调用产成品入库单、材料出库单审核
/// </summary>
public class ApproveInput
{
public string ID { get; set; }//ID
public string User { get; set; }//用户
public string Type { get; set; }//类型(入库,倒冲)
public string WorkPoint { get; set; }//站点
public bool UpdateStock { get; set; }//是否更新现存量
public DateTime MTime { get; set; }//时间
public bool UpdateTodoQuantity { get; set; }//更新待出入数量
}
}