|
|
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 #temp1FROM ( 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 RankedResultsWHERE RowNum <= 3ORDER 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,CHUJIANSHIJIANINTO #TempForecastMonthFROM #TempForecastUNION ALLSELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIANFROM #TempDetailUNION ALLSELECT 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.CHUJIANSHIJIANFROM #TempForecast aLEFT 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 #temp1FROM ( 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 RankedResultsWHERE RowNum <= 3ORDER 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,CHUJIANSHIJIANINTO #TempForecastMonthFROM #TempForecastUNION ALLSELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIANFROM #TempDetailUNION ALLSELECT 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.CHUJIANSHIJIANFROM #TempForecast aLEFT 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 #temp1FROM ( 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 RankedResultsWHERE 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,CHUJIANSHIJIANINTO #TempForecastMonthFROM #TempForecastUNION ALLSELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIANFROM #TempDetailUNION ALLSELECT 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.CHUJIANSHIJIANFROM #TempForecast aLEFT 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 #temp1FROM ( 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 RankedResultsWHERE 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,CHUJIANSHIJIANINTO #TempForecastMonthFROM #TempForecastUNION ALLSELECT VenName,'2' AS Num,'异常批次数' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIANFROM #TempDetailUNION ALLSELECT 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.CHUJIANSHIJIANFROM #TempForecast aLEFT 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.EATTRIBUTE10from 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 DateSequenceOPTION (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 #table1FROM DateSequenceOPTION (MAXRECURSION 0)
-- 构建PIVOT查询的动态SQLDECLARE @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 SourceTablePIVOT ( SUM(QTY) FOR PODate IN (' + @cols + ')) AS PivotTable
'
-- 执行动态SQLEXEC sp_executesql @sql
-- 清理临时表DROP TABLE #tempPivotDataDROP 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 ALLSELECT 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}' ) AGROUP 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 #table1FROM DateSequenceOPTION (MAXRECURSION 0)
-- 构建PIVOT查询的动态SQLDECLARE @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 SourceTablePIVOT ( SUM(GS) FOR MTIME IN (' + @cols + ')) AS PivotTable'
-- 执行动态SQLEXEC sp_executesql @sql
-- 清理临时表DROP TABLE #tempPivotDataDROP 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; }//更新待出入数量
}}
|