|
|
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.Data; using System.Data.Common; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace NFine.Application.SRM { public class EcharsPerFormApp : RepositoryFactory<ICSVendor> { public static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); } private DataTable ReSet_PurDT(DataTable dt, int maxweek, int Year) { try { if (Year == DateTime.Now.Year) { int CurrentWeek = GetWeekOfYear(DateTime.Now); if (dt != null && dt.Columns.Count > 0 && dt.Columns.Contains("Week")) { List<string> colNames = new List<string>(); for (int j = 0; j < dt.Columns.Count; j++) { if (dt.Columns[j].ColumnName != "Week") { colNames.Add(dt.Columns[j].ColumnName); } } for (int i = CurrentWeek; i <= maxweek; i++) { if (dt.Select("Week=" + i).Length == 0) { DataRow dr = dt.NewRow(); dr["Week"] = i; foreach (string name in colNames) { dr[name] = 0; } dt.Rows.Add(dr); } } DataView dv = dt.DefaultView; dv.Sort = " Week "; return dv.ToTable(); } return dt; } else {
return dt; }
} catch (Exception ex) { return dt; } } #region JQDC
public DataTable GetJQDC(string Year) { try { int MaxWeek = GetMaxWeek(Year); string sql = @"
DECLARE @YearStr varchar(10) ='{0}' DECLARE @YearStrNext varchar(10) = '' set @YearStrNext =Convert(decimal(18,0),@YearStr) +1 if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS')) drop table #TempSS
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days')) drop table ##Days SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
select week, case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom, case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo into ##Days from( select vv.NUMBER+1 week, DATEADD(DAY ,vv.NUMBER*7,ss.StartDay) DayFrom ,DATEADD(ss ,-1,DATEADD(DAY ,(vv.NUMBER+1)*7,ss.StartDay) ) DayTo from master.dbo.spt_values VV LEFT JOIN #TempSS SS ON 1=1 where vv.type='p' and vv.number<=52 ) ff
select sum(Num)as PoSum,gg.weekStr,isnull(SUM(ss.Nums),0)as prsum, CASE WHEN ISNULL(SUM(ss.Nums),0)>0 THEN CAST(CAST(ISNULL(SUM(ss.Nums),0) AS DECIMAL(10, 2))/CAST(sum(Num) AS DECIMAL(10, 2)) AS DECIMAL(10, 2)) ELSE'0' END SUMLV,CASE WHEN ISNULL(SUM(ss.Nums),0)>0 THEN CAST(CAST(ISNULL(SUM(hh.Numss),0) AS DECIMAL(10, 2))/CAST(sum(Num) AS DECIMAL(10, 2)) AS DECIMAL(10, 2)) ELSE'0' END sumdjd from ( select a.*,dd.[week] weekStr ,case when a.PreArriveDate is not null then 1 else 0 end Num from ##Days dd left join icspo_pomain a on dd.DayFrom<=a.PreArriveDate and dd.DayTo>=a.PreArriveDate ) gg left join ( select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums from ##Days dd left join ICSPOArrive a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime ) ss on gg.POCode=ss.POCode and gg.weekStr<=24 LEFT JOIN ( select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Numss from ##Days dd left join ICSPOArrive a on dd.DayFrom<=DATEADD( DAY,7,a.MTime) and dd.DayTo>=DATEADD( DAY,7,a.MTime) ) hh on gg.POCode=hh.POCode and gg.weekStr<=" + MaxWeek + @" group by gg.weekStr ORDER BY gg.weekStr ";
sql = string.Format(sql, Year); DataTable dt = Repository().FindTableBySql(sql.ToString()); dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year)); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region X轴上不同维度的日期,列表中的动态列头
public DataTable GetPoQuantity(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT a.WeekNumber FROM #Days a ORDER BY CAST(a.WeekNumber AS int) ASC DROP TABLE #Days";
} else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT * FROM #Months
DROP TABLE #Months";
} else if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}' -- 请用实际值替换这里
DECLARE @EndDate DATE = '{1}' -- 请用实际值替换这里 ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0) SELECT * FROM #AllDates DROP TABLE #AllDates";
} sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 实际采购数量柱状体显示
public DataTable GetPoSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 实际到货数量柱状体显示
public DataTable GetPorSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSDeliveryNotice b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 开票金额柱状显示
public DataTable GetInvoicePriceSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSInvoiceNew b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += @"LEFT JOIN dbo.ICSInvoiceNewDetail c ON b.DocNo=c.DocNo AND b.WorkPoint=c.WorkPoint GROUP BY a.WeekNumber,b.SupplierCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
} if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSInvoiceNew b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += @"LEFT JOIN dbo.ICSInvoiceNewDetail c ON b.DocNo=c.DocNo AND b.WorkPoint=c.WorkPoint GROUP BY a.WeekNumber,b.SupplierCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSInvoiceNew b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += @"LEFT JOIN dbo.ICSInvoiceNewDetail c ON b.DocNo=c.DocNo AND b.WorkPoint=c.WorkPoint
GROUP BY a.WeekNumber,b.SupplierCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
" SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购周期柱状显示
public DataTable GetProcurementcycle(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT a.WeekNumber FROM #Days a ORDER BY CAST(a.WeekNumber AS int) ASC DROP TABLE #Days";
} else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT * FROM #Months
DROP TABLE #Months";
} else if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}' -- 请用实际值替换这里
DECLARE @EndDate DATE = '{1}' -- 请用实际值替换这里 ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0) SELECT * FROM #AllDates DROP TABLE #AllDates";
} sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购订单单价柱状显示
public DataTable GetJHImplementSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT InvCode INTO #tEMPDDDD FROM #tempcccc WHERE InvCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.InvCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" + " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT InvCode INTO #tEMPDDDD FROM #tempcccc WHERE InvCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.InvCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" + " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购金额(订单金额)占比
public DataTable GetPoPriceSumSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT InvCode INTO #tEMPDDDD FROM #tempcccc WHERE InvCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.InvCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" + " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT InvCode INTO #tEMPDDDD FROM #tempcccc WHERE InvCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.InvCode AS Type,kk2.WeekNumber,ISNULL(cc.UnitPrice,0)UnitPrice, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" + " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 供应商数量
public DataTable GetVendorQuantitySearcs() { try { string sql = string.Empty;
sql = "SELECT COUNT(*) AS Venqty FROM dbo.ICSVendor "; DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 交期一致率
public DataTable GetPOMaintenanceSearcs() { try { string sql = string.Empty;
sql = @"
SELECT CAST( (SELECT COUNT(*) * 1.0 FROM dbo.ICSPurchaseOrder WHERE CONVERT(NVARCHAR(20), PlanArriveDate, 23) = CONVERT(NVARCHAR(20), ArriveDate, 23) AND ArriveDate IS NOT NULL) / (SELECT COUNT(*) * 1.0 FROM dbo.ICSPurchaseOrder WHERE ArriveDate IS NOT NULL) AS DECIMAL(16,2) ) AS Ratio ";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 不良次数柱状图显示
public DataTable GetVendorQualifiedQuantitySearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSInspection b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence WHERE b.QualifiedQuantity>0 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " + " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSInspection b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence WHERE b.QualifiedQuantity>0 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSInspection b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence WHERE b.QualifiedQuantity>0 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 退货次数柱状图显示
public DataTable GetDeliveryNoticeSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE DNType='2'";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " + " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE DNType='2' ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime WHERE DNType='2' ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 退货率数柱状图显示
public DataTable GetDeliveryNoticeType2Searcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT CASE WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1'THEN Quantity ELSE 0 END) END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE 1=1";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " + " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT CASE WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT CASE WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1'THEN Quantity ELSE 0 END) END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 交期及时率数柱状图显示
public DataTable GetDeliveryNoticeType2JQSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE 1=1";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " + " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" + " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 退货次数柱状图显示
public DataTable GetVendorSORQUOTATIONSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { string sql = string.Empty; if (radios == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0);
SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #AllDates a LEFT JOIN ICSSORQUOTATION b ON a.WeekStart<=b.CREATETIME and a.WeekEnd>=b.CREATETIME WHERE 1=1";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") "; }
sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY a.WeekNumber ASC " + "" + " SELECT DISTINCT VENDORCODE INTO #tEMPDDDD FROM #tempcccc WHERE VENDORCODE IS NOT NULL " + "" + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " + " SELECT kk.VENDORCODE AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " + " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" + " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates"; } else if (radios == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate) -- 假设周日是每周的最后一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber = DATEPART(WEEK, WeekStart) -- 如果需要基于周日为每周第一天的周数 INTO #Days FROM DateRanges OPTION (MAXRECURSION 0) -- 由于我们使用了递归 CTE,所以需要设置 MAXRECURSION 选项
SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #Days a LEFT JOIN ICSSORQUOTATION b ON a.WeekStart<=b.CREATETIME and a.WeekEnd>=b.CREATETIME WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VENDORCODE INTO #tEMPDDDD FROM #tempcccc WHERE VENDORCODE IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VENDORCODE AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" + " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days"; } else if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}'
;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0)
SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #Months a LEFT JOIN ICSSORQUOTATION b ON a.MonthStart<=b.CREATETIME and a.MonthEnd>=b.CREATETIME WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and b.InvCode like '%" + InvName + "%'"; }
sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY CAST(a.WeekNumber AS int) ASC " + "" + " SELECT DISTINCT VENDORCODE INTO #tEMPDDDD FROM #tempcccc WHERE VENDORCODE IS NOT NULL " + " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " SELECT kk.VENDORCODE AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" + " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" + " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months"; }
sql = string.Format(sql, BegionDate, EndDate); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 退货次数柱状图显示
public DataTable GetPoJBPriceSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { DataTable dt = new DataTable(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (radios == "月") { sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
DECLARE @EndDate DATE = '{1}'; -- 替换为您的结束日期
-- 计算时间段内每个月的总采购成本 WITH MonthlyCosts AS ( SELECT InvCode, DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month, SUM(UnitPrice*Quantity) AS total_cost FROM dbo.ICSPurchaseOrder WHERE MTIME BETWEEN @StartDate AND @EndDate";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and InvCode like '%" + InvName + "%'"; } sql += @" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0), invCode
), -- 计算同比降本额(当前月与前一年同月对比) YearOverYear AS ( SELECT bbb.InvCode, bbb.month, bbb.total_cost AS current_month_cost, COALESCE(previous.total_cost, 0) AS previous_month_cost, bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_mom FROM MonthlyCosts bbb inner JOIN MonthlyCosts previous ON bbb.month = DATEADD(MONTH, 1, previous.month) AND previous.InvCode = bbb.InvCode WHERE DATEADD(MONTH, -1, bbb.month) BETWEEN @StartDate AND @EndDate -- 确保前一年同期在时间段内 )
--查询每月降本额结果 SELECT mom.InvCode, mom.month, mom.current_month_cost, mom.previous_month_cost, mom.cost_reduction_mom AS monthly_cost_reduction FROM YearOverYear mom ORDER BY mom.month;
";
} else if (radios == "年") { sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
DECLARE @EndDate DATE = '{1}'; -- 替换为您的结束日期
-- 计算时间段内每个月的总采购成本 WITH MonthlyCosts AS ( SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month, SUM(UnitPrice*Quantity) AS total_cost FROM dbo.ICSPurchaseOrder WHERE MTIME BETWEEN @StartDate AND @EndDate";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and InvCode like '%" + InvName + "%'"; } sql += @" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
), -- 计算同比降本额(当前月与前一年同月对比) YearOverYear AS ( SELECT bbb.month, bbb.total_cost AS current_year_cost, COALESCE(previous.total_cost, 0) AS previous_year_cost, bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_yoy FROM MonthlyCosts bbb LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(YEAR, 1, previous.month) WHERE DATEADD(YEAR, -1, bbb.month) BETWEEN @StartDate AND @EndDate -- 确保前一年同期在时间段内 )
-- 查询每年降本额(需要对月份进行汇总以得到年度数据) SELECT YEAR(yoy.month) AS month, SUM(yoy.current_year_cost) AS current_month_cost, SUM(yoy.previous_year_cost) AS previous_year_total_cost, SUM(yoy.cost_reduction_yoy) AS yearly_cost_reduction FROM YearOverYear yoy GROUP BY YEAR(yoy.month) ORDER BY month;";
}
sql = string.Format(sql, BegionDate, EndDate); DataTable dtr = SqlHelper.GetDataTableBySql(sql); if (dtr != null && dtr.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dtr;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 投标周期柱状图显示
public DataTable GetBidChartsTBSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { DataTable dt = new DataTable(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (radios == "月") { sql = @"
SELECT a.SupplierCode, YEAR(d.StarTime)+ MONTH(d.StarTime) AS BidYear, AVG(DATEDIFF(DAY, d.StarTime, b.MTIME)) AS average_bid_cycle_days FROM ICSBidInfo a LEFT JOIN ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint WHERE b.MTIME IS NOT NULL ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and a.InvCode like '%" + InvName + "%'"; } if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and a.SupplierCode like '%" + VenName + "%'"; } sql += @" GROUP BY
a.SupplierCode, YEAR(d.StarTime), MONTH(d.StarTime) ORDER BY a.SupplierCode, BidYear ";
} else if (radios == "年") { sql = @" SELECT
a.SupplierCode, YEAR(d.StarTime) AS BidYear, AVG(DATEDIFF(DAY, d.StarTime, b.MTIME)) AS average_bid_cycle_days FROM ICSBidInfo a LEFT JOIN ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint WHERE b.MTIME IS NOT NULL ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and a.InvCode like '%" + InvName + "%'"; } if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and a.SupplierCode like '%" + VenName + "%'"; } sql += @" GROUP BY
a.SupplierCode, YEAR(d.StarTime), MONTH(d.StarTime) ORDER BY a.SupplierCode, BidYear ";
}
sql = string.Format(sql, BegionDate, EndDate); DataTable dtr = SqlHelper.GetDataTableBySql(sql); if (dtr != null && dtr.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dtr;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 决标周期柱状图显示
public DataTable GetBidChartsJBSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios) { try { DataTable dt = new DataTable(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (radios == "月") { sql = @"
SELECT a.SupplierCode, CONVERT(NVARCHAR(20),YEAR(b.MTIME)) +'年'+ CONVERT(NVARCHAR(20), MONTH(b.MTIME))+'月' AS BidYear, AVG(DATEDIFF(DAY, b.MTIME, d.BidTime)) AS average_bid_cycle_days FROM ICSBidInfo a LEFT JOIN ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint WHERE b.MTIME IS NOT NULL ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and a.InvCode like '%" + InvName + "%'"; } if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and a.SupplierCode like '%" + VenName + "%'"; } sql += @" GROUP BY
a.SupplierCode, YEAR(b.MTIME), MONTH(b.MTIME) ORDER BY a.SupplierCode, BidYear ";
} else if (radios == "年") { sql = @" SELECT
a.SupplierCode, YEAR(b.MTIME) AS BidYear, AVG(DATEDIFF(DAY, b.MTIME, d.BidTime)) AS average_bid_cycle_days FROM ICSBidInfo a LEFT JOIN ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint WHERE b.MTIME IS NOT NULL ";
if (!string.IsNullOrWhiteSpace(InvName)) { sql += " and a.InvCode like '%" + InvName + "%'"; } if (!string.IsNullOrWhiteSpace(VenName)) { sql += " and a.SupplierCode like '%" + VenName + "%'"; } sql += @" GROUP BY
a.SupplierCode, YEAR(b.MTIME) ORDER BY a.SupplierCode, BidYear ";
}
sql = string.Format(sql, BegionDate, EndDate); DataTable dtr = SqlHelper.GetDataTableBySql(sql); if (dtr != null && dtr.Rows.Count > 0) { //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
// .Select(g => new EChartsSeries
// {
// name = g.Key,
// data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
// })
// .ToList();
//// 创建 ECharts 数据结构并添加系列
//var echartsData = new EChartsData { series = groupedData };
//// 序列化 ECharts 数据为 JSON 字符串
//string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
return dtr;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 获取实际采购数量列表信息
public DataTable GetGridJsonByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @") x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 获取实际到货数量列表信息
public DataTable GetPorGridJsonByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" ) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(quantity,0) as quantity FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @") x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 获取开票数量列表信息
public DataTable GetInvoicePriceByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.SupplierCode) AS VenCode, SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity FROM #AllDates dr LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.SupplierCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and p.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,p.SupplierCode ) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.SupplierCode) AS VenCode, SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity FROM #Days dr LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.SupplierCode) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.SupplierCode) AS VenCode, SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity FROM #Days dr LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.SupplierCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.SupplierCode) x
PIVOT ( SUM(quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 获取采购单价列表信息
public DataTable GetJHImplementByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0) as UnitPrice FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0) as UnitPrice FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0) as UnitPrice FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @") x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 采购金额(订单金额)占比
public DataTable GetPoPriceSumGridJsonByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @") x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 采购周期
public DataTable GetProcurementcycleJsonByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #AllDates dr LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #Days dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" ) x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, isnull(UnitPrice,0)*p.Quantity as UnitPrice FROM #Months dr LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @") x
PIVOT ( SUM(UnitPrice) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 供应商不合格次数
public DataTable GetVendorQualifiedQuantityByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, c.VenCode) AS VenCode, COUNT(*) as quantity FROM #AllDates dr LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0 ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,c.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, c.VenCode) AS VenCode, COUNT(*) as quantity FROM #Days dr LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0 ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,c.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, c.VenCode) AS VenCode, COUNT(*) as quantity FROM #Months dr LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence WHERE p.QualifiedQuantity>0";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,c.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 供应商退货次数
public DataTable GetDeliveryNoticeByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE DNType='2' FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, COUNT(*) as quantity FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE DNType=''2''";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE DNType='2' FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, COUNT(*) as quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE DNType=''2'' ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE DNType='2' FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, COUNT(*) as quantity FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE DNType=''2''";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 供应商退货率
public DataTable GetDeliveryNoticeType2ByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CASE WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = ''2'' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) END AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CASE WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = ''2'' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) END AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CASE WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0 THEN NULL ELSE SUM(CASE WHEN DNType = ''2'' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) END AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 供应商交期及时率
public DataTable GetDeliveryNoticeTypeJQ2ByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VenCode) AS VenCode, CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity FROM #Days dr LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VenCode) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 供应商报价次数
public DataTable GetVendorSORQUOTATIONByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "日") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT DateValue = @StartDate UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM DateRanges WHERE DateValue < @EndDate ) SELECT CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber INTO #AllDates FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #AllDates dr inner JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23)= dr.WeekNumber FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode, COUNT(*) as quantity FROM #AllDates dr LEFT JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") "; } sql += @" group by dr.WeekNumber,p.VENDORCODE) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #AllDates";
} else if (queryParam["radios"].ToString() == "周") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH DateRanges AS ( SELECT WeekStart = @StartDate, WeekEnd = DATEADD(DAY, 7, @StartDate), -- 假设周六是每周的最后一天 WeekNumber = DATEPART(WEEK, @StartDate) -- 假设周一是每周的第一天 UNION ALL SELECT DATEADD(WEEK, 1, WeekStart), DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)), DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart)) FROM DateRanges WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate ) SELECT WeekStart, WeekEnd, WeekNumber INTO #Days FROM DateRanges OPTION (MAXRECURSION 0); -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Days dr inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.WeekStart AND dr.WeekEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode, COUNT(*) as quantity FROM #Days dr inner JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23) BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1 ";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VENDORCODE) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Days";
} else if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'
DECLARE @EndDate DATE = '{1}' DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); ;WITH MonthRanges AS ( SELECT MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1), MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1)) UNION ALL SELECT DATEADD(MONTH, 1, MonthStart), DATEADD(MONTH, 1, MonthEnd) FROM MonthRanges WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate ) SELECT MonthStart, MonthEnd, WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart)) INTO #Months FROM MonthRanges OPTION (MAXRECURSION 0) -- 构建PIVOT的列标题 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber)) FROM #Months dr inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.MonthStart AND dr.MonthEnd FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') -- 构建PIVOT查询 SET @query = ' SELECT * FROM ( SELECT dr.WeekNumber, CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode, COUNT(*) as quantity FROM #Months dr inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString())) { sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") "; } if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql += @" group by dr.WeekNumber,p.VENDORCODE) x
PIVOT ( sum( quantity) FOR WeekNumber IN (' + @cols + ') ) p '; EXEC sp_executesql @query; DROP TABLE #Months";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region 采购降本额 同比
public DataTable GetPoJBPriceByLB(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = ""; if (queryParam["radios"].ToString() == "月") { sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
DECLARE @EndDate DATE = '{1}'; -- 替换为您的结束日期
-- 计算时间段内每个月的总采购成本 WITH MonthlyCosts AS ( SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month, SUM(UnitPrice*Quantity) AS total_cost FROM dbo.ICSPurchaseOrder WHERE MTIME BETWEEN @StartDate AND @EndDate";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql+=@" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
),
-- 计算同比降本额(当前月与前一年同月对比) YearOverYear AS ( SELECT bbb.month, bbb.total_cost AS current_month_cost, COALESCE(previous.total_cost, 0) AS previous_month_cost, bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_mom FROM MonthlyCosts bbb LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(MONTH, 1, previous.month) WHERE DATEADD(MONTH, -1, bbb.month) BETWEEN @StartDate AND @EndDate -- 确保前一年同期在时间段内 )
--查询每月降本额结果 SELECT mom.month, mom.current_month_cost, mom.previous_month_cost, mom.cost_reduction_mom AS monthly_cost_reduction FROM YearOverYear mom ORDER BY mom.month;
";
} else if (queryParam["radios"].ToString() == "年") { sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
DECLARE @EndDate DATE = '{1}'; -- 替换为您的结束日期
-- 计算时间段内每个月的总采购成本 WITH MonthlyCosts AS ( SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month, SUM(UnitPrice*Quantity) AS total_cost FROM dbo.ICSPurchaseOrder WHERE MTIME BETWEEN @StartDate AND @EndDate";
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString())) { sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'"; } sql+=@" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
), -- 计算同比降本额(当前月与前一年同月对比) YearOverYear AS ( SELECT bbb.month, bbb.total_cost AS current_year_cost, COALESCE(previous.total_cost, 0) AS previous_year_cost, bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_yoy FROM MonthlyCosts bbb LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(YEAR, 1, previous.month) WHERE DATEADD(YEAR, -1, bbb.month) BETWEEN @StartDate AND @EndDate -- 确保前一年同期在时间段内 )
-- 查询每年降本额(需要对月份进行汇总以得到年度数据) SELECT YEAR(yoy.month) AS year, SUM(yoy.current_year_cost) AS current_year_total_cost, SUM(yoy.previous_year_cost) AS previous_year_total_cost, SUM(yoy.cost_reduction_yoy) AS yearly_cost_reduction FROM YearOverYear yoy GROUP BY YEAR(yoy.month) ORDER BY year;";
}
sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString()); DataTable dtr = SqlHelper.GetDataTableBySql(sql); return dtr; } #endregion
#region ZL
public DataTable GetZL(string Year) { try { int MaxWeek = GetMaxWeek(Year); string sql = @"
DECLARE @YearStr varchar(10) ='{0}' DECLARE @YearStrNext varchar(10) = '' set @YearStrNext =Convert(decimal(18,0),@YearStr) +1 if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS')) drop table #TempSS
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days')) drop table ##Days SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
select week, case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom, case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo into ##Days from( select vv.NUMBER+1 week, DATEADD(DAY ,vv.NUMBER*7,ss.StartDay) DayFrom ,DATEADD(ss ,-1,DATEADD(DAY ,(vv.NUMBER+1)*7,ss.StartDay) ) DayTo from master.dbo.spt_values VV LEFT JOIN #TempSS SS ON 1=1 where vv.type='p' and vv.number<=52 ) ff
select gg.weekStr,sum(Num)as PoSum,isnull (SUM(Nums),'')as sumjj,CAST( cast( SUM(Nums)as DECIMAL(20,2))/cast(sum(Num) as DECIMAL(20,2) )AS DECIMAL(20,2)) as ss from ( select dd.[week] weekStr ,case when st.MTime is not null then 1 else 0 end Num,st.LOTNO from ##Days dd left join (select a.MTime,b.LOTNO from ICSPOArrive a left join ICSASNDETAIL b on a.STNO=b.STNO )st on dd.DayFrom<=st.MTime and dd.DayTo>=st.MTime ) gg Left join (select a.*, dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums from ##Days dd left join ICSINSPECTION a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime ) sss on gg.LOTNO=sss.LotNO and gg.weekStr<=" + MaxWeek + @" group by gg.weekStr ORDER BY gg.weekStr ";
sql = string.Format(sql, Year); DataTable dt = Repository().FindTableBySql(sql.ToString()); dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year)); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } }
#endregion
#region GetDelayOrder
public DataTable GetDelayOrder(string Year) { try { int MaxWeek = GetMaxWeek(Year); string sql = @"
DECLARE @YearStr varchar(10) ='{0}' DECLARE @YearStrNext varchar(10) = '' set @YearStrNext =Convert(decimal(18,0),@YearStr) +1 if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS')) drop table #TempSS
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days')) drop table ##Days SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
select week, case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom, case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo into ##Days from( select vv.NUMBER+1 week, DATEADD(DAY ,vv.NUMBER*7,ss.StartDay) DayFrom ,DATEADD(ss ,-1,DATEADD(DAY ,(vv.NUMBER+1)*7,ss.StartDay) ) DayTo from master.dbo.spt_values VV LEFT JOIN #TempSS SS ON 1=1 where vv.type='p' and vv.number<=52 ) ff
select sum(Num)as PoSum,gg.weekStr,isnull(SUM(Nums),0)as prsum, CAST( cast( SUM(Nums)as DECIMAL(20,2))/cast(sum(Num) as DECIMAL(20,2) )AS DECIMAL(20,2)) as SUMLV from ( select a.*,dd.[week] weekStr ,case when a.PreArriveDate is not null then 1 else 0 end Num from ##Days dd left join icspo_pomain a on dd.DayFrom<=a.PreArriveDate ) gg left join ( select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums from ##Days dd left join ICSPOArrive a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime left join icspo_pomain b on a.POCode=b.POCode and dd.DayFrom>=b.PreArriveDate ) ss on gg.POCode=ss.POCode and gg.weekStr<=" + MaxWeek + @" group by gg.weekStr ORDER BY gg.weekStr ";
sql = string.Format(sql, Year); DataTable dt = Repository().FindTableBySql(sql.ToString()); dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year)); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } }
#endregion
private int GetMaxWeek(string Year) { string SQL = ""; if (Year == DateTime.Now.Year.ToString()) { //计算当前周数+4周,若超出本年,就取本年最后一周
SQL = @" select case when datepart(wk,cast(dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1) as datetime))>= datepart(wk,cast(getdate() as datetime))+4
then datepart(wk,cast(getdate() as datetime))+4 else datepart(wk,cast(dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1) as datetime)) end
";
} else { SQL = @"select datepart(wk,dateadd(day,-1,CONVERT(datetime, '" + (Convert.ToInt32(Year) + 1).ToString() + "'+'-01-01 00:00:00',20))) "; } DataTable dtweek = SqlHelper.GetDataTableBySql(SQL); int maxweek = Convert.ToInt32(dtweek.Rows[0][0].ToString()); return maxweek; } #region GetPoMain
public DataTable GetPoMain() { try { string sql = @"SELECT
(SELECT COUNT(*) FROM dbo.ICSPurchaseOrder) AS TotalOrders, (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE ReleaseState = '0') AS UnreleasedOrders UNION ALL SELECT (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE ReleaseState = '1') AS TotalOrders, (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE SignBackStatus='2') AS UnreleasedOrders UNION ALL
SELECT (SELECT COUNT(*) FROM dbo.ICSASN ) AS TotalOrders, (SELECT COUNT(*) FROM dbo.ICSASN a LEFT JOIN dbo.ICSDeliveryNotice b ON a.ASNCode=b.ASNCode AND a.WorkPoint=b.WorkPoint WHERE b.ASNCode IS NULL) AS UnreleasedOrders UNION ALL
SELECT (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence AND a.WorkPoint = b.WorkPoint LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint WHERE d.MTIME IS NOT NULL AND a.ArriveDate < d.MTIME) AS TotalOrders, CAST((SELECT COUNT(*) FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence AND a.WorkPoint = b.WorkPoint LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint WHERE d.MTIME IS NOT NULL AND a.ArriveDate < d.MTIME) * 1.0 / (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder)AS DECIMAL(16,3)) AS UnreleasedOrders
UNION ALL
SELECT (SELECT COUNT(*) FROM dbo.ICSDeliveryNotice a LEFT JOIN dbo.ICSASNDetail b ON a.ASNCode=b.ASNCode LEFT JOIN dbo.ICSInspection c ON b.LotNo=c.LotNo WHERE c.LotNo IS NULL)AS TotalOrders,
(SELECT COUNT(*) FROM dbo.ICSInspection a LEFT JOIN dbo.ICSWareHouseLotInfoLog b ON a.LotNo=b.LotNo WHERE b.LotNo IS NULL) AS UnreleasedOrders ";
sql = string.Format(sql); DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } }
#endregion
public DataTable GetGridJson(string queryJson, ref Pagination jqgridparam) { DataTable dt = new DataTable(); var queryParam = queryJson.ToJObject(); List<DbParameter> parameter = new List<DbParameter>(); string sql = @"SELECT a.POCode,a.PORow,a.MTIME,a.VenName,a.VenCode,a.CreatePerson,a.InvCode,a.Quantity,ISNULL(a.Quantity,0)-ISNULL(b.LOTQTY,0) AS wqty,ISNULL(b.LOTQTY,0) AS Yqty,
ISNULL(c.PLANQTY,0)AS PLANQTY,ISNULL(a.Quantity,0)-ISNULL(c.PLANQTY,0) AS asnwqty,ISNULL(d.iQuantity,0)AS iQuantity,ISNULL(e.qty,0)AS qty,ISNULL(e.RQty,0)AS RQty,e.DocNo as CADocNo,ISNULL(f.INVqty,0) AS INVqty,f.DocNo as InvDocNo,f.PaperNo,a.WorkPoint FROM dbo.ICSPO_PoMain a LEFT JOIN (SELECT ISNULL(SUM(LOTQTY),0) AS LOTQTY,TransNO,TransLine,WorkPoint FROM dbo.ICSITEMLot GROUP BY TransNO,TransLine,WorkPoint) b ON a.POCode=b.TransNO AND a.PORow=b.TransLine AND a.WorkPoint=b.WorkPoint LEFT JOIN (SELECT SUM(b.PLANQTY)AS PLANQTY,c.TransNO,c.TransLine FROM dbo.ICSASN a LEFT JOIN dbo.ICSASNDETAIL b ON a.STNO=b.STNO AND a.WorkPoint=b.WorkPoint LEFT JOIN dbo.ICSITEMLot c ON b.LOTNO=c.LotNO AND b.WorkPoint=c.WorkPoint GROUP BY c.TransNO,c.TransLine)c ON c.TransNO=a.poCode AND c.TransLine=a.PORow LEFT JOIN ( SELECT SUM(iQuantity) AS iQuantity,POCode FROM dbo.ICSPOArrive GROUP BY POCode) d ON a.POCode=d.POCode LEFT JOIN (SELECT SUM(CONVERT(decimal(18,2),b.qty )) AS qty,SUM(ISNULL(CAST(c.YRKQty AS DECIMAL(18,2)),0)) AS RQty, c.POCode,c.PORow,a.DocNo FROM ICSCA a LEFT JOIN ICSCADetail b ON a.DocNo = b.DocNo AND a.WorkPoint = b.WorkPoint LEFT JOIN view_PoMain c ON b.Src_ASNDocNo =c.DNNO and b.Src_ASNDocLineNo=c.DNLine GROUP BY c.POCode,c.PORow,a.DocNo) e ON a.POCode=e.POCode AND a.PORow=e.PORow LEFT JOIN (SELECT SUM(CONVERT(decimal(18,2),a.qty )) AS INVqty,SUM(ISNULL(CAST(b.YRKQty AS DECIMAL(18,2)),0)) AS INVRQty, b.POCode,b.PORow,c.DocNo,PaperNo FROM ICSInvoiceDetail a left JOIN view_PoMain b ON a.ASNNo = b.DNNO AND a.InvCode = b.InvCode and a.ASNLine=b.DNLine left join ICSInvoice c on a.DocNo=c.DocNo and a.WorkPoint=c.WorkPoint GROUP BY b.POCode,b.PORow,c.DocNo,PaperNo ) f ON a.POCode=f.POCode AND a.PORow=f.PORow Where 1=1 ";
if (!string.IsNullOrWhiteSpace(queryJson)) { if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString())) { sql += " and a.POCode like '%" + queryParam["POCode"].ToString() + "%' "; } if (!string.IsNullOrWhiteSpace(queryParam["STNO"].ToString())) { sql += " and c.STNO like '%" + queryParam["STNO"].ToString() + "%' "; } if (!string.IsNullOrWhiteSpace(queryParam["Ca"].ToString())) { sql += " and e.DocNo like '%" + queryParam["Ca"].ToString() + "%' "; } if (!string.IsNullOrWhiteSpace(queryParam["CreatePerson"].ToString())) { sql += " and a.CreatePerson like '%" + queryParam["CreatePerson"].ToString() + "%' "; } if (!string.IsNullOrWhiteSpace(queryParam["InvDocNo"].ToString())) { sql += " and f.DocNo like '%" + queryParam["InvDocNo"].ToString() + "%' "; } if (!string.IsNullOrWhiteSpace(queryParam["BegionTime"].ToString())) { sql += " and a.MTIME >= '" + queryParam["BegionTime"].ToString() + "' "; } if (!string.IsNullOrWhiteSpace(queryParam["EndTime"].ToString())) { sql += " and a.MTIME <= '" + queryParam["EndTime"].ToString() + "' "; } if (!string.IsNullOrWhiteSpace(queryParam["Status"].ToString())) { string ReleaseState = queryParam["Status"].ToString(); if (ReleaseState == "0") sql += " and ISNULL(a.Quantity,0)-ISNULL(c.PLANQTY,0)<>0"; else if (ReleaseState == "1") sql += " and c.STNO is not null"; else if (ReleaseState == "2") sql += " and e.DocNo IS NOT NULL "; else if (ReleaseState == "3") sql += " and f.DocNo IS NOT NULL"; else if (ReleaseState == "4") sql += " and e.DocNo is NULL"; else if (ReleaseState == "5") sql += " and f.DocNo is NULL"; } } if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin") { sql += " and a.WorkPoint in (" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',') + ")"; } if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.Contains("Vendor")) { sql += " and a.VenCode in (SELECT cVenCode FROM ICSVendor where cVenName ='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserName + "'AND WorkPoint=a.WorkPoint)"; } return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam); }
/// <summary>
/// 获取供应商列表
/// </summary>
/// <returns></returns>
public DataTable GetInvCode() { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string sql = @"select '' as InvCode,'' as InvName
union all SELECT InvCode,InvName FROM ICSInventory";
string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode; if (role != "admin") { sql += " and b.WorkPoint in(" + WorkPoint.TrimEnd(',') + ")"; } DataTable dt = SqlHelper.GetDataTableBySql(sql); return dt; }
#region 采购总金额(近四年)
public DataTable GetNCGJE() { try { string sql = @"DECLARE @CurrentYear INT = YEAR(GETDATE()); -- 获取当前年份
-- 使用CTE(公用表表达式)来生成近四年的年份列表 WITH Years AS ( SELECT @CurrentYear AS YearValue UNION ALL SELECT YearValue - 1 FROM Years WHERE YearValue > @CurrentYear - 3 ), -- 使用CTE来计算每年的采购金额总和 PurchaseTotals AS ( SELECT y.YearValue, CAST(SUM(COALESCE(p.UnitPrice*p.Quantity, 0))/10000 AS DECIMAL(16,2)) AS TotalPurchaseAmount FROM Years y LEFT JOIN ICSPurchaseOrder p ON p.MTIME >= DATEFROMPARTS(y.YearValue, 1, 1) AND p.MTIME < DATEFROMPARTS(y.YearValue + 1, 1, 1) GROUP BY y.YearValue ) -- 选择结果 SELECT * FROM PurchaseTotals ORDER BY YearValue DESC;
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购总金额(近六月)
public DataTable GetYCGJE() { try { string sql = @"-- 创建一个包含过去6个月(包括当前月)的月份和年份的CTE
;WITH MonthsCTE AS ( SELECT YEAR(DATEADD(MONTH, -6 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())) AS YearValue, MONTH(DATEADD(MONTH, -6 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())) AS MonthValue FROM (SELECT TOP 6 * FROM sys.all_objects ORDER BY object_id) AS x -- 使用系统表生成数字序列,这里只需要6行 ) -- 左连接采购订单表到月份CTE SELECT m.YearValue, m.MonthValue, ISNULL(ROUND(SUM(COALESCE(p.UnitPrice * p.Quantity, 0)) / 10000.0, 2), 0) AS TotalPurchaseAmountInThousands FROM MonthsCTE m LEFT JOIN ICSPurchaseOrder p ON YEAR(p.MTIME) = m.YearValue AND MONTH(p.MTIME) = m.MonthValue GROUP BY m.YearValue, m.MonthValue ORDER BY m.YearValue, m.MonthValue;
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 物料采购金额占比(Top10)
public DataTable GetWLCGJEZB() { try { string sql = @"WITH YearlyPurchases AS (
SELECT b.InvName, CAST(SUM(COALESCE(UnitPrice*Quantity, 0)) AS DECIMAL(16,2)) AS TotalPurchaseAmount FROM ICSPurchaseOrder a LEFT JOIN dbo.ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint WHERE YEAR(a.MTIME) = YEAR(GETDATE()) GROUP BY InvName ), TotalYearlyPurchase AS ( SELECT SUM(TotalPurchaseAmount) AS Total FROM YearlyPurchases ), MaterialPurchaseShares AS ( SELECT yp.InvName, yp.TotalPurchaseAmount, CAST((yp.TotalPurchaseAmount * 100.0) / t.Total AS DECIMAL(16,2)) AS SharePercentage FROM YearlyPurchases yp CROSS JOIN TotalYearlyPurchase t ) SELECT TOP 10 MaterialPurchaseShares.InvName, TotalPurchaseAmount, SharePercentage FROM MaterialPurchaseShares ORDER BY SharePercentage DESC;
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 供应商采购金额占比(Top10)
public DataTable GetGYSCGJEZB() { try { string sql = @"WITH YearlyPurchases AS (
SELECT b.VenName, CAST(SUM(COALESCE(UnitPrice*Quantity, 0)) AS DECIMAL(16,2)) AS TotalPurchaseAmount FROM ICSPurchaseOrder a LEFT JOIN dbo.ICSVendor b ON a.VenCode=b.VenCode AND a.WorkPoint=b.WorkPoint WHERE YEAR(a.MTIME) = YEAR(GETDATE()) GROUP BY VenName ), TotalYearlyPurchase AS ( SELECT SUM(TotalPurchaseAmount) AS Total FROM YearlyPurchases ), MaterialPurchaseShares AS ( SELECT yp.VenName, yp.TotalPurchaseAmount, CAST((yp.TotalPurchaseAmount * 100.0) / t.Total AS DECIMAL(16,2)) AS SharePercentage FROM YearlyPurchases yp CROSS JOIN TotalYearlyPurchase t ) SELECT TOP 10 MaterialPurchaseShares.VenName, TotalPurchaseAmount, SharePercentage FROM MaterialPurchaseShares ORDER BY SharePercentage DESC;
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购降本率(近六月)
public DataTable GetCGJBE() { try { string sql = @";WITH MonthlyPurchases AS (
SELECT YEAR(MTIME) AS Year, MONTH(MTIME) AS Month, SUM(UnitPrice) AS TotalMonthlyAmount FROM dbo.ICSPurchaseOrder WHERE MTIME >= DATEADD(MONTH, -6, CAST(GETDATE() AS DATE)) GROUP BY YEAR(MTIME), MONTH(MTIME) ), MonthlySavings AS ( SELECT a.Year, a.Month, a.TotalMonthlyAmount, ISNULL((SELECT b.TotalMonthlyAmount FROM MonthlyPurchases b WHERE b.Year = a.Year AND b.Month = a.Month - 1), 0) AS PreviousMonthAmount, (a.TotalMonthlyAmount - ISNULL((SELECT b.TotalMonthlyAmount FROM MonthlyPurchases b WHERE b.Year = a.Year AND b.Month = a.Month - 1), 0)) AS CostReduction FROM MonthlyPurchases a ) SELECT Year, Month, TotalMonthlyAmount, PreviousMonthAmount, CostReduction FROM MonthlySavings ORDER BY Year, Month;
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 采购状态占比
public DataTable GetCGSDZT() { try { string sql = @"-- 假设您有一个名为'OrderDate'的字段来表示订单的日期
DECLARE @StartDate DATE = DATEADD(MONTH, -1, GETDATE()); -- 定义一个CTE来计算每种状态在近一个月内的总订单数量 WITH StatusSums AS ( SELECT '审核未发布的' AS Status, ISNULL(SUM(Quantity),0) AS Quantity FROM dbo.ICSPurchaseOrder WHERE ReleaseState = '0' AND CreateDateTime >= @StartDate UNION ALL SELECT '关闭的' AS Status, ISNULL(SUM(Quantity),0) FROM dbo.ICSPurchaseOrder WHERE Status = '3' AND CreateDateTime >= @StartDate -- 假设Status字段也在这个表中 UNION ALL SELECT '已发布未送货的' AS Status, ISNULL(SUM(a.Quantity),0) FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint WHERE a.ReleaseState = '1' AND c.ASNCode IS NULL AND a.CreateDateTime >= @StartDate UNION ALL SELECT '已送货未到货的' AS Status, ISNULL(SUM(a.Quantity),0) FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint WHERE a.ReleaseState = '1' AND d.DNCode IS NULL AND a.CreateDateTime >= @StartDate UNION ALL SELECT '已到货的' AS Status, ISNULL(SUM(a.Quantity),0) FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint WHERE a.ReleaseState = '1' AND d.DNCode IS NOT NULL AND a.CreateDateTime >= @StartDate ), TotalOrders AS ( SELECT SUM(Quantity) AS TotalQuantity FROM ( SELECT Quantity FROM dbo.ICSPurchaseOrder WHERE CreateDateTime >= @StartDate UNION ALL -- 注意:这里我们不再需要按Status或ReleaseState过滤,因为我们只想要近一个月的总订单数 SELECT a.Quantity FROM dbo.ICSPurchaseOrder a LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint WHERE a.CreateDateTime >= @StartDate AND (a.ReleaseState = '0' OR a.ReleaseState = '1') -- 注意:这里我们简化了连接,因为只需要计算总数量,不需要具体的状态过滤 ) AS AllOrders ) -- 计算每种状态的百分比 SELECT s.Status, s.Quantity, ISNULL(CAST(s.Quantity * 100.0 / t.TotalQuantity AS DECIMAL(5, 2)),0) AS Percentage FROM StatusSums s CROSS JOIN TotalOrders t ORDER BY s.Quantity DESC; -- 注意:在计算TotalOrders时,我简化了子查询以避免重复计算,因为我们只需要近一个月的总订单数 -- 并且这个总数应该包括所有相关的订单,无论它们的状态如何
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 供应商新进
public DataTable GetGYSTZ() { try { string sql = @"
(SELECT COUNT(DISTINCT VenCode) AS Qty,'供应商总数' AS type FROM dbo.ICSVendor WHERE MTIME >= DATEADD(MONTH, -6, GETDATE())) UNION ALL (SELECT COUNT(DISTINCT VenCode)AS Qty,'新进供应商数量' FROM dbo.ICSVendor WHERE MTIME >= DATEADD(MONTH, -1, GETDATE()))
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
#region 物料反复使用次数
public DataTable GetWLCFCGBL() { try { string sql = @"SELECT VenCode,SUM( purchase_frequency) AS qty FROM ( SELECT
InvCode, VenCode, COUNT(*) AS purchase_frequency FROM dbo.ICSPurchaseOrder
WHERE MTIME >= DATEADD(MONTH, -3, GETDATE())
GROUP BY InvCode , VenCode )aa WHERE purchase_frequency>1 GROUP BY VenCode
";
DataTable dt = Repository().FindTableBySql(sql.ToString()); if (dt != null && dt.Rows.Count > 0) {
return dt;
} else { return null; } } catch (Exception ex) { return null; } } #endregion
} }
|