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

5426 lines
275 KiB

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
}
}