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